标签:
这是一个学习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 |
标签:
原文地址:http://www.cnblogs.com/tilv37/p/4209228.html