SICAR程序中PN_DEV_DIAG_PD_FB中,由于使用的是循环周期替代For 循环来减少CPU单次循环周期的运算负载。因此在前五个周期时,还没有完成device_states的调用,此时present标志位一直都为false。
但此时已经对故障进行了整理,判断not preset的状态此时如果是configed(已经配置了的)并且device id为1-4之间(也通过循环周期整理每个设备)时,会产生not present故障。
修改:在手动复位,first scan 和history reset时,赋值一个#Read_Present_State_Not_Finished bool标识,用于后面not present的故障判断。当device_states的mode为4(read present 状态)时,清除该标识。
当然如果通过约定大于配置的规则,要求硬件配置中Device Id(Profinet的设备编号)从6开始,那么可以忽略此问题。