抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望
 系统学习modbus

人生就像一场马拉松,偶尔停下来摸摸鱼,才能走得更远

近期工控PLC项目居多,所以接下更新内容大多数是关于工控PLC内容。所有程序知识由项目组成员“糖芦卢”提供晓煜做整理和讲解,不足之处欢迎指出。
MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间
提供客户机/服务器通信。在TCP/IP网络中,Modbus TCP协议规范服务器使用502端口响应客户机请
求,通过功能码实现不同类型的数据请求。

报文规则

我们先来了解一下modbus_tcp报文,
Tx:078-00 56 00 00 00 06 01 06 00 00 00 DE
Rx:079-00 56 00 00 00 06 01 06 00 00 00 DE
TX代表我请求数据
RX代表回复我数据
00 56 00 00 00 00 这六位是modbus报文的事物ID,它开头固定事务元标识符: 占两个字节  客户端发送 这里设置为 0x00 0x56 当然用C# 来写的话是0x00 0x01 
00 00 两个字节是表示tcp/ip的协议的modbus的协议。
00 06 两个字节表示的是header handle后面还有多长的字节,即表示的是该字节以后的字节 长度(lengch),可以看到在 00 06后面还有“06 03 00 27 00 02”六个字节,所以这两个字 节表示的就是6。

01 06 00 00 00 DE 后六位,01代表modbus通讯地址号为1,06代表06功能码也就是写单个寄存器。00 00 代表写入地址,这边是从0开始,第一个00 代表高8位,后面00代表低8位。后面4位00 DE 代表写入的数据,同样00代表高8位 DE为低8位,DE转换成10进制数为222,
所以这一段报文是写入寄存器0值为222。

同样回复的时候Rx:079-00 56 00 00 00 06 01 06 00 00 00 DE和发送的TX值是一样的代表我们写入成功了。读法是一样的

Modbus poll 和 Modbus slave 网口通讯使用案例
PLC 做服务器与Modbus poll通讯外遥Modbus poll 和 Modbus slave 网口通讯使用案例
IP设置
PLC 端:在PLC左侧工程栏 >PLC本体信息,确认plc和电脑的ip地址在同一个网段
Modbus poll 端:打开软件单击Connection->Connect,选择对应的网口,将从站的IP地址跟PLC 对应起来。点OK,如下图。

通信设置
Modbus poll:单击菜单“Setup”中“Read/Write Definition.. F8”进行参数设置
Modbus poll:在主窗口寄存器地址上双击鼠标,弹出修改对话框,往对应从站的软元件Modbus 地址里面写值,下面用Modbus poll用16功能码往PLC的D500起始的8个地址分别写1~8。15 功能码将M100、M103、M106置ON。如下图。

信捷modbus_tcp地址对照表
信捷PLC支持寄存器地址
M、X、Y、S、SM、T、C、ET、SEM、HM、HS、D、ID、QD、HD、HS、HT、FD、SFD、FS。
什么意思了?
如果我们想用modbus控制PLC寄存,比如说M0,它在modbus中的寄存器地址是1.1.0。如果 是M1他的地址为1.1.1,M2地址为1.1.2。我们只需要操作这个地址就可以进行操作。

XDH/XLH PLC 型号
PLC 地址Modbus 地址数量属性寄存器大小数据类型M0-M20479 (Coils)0x0000-0x4FFF (0-20479)20480Read/Write1BitBITX0-X77 (Coils)0x5000-0x503F (20480-20543)64Read/Write1BitBITX10000-X11777 (Coils)0x5100-0x54FF (20736-21759)1024Read/Write1BitBITX20000-X20177 (Coils)0x58D0-0x594F (22736-22863)128Read/Write1BitBITX30000-X30077 (Coils)0x5BF0-0x5C2F (23536-23599)64Read/Write1BitBITY0-Y77 (Coils)0x6000-0x603F (24576-24639)64Read/Write1BitBITY10000-Y11777 (Coils)0x6100-0x64FF (24832-25855)1024Read/Write1BitBITY20000-Y20177 (Coils)0x68D0-0x694F (26832-26959)128Read/Write1BitBITY30000-Y30077 (Coils)0x6BF0-0x6C2F (27632-27695)64Read/Write1BitBITS0-S7999 (Coils)0x7000-0x8F3F (28672-36671)8000Read/Write1BitBITSM0-SM4095 (Coils)0x9000-0x9FFF (36864-40959)4096Read/Write1BitBITT0-T4095 (Coils)0xA000-0xAFFF (40960-45055)4096Read/Write1BitBITC0-C4095 (Coils)0xB000-0xBFFF (45056-49151)4096Read/Write1BitBITET0-ET39 (Coils)0xC000-0xC027 (49152-49183)40Read/Write1BitBITSEM0-SEM127 (Coils)0xC080-0xC0FF (49280-49407)128Read/Write1BitBITHM0-HM6143 (Coils)0xC100-0xD8FF (49408-55551)6144Read/Write1BitBITHS0-HS999 (Coils)0xD900-0xDCEF (55552-56551)1000Read/Write1BitBITHT0-HT1023 (Coils)0xE100-0xE4FF (57600-58623)1024Read/Write1BitBITHC0-HC1023 (Coils)0xE500-0xE8FF (58624-59647)1024Read/Write1BitBITHSC0-HSC39 (Coils)0xE900-0xE927 (59648-59687)40Read/Write1BitBITD0-D20479 (Hold Registers)0x0000-0x4FFF (0-20479)20480Read/Write16Bit,2ByteVariousID0-ID99 (Hold Registers)0x5000-0x5063 (20480-20579)100Read/Write16Bit,2ByteVariousID10000-ID11599 (Hold Registers)0x5100-0x573F (20736-22335)1600Read/Write16Bit,2ByteVariousID20000-ID20199 (Hold Registers)0x58D0-0x5997 (22736-22935)200Read/Write16Bit,2ByteVariousID30000-ID30099 (Hold Registers)0x5BF0-0x5C53 (23536-23635)100Read/Write16Bit,2ByteVariousQD0-ID99 (Hold Registers)0x6000-0x6063 (24576-24675)100Read/Write16Bit,2ByteVariousQD10000-QD11599 (Hold Registers)0x6100-0x673F (24832-26431)1600Read/Write16Bit,2ByteVariousQD20000-QD20199 (Hold Registers)0x68D0-0x6997 (26832-26931)200Read/Write16Bit,2ByteVariousQD30000-QD30099 (Hold Registers)0x6BF0-0x6C53 (27632-27731)100Read/Write16Bit,2ByteVariousSD0-SD4095 (Hold Registers)0x7000-0x7FFF (28672-32767)4096Read/Write16Bit,2ByteVariousTD0-TD4095 (Hold Registers)0x8000-0x8FFF (32768-36863)4096Read/Write16Bit,2ByteVariousCD0-CD4095 (Hold Registers)0x9000-0x9FFF (36864-40959)4096Read/Write16Bit,2ByteVariousETD0-ETD39 (Hold Registers)0xA000-0xA027 (40960-40999)40Read/Write16Bit,2ByteVariousHD0-HD6143 (Hold Registers)0xA080-0xB87F (41088-47231)6144Read/Write16Bit,2ByteVariousHSD0-HSD1023 (Hold Registers)0xB880-0xBC7F (47232-48255)1024Read/Write16Bit,2ByteVariousHTD0-HTD1023 (Hold Registers)0xBC80-0xC07F (48256-49279)1024Read/Write16Bit,2ByteVariousHCD0-HCD1023 (Hold Registers)0xC080-0xC47F (49280-50303)1024Read/Write16Bit,2ByteVariousHSCD0-HSCD39 (Hold Registers)0xC480-0xC4A7 (50304-50343)40Read/Write16Bit,2ByteVariousFD0-FD8199 (Hold Registers)0xC4C0-0xE4BF (50368-58559)8192Read/Write16Bit,2ByteVariousSFD0-SFD4095 (Hold Registers)0xE4C0-0xF4BF (58560-62655)4096Read/Write16Bit,2ByteVariousFS0-FS255 (Hold Registers)0xF4C0-0xF5BF (62656-62911)256Read/Write16Bit,2ByteVarious

这个对照表会看看?
我们只要记住一点,开关量读取就用01功能码,模拟量读取就开03功能码。
开关量写入就用05功能码,模拟量写入就16功能码就行了
地址选择
M0的地址是从1.1.0开始的,一直到20479也就是1.1.20479换成16进制为0x0000-0x4FFF
X0的地址是0x5000-0x503F (20480-20543)大家可以对应这个参数表就能对信捷PLC进行操作了。
我这边整理了一份地址表有需要的自已提取:
https://pan.quark.cn/s/10b9acfd8a85

好了本期的内容就到希望能帮助到你。modbustcp 上位机 信捷PLC


授人以鱼不如授人以渔

喜欢就给个点赞+在看


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

Copyright 2010-2015. All rights reserved. 

微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码