分享我的MODBUS框架程序
第一次发帖,请大家多多指教,花了2天时间写的程序,如有错误还请指出,程序大家稍微修改就可以用了, 本帖最后由 zuu0 于 2018-12-17 08:53 编辑如果51的话,资源有限, 3.5T和1.5T的判断,我不太喜欢用定时器做.我更喜欢用ADC,PCA来做计时,us级.比定时器好用 本帖最后由 lipengxu 于 2019-5-31 07:49 编辑
在原有的基础上,优化了接收时CRC检验的等待时间,使单片机能更快的响应协议,另外把发送的时间也打散了,不用等待数据发送完,才执行后面的程序。 谢谢,这个用很少的代码实现,某些场合够用了。支持。 谢谢分享 有空试下,谢谢分享 谢谢分享,下来参考一下。 這個程序很多地方可以用到呢!感謝樓主 感谢分享, 感谢楼主分享 简洁明了,多谢分享! 感谢楼主分享 谢谢楼主分享。收藏了。 mark,收下了 没做功能码解析么
谢谢分享,下来参考一下。 下了,感谢分享 很极致,以至于第一眼没看懂{:lol:} 其实还应该再完善些,不过LZ两天能做到这样也不错了。 zuu0 发表于 2018-12-17 08:51
如果51的话,资源有限, 3.5T和1.5T的判断,我不太喜欢用定时器做.我更喜欢用ADC,PCA来做计时,us级.比 ...
ADC 如何实现?能说说吗? 谢谢分享 谢谢,下载看看。 只实现了接收,实用性和可维护性还有待提高。
modbus是一问一答式的,数据接收缓存和发送缓存可以共用一个,返回的数据在收到的数据上改改,有的是原样回传。 asbzhang 发表于 2018-12-17 10:06
ADC 如何实现?能说说吗?
就是AD不是有转换周期吗,多少时间完成一次转换,在AD中断里计时,,我经常用这二个模块当定时器用,
谢谢! 很精致 感谢分享 zuu0 发表于 2018-12-17 11:04
就是AD不是有转换周期吗,多少时间完成一次转换,在AD中断里计时,,我经常用这二个模块当定时器用,
...
不错,思路很广。 zuu0 发表于 2018-12-17 11:04
就是AD不是有转换周期吗,多少时间完成一次转换,在AD中断里计时,,我经常用这二个模块当定时器用,
...
虽然这样的话通用性会变差,不过可以节约小芯片的资源,而且改改也不难。
点赞 ! ilikemcu 发表于 2018-12-19 09:49
虽然这样的话通用性会变差,不过可以节约小芯片的资源,而且改改也不难。
点赞 ! ...
恩,像51这种单片机跑modbus,用定时器判断1.5T 3.5T太吃力了,干的活不多,跑9600勉强可以,除非你不去判断3.5T,
但是用AD和PCA计时就方便多了..
如果是STM32那就随便搞了
zuu0 发表于 2018-12-19 12:22
恩,像51这种单片机跑modbus,用定时器判断1.5T 3.5T太吃力了,干的活不多,跑9600勉强可以,除非你不去 ...
定时器判断不会吃力的吧,每次收到数据都要去重新初始化一下2个字节的初值,这是唯一的额外开销,即便是12T老式51,也没多大压力啊。其它的就是超时了进中断处理数据,这个本身就是没定时器也要处理的。主要是51的定时器就那么几个,实在太宝贵了。
我用51跑115200bps的MODBUS-RTU,上位机MODBUS POLL,一次读取全部21个寄存器,上位机设置参数全部设置到软件所支持的极限速度,连续100万次的高压力测试,没有发现一次异常超时或者校验错误。而且这个时候,51的其它程序代码部分,也是特地配置到极限负荷运行。不过这个项目就是因为定时器不够用了,导致有一个速度传感器的脉冲输入计数,最后不得不采用外部中断管脚来计数,资源占用有点大,好在通过了测试。看到你的回帖,很有启发,下一稿升级版,可以考虑你的思路,看看能否改进,腾出一个定时器来。
曾经有过类似设计,用一台一体式低功耗电脑,MODBUS连续跑了24小时。非MODBUS类测试,最长纪录是17天不间断跑串口通信。这些测试到后来都是实在没心情再继续下去了,才关闭的{:lol:}
^_^,我觉得我要mark一下,我是mark党。 zuu0 发表于 2018-12-17 08:51
如果51的话,资源有限, 3.5T和1.5T的判断,我不太喜欢用定时器做.我更喜欢用ADC,PCA来做计时,us级.比 ...
你好,我这个程序,原本是想写到STC15F104W上的,没有想到怎么多,不过你的想法真的很好,过几天有空了会去试一下,谢谢你的建议{:smile:} 过几天有空了会去试一下 学习下!~ 学习一下 谢谢 学习一下 谢谢分享 谢谢分享,下载收藏。 收藏备用,谢谢分享 PCA来做计时,us级.比定时器好用 很实用,谢谢分享{:handshake:} 39楼 cdwess 3 小时前 很实用,谢谢分享 谢谢分享{:handshake:} 这个还很不成熟,只是进行简单的接收回发,并没有进行协议的解析,各个功能码的处理都没有,只完成了10-15%! 学习一下 谢谢分享,期待楼主完善功能 {:lol:}谢谢 感谢楼主分享
谢谢,下载看看。 谢谢分享 谢谢楼主分享!正在学习程序的整体思想,高度不够。 好东西收藏了 好东西,谢谢分享 感谢分享。学习了。 谢谢分享 zuu0 发表于 2018-12-17 08:51
如果51的话,资源有限, 3.5T和1.5T的判断,我不太喜欢用定时器做.我更喜欢用ADC,PCA来做计时,us级.比 ...
ADC,PCA这个怎么做延时??? 霸气侧漏 发表于 2019-6-22 11:14
ADC,PCA这个怎么做延时???
空闲检测更方便吧 lipengxu 发表于 2019-5-31 07:41
在原有的基础上,优化了接收时CRC检验的等待时间,使单片机能更快的响应协议,另外把发送的时间也打散了, ...
添加了04 03 10功能码的解析 收藏以后有用 多谢分享,mark备用。 正好有用,多谢楼主~~~~~~~~ MODBUS MARK 参考下,感谢了! 不错,收藏了,谢谢 感谢分享, 最近正在做这个,用得上,谢谢! 感谢分享 思路差不多 感谢分享! 下来看看先,谢谢 下载下来看下思路,谢谢分享。 楼主能 花点时间 将 该 MODBUS 框架程序 移植到 STC8G8K64U-48I-LQFP48/LQFP64 上完善下给大家参考,我们 送您一套最新的 STC8H8K64U 实验箱 STC8H8K64U-48I-LQFP64,实验箱原理图,部分参考程序, 请关注, 补充中:http://www.stcmcudata.com/STC8F-DATASHEET/STC8H8K64U-DEMO-CODE-20200615.ZIP 下载下来看下思路,谢谢分享。 国学芯用 发表于 2020-6-18 11:56
楼主能 花点时间 将 该 MODBUS 框架程序 移植到 STC8G8K64U-48I-LQFP48/LQFP64 上完善下给大家参考,我们...
还有8G8K64U这个型号啊?俺看到的DATASHEET好像都是8H{:smile:} makesoft 发表于 2020-6-18 17:26
还有8G8K64U这个型号啊?俺看到的DATASHEET好像都是8H
http://www.stcmcudata.com/STC8F-DATASHEET/STC8G-20200615.pdf
http://www.stcmcudata.com/STC8F-DATASHEET/STC8H-20200615.pdf 学习一下,谢谢分享。 下载下来分析一下,在中断中对modbouCRC进行校验,方法不错,实测可用, 感谢楼主分享 谢谢分享 感谢分享 谢谢分享 谢谢分享,参考一下 感谢分享 收藏一下,学习。 lipengxu 发表于 2019-6-27 12:53
添加了04 03 10功能码的解析
没有看见04 10功能码的解析呀? 收藏学习~感谢分享好的思路好的程序 谢谢分享,我就是写不出来这么好的代码 也收藏一下 收藏一下,要接触这个东西了。感谢LZ 谢谢分享,学习一下。
页:
[1]