0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Ai-WB2+Modbus 485 RTU 远程控制

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2024-12-27 10:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下作品由安信可社区用户

http://ckdsx.cn制作

目录

1.什么是Modbus, RS485

1.1RS485 VS RS232

1.2RS485,RS232两种协议之间的主要区别

1.3Modbus的内容是什么?

1.4帧结构

1.5Modbus指令实例1.5.1

1.6 Modbus-RTU协议

2.外设介绍

2.1常用芯片选择

2.2初始化过程

3.移植过程

3.1资料介绍

3.2示例参考程序代码

wKgZPGduFnaAXzJ7AADVfYXSP8o367.jpg

使用wb2进行 modbus 485 通讯演示_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1Hapxe4EsV/?vd_source=54c5db21948db2378659b7e8e42bafbf

wKgZO2duFneAIx32AABBB5ttvPI143.jpg

一、什么是Modbus, RS485 ?

Modbus就是一种用在工业上的简单协议!顾名思义,它是一个Bus,即总线协议。比如串口协议、IIC协议、SPI都是通信协议。

RS485是一种通用的通信标准,广泛用于数据采集和控制应用中。它的主要优点之一是它允许将多个 RS485设备放在同一条总线上,这使得多个节点可以相互连接。

RS-485(目前称为EIA/TIA-485)是通信物理层的标准接口,一种信号传输方式,OSI(开放系统互连)模型的第一级。创建 RS-485是为了扩展RS-232接口的物理功能。

串行EIA-485连接是使用两根或三根电线的电缆完成的:一根数据线、一根带反转数据的电线,通常还有一根零线(接地,0V)。这样,发射器和接收器通过22或24AWG 实心线的双绞线电缆交换数据。

01、RS485 VS RS232

RS485和RS232串行通信协议已经使用了50多年,并且仍在整个商业和工业中广泛使用。扩展RS232标准的功能是开发RS485协议的动力。下表概述了这两个标准。

wKgZPGduFneAKpz4AABzpopinbk825.jpg

02、RS485,RS232两种协议之间的主要区别

发射器和接收器的数量

RS232串行接口设计用于连接两个设备。该协议支持单个发射器和接收器之间的通信。 RS485接口,最多可以将32个串行设备连接到一个变送器

操作距离

使用RS232协议的设备在发送器和接收器之间的距离限制为15米,同时仍能实现最大数据传输速率。如果可以容忍较慢的数据速率,则可以延长此长度。 RS485协议大大延长了操作距离。它支持1200米长度的最大数据速率,使RS485协议成为物理上相距遥远的设备之间通信的绝佳选择。

数据传输速度

RS232接口的传输速度为1Mb/s,传输距离可达15米。RS485在15米的距离内提供高达10Mb/s的更高速度。当达到1200米的最大长度时,RS485协议以100Kb/s的速度传输数据。

电气噪声问题和接地电位

RS232接口是一种基于电压电平的系统,在接地电位差异最小的情况下性能最佳。表现出高水平电噪声和可变接地电位的环境会影响RS232有效传输数据的能力,并可能导致数据丢失或损坏。

RS485协议采用差分电压系统,使其能够在具有较高电噪声水平的环境中有效运行。差分电压系统的一个副产品是数据传输距离的延长、传输速度的提高以及RS485所见的更低电压的使用。

03、Modbus的内容是什么?

Modbus-RTU,Modbus-ASCII,Modbus-TCP以上三种协议,一个设备只会有一种协议,如果你的设备使用的是Modbus-RTU,只需查看以下对应部分,一般来说大部分的设备都是Modbus-RTU协议的。

04、帧结构

地址

占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。

功能码

占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。

数据

根据功能码不同,有不同结构,在下面的实例中有说明。

校验

为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。

这是一个基于ModbusRTU协议的Ai-WB2modbus库,它支持以下几种modbus协议命令:

*0x01: 读一个或多个线圈寄存器
*0x02: 读一个或多个离散输入寄存器
*0x03: 读一个或多个保持寄存器
*0x04: 读一个或多个输入寄存器
*0x05: 写单个线圈寄存器
*0x06: 写单个保持寄存器
*0x0F: 写多个线圈寄存器
*0x10: 写多个保持寄存器

05、Modbus指令实例

查询从机地址为01的数据

主机发送:01 03 00 00 00 01 84 0A
从机回复:01 03 02 19 98 B2 7E

发送数据解析

wKgZPGduFneADbK8AADao95wGc8064.jpg

回复数据解析

wKgZO2duFniAcEEkAADBbv_rbak371.jpg

查询数据基本流程就是:

发送:从机的地址+要干嘛的功能码+要查的寄存器的地址+要查的寄存器地址的个数+校验码
回复:从机的地址+主机发我的功能码+要发送给主机数据的字节数+数据+校验码

修改从机地址为01的数据

主机发送:01 06 00 00 00 01 48 0A

从机回复:01 06 00 00 00 01 48 0A

发送数据解析

wKgZPGduFniAKdtwAADJdAyiFc0755.jpg

回复数据解析

wKgZPGduFniAKdtwAADJdAyiFc0755.jpg

06、Modbus-RTU协议

只需要看懂功能码0x03、0x06、0x10这三个基本的就已经足够了,分别回想下其数据域部分:

0x03—主机需要发送起始地址+寄存器数量,从机回复总字节数+数据;
0x06—主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容(发现居然一样!)
0x10—主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量

二、外设介绍

RS485转TTL模块

wKgZO2duFniALjxkAACxIV3lsvU662.jpg

RS485远程I/O联网模块IODO控制器modbus

wKgZPGduFnmAaPcBAAEEkXpeCYs545.jpg

3.3V与5.0V电源、信号兼容的RS485自动流向控制模块无需“收—发”控制,使用本模块跟操作串口一样简单,透传模块实现了TTL信号与RS485信号的互转,但大家一定要知道,485是半双工通信,这种通信方式可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行;也就是说,通信信道的每一端都可以是发送端,也可以是接收端,但同一时刻里,信息只能有一个传输方向。

波特率:支持110~128000bps

模块亮点:

(1)供电范围宽:3.3V~5.5V。
(2)3.3V与5.0V信号兼容。
(3)采用原装进口芯片,工业级设计,抗干扰能力强,同时采用更为有效的485防雷设计,可在工业现场及野外恶劣的环境下使用,工作温度为—40℃至+85℃,传输距离可达千米(用的850米的2*1.5的线缆做的测试,建议在800米内使用,超过800米请加中继器)。
(4)采用半孔工艺设计,板厚0.8mm,可轻松作为子母板使用,也可焊接端子使用。
(5)具有RXD、TXD信号指示灯,收发状况尽收眼底。

模块特点:

(1)本模块充分考虑了485总线防雷设计和抗干扰设计,在野外长距离传输时,将模块的“接大地”端接入大地,可以起到很好的抗干扰和防雷的作用,使485总线更安全;室内短距离传输时可以不接入大地。
(2)采用标准的2.54间距设计,方便您的二次开发。
(3)具有120欧匹配电阻,短接RO即可使能匹配电阻,长距离传输时建议短接。
(4)支持多机通讯,允许接在最多128个设备的总线上
(5)本模块可以进行热插拔,不会出现其他485芯片热插拔出现的信号栓死现象。
(6)大面积铺铜,防止信号干扰。

01、常用芯片选择

SN75176

SN75276

SN75179

SN75180

MAX485

MAX488

MAX490

02、初始化过程

引入头文件

#include
#include
#include
#include
#include
#include"bl_sys.h"
#include
#include"softcrc.h"
#include"stdint.h"
#include"string.h"

设置初始化参数

波特率:默认串口配置为9600波特率,8位数据位,无校验位,1位停止位。

hosal_uart_dev_tuart_dev_log = {
.config= {
.uart_id= 1,
.tx_pin= 16, // TXD GPIO
.rx_pin= 7, // RXD GPIO
.cts_pin= 255,
.rts_pin= 255,
.baud_rate= 115200,
.data_width= HOSAL_DATA_WIDTH_8BIT,
.parity= HOSAL_NO_PARITY,
.stop_bits= HOSAL_STOP_BITS_1,
.mode= HOSAL_UART_MODE_POLL,
},
};
hosal_uart_init(&uart_dev_log);

配置用到的引脚

默认使用串口引脚:硬件串口

使用板载引脚4个:TX,RX,3.3V,GND(接线方法见模块说明书或下图) RS485引脚:A+连接A+,B-连接B-,数据有干扰的情况下GND接地。

三、移植过程

01、资料介绍

地址和命令可以直接以16进制的方式写到数组里,CRC16校验需要计算或查表获得;

参考网上CRC教程,使用本地CRC库文件二次封装完成CRC校验及校验值追加与打印函数(有关更多CRC计算请参考网上教程);

由于手头方便的仅有modubusRS485远程控制IO模块,仅以此模块完成命令发送控制其输出继电器开关的例程。

电路连线图

Ai-WB2 => 串口TTL=> MAX485 => A,B双绞线=>RS485设备

注:AI-WB2与模块之间连线时,RX连接RX,TX连接TX。请根据模块说明自行调整接线!

wKgZO2duFnmARde6AAF4wOpNfwQ728.jpg

wKgZPGduFnmAMJ4XAAEULPwDjAI934.jpg

02、示例参考程序代码

RS485发送示例代码如下:

----------------------
#include
intcounter = 0;voidsetup() {
RS485.begin(9600);}
voidloop() {
RS485.beginTransmission();
RS485.print("hello");
RS485.println(counter);
RS485.endTransmission();
counter++;
delay(1000);
}
-------------------------------

RS485接收并串口打印示例代码如下:

-----------------------------------
#include
voidsetup() {
Serial.begin(9600); while(!Serial);
RS485.begin(9600);
//enable reception, can be //disabled with: RS485.noReceive();
RS485.receive();}
voidloop() {
if(RS485.available()) {
Serial.write(RS485.read()); }}
--------------------------------

注:通过串口助手直接输出指令,有可能因为不是十六进制,或指令尾部被增加回车换行(0D0A)而导致失败!

程序运行过程:wb2通过串口向RS485转TTL模块发送指令,远程IO模块通过Modbus端口A、B接收数据并解析,然后执行指令动作。

程序运行现象:RS485转TTL模块,TX指示灯每隔两秒点了一下,远程IO模块输出端口1234顺序开启,然后顺序关闭。

若无硬件,则可以使用串口助手观察命令发送情况,请注意勾选HEX显示。(见下图)

wKgZO2duFnqAcWixAAFQrzxYX40418.jpg

程序代码见原贴中的附件

【外设移植】Ai-WB2+Modbus 485 RTU 远程控制。程序太过简单,未制作成库文件,各位可直接修改使用,make相关内容同helloworld文件一样。

https://bbs.aithinker.com/forum.php?mod=viewthread&tid=45244&_dsign=2c20ee00

PS:感谢园长、银、狗哥、杰哥、妖哥等各位安信可技术社区的大佬热情帮助!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 远程控制
    +关注

    关注

    4

    文章

    739

    浏览量

    37327
  • RTU
    RTU
    +关注

    关注

    0

    文章

    455

    浏览量

    30733
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Profinet 与 Modbus RTU/485 轻松建立通信

    Profinet 与 Modbus RTU/485 轻松建立通信 在工业自动化系统中,常需将基于 Profinet 协议的设备与 Modbus RT
    的头像 发表于 01-27 13:58 469次阅读
    Profinet 与 <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>/<b class='flag-5'>485</b> 轻松建立通信

    什么是WiFi远程控制模块?技术特点和应用场景有哪些?

    随着科技的发展,智能家居逐渐走进了我们的生活,越来越多的人开始体验到通过互联网控制家电的便利。而WiFi远程控制模块作为智能家居的核心组成部分,其独特的功能和优势使得家庭和工作场所的设备管理变得更加
    的头像 发表于 11-29 14:10 821次阅读
    什么是WiFi<b class='flag-5'>远程控制</b>模块?技术特点和应用场景有哪些?

    精准配料:PROFINET从站与MODBUS RTU主站集成方案

    的集成尤为常见。本文将基于工程实践,探讨如何通过PROFINET从站与MODBUS RTU主站的协同实现高精度配料控制。 系统架构与通信需求 典型的自动化配料系统包含三个核心部分: 称重仪表:通过传感器实时采集物料重量,输出
    的头像 发表于 10-16 09:12 415次阅读
    精准配料:PROFINET从站与<b class='flag-5'>MODBUS</b> <b class='flag-5'>RTU</b>主站集成方案

    Modbus RTU转Profinet总线协议网关

    站。 疆鸿智能JH-RTU-PN 网关MODBUS一侧做主站时可用于一对多集成MODBUS/485、或一对一集成MODBUS/232设备,形
    的头像 发表于 09-18 14:49 692次阅读
    <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>转Profinet总线协议网关

    【米尔NXP i.MX 91开发板评测】基于RS485接口实现modbus从机

    介绍 RS485接口在工业、物联网领域应用广泛,工业自动化领域一般在RS485基础上移植modbus协议,i.MX91开发板上集成1路RS485接口,我们可以用来进行数据采集和
    发表于 09-03 17:39

    工业场景下塔讯 Modbus RTUModbus TCP 网关实现横河流量计与 WinCC 数据交互案例

    米)、组网复杂、无法直接接入以太网等问题。Modbus RTUModbus TCP协议 塔讯TX 131-RE-RS/TCP-2C网关通过协议转换,将串口设备无缝接入工业以太网,实现
    的头像 发表于 08-19 15:16 1323次阅读
    工业场景下塔讯 <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b> 转 <b class='flag-5'>Modbus</b> TCP 网关实现横河流量计与 WinCC 数据交互案例

    Modbus TCP 转 Modbus RTU电脑端 TCP 与西门子 V20 变频器的通信案例

    从站)进行通信,Modbus TCP转Modbus RTU塔讯TX 131-RE-RS/TCP-2C网关实现对变频器的远程控制与参数监测。
    的头像 发表于 07-27 17:19 1197次阅读
    <b class='flag-5'>Modbus</b> TCP 转 <b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>电脑端 TCP 与西门子 V20 变频器的通信案例

    用PLC控制使用Modbus RTU协议的采集模块

    本文介绍了使用Modbus RTU协议的采集设备如何与PLC连接。
    的头像 发表于 07-25 10:57 1674次阅读
    用PLC<b class='flag-5'>控制</b>使用<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>协议的采集模块

    “跨界”也轻松:CC\\-Link IE搞定Modbus RTU电能仪表实战

    在电力行业中,新旧设备并存、协议不兼容是常见难题。例如,控制核心的PLC或DCS系统采用了高速的CC-Link IE工业以太网协议,而现场大量的电能仪表、传感器等设备却仍在使用传统的Modbus
    发表于 06-30 09:42

    台安N2变频器与Modbus RTU转Profinet网关实现数据互换

    在工业自动化领域,Modbus RTU协议与Profinet协议的转换需求日益凸显,尤其是当涉及到台安N2变频器等设备的应用时。本文将深入探讨Modbus
    的头像 发表于 06-29 13:28 813次阅读
    台安N<b class='flag-5'>2</b>变频器与<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b>转Profinet网关实现数据互换

    控制器遇上“协议外交官”:CC\\-Link IE转Modbus RTU的能源数据握手

    : 1.精准翻译: 实时解析控制器CC-Link IE帧,提取功率、状态等关键值,准确映射为Modbus RTU寄存器地址。 2. 无缝兼容: 对
    发表于 06-26 14:35

    工程师福音!CCLinkie转Modbus RTU让粉尘监测不再“扬灰”

    多个Modbus RTU网关接口的粉尘仪接入CC-Link IE控制网络。工程师引入一台协议转换网关,将其作为CC-Link IE从站,并将所有粉尘仪并联到其RS-485端口。配置完成
    发表于 06-26 14:21

    化工界的\"神仙连接\":CCLink IE和Modbus RTU的液位计完美通婚指南

    Modbus RTU则是工控界的\"元老级\"协议,运行在RS-485等串行总线上,通信简单可靠。由于开放性和成本优势,广泛应用于液位计、流量计等现场设备。这两种协议\"各说各话
    发表于 06-24 13:56

    CC\\-Link IE转Modbus RTU:让伺服驱动轻松“入网”的秘籍

    : 1.CC-Link IE TSN接口:无缝接入主站网络,享受高速、确定性的通信。 2.Modbus RTU接口(RS485):轻松连接伺服驱动器的Modbus口。 3. 核心翻译引
    发表于 06-23 14:02

    Profinet转RS485-Modbus RTU通信案例详解

    在工业自动化系统中,常常需要将不同协议的设备进行集成,以实现数据的交互和控制。本案例介绍了一种利用‌工业级Profinet转RS485 Modbus-Rtu协议网关(规格型号:ZP-WTU-PNMD02)‌实现Profinet与
    的头像 发表于 06-23 10:10 2275次阅读
    Profinet转RS<b class='flag-5'>485-Modbus</b> <b class='flag-5'>RTU</b>通信案例详解