ModBusTcp协议(一)

ModBusTcp协议

简介

  • Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP

  • Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。

  • 标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

  • Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。当主站不发送请求时,从站不会自己发出数据,从站和从站之间不能直接通讯。

  • Modbus协议是应用层(协议层)报文传输协议,它定义了一个与物理层无关的协议数据单元(PDU),即PDU=功能码+数据域,功能码1byte,数据域不确定。

  • Modbus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU,例如modbus tcp/ip------ ADU=MBAP+ADU。

通讯方式

  • 以太网:对应的通信模式是Modbus TCP/IP
  • 异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTUModbus ASCII
  • 高速令牌传递网络:对应的通信模式是Modbus PLUS
modbus tcp/ip通信方式
  • Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。
    • 主站请求:功能码+数据
    • 从站正常响应:请求功能码+响应数据
    • 从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型
    • 注意:需要超时管理机制,避免无期限的等待可能不出现的应答
  • IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。
通信过程
  • connect 建立TCP连接
  • 准备Modbus报文
  • 使用send命令发送报文
  • 在同一连接下等待应答
  • 使用recv命令读取报文,完成一次数据交换
  • 通信任务结束时,关闭TCP连接

报文格式

  • Modbus协议的报文(或帧)的基本格式是:表头 + 功能码 + 数据区 + 校验码
  • 对于Modbus TCP而言,主站通常称为Client,从站称为Server;而对于Modbus RTU和Modbus ASCII来说,主站是Master,从站是Slave。
  • ModbusTCP的数据帧可分为两部分:ADU=MBAP+PDU = MBAP + 功能码 + 数据域,MBAP 7byte,功能码1byte,数据域不确定,由具体功能决定。
报文头MBAP
  • MBAP为报文头,长度为7字节,组成如下:

  • 事务处理标识协议标识长度单元标识符
    2字节2字节2字节1字节
  • 内容解释
    事务处理标识报文的序列号,每次通信之后就要加1以区别不同的通信数据报文
    协议标识符00 00表示ModbusTCP协议
    长度数据长度,单位为字节
    单元标识符可以理解为设备地址
帧结构PDU
  • PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。
功能码
  • Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。

  • 对象含义
    线圈PLC的输出位,开关量,在Modbus中可读可写
    离散量PLC的输入位,开关量,在Modbus中只读
    输入寄存器PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读
    保持寄存器PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写
  • 代码中文名称英文名位操作/字操作操作数量
    01读线圈状态READ COIL STATUS位操作单个或多个
    02读离散输入状态READ INPUT STATUS位操作单个或多个
    03读保持寄存器READ HOLDING REGISTER字操作单个或多个
    04读输入寄存器READ INPUT REGISTER字操作单个或多个
    05写线圈状态WRITE SINGLE COIL位操作单个
    06写单个保持寄存器WRITE SINGLE REGISTER字操作单个
    15写多个线圈WRITE MULTIPLE COIL位操作多个
    16写多个保持寄存器WRITE MULTIPLE REGISTER字操作多个
  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Modbus TCP 是一种通讯协议,它基于 Modbus 协议TCP/IP 协议Modbus 协议是一种串行通讯协议,用于在工业控制系统中传输数据。TCP/IP 协议则是一种网络协议,用于在计算机之间传输数据。 Modbus TCP 协议的格式如下: - 功能码:1 字节,用于指定数据的类型。 - 数据地址:2 字节,用于指定数据的位置。 - 数据长度:2 字节,用于指定数据的长度。 - 数据:n 字节,用于传输数据。 Modbus TCP 协议的目的是通过使用 TCP/IP 协议在工业设备之间传输数据。它的应用范围很广,可用于工业自动化、楼宇自动化、电力系统等领域。 ### 回答2: 编写ModbusTCP协议包括以下步骤: 1. 确定通信协议ModbusTCP是基于TCP/IP协议栈的协议,因此需要首先使用TCP/IP协议栈建立通信连接。 2. 设计消息格式:ModbusTCP协议中,消息格式包括用于请求和响应的帧格式。请求帧包括功能码、起始地址和寄存器数量等信息,响应帧包括功能码、字节数和寄存器值等信息。 3. 实现功能码:根据Modbus协议规范,实现读取和写入寄存器的功能码。读功能码用于从设备中读取寄存器值,写功能码用于向设备中写入寄存器值。 4. 实现数据传输:使用TCP/IP协议栈提供的Socket接口,实现数据的传输。客户端向服务器发送请求帧,服务器接收请求帧后解析请求信息,执行相应操作并返回响应帧。 5. 错误处理:根据Modbus协议规范,实现错误处理机制。当发生错误时,响应帧中会包含错误码信息,客户端可以根据错误码进行相应处理。 6. 测试和调试:编写测试程序,对ModbusTCP协议进行测试和调试。通过发送请求帧并检查服务器返回的响应帧,验证协议的正确性和可靠性。 7. 文档和注释:为代码编写详细的注释,包括函数功能、参数说明等。编写ModbusTCP协议的文档,包括协议的设计思路、消息格式、功能码说明等内容,方便其他开发人员使用和理解。 总结:编写ModbusTCP协议需要熟悉TCP/IP协议栈、Modbus协议规范以及对编程语言的掌握。在实现协议时,需要注意消息格式、功能码的正确性以及错误处理机制。完成后,通过测试和调试,确保协议的正确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值