本帖最后由 jobszheng5 于 2023-1-3 11:33 编辑
FreeModbus协议栈在LPC1768开发板上的移植 Modbus协议,最开始由Modicon公司制定并发布。Modbus协议自从1979年出现后,使得成千上万台自动化设备能够通讯。也使其成为了工业串行链路的事实标准。
其广泛的普及 有其协议的特点,我们在下文将重点说明。另一个非常优秀的特点就是其标准开放,免费使用。无许可证授权费用,亦不会侵犯知识产权,更加不会遭到封杀。
Modbus协议,在OSI标准分层位于第七层——应用层,即其为一项应用层报文传输协议。正因为它为应用层协议,所以其用于通过不同类型的总线或网络连接的设备之间的客户端/服务器通讯,典型传输介质即为RS485。
RS485与Modbus
RS485总线(民间说明,其并非现场总线),做为工业自动化设备实时、可靠、低成本,部署性价比超级高的通讯链路自然应用非常广,其半双工的工作模式,典型应用场景即为“一主多从”,而Modbus协议又适配在“一主从从”的场景,两者“一拍即合”。“部署RS485就路Modbus协议”也就使二者常常形影不离,亲密无间。也给了初入行的小伙伴们一些假象,认为“Modbus只有RS485!”“RS485与Modbus是一回事!”现在明白了吗?
协议格式
Modbus协议,分为设备ID地址,功能码,寄存器起始地址,寄存器数量与CRC16校验字段。
此处以功能码0x03,读输入线圈为例
主机请求命令
从机响应命令
当然,Modbus还支持其它协议,这里由于篇幅原因不过多讲解。(如果有需要,大家在下面回帖哟,给版主些更新的力量)
FreeModbus协议栈
我们从github上面clone下来源代码。将代码copy到项目工程里,需要移植的文件,其将接口放置到了demo/bare/port文件夹。
版主依然实现portserial.c与porttime.c中的API函数。其余两个文件并不需要咱们来修改。
简单说要移植的内容API,LPC1768的串口的字符发送与接收,串口的使能与关闭。定时器的开启与中断产生等。
验证
因为Modbus协议是客户端/服务端的通讯模型,因为,我们的设备是从站,而上位机PC端为主站。在本次验证过程中,我们选用主站协议的典型软件ModbusPoll来实现。
在配置好从站地址与寄存器地址后,ModbusPoll就开始循环读取LPC1768设备上的数据了。
|