高级检索

留言板

尊敬的读者、作者、审稿人, 关于本刊的投稿、审稿、编辑和出版的任何问题, 您可以本页添加留言。我们将尽快给您答复。谢谢您的支持!

姓名
邮箱
手机号码
标题
留言内容
验证码

跨嵌入式平台的Modbus/TCP协议库函数实现

程阳洁 秦帆 徐永红 何小鹏 代锴垒 李璐 郑晓

程阳洁, 秦帆, 徐永红, 何小鹏, 代锴垒, 李璐, 郑晓. 跨嵌入式平台的Modbus/TCP协议库函数实现[J]. 核动力工程, 2022, 43(4): 136-142. doi: 10.13832/j.jnpe.2022.04.0136
引用本文: 程阳洁, 秦帆, 徐永红, 何小鹏, 代锴垒, 李璐, 郑晓. 跨嵌入式平台的Modbus/TCP协议库函数实现[J]. 核动力工程, 2022, 43(4): 136-142. doi: 10.13832/j.jnpe.2022.04.0136
Cheng Yangjie, Qin Fan, Xu Yonghong, He Xiaopeng, Dai Kailei, Li Lu, Zheng Xiao. Realization of Modbus/TCP Protocol Library Functions Across Embedded Platforms[J]. Nuclear Power Engineering, 2022, 43(4): 136-142. doi: 10.13832/j.jnpe.2022.04.0136
Citation: Cheng Yangjie, Qin Fan, Xu Yonghong, He Xiaopeng, Dai Kailei, Li Lu, Zheng Xiao. Realization of Modbus/TCP Protocol Library Functions Across Embedded Platforms[J]. Nuclear Power Engineering, 2022, 43(4): 136-142. doi: 10.13832/j.jnpe.2022.04.0136

跨嵌入式平台的Modbus/TCP协议库函数实现

doi: 10.13832/j.jnpe.2022.04.0136
详细信息
    作者简介:

    程阳洁(1984—),女, 助理工程师,现主要从事核电厂装置仪表和控制系统总体设计研究,E-mail: sashaschan@163.com

  • 中图分类号: TL363

Realization of Modbus/TCP Protocol Library Functions Across Embedded Platforms

  • 摘要: 为了在不同的国产化中央处理器(CPU)上应用Modbus/TCP协议,需设计并实现跨平台协议库函数。根据Modbus应用协议规格说明书,在不依赖操作系统调用的前提下,对Modbus/TCP协议需支持的十大功能码进行跨平台库函数开发。库函数可被通讯应用层根据自身需求用于Modbus/TCP协议客户端和服务器端的设计和开发。经过在国产化CPU和嵌入式平台上进行二次开发,开发者调用本研究中的库函数能有效实现通过Modbus/TCP协议对反应堆冷却剂系统的稳压器压力水位及棒控棒位系统的功率调节进行数据采集。

     

  • 图  1  Modbus/TCP事务处理(正常)的过程

    Figure  1.  Modbus/TCP Transaction Processing (Normal) Process     

    图  2  Modbus/TCP事务处理(异常)的过程

    Figure  2.  Modbus/TCP Transaction Processing (Abnormal) Process    

    图  3  测试硬件环境

    Figure  3.  Test Hardware Environment

    图  4  CPU作为Modbus/TCP客户端

    Figure  4.  CPU as Modbus/TCP Client

    图  5  CPU读写保持寄存器的请求报文

    Figure  5.  Request Message for CPU Read-write Holding Register      

    图  6  经过CPU写动作后的Modbus Slave状态

    Figure  6.  Modbus Slave Status after CPU Write Action

    图  7  CPU收到读写保持寄存器的正常响应报文

    Figure  7.  CPU Receiving Normal Response Message from the Read-write Holding Register

    图  8  CPU 收到读写保持寄存器的异常响应报文

    Figure  8.  CPU Receiving Exception Response Message from the Read-write Holding Register

    图  9  CPU作为Modbus/TCP服务器端

    Figure  9.  CPU as Modbus/TCP Server

    图  10  Modbus Poll读写保持寄存器设置

    Figure  10.  Modbus Poll Read-write Holding Register Setting

    图  11  CPU收到读写保持寄存器的请求报文

    Figure  11.  CPU Receiving Request Message from Read-write Holding Register

    图  12  CPU 反馈读写保持寄存器的响应报文

    Figure  12.  CPU Feed Backing Response Message from Read-write Holding Register

    图  13  CPU反馈异常响应报文

    Figure  13.  CPU Feed Backing Exception Response Message

    图  14  人-机交互界面中压力水位和功率调节数据

    Figure  14.  Pressure and Water Level Data as Well as Power Regulation Data Show in HMI

    表  1  MBAP

    Table  1.   MBAP

    字节
    序号
    字段名说明请求时响应时
    0Trans.
    ID
    传输标识(Hi Modbus请求/响
    应事务的标识符
    生成从请求报
    文中复制
    1传输标识(Lo
    2Prot.
    ID
    协议标识(Hi)0为Modbus协议生成从请求报
    文中复制
    3协议标识(Lo)
    4Length字节长度(Hi) 字节序号6开始
    及之后的字节数量
    生成重新生成
    5字节长度(Lo)
    6Unit ID单元标识符 串行链路或其他
    总线上连接的远程
    从站识别码
    生成从请求报
    文中复制
      注:①Hi—高地址字节;②Lo—低地址字节;③0—Modbus/TCP协议在网络应用层协议号
    下载: 导出CSV

    表  2  0x01/ 0x02功能码请求/响应PDU结构

    Table  2.   0x01/ 0x02 Function Code Requesting / Responding PDU Structure

    字节
    序号
    请求报文正常响应报文异常响应报文
    7功能码功能码功能码+0x80
    8读开始地址(Hi)字节数(N异常码
    9读开始地址(Lo)线圈/离散
    输入状态
    10 读线圈/离散输入
    个数(Hi)
    11 读线圈/离散输入
    个数(Lo)
    $\cdots $
    9+N−1
      注:①N=线圈(或离散输入)个数/8,如果余数为0,则N=N+1;②线圈/离散输入个数范围:1~2000;③“—”表示无此项,下同
    下载: 导出CSV

    表  3  0x03/0x04功能码请求/响应PDU格式

    Table  3.   0x03/0x04 Function Code Requesting / Responding PDU Format

    字节
    序号
    请求报文正常响应
    报文
    异常响应
    报文
    7功能码功能码功能码+0x80
    8读开始地址(Hi)字节数(N异常码
    9读开始地址(Lo)输入/保持
    寄存器值
    10 读输入/保持寄存
    器个数(Hi)
    11 读输入/保持寄存
    器个数(Lo)
    $\cdots $
    9+N−1
      注:①N=寄存器个数×2;②寄存器个数范围:1~125
    下载: 导出CSV

    表  4  0x05/0x06功能码请求/响应PDU格式

    Table  4.   0x05/0x06 Function Code Requesting / Responding PDU Format

    字节
    序号
    请求报文正常响应报文异常响应报文
    7功能码功能码功能码+0x80
    8写开始地址(Hi)写开始地址(Hi)异常码
    9写开始地址(Lo)写开始地址(Lo)
    10 写线圈/保持寄存
    器值(Hi
     写线圈/保持寄存
    器值(Hi)
    11 写线圈/保持寄存
    器值(Lo)
     写线圈/保持寄存
    器值(Lo)
      注:①待写线圈值只能为0xFF00或0x0000,分别表示ON或OFF;待写保持寄存器值范围为0x0000~0xFFFF
    下载: 导出CSV

    表  5  0x0F/0x10功能码请求/响应PDU格式

    Table  5.   0x0F/0x10 Function Code Requesting / Responding PDU Format

    字节
    序号
    请求报文正常响应报文异常响应
    报文
    7功能码功能码功能码+0x80
    8写开始地址(Hi)写开始地址(Hi)异常码
    9写开始地址(Lo)写开始地址(Lo)
    10 写线圈/保持寄存
    器个数(Hi)
     写线圈/保持寄存
    器个数(Hi)
    11 写线圈/保持寄存
    器个数(Lo)
     写线圈/保持寄存
    器个数(Lo)
    12字节数(N
    13线圈状态/寄存器值
    13+N−1
      注:①0x0F:N=线圈个数/8,如果余数为0,则N=N+1;单个报文可写线圈个数:1~1968;0x10:N=寄存器个数×2;单个报文可写寄存器个数:1~123
    下载: 导出CSV

    表  6  0x16功能码请求/响应PDU格式

    Table  6.   0x16 Function Code Requesting / Responding PDU Format

    字节
    序号
    请求报文正常响应报文异常响应报文
    7功能码功能码功能码+0x80
    8写开始地址(Hi)写开始地址(Hi)异常码
    9写开始地址(Lo)写开始地址(Lo)
    10And掩码(Hi)And掩码(Hi)
    11And掩码(Lo)And掩码(Lo)
    12Or掩码(Hi)Or掩码(Hi)
    13Or掩码(Lo)Or掩码(Lo)
      注:①And—与运算;②Or—或运算
    下载: 导出CSV

    表  7  0x17功能码请求/响应报文格式

    Table  7.   0x17 Function Code Requesting / Responding Message Format

    字节
    序号
    请求报文正常响应报文异常响应报文
    7功能码功能码功能码+0x80
    8读开始地址(Hi)字节数(M异常码
    9读开始地址(Lo)寄存器值
    10读寄存器个数(Hi)
    11读寄存器个数(Lo)
    12写开始地址(Hi)
    13写开始地址(Lo)
    14写寄存器个数(Hi)
    15写寄存器个数(Lo)
    16字节数(N)
    17待写寄存器值
    17+N−1
    9+M−1
      注:①N=写寄存器个数×2;②M=读寄存器个数×2
    下载: 导出CSV

    表  8  异常码描述

    Table  8.   Exception Code Description

    异常码名字描述
    01 非法功能码  服务器端设备不支持此功能码
    02 非法数据地址  客户端请求的地址非法
    03 非法数据  客户端请求的数量/欲写入的数据
    非法,或数量与字节数不匹配
    04 服务器端故障  服务器端设备出现未知错误等
    下载: 导出CSV

    表  9  服务器端寄存器类型所支持的功能码

    Table  9.   Function Codes Supported by Server-side Register Types     

    服务器端寄存器类型所支持的功能码
    线圈状态0x01/0x05/0x0F
    离散输入状态0x02
    保持寄存器0x03/0x06/0x10/0x16/0x17
    输入寄存器0x04
    下载: 导出CSV

    表  10  库函数

    Table  10.   Library Functions

    库函数名称作用
    InitModbusSlave对服务器端进行初始化工作
    ReadCoilQuery客户端读取线圈的状态
    ReadDiscreteInputsQuery客户端读取离散量输出的状态
    ReadHoldingRegisterQuery客户端读取保持寄存器值
    ReadInputRegisterQuery客户端读取输入寄存器值
    WriteSingleCoilQuery客户端写单个线圈值
    WriteSingleRegisterQuery客户端写单个保持寄存器值
    WriteMultipleCoilQuery客户端写多个线圈值
    WriteMultipleRegisterQuery客户端写多个保持寄存器值
    MaskWriteRegisterQuery客户端使用掩码写保持寄存器
    ReadWriteRegisterQuery客户端连续读/写多个保持寄存器
    HandleAllResponse客户端处理响应并提取出数据
    HandleAllQuery服务器端对请求进行处理并传出响应报文
    下载: 导出CSV

    表  11  CAN协议所获取的原始数据

    Table  11.   Raw Data Obtained by CAN Protocol

    反应堆功率调节器反应堆压力水位调节器
    运行工况非法值堆运行状态运行
    手动/自动手动稳压器压力宽/MPa0
    参考平均温度/℃240.00稳压器压力窄/MPa0
    高选平均温度/℃180.00稳压器水位宽/cm0
    蒸汽总流量/(t·h−1)0稳压器水位窄/cm150.00
    蒸汽压力/MPa0参考水位/cm250.00
    高选核功率/%满功率(FP)0
    需求功率/%FP42.00
    下载: 导出CSV
  • [1] 束国刚,上官斌,何大波. 核电设备国产化推进工作实践[J]. 电力技术经济,2009, 21(3): 7-12. doi: 10.3969/j.issn.1674-8441.2009.03.002
    [2] 庞宇翔,谢大蓉,朱毅明. Modbus通信协议在300MW核电站计算机系统中的设计与应用[J]. 核科学与工程,2009, 29(4): 371-378+384. doi: 10.3321/j.issn:0258-0918.2009.04.013
    [3] 翁建年,张浩,彭道刚,等. 基于嵌入式ARM的Modbus/TCP协议的研究与实现[J]. 计算机应用与软件,2009, 26(10): 36-38+68. doi: 10.3969/j.issn.1000-386X.2009.10.012
    [4] 柳青. 嵌入式系统中Modbus/TCP协议栈的设计和实现[J]. 机电产品开发与创新,2020, 33(6): 12-14. doi: 10.3969/j.issn.1002-6673.2020.06.004
    [5] 宋潇潇,林小峰,宋春宁,等. 基于IEC标准的嵌入式控制器的MODBUS通信[J]. 计算技术与自动化,2007, 26(1): 53-55. doi: 10.3969/j.issn.1003-6199.2007.01.014
    [6] MODBUS application protocol specification V1. 1b3[EB/OL]. (2012-4-26)[2021-04-02].https://modbus.org/specs.php.
    [7] MODBUS messaging on TCP/IP implementation guide V1.0[EB/OL]. (2006-10-24)[2021-04-02].https://modbus.org/specs.php.
  • 加载中
图(14) / 表(11)
计量
  • 文章访问数:  527
  • HTML全文浏览量:  173
  • PDF下载量:  44
  • 被引次数: 0
出版历程
  • 收稿日期:  2021-06-21
  • 修回日期:  2021-07-08
  • 刊出日期:  2022-08-04

目录

    /

    返回文章
    返回