连接协议-ModBus

更新时间:2018-07-13 19:13:16

背景概要

概述

modbus 是工业现场较为常用的总线协议,是应用层报文传输协议(OSI模型第7层),支持1对1传输、1对多传输。支持的模式有:modbus-TCP、modbus-RTU、modbus-ASCII。其中modbus-TCP是基于TCP/IP之上的应用协议。modbus-RTU、modbus-ASCII 是串口协议,主要的电气接口有:RS232、RS485。

通信栈

image | left

物理连接拓扑关系

image | left

物模型

  • 样例
{
    "properties": [
        {
            "identifier": "YellowLight",
            "function": [
                "(0x01)ReadCoils",
                "(0x0F)WriteMultipleCoils"
            ],
            "args": {
                "startAddress": 80,
                "quantity": 1
            },
            "dataType": {
                "type": "enum",
                "specs": {
                    "0": "light off",
                    "1": "light on"
                }
            },
            "pollingTime": 2000,
            "triggerType": 1,
            "desc": "control the light"
        },
        {
            "identifier": "A_voltage",
            "function": [
                "(0x04)ReadInputRegisters"
            ],
            "args": {
                "startAddress": 30,
                "quantity": 1
            },
            "dataType": {
                "type": "float",
                "specs": {
                    "unit": "℃",
                    "min": 0,
                    "max": 20
                }
            },
            "encodeExpress": "",
            "decodeExpress": "swap16(A)",
            "scale": 1,
            "pollingTime": 3000,
            "triggerType": 1,
            "desc": "return the value of the specified property"
        },
        {
            "identifier": "airConditionerTemp",
            "function": [
                "(0x04)ReadInputRegisters",
                "(0x06)WriteSingleRegister"
            ],
            "args": {
                "startAddress": 63,
                "quantity": 1
            },
            "dataType": {
                "type": "float",
                "specs": {
                    "unit": "℃",
                    "min": 0,
                    "max": 20
                }
            },
            "encodeExpress": "",
            "decodeExpress": "",
            "scale": 1,
            "pollingTime": 3000,
            "triggerType": 1,
            "desc": "return the value of the specified property"
        }
    ],
    "services": [],
    "events": []
}

样例说明

  • 属性集(properties): 主要是描述设备属性的集合:

  • identifier:属性名称。

  • function: 功功能码,包含“读功能码”、”写功能码”。目前的功能码有:

功能码 支持
(0x01)ReadCoils
(0x02)ReadDiscreteInputs
(0x03)ReadHoldingRegisters
(0x04)ReadInputRegisters
(0x05)WriteSingleCoil ×
(0x06)WriteSingleRegister
(0x0F)WriteMultipleCoils
(0x10)WriteMultipleregisters ×
  • args:参数信息,包含“起始地址”、“个数”。

  • dataType:与TMP保持一致

  • encodeExpress: 编码表达式,指将人能识别的数据转换为modbus数据,入参用A、B、C、D表示。目前支持的运算符和函数:附件-1

  • decodeExpress: 解码表达式,指将modbus数据转换为人能识别的数据,入参用A、B、C、D表示。目前支持的运算符和函数:附件-1

  • scale:表示数据精度,如0.1,scale是1。

  • pollingTime :采集间隔, 单位是ms。

  • triggerType :对采集后的数据的上报方式,目前有“按时上报”:1和“变更上报”:2。

  • description :对本规则进行简单的描述。用户通过这些基本的描述就能明白这条“规则”的功能和作用。

  • 方法集(services): 无

  • 事件集(events): 无

驱动配置信息

{
    "connect": [
        {
            "protocol": "ModbusTCP",
            "ip": "localhost",
            "port": 15020,
            "slaveId": 255,
            "refProductConfig": "modbus_productConfig.json",
            "deviceId": "2131432543543543"
        },
        {
            "protocol": "ModbusTCP",
            "ip": "localhost",
            "port": 15021,
            "slaveId": 255,
            "refProductConfig": "modbus_productConfig.json",
            "deviceId": "2131432543543544"
        },
        {
            "protocol": "ModbusTCP",
            "ip": "localhost",
            "port": 15022,
            "slaveId": 255,
            "refProductConfig": "modbus_productConfig.json",
            "deviceId": "2131432543543545"
        },
        {
            "protocol": "ModbusTCP",
            "ip": "localhost",
            "port": 15023,
            "slaveId": 255,
            "refProductConfig": "modbus_productConfig.json",
            "deviceId": "2131432543543546"
        },
        {
            "protocol": "ModbusRTU",
            "serialPort": "/dev/tty0", "baudRate": 9600, "byteSize": 8, "parity": "N","stopBits": 1,
            "slaveId": 1 , "refProductConfig": "modbus_productConfig.json",
            "deviceId":"2131432543543547"
        }
    ]
}
  • deviceConfig字段解说
protocol
desc
ModbusTCP
ip: IP地址 port: 端口号 slaveId:子设备的从地址 refProductConfig:关联productConfig文件 deviceId: 子设备唯一的标识信息
ModbusRTU/ModbusASCII
serialPort:串口号 baudRate:波特率 byteSize: 字长(The number of bits in a byte of serial data. This can be one of5, 6, 7, or 8) parity:奇偶校验位('E': 偶校验, 'O':奇校验, 'N': 无校验) stopBits:停止位(The number of bits sent after each character in a message to indicate the end of the byte. This defaults to 1) slaveId: 子设备的从地址 refProductConfig:关联productConfig文件 deviceId: 子设备唯一的标识信息

附件-1

运算符 描述 备注
+ 加法运算符 N/A
- 减法运算符 N/A
* 乘法运算符 N/A
/ 除法运算符 N/A
函数 描述 备注
htof() 16进制转换为浮点 N/A
ftoh() 浮点转换为16进制 N/A
swap16() 把原始数据的前后8个bits互换(byte1byte2 -> byte2byte1) N/A
swap32() 把原始数据的前后16个bits互换(byte1byte2byte3 byte4 ->byte3byte4byte1 byte2) N/A
  • 说明:
    • 1、运算符可以和函数一起混合使用,如:(1 + swap16(A))* 3
    • 2、当有多个参数时,可依次用A、B、C、D来表示。目前最多支持四个入参。

results matching ""

    No results matching ""