modbus是什么玩意儿的 C#实现ModbusRTU读取线圈状态功能0x01

1 篇文章 1 订阅

MODBUS 的基本分类:
通过串口传输:Modbus RTU / Modbus ASCII
通过网口传输:Modbus TCP / Modbus UDP

Modbus RTU:

功能码:

  • 0x01 读线圈状态
  • 0x02 读输入线圈(只读)
  • 0x03 读保持型寄存器
  • 0x04 读输入寄存器

存储区分成四个寄存器:

  • 线圈状态(可读可写)
  • 输入线圈(只读)
  • 保持型寄存器(可读可写)
  • 输入寄存器(只读)

读线圈消息帧格式 功能码: 0x01
请求格式:

从站地址功能码起始地址读取长度CRC校验
1byte1byte2byte2byte2byte

请求的从站地址若为0,则为广播模式,从站不做响应;240以后的保留。

响应格式:

从站地址功能码字节数输出状态7-0输出状态15-8CRC校验
1byte1byte1byte1byte1byte2byte

1byte = 8bit :0000 0000

虚拟端口:

在这里插入图片描述

从站(Slave)配置:菜单栏Setup进入Slave Definition:

从站号(Slave ID )、功能码(Function)、起始地址(Address)、读取数量(Quantity)
在这里插入图片描述
从站(Slave)连接到端口2(COM2):
在这里插入图片描述

主站(Poll)配置菜单栏的Setup进入Read/Write Definition
读写的从站ID(Slave ID)、功能码(Function)、起始地址(Address)、数量(Quantity)、读取/扫描速率(Scan Rate,1000ms即为每秒读取一次)
在这里插入图片描述
主站Poll连接到串口1(COM1):在这里插入图片描述
配置好以后:主站Poll读取了从站Slave的数据:
在这里插入图片描述

主站取出报文分析:在这里插入图片描述
请求:
01 01 00 00 00 0A BC 0D

从站地址功能码起始地址读取长度CRC校验
1byte1byte2byte2byte2byte

01 从站地址SlaveID
01 功能码 Function:读取线圈状态
00 00 起始地址
00 0A 读取长度 即为十进制的10
BC 0D CRC校验

响应:
01 01 02 0E 00 BD 9C

从站地址功能码字节数输出状态7-0输出状态15-8CRC校验
1byte1byte1byte1byte1byte2byte

01 从站地址SlaveID
01 功能码 Function:读取线圈状态
02 字节数
0E 输出状态7-0,即为 二进制的 0000 1110
00 输出状态15-8,即为二进制的 0000 0000
BD 9C CRC校验

0000 1110 与 0000 0000 互换位置:
0000 0000 0000 1110 ,从后往前读:
0111 0000 0000 0000 ,即为Slave的数据(10bit以后自动补0
在这里插入图片描述

代码实现主站(环境为.NET 4.8):
在这里插入图片描述
代码中配置了主站连接的串口为COM1,对串口的Write方法打断点进行调试
从站配置串口COM2
在这里插入图片描述
最后:从站成功取到数据报文。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

asjodnobfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值