Modbus_RTU新组态指令是Modbus_Comm_Load和Modbus_Master(老指令是MB_Master)。
我是第一次用Modbus_RTU通信,此前看了许多视频教程,也查过许多手册和贴子,然后把程序写好。
我将Mode设为4,以为这样就可以将通信变成两线多从站的。因为手册上是这样讲的,如下图红色方框所示:

由于Modbus_RTU主要是读和写两项功能,我得经常用读和写,今天发现一件大事:Modbus_RTU居然不是用Mode=4或者3来实现读和写。事实上,Mode只能等于0,1,2,11,80,读和写必须配合着地址来用。我就被搞得头晕脑胀了。我看过那么多视频教程,以前也有用Modbus_TCP的经验,都是用3或者4来实现读和写呀,怎么现在居然没有用这两个数字?
后来渐渐清理了思路:此Mode非彼Mode。
在新的指令Modbus_Comm_Load和Modbus_Master,我们首先得给Modbus_Comm_Load的Mode赋值为4,才能变成两线多从站的。由于我以前看的视频教程里没有这一步,所以我不知道该这么做。尤其是,Modbus_Comm_Load本身没有Mode引脚(如下图),我哪里会想到要更改它的Mode的数值。

后来试了试,觉得应当将Modbus_Comm_Load背景数据块里的Mode元素赋值为4,这样才能将这个项目的组态变成两线多从站的了。我后来发信问西门子官方,后者很快就回电,说我做的是对的。

因此,正确的编程是下面这样的:

前面多了一条Move指令。这是所有视频教程里所没有的。
我此前的错误在于:没有看到Modbus_Comm_Load的Mode引脚,就不加理会,按默认配置去做,以为这样总不会错;后来给Modbus_Master的Mode赋值为4,以为这就变成了“半双工RS485双线模式”;但后来又发现Modbus_Master的Mode=4是非法的,只能等于0,1,2,11,80,那么怎么实现对外围设备的数据的读和写呢?这样我陷入混乱。
老指令MB_Comm_Load和MB_Master的视频教程给我带来了混乱(就是让Mode等于3或者4),新指令Modbus_Comm_Load和Modbus_Master的视频教程我只看到过一次,里面没有通过Move指令把4赋值给Modbus_Comm_Load的背景数据块里的Mode元素的,因为它们都是四线一站的。
最终解决了这个问题。坛子里的大侠别笑。我于Modbus_RTU通信上还是初学者