首页 > 代码库 > 简单Modbus协议数据源工具实现(一)WinForm
简单Modbus协议数据源工具实现(一)WinForm
这是一个学习C#、Winform的自我回顾过程,用来发现存在的不足,也为了推动自己继续学习。
大学通信专业毕业之后,进入了一家电力科技公司从事软件开发工作,主要用的是Delphi语言进行电力通信协议的上位机开发。因为上位机需要与下位机通信才好进行测试,而事实上没有那么多现成的装置给你借用调试,加上公司慢慢的开始推行C#/WPF来做一些定制软件,所以想学习一下C#,刚好现在也有一个自身的需求出现--上位机程序调试困难,所以就从最易入手的winform程序切入,慢慢的加深对于C#语言的理解。于是就打算做一个常见协议Modbus的数据源工具,于是就有了本文。
一、Modbus协议简介
{来自百度百科}
每个Modbus 数据包都由以下几个部分组成:
(1) 地址域
(2) 功能码域
(3) 数据域
(4) 校验域
地址域:0~247,0一般作为广播地址,1~247作为装置(下位机)使用的地址号。
功能码:用来确认该包报文的具体功能。(常见03码、10码)
0x03 | 读寄存器 |
0x10 | 写寄存器 |
0x05 | 遥控操作 |
读寄存器数据包格式 | 响应格式 | ||
从站地址 | 1 字节 | 从站地址 | 1 字节 |
功能码 | 1 字节 | 功能码 | 1 字节 |
寄存器起始地址高位 | 1 字节 | 字节数n | 1 字节 |
寄存器起始地址低位 | 1 字节 | Data1 高位 | 1 字节 |
寄存器数量高位 | 1 字节 | Data1 低位 | 1字节 |
寄存器数量低位 | 1 字节 | …… |
|
|
| Datan/2 高位 | 1 字节 |
|
| Datan/2 低位 | 1 字节 |
CRC校验码低位 | 1 字节 | CRC低位 | 1 字节 |
CRC校验码高位 | 1 字节 | CRC高位 | 1 字节 |
写寄存器数据包格式 | 响应格式 | ||
从站地址 | 1 字节 | 从站地址 | 1 字节 |
功能码 | 1 字节 | 功能码 | 1 字节 |
寄存器起始地址高位 | 1 字节 | 寄存器起始地址高位 | 1 字节 |
寄存器起始地址低位 | 1 字节 | 寄存器起始地址低位 | 1 字节 |
寄存器数量高位 | 1 字节 | 寄存器数量高位 | 1 字节 |
寄存器数量低位 | 1 字节 | 寄存器数量低位 | 1 字节 |
字节数(n) | 1 字节 | CRC校验码低位 | 1 字节 |
Data1 高位 | 1 字节 | CRC校验码高位 | 1 字节 |
Data1 低位 | 1 字节 |
|
|
…… |
|
|
|
Data(n/2) 高位 | 1 字节 |
|
|
Data(n/2) 低位 | 1 字节 |
|
|
CRC校验码低位 | 1 字节 |
|
|
CRC校验码高位 | 1 字节 |
|
|
请求格式 | 响应格式 | ||
从站地址 | 0x11 | 从站地址 | 0x11 |
功能码 | 0x05 | 功能码 | 0x05 |
预置地址高 | 0 x 23 | 预置地址高 | 0 x 23 |
预置地址低 | 0 x 8C | 预置地址低 | 0 x 8C |
设置数据高 | 0 x FF | 设置数据高 | 0 x FF |
设置数据低 | 0x00 | 设置数据低 | 0x00 |
CRC 校验码低 | 44 | CRC 校验码低 | 44 |
CRC 校验码高 | C5 | CRC 校验码高 | C5 |
简单Modbus协议数据源工具实现(一)WinForm