
以上时序图是在wincc和博图同时对同一个modbus tcp地址读写的情况。大概有6秒一个读+写周期。
读:78个寄存器,写:30个寄存器。
wincc版本:v7.5 sp2 up11
tia版本:v18
net版本:v18
step7版本:v5.5 sp4(安装这个有助于wincc和新版本固件PLC通信)

以上时序图是在只有博图对一个modbus tcp地址读写的情况。大概有4秒一个读+写周期。

从我写入寄存器数据80,到读取寄存器数据90→80,大概花了6秒。
我的问题:为啥这么慢?有没有办法让它缩短到2秒以内。换串口服务器?换PLC?优化程序?
以下为我自己写的modbus tcp轮询寄存器地址的程序
ModbusTCP_FB.7z
以上是单SCL文件。V18版本博图编写。
PS:经过一段时间折腾,把程序改成以下方式。
PS:本帖的问题是:一个站点、一个从站,的,不连续寄存器地址的轮询。
把寄存器地址分类,分成实时读取、调试参数、温控设定值,这三类数组。
初始化从站modbus仪表,按顺序读取,实时读取、调试参数、温控设定值。
初始化时,转存调试参数和温控设定值,last value。
初始化完成后,一直轮询实时读取。
监听调试参数和温控设定值的变化,如有不同,进入写入程序步。
写入完,再读取一遍同样地址数据,并赋值到last value数组。
接着继续轮询实时读取。
PS:连续寄存器地址不存在这样的问题,触摸屏和组态软件应付不连续寄存器地址比PLC方便。
PS:本项目,只有一个KTP屏幕,一个网口无法兼容PN和modbus tcp。也没有组态软件。