基于Modbus-TCP的PLC编程应用参考资料

上传人:桔**** 文档编号:570520036 上传时间:2024-08-05 格式:PDF 页数:10 大小:349.46KB
返回 下载 相关 举报
基于Modbus-TCP的PLC编程应用参考资料_第1页
第1页 / 共10页
基于Modbus-TCP的PLC编程应用参考资料_第2页
第2页 / 共10页
基于Modbus-TCP的PLC编程应用参考资料_第3页
第3页 / 共10页
基于Modbus-TCP的PLC编程应用参考资料_第4页
第4页 / 共10页
基于Modbus-TCP的PLC编程应用参考资料_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《基于Modbus-TCP的PLC编程应用参考资料》由会员分享,可在线阅读,更多相关《基于Modbus-TCP的PLC编程应用参考资料(10页珍藏版)》请在金锄头文库上搜索。

1、深圳市矩形科技有限公司电话:0755-27440377邮箱:ModbusModbus 简介简介Modbus 是一种串行通信协议,是 Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。Modbus 是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus 比其他通信协议使用的更广泛的主要原因有:【1】公开发表并且无版税要求【2】相对容易的工业网络部署【3】对供应商来说,修改移动原生的位元或字节没有很多限制(一)(一)MODBUSMODBUS 功能码简述功能码简述下表列出 MODBUS 支持的部分功能代码:以十进制十进制表示为例(在通讯报文

2、里面,在通讯报文里面,功能码必须转换成十六进制功能码必须转换成十六进制),如下:深圳市矩形科技有限公司电话:0755-27440377邮箱:表 1.1 Modbus 部分功能码1.11.1 功能码说明功能码说明功能码可以分为位操作和字操作两类。位操作的最小单位为 Bit,字操作的最小单位为两个字节。【位操作指令】:读线圈状态 01H,读(离散)输入状态 02H,写单个线圈 06H 和写多个线圈 0FH(上表中的功能码 15,15 为十进制表达)。【字操作指令】:读保持寄存器 03H,写单个寄存器 06H,写多个保持寄存器 10H(上表中的功能码 16,16 为十进制表达)。1.21.2 寄存器

3、地址分配寄存器地址分配表表 1.21.2modbusmodbus 寄存器地址分配寄存器地址分配PLC 地址协议地址适用功能寄存器种类读写状态0 0001-0 99990000H-FFFFH01H05H0FH数字量输出可读可写1 0001-1 99990000H-FFFFH02H数字量输入可读3 0001-3 99990000H-FFFFH04H模拟量输入可读4 0001-4 99990000H-FFFFH03H06H0FH模拟量输出可读可写1.31.3 寄存器种类说明寄存器种类说明代码中文名称寄存器 PLC 地址位操作/字操作操作数量01读数字量输出00001-09999位操作单个或多个02读

4、数字量输入10001-19999位操作单个或多个03读模拟量输出40001-49999字操作单个或多个04读模拟量输入30001-39999字操作单个或多个05写单个数字量输出00001-09999位操作单个06写单个模拟量输出40001-49999字操作单个15写多个数字量输出00001-09999位操作多个16写多个模拟量输出40001-49999字操作多个深圳市矩形科技有限公司电话:0755-27440377邮箱:表表 1.31.3M Modbusodbus 寄存器种类说明寄存器种类说明1.4 矩形矩形 PLC 地址和地址和 Modbus 协议地址协议地址的转换的转换1.4.1矩形矩形

5、N80 系列系列 PLC 地址地址PLC 的地址,是指控制器中的寄存器地址,这些控制器可以是 PLC,也可以是触摸屏,或是文本显示器。PLC 地址一般采用 1010 进制描述进制描述,共有 5 位,其中第一位代码,如 0、3,标明寄存器类型。第一位开头数字和寄存器类型的对应关系如表 1 所示。PLC 地址例如40001、30002 等。1.4.2 Modbus 协议地址协议地址协议地址指,通信时使用的地址,例如 PLC 地址 40001 对应寻址地址 0x0000,40002对应寻址地址 0x0001,40016 对应 0x000F,通讯寻址地址一般使用 1616 进制进制描述。再如,PLC

6、地址 40003 对应协议地址 0002,PLC 地址 30003 也对应协议地址 0002,虽然访问这两个 PLC 地址 40003、30003,通信时使用相同的协议地址 0002,但是需要使用不需要使用不同的命令访问同的命令访问(PLCPLC 地址开头的地址开头的 0 0、1 1、3 3、4 4,决定了访问它们需要不同的功能码,命令的,决定了访问它们需要不同的功能码,命令的第二字节即功能码第二字节即功能码),所以访问时不存在冲突。PLC说明举例说明DO数字量输出输出端口,可设定端口的输出状态,也可以读取该位的输出状态。可分为两种不同的执行状态,例如保持型或边沿触发型。电磁阀输出,MOSFE

7、T 输出,LED 显示等。DI数字量输入输入端口。通过外部设定改变输入状态,可读但不可写。拨码开关,接近开关等。AO模拟量输出输出参数或保持参数,控制器运行时被设定的某些参数。可读可写。模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限。AI模拟量输入输入参数。控制器运行时从外部设备获得的参数。可读但不可写。模拟量输入深圳市矩形科技有限公司电话:0755-27440377邮箱:地址地址的转换的转换:矩形 PLC 地址和通讯协议地址十分相似, PLC 变量的地址由开头的 0、1、3、4 指示是哪种类型的变量,后面加 4 位数字来表示偏移量。不同的是, PLC 的起始地址 (偏移

8、量) 是 0001 开始, 而 Modbus 协议的偏移量是从 0000开始,同时,PLC 地址是十进制表示,而协议地址是十六进制表示。因此,首先要把协议地址转换成十进制, 一般来说, 矩形矩形 PLCPLC 的地址的地址 = = modbusmodbus 协议地址协议地址 (先换成十进制先换成十进制)+ + 1 1 。(二)(二)ModbusModbus 根据根据传输方式传输方式不同,分成三种协议不同,分成三种协议: :在 ModBus 系统中有 3 种传输模式可选择:ASCII(美国信息交换码)、RTU(远程终端设备)、TCP 模式。每个 ModBus 系统只能使用一种模式,不允许 2 种

9、模式混用。用户选择想要的模式,包括串口通信参数(波特率、校验方式等,在 tcp 模式下是 IP地址和端口),在配置每个控制器的时候,在一个 Modbus 网络上的所有设备都必须选择相同的传输模式和参数。目前,使用得较多的是 modbus-rtu。更详细的 rtu 报文格式资料,请参考N80 系列 PLC 的 MODBUS 协议详解文档。M Modbusodbus- -TCPTCP 协议简述协议简述modbus TCP 和 modbus RTU 报文基本相同,但是也存在一些区别,我们只要把 RTU 协议末尾的两个字节的校验码去掉,然后在 RTU 协议的开始加上 7 个字节的 MBAP 报头,并通

10、过TCP/IP 网络协议发送出去即可。Modbus-tcp 相当于 rtu 模式,有以下特点:1.从机地址变得不再重要,多数情况下忽略。从某种意义上说从机地址被 IP 地址取代2.CRC 校验变得不再重要, 可以忽略。 由于 TCP 是一个可靠的传输控制协议, 因此, modbusTCP 取消了繁琐的 CRC 校验计算,编程更简便了。modbus TCP 和 modbus RTU 的区别可使用下图概括图 2 modbus TCP 数据包和 modbus RTU 数据包比较深圳市矩形科技有限公司电话:0755-27440377邮箱:在 modbus TCP 中包含一个 MBAP 头,该头包含以下

11、几个部分区域长度描述客户端服务器传输标志2字节MODBUS 请求和响应传输过程中序列号客户端生成应答时复制该值协议标志2字节Modbus 协议默认为 0客户端生成应答时复制该值长度2字节这个字节后面剩余的部分的字节数目客户端生成应答时由服务器端生成单元标志1字节从机标志(从机地址)客户端生成应答时复制该值【注意】1)传输标志可理解为序列号,防止 MODBUS TCP 通信错位,例如后发生的响应先到了主机,而早发生的响应后到主机。2)单元标志可理解为从机地址,跟 rtu 串行通讯不同,此时已经不再重要。附示例:附示例:如何用如何用 VBVB 实现实现矩形矩形 N80N80 系列系列 PLCPLC

12、 的的 ModbusModbus TCP/IPTCP/IP 的通讯的通讯以 Plc 与上位机,接入同一个局域网为例,示意图如下:1.首先,修改确定首先,修改确定 PLCPLC 的的 IPIP 地址地址(注意,这一步需禁用电脑的一个网卡这一步需禁用电脑的一个网卡)定义 PLC IP 地址的设置: 在控制器内,点击“刷新 IP 地址配置表”,弹出对话框:深圳市矩形科技有限公司电话:0755-27440377邮箱:定义 PLC IP 地址的设置: 弹出对话框内修改 IP 地址,比如,设置为 IP 地址:192.168.1.174子网掩码:255.255.255.0 默认网关:192.168.1.12

13、. 2.路由器设置路由器设置:把:把 502502 端口与端口与 PLCPLC 的的 IPIP 地址绑定起来:地址绑定起来:在路由器内有一个端口映射功能, 需要在此设置端口转发功能, 这里以飞鱼星设备为例进行设置,别的路由器请参考(虚拟服务器内的转发规则)必须设置的参数如下所示:1、外部端口:502(PLC 固定端口号)2、内部 IP:192.168.1.174(上面 PLC 设置 IP 地址)3、协议:TCP/UDP4、映射线路:任意。5、设置完成后点击保存按钮。深圳市矩形科技有限公司电话:0755-27440377邮箱:对于上位机,我们利用 VB 的 WinSock 套接字控件能很容易的进

14、行编程。新建 1 个套接字对象, 设定其属性如下, 注意其远程主机的 IP 就是以上设置的 IP 地址:1 建立网络连接建立网络连接Private Sub Command2_Click()On Error Resume NextWinsock1.CloseWinsock1.Connect “192.168.1.174”, 502If Err ThenMsgBox “网络连接时发生错误:” & Err.Description, vbCritical, “网络连接”Err.ClearEnd IfEnd Sub深圳市矩形科技有限公司电话:0755-27440377邮箱:2 2 读多个字的命令读多个字

15、的命令(本例表示从 PLC 读 30020 和 30021 两个模拟量输入地址的值),发送的报文如下,注意,modbus 报文中的数字格式,都是十六进制:传输标志协议标志长度单元标志功能码数据000006255031302我们查功能码表格,知道功能码 03 是读模拟量输入,因此,它操作的对象是矩形 PLC 中 3开头的寄存器地址,起始地址是 13Hex,换算成十进制是 19,对应的 PLC 地址需要加 1,因此,读取的 PLC 初始地址是 30020。读取的寄存器数据长度是 2,则这条报文,读取的是 plc地址 3002030021 的数据。代码如下:Private Sub cmdSend_C

16、lick()On Error GoTo ErrProcDim SendStr(11) As ByteDim RcvStr() As ByteSendStr(0) = 0 交换识别号高字节,通常为 0SendStr(1) = 0 交换识别号低字节,通常为 0SendStr(2) = 0 协议识别号高字节,为 0SendStr(3) = 0 协议识别号低字节,为 0SendStr(4) = 0 字节长度高字节SendStr(5) = 6 以下字节长度低字节SendStr(6) = 255 单元识别号,确省为 255SendStr(7) = &H3 读多个字功能代码SendStr(8) = 1 读数

17、据的起始地址高字节SendStr(9) = 3 读数据的起始地址低字节SendStr(10) = 0 数据长度高字节SendStr(11) = 2 数据长度低字节Dim aStr As StringDim i As IntegerFor i = 0 To 11aStr = aStr & Chr(SendStr(i)NextWinsock1.SendData aStrExit SubErrProc:MsgBox “传输数据失败”, vbCritical, “网络传输”End Sub3 3 写多个字的命令写多个字的命令(本例表示写数值到 PLC 的 40018、40019、40020 地址)发送的

18、报文如下,注意,modbus 报文中的数字格式,都是十六进制:传输标志协议标志长度单元标志功能码数据00000D2551011(起始地址)3(寄存器个数)6 (写入数值的字节数)ABCDEF深圳市矩形科技有限公司电话:0755-27440377邮箱:我们查功能码表可知,功能码&H10 = 16,是写多个模拟量输出寄存器,在矩形 PLC 中,模拟量输出对应的地址是 4 开头的。 这个报文中的起始地址是 11Hex, 换算成十进制就是 17,对应的 PLC 地址要加 1,即开始第一个 PLC 寄存器地址是 40018,操作的寄存器数量是 03,则这条报文,要向 PLC 模拟量输出地址 400184

19、0020 的写入后面跟的 6 个字节的值,其中,40018 写入的值是 AB,40019 写入的值是 CD,40020 写入的值是 EF。代码如下:Private Sub cmdwrite_Click()On Error GoTo ErrProcDim SendStr(18) As ByteDim RcvStr() As ByteSendStr(0) = 0 交换识别号高字节,通常为 0SendStr(1) = 0 交换识别号低字节,通常为 0SendStr(2) = 0 协议识别号高字节,为 0SendStr(3) = 0 协议识别号低字节,为 0SendStr(4) = 0 字节长度高字节

20、SendStr(5) = 13 以下字节长度低字节SendStr(6) = 255 单元识别号,确省为 255SendStr(7) = &H10 写多个字命令代码SendStr(8) = 1 写数据的起始地址高字节SendStr(9) = 1 写数据的起始地址低字节SendStr(10) = 0 要操作的寄存器个数的高字节SendStr(11) = 3 要操作的寄存器个数的低字节SendStr(12) = 6 后面跟的数据的长度的字节数SendStr(13) = &HA 写的第 1 个字的高字节SendStr(14) = &HB 写的第 1 个字的低字节SendStr(15) = &HC 写的

21、第 2 个字的高字节SendStr(16) = &HD 写的第 2 个字的低字节SendStr(17) = &HE 写的第 3 个字的高字节SendStr(18) = &HF 写的第 3 个字的低字节Dim aStr As StringDim i As IntegerFor i = 0 To 18aStr = aStr & Chr(SendStr(i)NextWinsock1.SendData aStrExit SubErrProc:MsgBox “传输数据失败”, vbCritical, “网络传输”End Sub深圳市矩形科技有限公司电话:0755-27440377邮箱:4 通讯数据处理(

22、本例是得到 4 个字节的数据):Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim a1, a2, b1, b2, s As StringWinsock1.GetData sIf bytesTotal 12 Thena1 = Hex$(Asc(Mid$(s, 10, 1)a2 = Hex$(Asc(Mid$(s, 11, 1)b1 = Hex$(Asc(Mid$(s, 12, 1)b2 = Hex$(Asc(Mid$(s, 13, 1)End IftxtReceive.Text = a1 & a2 & “/” & b1 & b2If Len(txtReceive.Text) 5000 ThentxtReceive.Text = Right(txtReceive.Text, 2000)End IfEnd Sub

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号