求助关于Modbus协议编程问题~~~急急!!

本人遇到一道题目如下,要求实现点表的数据采集下载,即编写通讯程序读取点表数据。给出设计的流程图,写出代码实现的过程(编程语言不限)
我以前没遇见过这方面的题目,题目意思都不太懂,请各位大虾帮帮忙,谢谢程序,或者指点一二,在下在此谢谢!(如果做出来了另有重谢!!)
ModBus通讯规约点表如下:

MODBUS_RTU通讯规约
(本协议采用主从问答方式)
通讯数据的类型及格式:
信息传输为异步方式,并以字节为单位。在主站和从站之间传递的通讯信息是11位的字格式:

字格式(串行数据) 11位二进制
起始位 1位
数据位 8位
奇偶校验位 1位:偶校验位
停止位 1位:
波特率 9600
● 通讯数据(信息帧)格式
数据格式: 地址码 功能码 数据区 错误校检
数据长度: 1字节 1字节 N字节 16位CRC码(冗余循环码)

★ 注:1、1个字节由8位二进制数组成(既8 bit)。
2、ModBus是Modicon公司的注册商标。
3、“从机”在本文件中既为智能MCC控制保护装置。

一、通讯信息传输过程:

当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。

1.1 地址码:

地址码是每次通讯信息帧的第一字节(8位),从1到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。
1.2 功能码:
是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。智能MCC控制保护装置仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。
表8.1 MODBUS部分功能码
功能码 定 义 操 作(二进制)
02 读开关量输入 读取一路或多路开关量状态输入数据
01 读开关量输出 读取一路或多路开关量输出状态数据
04 读输入寄存器 读取一个或多个寄存器的数据
05 写开关量输出 控制一路继电器“合/分”输出

1.3 数据区:
数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。
智能MCC控制保护装置采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码04),可以任意读取其数据寄存器(其数据信息表详见附录)。
首先十分感谢wiwimo的热心帮助!!谢谢!!这道题目要求的语言不限,如果你有时间可以整理一下发到我邮箱吗?310189939@qq.com,谢谢!

C#的行吗?可以的话我再给你大概的代码

拿读数据做例子,其他的功能重要改掉03功能码就行
先组成命令的byte数组

byte[] Dp = new byte[8];
byte[] DpC = new byte[6];
Dp[0] = 0x01;//这是表的地址,假定是01
Dp[1] = 0x03;//这是功能码,03是读寄存器数据
Dp[2] = 0x00;
Dp[3] = 0x03;//表的相应寄存器地址
Dp[4] = 0x00;
Dp[5] = 0x0C;//表的相应寄存器参数,根据功能码和表的不同,这几个编码有变化
for (int i = 0; i < 6; i++)
{
DpC[i] = Dp[i];
}
uint ValCRC;
ValCRC = CRC(DpC);//CRC为自己写的CRC-16校验码的函数,具体的实现这里不给要的话可以发给你
Dp[6] = (byte)(ValCRC % 256);
Dp[7] = (byte)(ValCRC / 256);

然后把这个数组发给串口,编程语言不同发送方式不同
还在程序可以设置波特率,校验什么的,编程语言不同设置方式也不同
然后接受数据,也是一个byte数组

然后自己解析数组,把需要的转化成10进制或者你需要的格式
大概就这样
温馨提示:内容为网友见解,仅供参考
无其他回答

西门子modbus通讯协议编程实例
这是创建一个网络的指令。接下来,使用U地址初始化通信模块,1表示使用串行通信模式:U8.01100 该指令中的U8.01100表示使用U地址01,同时将通信模式设置为串行模式。此设置允许PLC通过ModbusRTU协议与外部设备进行数据通信。在编程时,需确保ModbusRTU协议的配置正确,包括波特率、数据位、停止位和校验位等参...

ModBus协议使用C++编程的问题
发送报文的数组当然是byte数组,至于如何组织数据,首先要定义好需要支持的命令;其次,用通用的通信测试软件,验证你的命令,像格西烽火之类的软件,自定义功能比较强,花在测试验证的时间少一点;再次,就是把验证好的命令填入代码。

以太网,TCP,IP,modbus四层协议如何编程,能否举个例子
对于接收到的数据帧,需要按ADU格式去理解并编程处理,这就是常说的“数据解包”。在VB中编程实现Modbus TCP通信,使用以太网通信控件,端口号是502。至于TCP\/IP协议如何实现,不需要费心。编程重点还是ADU数据帧的打包、解包及事务处理。具体实例不是能简短说明的。推荐一个资料《MODBUS协议中文版》,网上...

博途Modbus RTU通信如何编程?
软件编程方面,首先在OB1中插入FC函数,拖入Modbus_Comm_Load指令和Modbus_Master指令。Modbus_Comm_Load指令通过Modbus RTU协议对通信模块进行组态,而Modbus_Master指令可作为Modbus主站进行通信。在中断OB83中插入“Pull or plug of modules”函数,以处理分布式IO站点故障、CM PTP模块插拔等故障。在中断OB8...

在MODSCAN调试,怎么一直有“modbus message time-out”是什么原因_百度...
这个问题经常有,一般分好多种。如果能出现这句话说明,接口是的好的,如果接口不好,就会出现,设备连接不上的提示。现在的问题归纳大概有以下几个:1,连接的点的地址太多,试试改到10个地址;(因为接口质量问题,有时候连接的地址多,就会出错);2,连接的设备的站号不对;3,选择的数据格式不...

一招教会你用Modbus通讯协议
Modbus协议的数据帧格式定义了一个与基础通信层无关的简单协议数据单元(PDU)。不同总线或网络上的MODBUS协议映射可以在应用数据单元(ADU)上引入附加域。地址码为第一个字节,每个从机拥有唯一的地址码,并在响应时以该地址码开始。功能码为第二个字节,用于告知从机执行的操作。数据区根据功能码的不...

详解Modbus通讯协议的用法
对于ASCII、RTU和TCP协议,TCP和RTU协议非常相似。要将RTU协议转换为TCP协议,只需去掉两个字节的校验码,然后在RTU协议开头添加五个0和一个6,即可通过TCP\/IP网络发送。Modbus协议的通信过程包括地址码、功能码、数据区和错误校验码等关键元素。地址码标识接收信息的从机地址,功能码告诉从机执行的操作,...

modbus协议中地址是什么意思
\\x0d\\x0a三、Modbus地址虽然是5位十进制数,但由于功能码的定向作用,如功能码01\/05\/15就只能操作0X区,不会操作其他区,所以编程时只需要后4位数,而且要把它换成16进制地址(地址从0开始),即:\\x0d\\x0a通讯帧里的设备地址=(4位十进制设备编号-1)转换成16进制\\x0d\\x0a如用功能码...

modbus协议中0、1、3、4分区问题,如何实现?
常规的modbus协议通讯,功能码03是主站读取从站寄存器的多个数据(连续的字节),功能码01是主站读取取从站寄存器的单个数据,多数据访问没问题,单寄存器数据访问不通,应该检查,主站发送的读取数据长度或偏移量是否正确;功能码06是主站向从站寄存器的写数据的,从站的对应寄存器应该是接受控制字的变量。...

modbus协议中0、1、3、4分区问题,如何实现?
常规的modbus协议通讯,功能码03是主站读取从站寄存器的多个数据(连续的字节),功能码01是主站读取取从站寄存器的单个数据,多数据访问没问题,单寄存器数据访问不通,应该检查,主站发送的读取数据长度或偏移量是否正确;功能码06是主站向从站寄存器的写数据的,从站的对应寄存器应该是接受控制字的变量。...

相似回答