AUG 发表于 2022-2-12 10:32 回家研究发现是数据地址溢出了 原代码所设的传回数组只有16Byte 其中头3Byte及尾2Byte用作地址/功能码 / 字节长度 及 CRC验证 可用的只余下11Byte 而每个Modbus数据占用两个Byte 所以上位机只能要求5个数据 我当时要求的是10个 而代码又没有溢出保护 所以跑飞了 |
lkc8210 发表于 2022-1-28 15:46 仿真是理想情况下的,真机可能存在波特率偏差,通信干扰等情况。 |
同行!我也是干自动化,但现在落魄成电工了! 人家电工为了提升都开始学plc了,我却倒过来了,叹叹叹 搞串口通信,必须神器! 因为串口具有独占性,所以能用来检测串口通信的神器很少,我一般用CommMonitor,有坡姐版的,很好用 我从经验来判断,可能是通信协议不一致,比如奇偶校验等! |
温柔的郎 发表于 2022-1-28 12:40 上班摸鱼的时候玩了一下仿真 竟然成功了!! 没有Timeout 不知道为什么真机会timeout |
我的单片机水平肯定远远赶不上前面几位大神的水平了!! 也感谢大神 lkc8210通宵达旦的寻找问题, |
还有一个比较有意思的事情,这个代码串口初始化跟硬件相关,你得按你的板子晶振频率来修改相应的串口初始化,以及校验模式 |
从站最简单的做法通过定时器判断一定时间没有数据就认为一帧,然后解析报文,判断是否属于自己的报文,是则返回即可;或者你也可以按字符格式解析,满足一帧的条件时再判断也可以,总的来简单的从站应用还是比较简单的 |
用例程在STC89上玩了一个晚上 半成功地用Modbus点亮几个LED和传回几个键值 睡前留一下言 因为例程用的是AT89 是12T单片 楼主用STC12和STC8都是1T单片机 波特率和定时器的设定要改一改 我用STC89+11.0592Mhz 改了TH1和TL1的计算方程还是不行
对比了STC的官方例程才发现要加括号
而且89单片机可以设定倍速
就是说方程式用9600算 Modbus上位机的设定就要用19200 为什么说是半成功呢? 因为虽然可以控制LED和读取键值 但是反应很慢而且还会Timeout 还有很多地方要研究一下 想不到会再这里遇到一样干PLC的同行 明天继续 |
Cortex-M4不嫌贵,反到嫌Cortex-M0贵?而且MODBUS/RTU主站好写,只要发数据帧,等从站回复即可,很普通的顺序逻辑。从站难写,要监听总线上面的数据帧,判断哪些数据帧跟自己无关,哪些数据帧是对自己说的。 |
现在cortex-M0的芯片都很贵了,做从站都想节省费用,用51做从站,用STM32F407做主站, |
从站代码有难度,为什么不用cortex-M0单片机呢?资源和速度都足够了。 |
从站有点难度,为啥不用cortexxx |