Files
STM32F4-Base/IEC60870-Slave/104/IEC104_Link_Slave_StartStop.h
T
STF 4c55544f05
CI / L0 静态门禁 (pre-commit) (push) Failing after 45s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 42s
通信协议代码
2026-10-26 08:31:48 -04:00

57 lines
2.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 被控站STARTDT/STOPDT:受理时改变传输状态,发送完成只校验CON结果。
* 本层不执行socket I/O、不维护发送队列、不计时;所有调用必须串行。
*/
#ifndef IEC104_LINK_SLAVE_STARTSTOP_H
#define IEC104_LINK_SLAVE_STARTSTOP_H
#include "IEC104_Link_Common.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* 每个合法STARTDT_ACT生成6字节CON,立即置STARTED/IDLE,可结束停止等待。
* 先预留发送空间再调用,OK后按FIFO提交;提交失败须断链,不能回滚后重放。
* 不暂存相反请求、不撤回已排队CON、不重置序号;非法输入FATAL且不修改输出。
*/
extern IEC104_LinkResult_t IEC104_Link_Handle_Startdt_Act(
IEC104_LinkState_t *state, const IEC104_ApciInfo_t *apci,
uint8_t *response, uint16_t capacity);
/* 恰好6字节为OK,否则FATAL;完成不修改当前启停状态。 */
extern IEC104_LinkResult_t IEC104_Link_Complete_Startdt_Con_Send(
IEC104_LinkState_t *state, int sent_len);
/*
* 合法STOP立即置STOPPED/STOP_DRAINING,返回OK,不生成报文。
* 既有START_CON仍按FIFO完成;不等待它、不暂存STOP、不因启停交错断链。
* 排空中的重复STOP返回IGNORED且不延长期限;STOPPED/IDLE再次STOP会重新应答。
* 非法输入返回FATAL且不修改状态。
*/
extern IEC104_LinkResult_t IEC104_Link_Handle_Stopdt_Act(
IEC104_LinkState_t *state, const IEC104_ApciInfo_t *apci);
/* 只读查询:1可生成S或STOP_CON,0无义务或等待,-1非法。 */
extern int IEC104_Link_Can_Prepare_Stopdt_Response(const IEC104_LinkState_t *state);
/*
* 先确认已收到的数据,再等待本端已预留I帧获ACK,不发送新的业务I帧。
* 已排队且覆盖V(R)的S允许STOP_CON紧随排队,发送及完成顺序由FIFO保证。
* FRAME_READY写response和tx;生成STOP_CON即结束排空,保持STOPPED。
* 后到START可结束未生成CON的排空;已生成的CON仍须按序完成。
* WAIT_SEND等既有S,WAIT_PEER_ACK等I帧确认,NOT_ACTIVE表示无停止义务。
*/
extern IEC104_StopdtPrepareResult_t IEC104_Link_Prepare_Stopdt_Response(
IEC104_LinkState_t *state, uint8_t *response, uint16_t capacity,
IEC104_StopdtTx_t *tx);
/* 恰好6字节为OK,否则FATAL;旧STOP_CON完成不覆盖后到START的状态。 */
extern IEC104_LinkResult_t IEC104_Link_Complete_Stopdt_Con_Send(
IEC104_LinkState_t *state, int sent_len);
#ifdef __cplusplus
}
#endif
#endif /* IEC104_LINK_SLAVE_STARTSTOP_H */