FX-3SA的modbus RTU,由于具有专用modbus指令,所以使用还是比较方便的。
FX-2n使用RS指令,去做modbus RTU,实现比较繁琐。我也比较想写,但是没有PLC。如有愿意提供PLC者(联系我微信),我愿意补发一篇给大家。
写帖子,就是为了寻求志同道合者。有志同道合者加我微信:we9322025.
之前帖子的链接:
在此,先奉献第一章的基础篇给大家。
modbus新起点1--基础篇:http://bbs.gongkong.com/d/201807/764982_1.shtml
modbus新起点连载2--modbus台达篇:http://bbs.gongkong.com/d/201807/765040_1.shtml
modbus的新起点连载3——台达PLC的modbus主站:http://bbs.gongkong.com/d/201807/765110_1.shtml
modbus新起点连载4--台达PLC以太网的数据交换:http://bbs.gongkong.com/D/201807/765957_1.shtml
modbus新起点连载5--台达PLC的modbusTCP客户端程序:http://bbs.gongkong.com/D/201807/765961_1.shtml
modbus新起点连载6——西门子200的modbusRTU: http://bbs.gongkong.com/D/201807/766167_1.shtml
modbus新起点连载7——西门子1200的modbus TCP http://bbs.gongkong.com/d/201808/767744_1.shtml
modbus新起点连载8——西门子1200的modbus RTU 和AB PLC的modbus相关资料和链接:http://bbs.gongkong.com/d/201808/767745_1.shtml
modbus新起点连载8——三菱PLC FX3SA的modbus RTU:http://bbs.gongkong.com/D/201808/768365_1.shtml
参考手册:《FX3S,FX3G,FX3U用户手册-MODBUS通信篇》参看附件
正文:
测试所需模块配置:FX3SA的主机+FX3s-CNV-ADP+FX3u-485ADP-MB。
RS485的接线如下图
modbus RTU 从站
程序截图如下(适用于FX3G,FX3U,FX3S,但是具体的modbus地址表不一样):
其中寄存器的定义如下:
M8411:MODBUS通信参数设定标志位
D8400:通讯参数(通道1是D8400,通道2是D8420),通讯参数定义如下:
所以程序中的H1081的含义为bit12=on(RS485),bit4~bit7=8=1000(二进制)(波特率9600),bit0=on(数据位长度8位)。综合起来就是RS485的通讯板参数为9600,8,1,n。
Ps:MODBUS RTU协议,数据位只能是8位。
D8401:通讯协议,通道1是D8401,通道2是D8421。其对应的具体定义如下:
程序中D8411=H11,则bit0=on,bit4=on,bit8=off。所以协议合起来就是modbus 从站RTU协议。
Ps:通道1和通道2不能同时为modbus协议,如果出现同时为modbus协议的时候,则通道2会失效。
D8414:modbus的从站站号(1~147)。通道1的寄存器是D8414,通道2的寄存器是D8434。
默认的modbus地址表
位元件modbus地址表
字元件对照表
modbus RTU主站
其中D8400和D8401的含义在上面中已经提到了。主要就是通讯参数是9600,8,1,n(D8400=H1801),RTU主站模式(D8401=H1)。
其中ADPRW指令是modbus指令。M0为on一次,执行一次。
当为读取的时候,读写存储区,将是读取回来的值。当时写的时候,读写存储区是需要写入的内容。
其中M8029是通讯完成标志位。
在PLC上运行一个modbus Slave工具,当PLC程序中m0每闭合一次,在slave工具中就能看到一次modbus报文。如下: