社区
单片机/工控
帖子详情
RS485(Modbus)通信,返回数据丢字节
mrt007
2015-11-16 08:45:49
AB 的PLC与超声波水表通信,使用串口助手测试,PLC发送数据包正常,水表返回数据丢失前3个字节。使用串口助手发送水表回数据正常。使用示波器抓图如下:
1、PLC与水表通信
...全文
1520
2
打赏
收藏
RS485(Modbus)通信,返回数据丢字节
AB 的PLC与超声波水表通信,使用串口助手测试,PLC发送数据包正常,水表返回数据丢失前3个字节。使用串口助手发送水表回数据正常。使用示波器抓图如下: 1、PLC与水表通信
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
图灵转世
2015-11-16
打赏
举报
回复
485是单工的,有个切换问题需要注意的。
默寞
2015-11-16
打赏
举报
回复
485有个工作模式切换,一般的主设备与从设备都处于接收状态,当需要发送数据,先将485切换到发送状态,然后发送数据,发送完成后,切换回接收状态。 根据你的描述,应该是水表返回数据响应太快,也就是说PLC发包完成,485还未切回到接收模式,或接收状态还未稳定时,水表就开始返包,造成数据丢失。 可以测试下485的模式切换引脚与水表的TX引脚的时序看看,或者给水表反数据前加延时。
RS
485通讯
modbus
协议
通讯计数器上的一个 标准
MODBUS
通讯协议。
MODBUS
RTU 标准协议 举例: 控制器地址为:01 寄存器地址为:01 存放数值需要1个
字节
则:电脑发给控制器的命令代码如下: 01 03 00 01 00 01 d5 ca 假如此时数值为1000 则控制器发给电脑的命令代码如下: 01 03 02 03 e8 b8 fa 控制器地址为:01 寄存器地址为:01 存放数值需要2个
字节
则:电脑发给控制器的命令代码如下: 01 03 00 01 00 02 95 CB 假如此时数值为1000 则控制器发给电脑的命令代码如下: 01 03 04 03 E8 00 00 7A 43
MODBUS
主机源码STM32从机代码
Modbus
通信
协议调试精灵等资料.zip
MODBUS
主机源码STM32从机代码
Modbus
通信
协议调试精灵等资料 void Mosbus_Init() {
modbus
.myadd=4; //本从设备的地址
modbus
.timrun=0; //
MODbus
定时器停止计时
RS
485_Init(); } void Modbud_fun3() //3号功能码处理 ---主机要读取本从机的寄存器 { u16 Regadd; u16 Reglen; u16 byte; u16 i,j; u16 crc; Regadd=
modbus
.rcbuf[2]*256+
modbus
.rcbuf[3]; //得到要读取的寄存器的首地址 Reglen=
modbus
.rcbuf[4]*256+
modbus
.rcbuf[5]; //得到要读取的寄存器的数量 i=0;
modbus
.Sendbuf[i++]=
modbus
.myadd;//本设备地址
modbus
.Sendbuf[i++]=0x03; //功能码 byte=Reglen*2; //要
返回
的
数据
字节
数
串口
通信
和
RS
485-第1季第13部分
本课程是《朱有鹏老师单片机完全学习系列课程》第1季第13个课程,主要讲解了串行
通信
UART及其扩展
RS
485。本课程很重要,因为串口
通信
是我们接触的早也简单的
通信
方式,是后续继续学习SPI、I2C甚至USB、网络
通信
等的基础,大家务必认证对待完全掌握。
基于STM32F103的
RS
485
通信
(采用DMA方式发送
数据
,中断方式接收
数据
)
描述:硬件:
RS
485接口 协议:
Modbus
RTU。功能:采用DMA方式发送
数据
,中断方式接收
数据
。注: 接收到指令之后,判断是否是相应指令而进行DMA
数据
发送。DMA:开启DMA,DMA发送完一帧
数据
后产生发送完成中断,在DMA发送完成中断中,开启USART接收中断(
字节
), 在USART接收中断中保存接收到的
数据
。注: 本程序额外开启了USART空闲中断,在空闲中断中将 USART接收中断中接收到的
数据
发送至串口调试助手显示并开启DMA请求
基于STM32F103的
RS
485
通信
(主动发送中断接收)
硬件:STM32F103、485接口。功能:485收发
数据
。流程:主程序中通过485发送
数据
,开启串口接收中断和空闲中断。 每接收到一个
字节
的
数据
产生串口接收中断,在接收中断中用数组保存接收到的
数据
。每接收到一帧
数据
产生空闲中断,在空闲中断中将保存的
数据
发送出去(我是发送到串口调试助手显示)实验操作:下载程序,串口调试助手会显示预先用数组保存好的发送
数据
,而后通过串口调试助手上发送一串
数据
,程序会接收该串
数据
。 嗯。。。为了检测程序接收到的
数据
是否正确,我又把
数据
发到串口调试助手显示以判断接收是否正常。。。。讲的这么详细了 我觉得貌似可以不用下载了。。。
单片机/工控
27,382
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章