千呼万唤始出来的Modbus TCP现已加入肯德基豪华午餐正式发布。
Modbus作为通讯界的万金油,基本上大大小小的品牌都会支持这一通讯协议。只要学会使用Modbus,升职加薪不再是梦。

一、Modbus小科普

Modbus通讯分为主站(Master)从站(Slave)两种模式。这两种模式,我们的触摸屏都是可以支持的。
与大多数通讯协议不同的是,Modbus的数据是储存在从站中的,主站会访问从站进行数据抓取。一般,变频器、温度表、电能表等设备都是工作在从站模式下。屏与这些设备通讯时,屏是做了主站的角色。

在Modbus通讯中,存在着两个让无数人混淆又迷茫的概念:内存区块功能代码,下面一个一个来说。

内存区块

所谓的内存区块,与PLC中的内存区域的概念其实是一样的。比如三菱有X区、Y区、M区、D区等,西门子有I区、Q区、M区、V区等。不同的是,在Modbus中,这些内存区域是使用数字来划分的,它分为0区、1区、3区、4区,每个区里面都有65535个地址。

内存区块 数据类型 主站访问权限 从站访问权限 地址编号范围
线圈状态(0区) 布尔(Bool) 读/写(R/W) 读/写(R/W) 000001~065535
离散输入(1区) 布尔(Bool) 只读(RO) 读/写(R/W) 100001~165535
输入寄存器(3区) 字(Word) 只读(RO) 读/写(R/W) 300001~365535
保持寄存器(4区) 字(Word) 读/写(R/W) 读/写(R/W) 400001~465535

最常用的内存区块为0区和4区。

功能代码

功能代码,简单的说就是一些命令,从站可以根据主站发出的这些命令,读取或写入相应的数据。
常见的功能代码如下:

内存区块 功能代码(读取)(16进制) 功能代码(写入)(16进制)
线圈状态(0区) 0x01 0x05(写入单个线圈)、0x0F(写入多个线圈)
离散输入(1区) 0x02
输入寄存器(3区) 0x04
保持寄存器(4区) 0x03 0x06(写入单个寄存器)、0x10(写入多个寄存器)

因为写入功能代码中,包含写入单个和写入多个两种功能代码。并不是所有从站设备都支持写入多个寄存器的,具体情况,建议查看从站设备的说明书,再根据实际情况来使用合适的功能代码。
刚刚说到,很多用户会搞混内存区块和功能代码的概念。最主要一个原因是,很多从站设备的说明书里面只会写,地址要使用03功能码来读取,而在触摸屏里面,选择地址时是按内存区块来划分的。那么对modbus协议不熟悉的用户,就会误以为要选3区来进行通讯。

二、使用前的注意事项

内存区块与功能代码不是一个概念。03功能代码对应的是4区。

三、GP-Pro EX设置流程

  1. 进入【控制器/PLC】页面。【工程】-【系统设置】-【控制器/PLC】
  2. 设置控制器
    image.png
  3. 进入特定控制器设置
    image.png
  4. 设置从站的IP地址、端口号、字节高低顺序
    image.png
  5. 在一些特定情况下,需要修改功能码与读写范围
    image.png
    在这里,我们可以定义一个地址段中,所需要使用的功能代码(读/写),以及单次读取的数量
    image.png
  6. 设置完成

    四、画面中的地址输入

    在画面中输入地址时,下拉菜单中,0、1、3、4就是我们上面说的内存区块,常用的是0和4。
    image.png
    选项中的D3和D4中的D,代表Double Word,双字,也就是32位。如果我们要使用浮点数或者32位值时,就需要选择这些选项。

    五、常见问题

  7. 想不出来 (:ι」∠) 有问题就留言吧~