图3:事件解析功能块FB_Data_Mes算法图示
FB_Data_Mes的功能主要包括(一)根据进入Event堆栈数量循环解析Event_ID并将发送数据写入发送缓存区DB_Send_FIFO(二)当数据全部得以解析或者数据错误,将Event堆栈数据清除。详细算法流程如图3所示。
(二)DB_Send_FIFO发送缓存数据块
如图3所示的算法,在FB_Data_Mes执行过程中根据解析到的Event_ID将调用不同的ID程序,然后将要发送的数据放置到发送缓存区,结合表1简单示意程序逻辑如下。
IF #s_Entries_Used > 1 THEN
FOR #t_Counter_Entry := 1 TO #s_Entries_Used DO
IF #s_Entry[#s_Entries_Used].ID = 8001 THEN
FC_Infeed(#s_Entry[t_Counter_Entry].Value);//请求入库任务信息
END_IF;
…… //其他信息
IF #s_Entry[#s_Entries_Used].ID = 8020 THEN
FC_Req_Status_Info(#s_Entry[t_Counter_Entry].Value); //请求位置信息
END_IF;
END_FOR;
END_IF;
上述的程序中的FC_Infeed或者FC_Req_Status_Info都是按照接口约定,根据Entry[].Value搜索接口约定中需要的数据,然后将这些数据统一写进数据发送缓存区域DB_Send_FIFO。
这意味着DB_Send_FIFO中保存着需要发送到上位系统的数据缓存,按照PLC的循环机制,每一个扫描周期最好只发送一条Mes(发送多条端口数据可能被覆盖),所以DB_Send_FIFO中保存着当前周期还没有发送完的数据。
所以,为保证所有需要发送的数据都能完整且正确的发送到上位系统,DB_Send_FIFO被定义为如下图结构。