STM32F103C8T6、FreeModbus从站的设计与测试(1)——引言
关键词:Modbus FreeModbus STM32F103C8T6 CubeMX
在国内的工业控制系统和传感器中,Modbus总线是很常见的,主要原因是其硬件设计简单、通信流程简洁、易于软件实现,Modbus总线最初是由德国的Modicon(莫迪康)公司的提出的,已有几十年的历史,现已成为国际标准。
孔丙火(微信公众号:孔丙火)认为,如果我们仅仅是使用Modbus总线,比如使用带有Modbus通信接口的PLC,则只需要关注Modbus的通信格式即可,如从站地址、功能码、通信超时参数等,而如果我们开发一块带有Modbus接口的控制板或者传感器,则需要关注Modbus通信协议的内部实现方法。
Modbus总线的物理层实现有两种:工业以太网和串口,工业以太网使用的Modbus-TCP协议,串口使用Modbus-RTU和Modbus-ASCII协议。串口是最常用的一种通信方式,那孔丙火(微信公众号:孔丙火)就来说它。
单片机上都有通用异步收发串口(UART),一个或多个,在硬件上,只需要加一个RS485或RS232的电平转换,即可实现工业串口通信。因此,只要我们在UART收发准确的基础上,按照Modbus标准编写通信协议,即可实现单片机的Modbus通信,想想是不难的,但工业通信不仅要实现功能,还要确保稳定,自己编写源码去实现一个通信协议,并不是一个最优方案,性价比不高,还有一种方法,是采用成熟的协议栈实现,成熟的协议栈有专门的组织维护,大量的使用,也更容易发现bug。当然,孔丙火(微信公众号:孔丙火)认为,对于程序猿或攻城狮来说,有免费的成熟的协议栈就更完美了,而FreeModbus协议栈就满足这个要求,然而美中不足,它只支持从站协议,主站协议是要收费的,不过已经很好了,知足常乐。
那么,孔丙火(微信公众号:孔丙火)的主题来了,用FreeModbus协议栈实现一个基于串口通信的Modbus从站,采用什么单片机呢,这个可以随便选,只要有一个UART接口就可以,那就选一个常用的,意法半导体的STM32F103C8T6,Cortex-M3的内核,片上资源对于Modbus协议来说也足够。孔丙火(微信公众号:孔丙火)在网上也查看了一些STM32F103移植FreeModbus的资料,总感觉不清晰,看起来有点费劲,可能是我的水平太差吧,所以在一次开发Modbus从站的过程中,想着整理一下开发心得,目的是对正在开发Modbus的朋友有一些帮助,少走一些弯路,另外,网上缺乏一些对Modbus协议测试的文章,我也把相关的心得写出来,包括各种功能码的测试、错误码的测试等。
意法半导体的单片机,在开发时可以使用CubeMX,生成初始化代码,可以为新手朋友节省不少开发时间,孔丙火(微信公众号:孔丙火)认为,这是意法半导体的一个优势,当然,ST的单片机使用量很大,且网上的资料多,易于学习。
单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。
更多精彩文章,请关注公众号
阅读(265) | 评论(0) | 转发(0) |