常见通信协议的接口调试方法
版本号:1.0.1
发布时间:2012-2-4
1. Modbus
Modbus是一种工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Modbus协议是一个Master/Slave架构的协议。有一个节点是Master节点,其他使用Modbus协议参与通信的节点是Slave节点。Master节点类似Client/Server架构中的Client,Slave则类似Server。工业上Modbus协议的常见架构如下图所示。
1.1. 应用场合
Modbus协议主要用于测风塔数据实时读取、风机数据实时读取。将来有可能用于集控系统中,读取各类数据和进行远程控制。
在清三营、长风风电场,莱维赛尔的测风塔使用ModbusRTU协议与功率预测系统通信。
在向阳风电场,明阳的SCADA服务器通过ModbusTCP协议向功率预测系统提供各风机的实时运行数据。
在乌力吉、浩日格吐、马力、前后查台等风电场,赛风的测风塔使用ModbusRTUoverTCP协议与功率预测系统通信。
1.2. Modbus数据模型
在Slave和Master进行通信时,Slave会将其提供的变量映射到四张不同的表上,Master从表中相应位置读/写变量,就完成了数据获取或命令下达。这四张不同的表,称作Modbus数据模型(ModbusDataModel)。
为了理解方便,这里将四张表分别称作1位只读表、1位可读可写表、16位只读表、16位可读可写表。(类似电力通信国标中的遥信、遥控、遥测、遥调。)1位表用来映射单比特数据类型的变量,通常是布尔型变量;16位表用来映射双字节数据类型的变量,如int16、float16等,如果希望映射int32、float32等四字节变量,可以通过一次使用16位表中的两个位置来实现。只读表用来映射Master只能读取的变量;可读可写表用来映射Master既可读取、又可改写的变量。
1位只读表 | |||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... |
数据区域 (1个方格表示1bit) | ... | ||||||
1位可读可写表 | |||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... |
数据区域 (1个方格表示1bit) | ... | ||||||
16位只读表 | |||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... |
数据区域 (1个方格表示1bit) | ... | ||||||
16位可读可写表 | |||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... |
数据区域 (1个方格表示1bit) | ... | ||||||
windowsserver2012四个版本 | |||||||
例如,在某温度监视系统中,一部温度传感器与一台上位机通过Modbus总线进行通信,温度传感器是Server,上位机是Client。对温度传感器提供的变量做如下映射:
变量含义 | 数据类型 | 映射表 | 在映射表中的起始位置 | 高8位在前 | ||||||||
是否停止运行 | bool | 1位只读表 | 0 | - | ||||||||
有无故障 | bool | 1位只读表 | 2 | - | ||||||||
外部温度 | float32 | 16位只读表 | 1 | 否 | ||||||||
内部温度 | float32 | 16位只读表 | 3 | 否 | ||||||||
外部温度告警值 | float16 | 16位可读可写表 | 2 | 否 | ||||||||
内部温度告警值 | float16 | 16位可读可写表 | 4 | 否 | ||||||||
1位只读表 | ||||||||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... | |||||
数据区域 (1个方格表示1bit) | 是否停止运行 | 有无故障 | ... | |||||||||
1位可读可写表 | ||||||||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... | |||||
数据区域 (1个方格表示1bit) | ... | |||||||||||
16位只读表 | ||||||||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... | |||||
数据区域 (1个方格表示1bit) | 外部温度 | 内部温度 | ... | |||||||||
16位可读可写表 | ||||||||||||
变量地址 | 0 | 1 | 2 | 3 | 4 | 5 | ... | |||||
数据区域 (1个方格表示1bit) | 外部温度告警值 | 内部温度告警值 | ... | |||||||||
再次说明,1位只读表、1位可读可写表、16位只读表、16位可读可写表等名称是本文档为了方便读者理解自拟的,在Modbus协议规范中有它们的正式名称。另外,不同厂商的设备/软件说明书中,对这四张表的称呼又有不同。
1位只读表 | 1位可读可写表 | 16位只读表 | 16位可读可写表 | |
Modbus协议规范 | DiscretesInput | Coils | InputRegisters | HoldingRegisters |
BachmannPLC | Disc | Coils | Regs | HRegs |
SiemensPLC | InputCoil | OutputCoil | InputRegister | OutputRegister HoldingRegister |
1.3. ModbusRTU、ModbusTCP与ModbusRTUoverTCP
Modbus协议有很多种变体,最常见的是ModbusRTU、ModbusTCP和ModbusRTUoverTCP。
为了能从众多Slave中唯一地标识出希望与其通信的Slave,需要知道Slave的地址。不同的变体对Slave地址的描述方式不同。对于ModbusRTU、ModbusTCP和ModbusRTUoverTCP,其硬件接口与对Slave地址的描述方式如下表:
硬件接口 | 是否需要指定SlaveId | 是否需要指定IP地址与TCP端口 | 其他需要指定的参数 | |
ModbusRTU | 串口 | 是 | 否 | 通信端口、波特率、数据位、校验方式、停止位 |
ModbusTCP | 网口 | 否 | 是 | 无 |
ModbusRTUoverTCP | 网口 | 是 | 是 | 无 |
1.4. 调试工具与调试方法
ModbusPoll和ModbusSlave是ModbusTools系列软件中的两个工具软件,可运行在Windows2000/XP/Vista/7平台。ModbusPoll可用于测试从Slave中实时读取数据。ModbusSlave是一款Slave模拟软件,可用于模拟出一个假想的Slave设备。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论