简单Modbus协议数据源工具实现(一)WinForm

这是一个学习C#、Winform的自我回顾过程,用来发现存在的不足,也为了推动自己继续学习。

大学通信专业毕业之后,进入了一家电力科技公司从事软件开发工作,主要用的是Delphi语言进行电力通信协议的上位机开发。因为上位机需要与下位机通信才好进行测试,而事实上没有那么多现成的装置给你借用调试,加上公司慢慢的开始推行C#/WPF来做一些定制软件,所以想学习一下C#,刚好现在也有一个自身的需求出现--上位机程序调试困难,所以就从最易入手的winform程序切入,慢慢的加深对于C#语言的理解。于是就打算做一个常见协议Modbus的数据源工具,于是就有了本文。

一、Modbus协议简介

  {来自百度百科} 

  Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。

  ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。

  ModBus网络只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。

二、Modbus协议特点

  {来自百度百科} 

  (1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。

  (2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。

  (3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

三、Modbus数据包结构描述  

  每个Modbus 数据包都由以下几个部分组成:

  (1) 地址域

  (2) 功能码域

  (3) 数据域

  (4) 校验域

  

  地址域:0~247,0一般作为广播地址,1~247作为装置(下位机)使用的地址号。

  功能码:用来确认该包报文的具体功能。(常见03码、10码)

0x03   读寄存器
0x10 写寄存器
0x05 遥控操作

  数据域:Modbus 数据域长度不定,依据其具体功能而定。

  校验域:CRC16校验方法,2个字节长度。

四、串口、以太口Modbus报文

  串口下:ModbusRTU

  以太网:ModbusRTU,报文格式为:[事务元标识符(2字节)]+[协议标识(2字节)]+[长度(2字节)]+ModbusRTU-CRC校验(2字节)

  

  总而言之,ModbusTCP比ModbusRTU报文,多了6个字节的报文头,少了末尾的2个字节的CRC校验

  以下主要以ModbusRTU说明:

  0x03码


读寄存器数据包格式


响应格式


从站地址


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 字节

  0x10码

  


写寄存器数据包格式


响应格式


从站地址


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 字节

0x05码


请求格式


响应格式


从站地址


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

时间: 2024-09-30 09:36:49

简单Modbus协议数据源工具实现(一)WinForm的相关文章

基于AVR128的简单Modbus协议实现

Modbus通讯协议是由Modicon公司在1979年开发的,应用于工业现场控制的总线协议.Modbus通讯系统包括带有可编程控制的芯片节点和公共传输线组成,其目的是用于多节点数据的采集和监控.Modbus协议采用主从模式,通讯系统中有一个主机对多个节点从机进行监控,从机节点最多支持247个.每个从机均有自己独立的从机地址,而且改地址能够被主机识别. 能够支持Modbus协议的通讯系统有RS-232,RS-422,RS-485等.同时Modbus协议具有标准.开放.免费.帧格式简单等特点而被广大

ONVIF协议测试工具的简单使用(一)

最近开始学习Onvif协议了.在这里记录下学习过程中的点点收获. ********************************************************** 一.检测局域网内的设备是否支持Onvif协议 1.安装ONVIF Test Tool 工具 我用的是Test_Tool_v13_06版本的.如果PC上没有装.NET Framework 3.5的话,会提示你先安装.NET Framework 3.5. 2.ONVIF Test Tool的使用 打开该软件,选择本机的

Modbus RTU 通信工具设计(转)

Modbus RTU 通信工具设计 Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. ModBus 协议能够应用在不同类型的总线或网络.对应不同的总线或网络,Modbus 协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU.目前,Modbus 有下列三种通信方式: 1.    以太网,对应的通信模式是Modbus TCP. 2.

模拟Modbus协议问题

问题: 在嵌入式系统开发中,Modbus协议是工业控制系统中广泛应用的一种协议.本题用来简单模拟Modbus协议,只需根据条件生成符合该协议的数据帧,并解析所获取的数据.假设设备使用的协议发送数据格式如下:<SlaveAddress, 1 Byte> <Function, 1 Byte> <Start Address, 2 Bytes> <NumberofBytes, 2 Bytes> <Checksum, 2 Bytes>其中前四项将在输入条件

第一次编写简单的中间件测试工具(1) - 记一次新员工训练营

去年11月,我加入了N记,紧接着进入新员工训练营. 开始一次简单的中间件测试工具编写任务. 这次训练营体验给我的感觉就是:大公司不愧是大公司,这回我终于可以安心学点核心技术了. 任务: 这个训练营有两个任务,一是熟悉这边的敏捷开发流程:二是在训练营里做一定的编码,用python编写一个测试工具(桩,stub). 我们要做的这个工具,是用来测试我们一种通信设备(B)上运行的程序(某种中间件),这个工具模拟另一种通信设备(A),发送一些按特定协议编码的消息给另一种通信设备B,并能反编码设备B返回的消

经典的开源协议分析工具:Wireshark.

2. TCP/IP协议经典书是:W.Richard Stevens 著<TCP/IP详解>三卷书,卷1是协议,卷2是实现,卷3是TCP事务协议等.还有官方的协议文档:RFC当然也可以在网上下载电子书.经典的开源协议分析工具:Wireshark.简单的开源TCP/IP协议栈:LwIP,或者Linux 1.0里包含的协议栈,当然也可以看看FreeBSD的TCP/IP协议栈 704ex 286wo 673av 604ek 659yl 363lh 957mk 564ge 854zm 932ox 711

一个简单的HTTP测试工具:Send HTTP Tool

我们在调用或者测试测试HTTP协议,或者第三方系统公布的RESTFul Web服务的API的时候,可以有很多种方法,比如,自己在cmd行中,打开telnet,然后拼写HTTP的数据:或者用Fiddler2发送HTTP请求的数据:还有其他方式:直接用telnet命令,拼写HTTP的数据很不方便,而且很容易出错:Fiddler2虽然功能强大,但是个人感觉使用起来有点稍微复杂,特别是对初学者来说.那么有没有一个简单,易于使用,一看就能知道如何使用的发送HTTP请求数据的工具呢?在这个篇文章中,为给大家

RTU的优势与Modbus协议介绍

RTU是REMOTE TERMINAL UNIT 的简称,即远方数据终端,用于监视.控制与数据采集的应用.具有遥测.遥信.遥调.遥控功能.RTU功能必须确保两种功能:1,有数据传输功能.2,有采集和控制功能. 经过多年的PLC+DTU在工业自动化应用中已经普遍采用这种方式在进行数据的在线监测和远程控制.当RTU面世后,RTU集成的A/D和I/O采集功能已经可以达到取代部分PLC功能了. 1,在一些相对简单的温度.压力.湿度.水位.烟雾等传感器的数据采集监测,完全已经可以通过RTU取代前端早期的P

modbus协议讲义

Modbus 一个工业上常用的通讯协议.一种通讯约定.Modbus协议包括RTU.ASCII.TCP.其中MODBUS-RTU最常用,比较简单,在单片机上很容易实现.虽然RTU比较简单,但是看协议资料.手册说得太专业了,起初很多内容都很难理解.    所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号.现在就来定义一个新的最简单协议.例如, 协议: “A” --“LED灭”       “B” --“报警”       “C” --“LED亮”单片机接收到“A”控制一个LED灭,