硬件平台:S7-300、CP341(配有主站狗)、12个工业设备
软件环境:博图V14,MODSIM32、
参考文档:CP341使用TIA Step7 V13进行Modbus通讯
我的项目是要与12个工控设备做MODBUS RTU通信,CP341是主站。本来我想用CPU的时钟来轮询,但是觉得这样效率不高,因此采用发送完成标志位DONE来出发下一个发送块的执行。我在调试的时候没有用实际的工控设备,而用的modbus从站仿真软件MODSIM32。我写的轮询程序中有两个发送块,一个接收块:


按理来说这段程序的运行效果是,我先触发first_req为1,第一个发送块发送指令,待发送完成后,first_Done产生一个脉冲,会触发第二个发送块,然后两个发送块轮流发送指令。
可是我实际运行的结果是先手动触发first_req为1,第一个块发送成功,first_done也却是产生了一个脉冲,并置位second_req,启动了第二个发送块发送,但是第二个发送块应该是没有发送成功,没有产生second_done脉冲,程序就停在那里了。必须手动将second_req复位,再置位,第二个发送块才发送一次,但是第一个发送块有卡在那里。难道是时间太快了,模块没反应过来?是不是还要调整轮询速度呢?怎么调呢?