zoukankan      html  css  js  c++  java
  • Modbus通讯协议

    <ignore_js_op> 

    O1CN01P1wxTI1dCdw5nAeMO_!!85243700.jpg (287.43 KB, 下载次数: 0)

    下载附件  保存到相册

    2019-6-19 11:24 上传

     


    Modbus通讯协议
    Modbus概述

    Modbus是由Modicon公司(现为施耐德电气的一个品牌)在1978年发明的,这是一个跨时代、里程碑式的网络协议,因为工业网络从此拉开了序幕。
        Modbus是全球第一个真正用于工业现场的总线协议,据不完全统计:截至到2004中,Modbus的节点安装数量已经超过了800万个,而且75%的产品为非施耐德产品,安装的地区遍及世界各地,可见其普及的程度,已经成为了事实上的协议标准。虽然已经走过了27个年头,Modbus今天仍然活跃在工业、建筑、基础设施等领域中。

    Modbus特点
    1.标准、开放:用户可以免费、放心地使用Modbus协议,不用交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种,而且在国内也有很多的用户支持和使用Modbus的产品。
    2.Modbus是面向消息的协议,可以支持多种电气接口,如:RS232、RS422、RS485等,还可以在多种介质上传送,如:双绞线、光缆、无线射频等。要说明的是:和很多的现场总线不同,它不用专用的芯片与硬件,完全采用市面上销售的标准部件! 这就保证了采用Modbus的产品造价最为低廉。
    3.Modbus协议的帧格式是最简单、最紧凑的协议,可以说:简单高效,通俗易懂。所以用户使用容易,厂商开发简单。

    Modbus应用协议
    Modbus是一种简单的客户机/服务器应用协议,客户机能够向服务器发送请求。服务器分析请求,处理请求,向客户机发送应答

    <ignore_js_op> 
    Modbus主站/从站协议原理
    Modbus 串行链路协议是一个主-从协议。 
    在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为  247)连接于同一个串行总线。Modbus 通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。
    子节点之间从不会互相通信。
    主节点在同一时刻只会发起一个 Modbus 事务处理。

    Modbus通信模式
    在单播模式,主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个'应答')。在这种模式,一个Modbus事务处理包含2个报文:一个来自主节点的请求,一个来自子节点的应答。每个子节点必须有唯一的地址(1到247),这样才能区别于其它节点被独立的寻址。
        在广播模式,主节点向所有的子节点发送请求。对于主节点广播的请求子节点没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写功能。地址0是专门用于表示广播数据的。

    串行传输模式-RTU模式

    在 RTU 模式,报文帧由时长至少为 3.5 个字符时间的空闲间隔区分
    <ignore_js_op> 
    整个报文帧必须以连续的字符流发送。如果两个字符之间的空闲间隔大于1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃

    <ignore_js_op> 
    串行链路上的Modbus帧结构
    <ignore_js_op> 
    地址域只含有子节点地址,该地址必须在Modbus串行总线上唯一,Modbus主节点没有地址。 
    功能码指明服务器要执行的动作,遵从Modbus协议规范。
    错误检验域是对报文内容执行"冗余校验"的计算结果。
    根据不同的传输模式(RTU or ASCII)使用两种不同的计算方法,CRC或者LRC

    Modbus 常用功能码
    <ignore_js_op> 
    读保持寄存器
    发送命令:
    [设备地址][命令号03][起始寄存器地址高8位][低8位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高8位]
    例:[11][03][00][6B][00][03][CRC低][CRC高]

    设备响应:
    [设备地址][命令号03][返回的字节个数][数据1][数据2]...[数据n]
    [CRC校验的低8位] [CRC校验的高8位]
    例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]

    写单个寄存器
    发送命令:
    [设备地址][命令号06][需下置的寄存器地址高8位][低8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8位]
    例:[11][06][00][01][00][03][CRC低][CRC高]

    设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

  • 相关阅读:
    .net framework缓存遍历
    R语言中统计数据框所有项中的并集
    R语言中在数据框中批量替换指定项
    R语言中 %in%用法
    windows中如何查看端口占用情况、端口是否开启
    R语言中rbind函数和cbind的用法
    linux系统shell实现统计 plink文件基因频率
    linux 系统中实现列转行 及 行转列
    linux系统中向行末添加换行符
    R语言中实现方差和标准差
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11332733.html
Copyright © 2011-2022 走看看