补充遥调业务代码
CI / L0 静态门禁 (pre-commit) (push) Failing after 45s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 43s

This commit is contained in:
STF
2026-11-01 00:38:09 -07:00
parent cd42b4d61d
commit e1b0434774
233 changed files with 292584 additions and 268 deletions
@@ -2,7 +2,7 @@
[iec104_slave_example.c](../../examples/iec104_slave_example.c) 包含模拟点表、业务事件处理、其他命令兜底、事件循环及main。总召状态机使用独立库模块[IEC104_Interrogation.c/h](../../104/business/IEC104_Interrogation.h),不在示例内重复实现。
当前实现站总召(`C_IC_NA_1`,QOI=20),依次返回8个单点遥信、8个双点遥信和8个标度化遥测值;分组1(QOI=21)返回单点及双点遥信,分组2(QOI=22)只返回遥测。库支持全部16组,示例未配置的其余组由应用拒绝。通信通过 `IEC104_Slave`,总召通过 `IEC104_Interrogation` 接入,所有任务使用固定存储、在主循环线程串行推进。示例另含计数量召唤、Type 103校时及Type 45/46遥控;默认时钟为模拟值,遥控只更新内存点值,实际设备数据源和物理输出仍由应用接入。
当前实现站总召(`C_IC_NA_1`,QOI=20),依次返回8个单点遥信、8个双点遥信和8个标度化遥测值;分组1(QOI=21)返回单点及双点遥信,分组2(QOI=22)只返回遥测。库支持全部16组,示例未配置的其余组由应用拒绝。通信通过`IEC104_Slave`,总召通过`IEC104_Interrogation`接入,所有任务使用固定存储、在主循环线程串行推进。示例另含计数量召唤、Type 103校时、45/46遥控、49标度化设定值及58/59/62带时标命令;默认时钟为模拟值,命令只更新内存点值,实际设备数据源和物理输出仍由应用接入。
ExampleApp持有一个零初始化的Station节点。Example_Init按`--ca`注册CA及应用context,再以`config.use_station_registry=true`创建总召。命令行仍只注册一个站,状态区参数传NULL/0;扩展多CA时须提供broadcast_states/broadcast_capacity,广播先确认所有站,再逐站数据,最后终止所有站。BEGIN只判断接受;首个NEED_DATA才按station_id查原节点并Acquire,建立唯一取数游标。Complete_Data返回OK后释放游标及引用,异常时按FINISHED清理。处理中删除/同CA重建不改变旧数据源。节点须等Is_Reusable为true后释放,见[共用站点表](../104/IEC104_API接口汇总.md#station-registry)。
@@ -53,30 +53,41 @@ FRZ=1冻结并将序号模32加一;FRZ=2另将当前值清零;FRZ=3仅清当
启动输出 `LISTEN 地址:端口 CA=站地址`。退出保留原有STOP统计字段:`submitted`累计总召与兜底已接手ASDU,`gi_submitted`为已提交完毕的总召数,二者均不表示主站已经ACK。`waits`只统计总召发送WAIT;兜底HIGH满时丢新,计入`overloads`和`dropped_requests`,不记录待重试次数。兜底ERROR/FATAL计入`cancelled`,其中FATAL可能已写出字节,该计数不表示确定未发送。拒绝、主站撤销及业务超时统计继续保留,计数量另见`counter_submitted`和`counter_completed`。末尾校时字段`clock_executed`为实际action调用数、`clock_synchronized`为action返回true次数、`clock_submitted`为已交接校时ASDU数,包含错误及否定应答,广播按各提交目标分别计数;不混入原字段。
遥控统计另追加`command_selected`、`command_executed`、`command_completed`、`command_submitted`和`command_returns`,分别表示已接受的选择、已启动的执行、成功完成事务、已交接应答和返回信息帧数;保留原有统计字段的含义。
命令统计追加`command_selected`、`command_executed`、`command_completed`、`command_submitted`和`command_returns`,分别表示已接受的选择、已启动的执行、成功完成事务、已交接应答和返回信息帧数;`command_time_expired`统计过期激活,`command_time_rejected`统计无效时间、无基准、推算失败或超前造成的时间否定。静默过期不会增加选择/执行次数;保留原有统计字段的含义。
### Type 103校时
主站发送Type=103、SQ=0、对象数=1、COT=6、P/N=0、TEST=0、CA匹配或65535、IOA=0及有效CP56。默认按主站UTC+8标准时间解释,SU由时间工具处理;模块补偿受理至执行检查的等待。应用显式Execute_Next后回COT=7,原CP56字节原样回显。TEST否定7且不执行;COT=5读时否定45,不返回本站当前时间。
默认`--clock simulated`把请求的utc_ms/base_ms保存为模拟时钟基准,不改变系统时间。`--clock system`通过`IEC60870_Clock_Set(&request->local_time)`设置Windows时间;local_time已是固定UTC+8且已补偿,示例不再手工换时区或加等待。Clock内部转换为UTC后调用系统接口,权限不足时动作报告失败并回否定ACT_CON。自动回归只运行模拟模式。
默认`--clock simulated`把请求的utc_ms/base_ms保存为模拟时钟基准,不改变系统时间。`--clock system`通过`IEC60870_Clock_Set(&request->local_time)`设置Windows时间;local_time已是固定UTC+8且已补偿,示例不再手工换时区或加等待。Clock内部转换为UTC后调用系统接口,权限不足时动作报告失败并回否定ACT_CON。真实TCP自动回归只运行模拟模式;system接线另用mock时钟单测,不设置宿主系统时间。
两种模式在成功校时动作中都记录utc_ms/base_ms及待更新标志;`Example_Drain_Clock`在Execute_Next返回后、回调之外把基准交给Command。system模式还在启动及每60秒、请求分派之前读取Clock,读成功且IV=0时按固定UTC+8转换(Clock读值不叠加夏令时),关联同一时刻的Net单调毫秒;读取/换算/设置基准失败或IV=1时清除Command基准。仅总召测试未创建Command,相关接线先检查空句柄。
确认发送WAIT时只重试原确认,不再次设时;STOP取消未交接确认而不撤销已完成的动作。同内容的新请求会再执行,旧时标重发可能回拨。真实数据发布方应在confirm_pending期间暂停新的带时标上报并继续驱动网络,避免持续新增NORMAL推迟确认。完整范围及期限见[时钟同步设计](../104/IEC104_ClockSynchronization_设计架构.md)。
### Type 45/46遥控
### 遥控、设定值与带时标命令
`Example_Init_Command`使用默认配置:两种类型均须先选择,决定期限15秒、选择保持30秒、执行期限60秒;成功发送ACT_TERM,失败默认不发。整个实例只允许一个事务,所有站点的新遥控互斥;TEST请求否定,CA=65535回UNKNOWN_CA,其他遥控IOA由应用Reject(UNKNOWN_IOA)。
`Example_Init_Command`在Config_Default后用赋值把全局type_mask裁剪为已接入的45、46、49、58、59、62,并提供24行命令点表。库默认全局启用14种命令(0x3FFF),但points=NULL、point_count=0;未提供具体点不会执行命令。示例不能用`|=`裁剪全类型默认值。决定期限15秒、选择保持30秒、执行期限60秒,成功发送ACT_TERM,失败默认不发。整个实例只允许一个事务,所有站点的新命令互斥;TEST请求否定,CA=65535回UNKNOWN_CA,未配置命令IOA的新激活走到点检查时由模块回47。
| 命令 | 受控点及返回信息 | 初值与总召 |
|---|---|---|
| Type45,IOA6001..6008 | Type1,IOA1001..1008,COT=11;状态0分/1合 | 初值见下表,执行后总召读取更新值 |
| Type46,IOA6101..6108 | Type3,IOA1101..1108,COT=11;状态1分/2合 | 初值全部为1;执行后站总召及遥信分组读取更新值 |
示例保留select_timeout_ms=30000ms。需要调整时,在Example_Init_Command的Config_Default之后、Create之前设置非零值;它统一作用于选择模式点,直接点没有选择等待。该值是最长有效期,不要求等待满30秒;计时边界、确认排队和10秒/30秒的联调建议见[选择有效期](../104/IEC104_Command_设计架构.md#4-状态与期限)。
`Example_Init_Command`用局部const点表逐行明确列出24个点的CA、IOA、允许类型和模式,不通过循环或末点判断生成配置。CA取运行时common_address,保留`--ca`支持;各行按CA/IOA升序,只允许对应的基础类型及带时标类型。6008、6108、6308为DIRECT,其余21点为SELECT_EXECUTE。Create之前用memcpy将该表复制到ExampleApp拥有的command_points稳定数组,config.points指向该数组,point_count取显式表的元素数;模块不会借用局部数组。稳定数组从Create至Destroy保持只读,三组地址描述仅负责设备运行值映射。
| 命令 | 受控点及返回信息 | 模式 | 初值与总召 |
|---|---|---|---|
| Type45/58,IOA6001..6008 | Type1,IOA1001..1008,COT=11;状态0分/1合 | 6001..6007先选择,6008直接执行 | 初值见下表,执行后总召读取更新值 |
| Type46/59,IOA6101..6108 | Type3,IOA1101..1108,COT=11;状态1分/2合 | 6101..6107先选择,6108直接执行 | 初值全部为1;执行后站总召及遥信分组读取更新值 |
| Type49/62,IOA6301..6308 | Type11,IOA2001..2008,COT=11;写入标度化值 | 6301..6307先选择,6308直接执行 | 初值见下表,执行后站总召及QOI=22读取更新值 |
表中IOA均为十进制。单点命令6001..6008分别对应遥信1001..1008;双点命令6101..6108分别对应返回位置1101..1108。例如对Type46、IOA6103完成状态2的选择与执行后,后续QOI=20或21读取的Type3、IOA1103为2;FINISHED清理不会把它恢复为初值1。
选择S/E=1、执行S/E=0,均使用COT=6;执行的类型、IOA、OA、状态及QU须与选择一致。主站收到选择的肯定ACT_CON后再执行;执行依次返回ACT_CON、位置返回信息、ACT_TERM。撤销使用COT=8,同类型/IOA/OA匹配,不要求状态相同。47..51及58..64仍由兜底回44。
SELECT_EXECUTE点先发送S/E=1选择,收到肯定ACT_CON后再发S/E=0执行,均使用COT=6;执行的类型、IOA、OA、值及QU/QL须与选择一致,带时标命令可使用不同时标。DIRECT点只发送S/E=0执行,不接受选择;其SELECT请求回否定7,SELECT_EXECUTE点未选择便执行也回否定7。点类型不匹配同样回否定7,均不会调用应用动作。执行依次返回ACT_CON、返回信息、ACT_TERM。撤销使用COT=8,同类型/IOA/OA匹配,不要求值相同。示例未启用47、48、50、51、60、61、63、64,仍由兜底回44;这些类型由模块专项测试覆盖。
`Example_Drain_Command`先读取SELECT/EXECUTE/FINISHED;首次保存事务context前Acquire应用站点引用。`Example_Command_Action`模拟返校或修改`ExampleApp.signal_values/double_values`并返回STARTED,不在动作中上报。Accept的OK只表示事件已消费,示例通过Get_Transaction确认EXECUTING后,依次Report_Result(SUCCEEDED)、Example_Build_Command_Return、Submit_Return_Info和Complete;设备结果可以早于确认交接。
49/62允许的示例标度值为−10000..10000(包含端点),选择和执行都检查限值,越限调用Reject(NEGATIVE),动作内另作守卫。这个范围属于模拟点表策略,不是协议或Command模块的统一限值。比如对6301设为−1234,Type11返回信息及后续QOI=20/22的2001均为−1234;总召对象数与帧序不变。
58/59/62的CP56按主站UTC+8及SU解释,默认时差上限10秒,IV=1拒绝,时差恰好10秒也拒绝或丢弃。simulated模式启用时尚无可信基准,须先成功校时;system模式可由启动读时建立基准。过期激活默认静默丢弃,不占事务槽或调用动作;无基准、超前及换算失败回否定7。只在受理时检查时效,默认决定期限内继续等待可能使启动动作时的命令年龄接近25秒。撤销仍检查CP56格式,但不判时差。
`Example_Drain_Command`先读取SELECT/EXECUTE/FINISHED;首次保存事务context前Acquire应用站点引用。点表、动作和返回信息按基础类型分派;`Example_Command_Action`模拟返校或修改`ExampleApp.signal_values/double_values/scaled_values`并返回STARTED,不在动作中上报。Type11单对象返回需要12字节缓冲。Accept的OK只表示事件已消费,示例通过Get_Transaction确认EXECUTING后,依次Report_Result(SUCCEEDED)、Example_Build_Command_Return、Submit_Return_Info和Complete;设备结果可以早于确认交接。
每一步WAIT都保留原事件和当前步骤;返回信息使用独立ASDU缓冲,WAIT时保留同一帧,OK后才推进,避免重复提交。STALE停止该事务重试,继续读取FINISHED。FINISHED清除模拟返校/输出标志并Release应用引用,不恢复已修改的点值;真实输出若仍未停止,应用必须继续保持设备忙状态和引用。Example_Wait_Time同时计入遥控期限、模块推进和应用挂起重试,发送WAIT时允许等待网络而不空转。
@@ -126,7 +137,7 @@ FRZ=1冻结并将序号模32加一;FRZ=2另将当前值清零;FRZ=3仅清当
| 需要新增总召且4个任务槽已占满 | 尝试否定ACT_CON;无法安全提交/保存则丢新请求并计数,保留连接与原任务;匹配撤销复用原槽 |
| 接受/取数/整体业务期限到点 | 肯定ACT_CON提交前回否定确认并保留连接,提交后关闭原连接;已取出BEGIN才交付对应TIMEOUT终结事件 |
Example_Handle_Event先过滤asdu_result失败的I帧视图,避免进入业务分派或未知类型兜底;正常线上基础头/载荷截短已由Receiver和连接层处理。当前I帧依次交给总召、计数量、校时及遥控;都未接手时,在读取下一事件前同步调用`IEC104_Slave_Reject_Request`回UNKNOWN_TYPE。该接口借用当前事件生成原文错误应答,复用库的普通HIGH路径;示例不保存other_request,也没有other_pending、other_waiting或other_waits。未支持类型的连续及相同内容有效新请求逐条尝试应答,允许穿插正在进行的总召。103由校时接手,45/46由遥控接手,102、47、58仍回44;模块之间不承诺跨业务应答按接收顺序排列。
Example_Handle_Event先过滤asdu_result失败的I帧视图,避免进入业务分派或未知类型兜底;正常线上基础头/载荷截短已由Receiver和连接层处理。当前I帧依次交给总召、计数量、校时及Command;都未接手时,在读取下一事件前同步调用`IEC104_Slave_Reject_Request`回UNKNOWN_TYPE。该接口借用当前事件生成原文错误应答,复用库的普通HIGH路径;示例不保存other_request,也没有other_pending、other_waiting或other_waits。未启用类型的连续及相同内容有效新请求逐条尝试应答,允许穿插正在进行的总召。103由校时接手,45/46/49/58/59/62由Command接手,102、47及106仍回44;模块之间不承诺跨业务应答按接收顺序排列。
OK表示已接手;WAIT只因HIGH容量不足,示例丢弃本条并增加overloads/dropped_requests,保持连接、已有HIGH内容及当前业务。ERROR按失效请求处理并继续读通知;FATAL可能已写出字节,不得重试,继续排空收尾通知。接口不修改输入事件或其最近提交结果,不能通过Get_Last_Submit_Result读取本次返回值。未读启停通知会阻止本次应答;状态计数不能追溯已消费的STOP/START,禁止先保存事件再读完后续通知后调用。需要异步业务应答时另用Copy_Event、Check_Request并自行处理STOP取消,完整契约见[同步拒绝当前请求](../104/IEC104_API接口汇总.md#reject-request)。
@@ -134,7 +145,7 @@ OK表示已接手;WAIT只因HIGH容量不足,示例丢弃本条并增加over
`Example_Drain_Business`主动读取总召业务事件:BEGIN按QOI选点表,Reply_Begin接受或拒绝请求;NEED_DATA调用普通辅助函数Example_Build_Batch构造数据,再Submit_Batch,数据耗尽则Complete_Data;FINISHED按实例/请求编号清理对应资源,撤销和超时也走该分支。没有向库注册业务函数指针。数据源暂未就绪时可保存事件,后续就绪再应答;发送WAIT也保留事件,下一次调用重新组包,模块不缓存本批原文或重复生成NEED_DATA。
本例BEGIN只判断接受,首个NEED_DATA初始化游标并读取这一批;接真实数据源时,在Example_Build_Batch的逐点组包处读取当前值和品质。IOA、类型、分组成员及遍历策略均由调用者决定,协议库不登记或冻结完整IOA列表。示例单点常量表保存地址、初值及品质,双点初值均为1;单点和双点实际值分别存放在ExampleApp.signal_values和ExampleApp.double_values中,站总召及遥信分组逐批读取这些可写数组的当前值,包括遥控执行后的更新;这些地址不是库规定的范围。逐批采样不保证整轮同一时刻,也不自动解决与突发上报的新旧排序;完整边界见[总召模块设计](../104/IEC104_Interrogation_设计架构.md#6-数据批次与发送路径)。
本例BEGIN只判断接受,首个NEED_DATA初始化游标并读取这一批;接真实数据源时,在Example_Build_Batch的逐点组包处读取当前值和品质。IOA、类型、分组成员及遍历策略均由调用者决定,协议库不登记或冻结完整IOA列表。单点和遥测常量表保存地址、初值及品质,双点初值均为1;实际值分别存放在ExampleApp.signal_values、double_values和scaled_values中,站总召及对应分组逐批读取这些可写数组的当前值,包括遥控及设定值执行后的更新;这些地址不是库规定的范围。逐批采样不保证整轮同一时刻,也不自动解决与突发上报的新旧排序;完整边界见[总召模块设计](../104/IEC104_Interrogation_设计架构.md#6-数据批次与发送路径)。
Example_Build_Batch使用局部游标遍历,仅在Submit_Batch返回OK后推进应用游标,此时发送层已复制原文并确定帧顺序,输入存储可复用。返回WAIT时保留同一业务事件及游标,先推进网络、读空Slave通知,再从同一位置重新取当前值和品质,不能重发旧构造结果。STALE表示原交互已失效(包括取消、撤销、超时及提交故障),丢弃旧应答并处理FINISHED。接实际数据源时,须将点值更新及突发发布与总召读值及提交串行化;排序保证及持续突发可能推迟总召的边界见[数据批次与发送路径](../104/IEC104_Interrogation_设计架构.md#6-数据批次与发送路径)。
@@ -159,12 +170,12 @@ STOPDT或断线通知取消未提交任务。发送内部受理STOP而返回ERRO
- `iec104_slave_test.c`:站点注册/移除、延迟回收、重复CA、13站共享服务、CA/context隔离、注册编号防替换、快照增删及嵌套集合锁、关闭重启保留,以及原有应答、事件身份和背压回归。Reject_Request另覆盖原文回显、非法参数、连续请求、窗口背压、HIGH满、启停门禁、旧会话及FATAL。
- `iec104_slave_example_test.c`:完整报文、部分写入、各发送阶段HIGH满与WAIT、请求校验、STOP/重连、非法请求、传输通知预算及API生命周期;业务事件覆盖延迟应答、批次校验、混合类型、容量边界、拒绝/失败/取消、终结预留和实例复用。总召覆盖全部16组、各阶段撤销、三项期限、迟到应答及通知优先。调度覆盖短应答立即提交及顺序保护、非队首槽复用、满槽否定或计数丢弃且当前任务有效、各阶段相同/不同QOI均忙拒绝、结束后重发成功、撤销对象匹配、停止清理、BEGIN前等事件空位及BEGIN后完整执行期限,并验证忙状态不拦截Type101总电度请求。测试设置HIGH=251字节、业务事件FIFO=2槽,使用真实容量背压限制发送。
- `iec104_command_test.c`:独立可控Net/单调时钟测试,TCP服务容量1/2和独立应答槽容量1/4交叉构建,HIGH=251字节;覆盖选择执行、撤销、动作结果、期限、FIFO、返回信息及FINISHED/引用生命周期。
- `slave_example_loopback_test.cjs`:启动实际可执行程序,使用Windows网络后端和127.0.0.1随机端口,以独立主站字节验证分片请求、k=1时逐帧ACK、站总召、忙拒绝及结束后重发、撤销、错误应答、106与102同批分别回44、STOP/START、重连和正常退出。校时核对正常ACT_CON、TEST否定7、读时COT=5否定45、广播实际CA,以及103与102同批时先102回44、再103回7。遥控核对45/46选择执行、返回信息在确认和终止之间、撤销、广播46、未知IOA47、TEST否定、47/58回44,以及单点遥控后总召读取新值。服务约12秒后自行关闭,使用默认模拟时钟。
- `iec104_command_test.c`:独立可控Net/单调时钟测试,TCP服务容量1/2和独立应答槽容量1/4交叉构建,HIGH=251字节;覆盖命令点表校验与按点模式、14种命令布局、值和CP56校验、选择执行、匹配、时效及时间基准、变长FIFO、返回信息、动作结果、期限和FINISHED/引用生命周期。
- `slave_example_loopback_test.cjs`:启动实际可执行程序,使用Windows网络后端和127.0.0.1随机端口,以独立主站字节验证分片请求、k=1时逐帧ACK、站总召、忙拒绝及结束后重发、撤销、错误应答、106与102同批分别回44、STOP/START、重连和正常退出。校时核对正常ACT_CON、TEST否定7、读时COT=5否定45、广播实际CA,以及103与102同批时先102回44、再103回7。命令核对45/46/49/58/59/62完整流程,以及6008/6108/6308直接执行、直接点SELECT否定、未选执行及点类型不符否定;返回信息在确认和终止之间,另有越限/TEST/地址拒绝、撤销、47兜底及总召新值。正常带时标命令由最近成功校时和测试单调经过时间推算时标;过期58与106同批,结合后续全部计数量帧、动作/选择计数和time_expired验证没有58应答。服务约12秒后自行关闭,使用默认模拟时钟。
原114组基线由98组总召、12组计数量及4组兜底回归组成。兜底改用未支持的106/102,覆盖同批及反序、相同内容的有效新请求、k=1与写阻塞排队、HIGH满后丢新且不补发、STOP/STOPSTART取消,以及总召未结束时立即提交错误应答。启用校时的独立回归另外核对103业务。
新增16组校时回归覆盖无站广播45/46、同批及重复103逐条执行、FIFO中间否定、满槽丢新、Try等待不重执行、STOP/重连、Defer/FATAL、同一次采样检查期限及补偿、action内Get_Status与防重入、广播WAIT期间删除当前站及同CA替代不加入。所有action均为模拟,不设置系统时间。
17组校时及时间接线回归覆盖无站广播45/46、同批及重复103逐条执行、FIFO中间否定、满槽丢新、Try等待不重执行、STOP/重连、Defer/FATAL、同一次采样检查期限及补偿、action内Get_Status与防重入、广播WAIT期间删除当前站及同CA替代不加入。其中1组只替换示例的Clock_Read/Set,验证system启动、60秒刷新、失败清基准、校时成功后回调外移交及NULL Command;Clock库仍正常链接,所有动作均不设置宿主系统时间。另有1组命令点表接线回归,检查24点、可配置CA及混合执行模式。示例测试合计133组(99总召、12计数量、4兜底、17校时/接线、1命令接线),本轮实际验收见[测试记录](../test/IEC104测试文档.md#5-验证记录)。
畸形请求回归覆盖SQ/尾字节否定、零/多对象丢弃、基础头及载荷截短仍由Receiver拒绝、原事件不变、错误原因优先级、畸形激活/撤销不影响原BEGIN/NEED_DATA及期限、背压满槽后的FIFO恢复和多CA广播撤销隔离。
@@ -176,6 +187,6 @@ need_process回归覆盖完整业务交互、事件空位释放、总召等待
不排队提交回归覆盖旧NORMAL先于新总召、WAIT期间新突发先发后重新取值、HIGH积压、已接手总召部分写入后突发不能越过、背压不计取数超时而下一批重新计时、k=1窗口释放、到期ACK优先处理及发送故障终结。WAIT时验证队列和批次进度不增加,OK后覆盖输入存储验证发送层持有独立副本。
广播回归覆盖QOI=20..36、13个CA全部确认/数据/终止顺序、非空混合批次、状态区不足及跨实例重叠、已确认站删除/同CA替换、三阶段WAIT、超出FIFO容量的FINISHED、各阶段定向撤销及满槽广播撤销、拒绝与撤销同时等待、非当前站总期限和STOP/断线清理。Submit_Batch拒绝广播CA及非当前站CA;Type101继续交后续处理器。真实TCP用命令行注册的单站验证广播全站/分组、忙拒绝、非法QOI、撤销组合及连续兜底,共核对65个总召/兜底ASDU及11次正常完成的总召,计数量另行核对;5个校时应答独立计数,其中3次执行并成功,另2次为TEST及COT拒绝。多CA由可控Net回归覆盖。
广播回归覆盖QOI=20..36、13个CA全部确认/数据/终止顺序、非空混合批次、状态区不足及跨实例重叠、已确认站删除/同CA替换、三阶段WAIT、超出FIFO容量的FINISHED、各阶段定向撤销及满槽广播撤销、拒绝与撤销同时等待、非当前站总期限和STOP/断线清理。Submit_Batch拒绝广播CA及非当前站CA;Type101继续交后续处理器。真实TCP用命令行注册的单站验证广播全站/分组、忙拒绝、非法QOI、撤销组合及连续兜底;当前ASDU数量及STOP统计见[测试记录](../test/IEC104测试文档.md#5-验证记录),计数量和命令独立计数。5个校时应答中3次执行并成功,另2次为TEST及COT拒绝;多CA由可控Net回归覆盖。
这些检查覆盖本示例的模拟点表流程;实际主站设备、现场点表和设备执行接口仍需联调。