C#中的Modbus协议

协议介绍

关于Modbus协议:

Modbus协议是MODICON(莫迪康)(现施耐德品牌)在1979年开发的,是全球第一个真正用于现场的总线协议;Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,可以实现控制器相互之间、控制器经由网络和其实设备之间的通信。

Modbus特点

  • 标准开放、公开发表、无版税要求、无许可证费(没有费用)

  • 支持多种电气接口(RS232、RS422、RS485、RJ45);各种介质传输(双绞线、网线)

  • 格式简单、紧凑、通俗易懂,容易上手(好用)

Modbus总线通信环境

基本通信结构

从机编码

Modbus协议下的数据存储

数据存储中的位、字节、字、双字,C#中的数据显示:数据类型、显示格式

内存分区与功能

存储区 对象类型 访问类型(针对程序) 存储区标识 说明
线圈状态 单个bit 读写 0XXXX 通过应用程序改变这种类型数据
输入线圈 单个bit 只读 1XXXX I/O系统提供这种类型数据
输入寄存器 16-位字 只读 3XXXX I/O系统提供这种类型数据
保持寄存器 16-位字 读写 4XXXX 通过应用程序改变这种类型数据

操作存储区的命令:

功能码:01、02、03、04、05、06、15、16

Modbus功能码补充说明

功能码 名称 功能
01 读线圈状态 读位(读N个bit)---读从机线圈寄存器,位操作
02 读输入离散量 读位(读N个bit)---读离散输入寄存器,位操作
03 读多个寄存器 读整型、字符型、状态字、浮点型(读N个words)---读保持寄存器,字节操作
04 读输入寄存器 读整型、状态字、浮点型(读N个words)---读输入寄存器,字节操作
05 写单个线圈 写位(写一个bit)---写线圈寄存器,位操作
06 写单个保持寄存器 写整型、字符型、状态字、浮点型(写一个word)---写保持寄存器,字节操作
07 读取异常状态 取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态
08 回送诊断校验 把诊断校验报文送从机,以对通信处理进行评鉴
09 编程(只用于484) 使主机模拟编程器作用,修改PC从机逻辑
0A 控询(只用于484) 可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
0B 读取事件计数 可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
0C 读取通讯事件记录 可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误
0D 编程(184/384/484/584) 可使主机模拟编程器功能修改PC从机逻辑
0E 探询(184/384/484/584) 可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
0F 写多个线圈 可以写多个线圈---强置一串连续逻辑线圈的通断
10 写多个保持寄存器 写多个保持寄存器---把具体的二进制值装入一串连续的保持寄存器
11 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态
12 (884和MICRO84) 可使主机模拟编程功能,修改PC状态逻辑
13 重置通信链路 发生非可修改错误后,是从机复位于已知状态,可重置顺序字节
14 读取通用参数(584L) 显示扩展存储文件中的数据信息
15 写入通用参数(584L) 把通用参数写入扩展存储文件
16~40 保留做扩展功能备用
41~48 保留以备用户功能所用 留作用户功能的扩展编码
49~77 非法功能
78~7F 保留 留作内部作用
80~FF 保留 用于异常应答

Modbus通信方式与分类

串口 RS485(一主多从):不同的报文格式:ModbusAscii(ASCII字符方式进行发送)、ModbusRTU(RemoteTerminal Unit)

以太网(TCP点对点):ModbusTCP、ModbusUDP 报文格式一样 RTU over TCP 以TCP的方式发送RTU的报文

其他连接方式:设备方支持ModbusRTU

相关推荐
向宇it2 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九鼎科技-Leo3 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Heaphaestus,RC4 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
baivfhpwxf20234 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#
直裾4 小时前
Scala全文单词统计
开发语言·c#·scala
ZwaterZ6 小时前
vue el-table表格点击某行触发事件&&操作栏点击和row-click冲突问题
前端·vue.js·elementui·c#·vue
ZwaterZ8 小时前
el-table-column自动生成序号&&在序号前插入图标
前端·javascript·c#·vue
SRC_BLUE_1710 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less
yngsqq11 小时前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift
Zԅ(¯ㅂ¯ԅ)11 小时前
C#桌面应用制作计算器进阶版01
开发语言·c#