查看: 510|回复: 1

ASR扩展库——MODBUS

[复制链接]

9

主题

13

帖子

243

积分

版主

Rank: 7Rank: 7Rank: 7

积分
243
发表于 2022-7-20 16:10:34 | 显示全部楼层 |阅读模式
本帖最后由 blue 于 2022-7-20 16:18 编辑

扩展库使用说明——MODBUS


在这里Modbus主要指Modbus-RTU协议,下面的说明均以Modbus-RTU协议进行说明。如果对Modbus协议不了解,建议先下载最下方的“Modbus协议.pdf”文档熟悉该协议。

一、MODBUS协议

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。

通用 MODBUS 帧

图片1.png

MODBUS 数据模型
图片2.png

公共功能码定义
图片3.png

二、RS485模块

Modbus协议实际应用一般基于RS485物理层,下图为RS485模块接线图:
图片4.png
三、硬件

单片机TTL转RS485模块实物如下图所示
单片机TTL转RS485模块2.png
购买链接

天问ASR Pro语音开发板
语音开发板天问ASRPRO.png
购买链接

四、库函数说明

在这里会挑一些重要或者特殊的进行说明。

Modbus主机初始化
Modbus主机初始化_1657609180837.png
输入参数:1.选择串口:依据硬件连接电路选择相应的串口。
2.串口波特率:自定义波特率,可设置为2400、4800、9600等,一般设置为9600。波特率表示每秒钟传送的码元(符号)的个数,单位是波特
3.校验方式:可选无校验、偶校验、奇校验,一般默认设置为无校验。

Modbus主机初始化(带RS485控制脚)
Modbus主机初始化_1657609278846.png
输入参数:1.选择串口:依据硬件连接电路选择相应的串口。
2.串口波特率:自定义波特率,可设置为2400、4800、9600等,一般设置为9600。波特率表示每秒钟传送的码元(符号)的个数,单位是波特
3.校验方式:可选无校验、偶校验、奇校验,一般默认设置为无校验。
4.RS485控制脚:选择RS485的控制引脚。
5.发送有效电平:1,RS485控制脚高电平有效;0,RS485控制脚低电平有效。

Modbus主机请求读取线圈
Modbus主机请求读取线圈_1657676167751.png
输入参数:1.选择串口:依据硬件连接电路选择相应的串口。
          2.从机地址:从机地址
          3.起始地址:起始地址,为无符号16位整数类型。
          4.超时时间:主机发送数据后,堵塞等待从机响应的最长时间。
          5.buf:读回来的线圈值,为无符号8位整数的数组。
返回参数:从机响应超时返回0,不正确类型返回-1,成功返回1。

Modbus主机请求写单个线圈
Modbus主机请求写单个线圈_1657676213791.png
输入参数:1.选择串口:依据硬件连接电路选择相应的串口。
2.从机地址:从机地址
3.起始地址:起始地址,为无符号16位整数类型
4.超时时间:主机发送数据后,堵塞等待从机响应的最长时间。
5.值:写入线圈值,为无符号8位整数类型的数据。
返回参数:从机响应超时返回0,不正确类型返回-1,成功返回1。

Modbus主机请求写多个线圈
Modbus请求写多个线圈_1657676257542.png
输入参数:1.选择串口:依据硬件连接电路选择相应的串口。
2.从机地址:从机地址
3.起始地址:起始地址,为无符号16位整数类型
4.超时时间:主机发送数据后,堵塞等待从机响应的最长时间。
5.buf:写入线圈值,为无符号8位整数的数组。
返回参数:从机响应超时返回0,不正确类型返回-1,成功返回1。



五、范例代码

案例一:读取线圈
在测试协议时,可以通过串口与电脑上位机软件通信进行测试,下面的测试程序是直接通过电脑上位机进行测试的。
硬件连线图如下所示

Modbus.png

图形程序如下
ModbusMaster读线圈_1657770762110.png

打开监视器
2022-07-14_115948.png

打开Modbus Slave软件,软件请到最下方附件下载。
2022-07-14_150137.png

设置从机地址,功能码,起始地址,数量
2022-07-14_114600.png

设置端口连接
2022-07-14_114711.png

修改线圈值,设置为1000 0000 0000 0001。
2022-07-14_114800.png

唤醒ASR PRO,说命令词“读线圈”,串口打印返回的线圈值,如图所示:
2022-07-14_112931.png

案例二:ASRPRO控制MODBUS LH-04串口继电器模块
先用继电器测试软件读取继电器的帧数据。

2022-07-19_114908.png

设置单个继电器码:
01 05 00 01 FF 00 DD FA
01:模块地址码
05:功能码
00:单继电器地址高字节,固定为0x00
01:单继电器地址低地址,OUT1:00;OUT2:01;OUT3:02;OUT4:03
FF 00:输出的数据,FF00继电器吸合;0000继电器断开
DD FA:CRC校验码


4路全部吸合:01 0F 00 00 00 10 02 FF FF E3 90
4路全部断开:01 0F 00 00 00 10 02 00 00 E2 90
继电器常用命令请参考附件清单


硬件连接

10.MODBUS控制继电器.png

ASRPRO控制MODBUS LH-04串口继电器模块测试程序
程序如下

25_MODBUS控制继电器_1657787063793.png

唤醒词和命令词列表
2022-07-19_164533.png

打开串口监视器,唤醒ASR PRO,说出相应的命令词,串口就打印相应的字符,如图所示:
图片5.png

2022-07-19_153935.png

ModbusTools_2010.zip

746.92 KB, 下载次数: 31

扩展库Modbus例程.zip

6.12 KB, 下载次数: 37

LH-04通信协议(MODBUS版) V3.1.PDF

648.55 KB, 下载次数: 31

Modbus协议.pdf

1.04 MB, 下载次数: 34

LH-04继电器测试软件Ver3.11.zip

373.97 KB, 下载次数: 25

回复

使用道具 举报

0

主题

1

帖子

4

积分

注册会员

Rank: 2

积分
4
发表于 2023-1-6 16:13:58 | 显示全部楼层
请问你这个程序是不是要对应特定的硬件?我用别人家的TTL/485和modbus模块测试就无法实现。天问五幺唤醒后说命令词就没有反应了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2023-1-27 15:59 , Processed in 0.306107 second(s), 25 queries .

Powered by Discuz!

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表