论坛里面的资料连接我都看过了, 还是没有找到解决方法,所以来求助。
一、硬件
CPU315 PN/DP 固件版本V3.2.6
一个第三方的Modbus TCP产品,可以配置为客户端也可以配置为服务器端。
两个Modbus RTU的电能表
二、软件
Step7_Profissional_2017
Modbus_TCP_PN 软件包 带FB900 MODBUSPN
FB901 MOD_CLI
FB903 MOD_SERV
另外带两个数据块: DB2 modbus TCP 配置的数据库
DB3 授权块
三、程序
因为第一次用这个Modbus鬼玩意进行通讯,所以用了示例程序,
拓扑逻辑是这样的:
S7-300 做Modbus Client 就是主站, 中间通过三方的网关, 三方网关的作用是把 Modbus TCP转换为Modbus RTU。
300 PLC ------》 网关 --------》 Modubus RTU的电能表
我现在利用示例程序,已经可以通过功能码 3 读取电能表的数据,现在我想通过S7-300的Modbus 通讯通过功能码5 往 电能表里面写数据, 但是在西门子的程序里面修改就是不行。300 PLC侧一修改为功能码5 就报错。

这个是配置数据块里面的设置, 我用的data_type_1 和 data_type_4
只要我设置了 功能码 5 ,则300 这边就报错。通讯也不能建立。

然后就算我在将功能码设置回到 3 也会如上图一样报错,通讯不能建立。
功能码 5 对应的数据块是 DB17 我建立了 DB17, 无论我把DB17 里面的数据类型定义为 bool型还是 word型都不可以。
如果我把功能码 5 去除,然后通讯马上就可以,而且可以读取电能表的数据。
还有通过网关我已经用 Modbus Poll软件进行过测试,可以轮询的设置两个电能表的线圈,而且可以听到里面的继电器动作的声音, 因此我线遇到的困难是 怎么样在300 这一侧配置号,可以操作线圈。