请教一下MODBUS通讯问题
MBUS_MSG功能块里面的输出位Done是在RTU读或写完成后才置为1,还是完成仅仅调用(功能块后台执行?)、不等待读或者写真正完成便置为1?
下面是两对程序是我根据西门子RTU主站和从站示例程序而改写的,其中修改前程序主要思路为:
(以主站读、从站写为例)
主站读——保持寄存器VW108的读操作完成后,M2.1变为1,将保持寄存器VW108复制至暂存字VW1108,同时保持寄存器VW108清零,为下一个读操作准备;若检测位V109.0==0持续3s则将暂存字VW1108清零(否则会出现通讯断开但主站仍“收到”从站DI点信号的情况);最后将暂存字VW1108内容逐位输出置DO点。
从站写——DI点逐位输入保持寄存器VW208(其中V209.0为1,作为检测位),调用MBUS_SLAVE写保存寄存器VW208。
运行结果显示,在从站某一个DI点有信号输入后,主站那边对应的DO点高频闪烁;检测位V109.0经常是0,偶尔为1。
对程序进行修改,修改后程序主要思路变化:
(以主站读、从站写为例)
主站读——保持寄存器VW108的读操作后,保持寄存器VW108及暂存字VW1108不马上清零,而是各设置了一个计时器,检测位V109.0==0和读完成位M2.1==0持续3s则清零。
从站写——基本不变。
程序运行结果正常。
根据两对程序对比,似乎代表MBUS_MSG的输出Done变为1不代表读、写完成。不知道是否这样理解?请问有没有办法判断该次MBUS_MSG操作真正完成?
附件是程序。
Modbus 问题.zip