OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3566|回复: 10

请教下modbus-rut通讯主从站一体的一些问题

[复制链接]

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2019-2-23 10:00:22 | 显示全部楼层 |阅读模式
目前有个项目需要完成一个中转站的作用,单片机需要完成两个功能,串口1通过modbus读取变频器的数据,保存起来,命令帧有2帧,串口2则做modbus从站,监听上位机的指令,且上位机会根据需要,发送0x10功能码给串口2,串口2接收到需要通过串口1写入变频器,上位机以100ms间隔与串口2通信;但是目前有些问题,串口1与变频器通讯间隔将读取时间设置为80ms了,测试时,仅仅是上位机发送03读取指令,上位机的指令也会存在丢失的情况,各位大佬有没什么好的建议呢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-23 10:03:21 | 显示全部楼层
可能我描述的不清楚,大概就是图中这样子的传输
1.png
回复 支持 反对

使用道具 举报

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
发表于 2019-2-23 11:09:50 | 显示全部楼层
以前做过类似通信的项目,既做ModbusRTU主站,又做ModbusRTU从站的的,通信很正常,无误,这种通信建议Modbus从站部分的处理工作放在定时器中断函数中处理,10ms的定时器中断没有问题的,主站部分的数据处理切记不要存在死循环或延迟类函数。
回复 支持 反对

使用道具 举报

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
发表于 2019-2-23 11:13:29 | 显示全部楼层
项目中可以用上位机直接读取变频器数据,这样也不可以吗?我这有Modbus协议转换的工具,可以实现ModbusTCP或UDP转ModbusRTU,如果有需要,联系我!
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-23 15:01:35 | 显示全部楼层
若水 发表于 2019-2-23 11:09
以前做过类似通信的项目,既做ModbusRTU主站,又做ModbusRTU从站的的,通信很正常,无误,这种通信建议Modb ...

您好,谢谢您的回复。我现在从站监听放在一个定时器,主站发送放在另一个定时器,主从站的处理都放在死循环里,用12的单片机,我试下吧从站的处理放定时器看看
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-23 15:07:41 | 显示全部楼层
若水 发表于 2019-2-23 11:13
项目中可以用上位机直接读取变频器数据,这样也不可以吗?我这有Modbus协议转换的工具,可以实现ModbusTCP ...

因为我这的上位机就是一个PLC,固定死了,加密了,程序不能改的,然后配套的变频器停产了,重新买的另一型号的,一些寄存器存放值更改了,所以就需要加一个单片机做中转
回复 支持 反对

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2019-2-24 08:54:22 | 显示全部楼层
在串口中断进行数据接收,中断占用CPU时间尽量短一些,处理好两个中断的优先级,
回复 支持 反对

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-1-6
在线时间
18 小时
发表于 2019-2-24 10:10:39 | 显示全部楼层
开两个进程处理数据,串口用DMA收发,用信号量检测检测数据接收状态,应该就没问题了
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-24 12:38:34 | 显示全部楼层
谭某某 发表于 2019-2-24 10:10
开两个进程处理数据,串口用DMA收发,用信号量检测检测数据接收状态,应该就没问题了

用STC12的单片机
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-24 13:13:10 | 显示全部楼层
谭某某 发表于 2019-2-24 10:10
开两个进程处理数据,串口用DMA收发,用信号量检测检测数据接收状态,应该就没问题了

用STC12的单片机
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
 楼主| 发表于 2019-2-25 14:30:40 | 显示全部楼层
d1z1y2 发表于 2019-2-24 08:54
在串口中断进行数据接收,中断占用CPU时间尽量短一些,处理好两个中断的优先级,

谢谢您,对的,我现在中断只放接收,数据处理都在while(1)里,另外几个定时器就用来判断接收完成和发送间隔时间控制
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 19:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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