基于C#开发的MODBUS RTU通信协议封装包

根据传入的参数,创建 MODBUS RTU 实例:

基于C#开发的MODBUS RTU通信协议封装包概述

/// <summary>
/// 建立 MODBUS RTU 串口业务
/// String comnum  =     串口号
/// int buad      =      串口的波特率
/// int dataLen   =      数据长度
/// String chklen    =      检验位
/// String stoplen   =      停止位
/// </summary>
public ModbusRTU_Lib(String comnum,int buad,int dataLen,string chklen,string stoplen,int scantime)

 

添加一个 MODBUS RTU 扫描从站:

/// <summary>
/// 清除所有的从站列表
/// </summary>
public void clearAllModbusSalve()

/// <summary>
/// 删除扫描列表中的指定从站
/// </summary>
/// <param name="whichAddr"></param>
public void deletAllModbusSalve(int whichAddr)

清除创建的 MODBUS RTU 多从站扫描列表:

 

/// <summary>
/// 增加 MODBUS 从站扫描列表
/// </summary>
/// <param name="xDeviceMdEnty"></param>
public void addModbusSlaveScanList(DeviceMdEnty xDeviceMdEnty)

打开一个 MODBUS RTU 的通讯串口

/// <summary>
/// 打开串口
/// </summary>
/// <returns></returns>
public Boolean openUartOfModbus()

关闭串口

///<summary&

/// <summary>
/// 关闭串口
/// </summary>
/// <returns></returns>
public Boolean closeUartOfModbus()

启动 MODBUS RTU 的定时扫描业务

/// <summary>
/// 启动 MODBUS 扫描业务
/// </summary>
public void startModbusWork()

 

发送 MODBUS RTU 指令

发送数据
*
int slaveAddr = 从站地址
int addrTe = 读写的启始地址
int cmdTe = 功能码
int lenTe =读出数据长度
byte[] msgBuf = 待写入的数据的缓冲期,每个字占 2BYTE
int msgLen  = 写入的数据长度
return :
*   true = 已发送数据,false = 未发送
*
*********************************************************************/
/// <summary>
///
/// </summary>
public Boolean sendModbusMsg(int slaveAddr,int cmdTe, int addrTe, int lenTe, byte[]
msgBuf, int msgLen)

MODBUS RTU 的实例的回调方法,返回所有串口收到的数据

Result =  "E00";表示"创建串口失败:"
Result =  "E01";表示"串口号未设置:"
Result =  "E02";表示"停止位参数错误:"
Result =  "E03";表示"校验位参数错误:"
Result =  "F00";表示"校验位参数错误:"
Result =  "Y00";表示"创建串口成功:"
Result =  "M00";表示"接收到串口数据:"

声明关于事件的委托,参数为要回传的数据类型,串口接收数据

///<summary&

public delegate void ModbusRTU_EventHandler(string result, byte[] msg) ;

 

MODBUS RTU 的实例的回调方法,返回所有串口收到的数据且经过地址和校验码验证的

Result =  "AE0";表示"创建串口失败:"
Result =  "CE0";表示"串口号未设置:"
Result =  "DE0";表示"停止位参数错误:"
Result =  "D00";表示"接收到正确解析的串口数据:"
Result =  "D01";表示"功能码 0x01--正确应答数据! :"
Result =  "D02";表示"功能码 0x02--正确应答数据 !"
Result =  "D03";表示"功能码 0x03--正确应答数据 !"
Result =  "D04";表示"功能码 0x04--正确应答数据 !"
Result =  "D05";表示"功能码 0x05--正确应答数据 !"
Result =  "D06";表示"功能码 0x06--正确应答数据 !"
Result =  "D0F";表示"功能码 0x0F--正确应答数据 !"
Result =  "D10";表示"功能码 0x10--正确应答数据 !"

 

声明关于事件的委托,参数为要回传的数据类型,串口接收数据并 MODBUS 验证

public delegate void ModbusRTU_DecodeHandler(string result, byte[] msg) ;

 

publicdelegatev

建立 1 个 MODBUS RTU 从站的列表;

DLL 会根据设备数自动扫描;对于没有的功能,指定长度为 0 即可;如 16 入 16 出数字量模块则可指 定输入寄存器和保持寄存器长度为 0 

/// <summary>
/// 建立扫描列表
/// </summary>
/// <param name="SlaveAddr">设置当前从站的站号</param>
/// <param name="CoilLen">设置当前从站的输出线圈个数</param>        /// <param name="DiscLen">设置当前从站的输入数字量个数</param>      /// <param name="InputRegLen">设置当前从站的输入寄存器个数</param>  /// <param name="HoldingRegLen">设置当前从站的保持寄存器个数</param>
public DeviceMdEnty(int SlaveAddr,  int CoilLen,  int DiscLen,  int InputRegLen,  int
HoldingRegLen)

 

 

 

建立1个MODBUSRTU从站

 

基于C#开发的MODBUS RTU通信协议封装包¥6.99

基于C#开发的MODBUS RTU通信协议封装包插图星耀会员¥4.19
基于C#开发的MODBUS RTU通信协议封装包插图1璀璨会员¥5.59
曜钻会员免费
已付费?登录刷新
技术术语(共 7 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用二进制编码和CRC校验
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
波特率串行通信每秒传输符号数,Modbus RTU常用9600/19200
串口计算机与外部设备进行串行通信的物理接口
线圈Modbus位可读写数据,地址从00001开始
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Modbus编程开发 字数 2773 字 · 阅读约 7 分钟 更新 2023-08-18 永久链接 https://www.modbus.cn/%e5%9f%ba%e4%ba%8ec%e5%bc%80%e5%8f%91%e7%9a%84modbus-rtu%e9%80%9a%e4%bf%a1%e5%8d%8f%e8%ae%ae%e5%b0%81%e8%a3%85%e5%8c%85/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注