在移植过程中得益于这两篇blog,大家可以参考下。
http://ntn314.blog.163.com/blog/static/161743584201233084434579/
http://bbs.eeworld.com.cn/thread-362508-1-1.html
这两篇博客上对modbus协议以及移植解释的很清楚,这里就不在啰嗦了。
首先,要下载一个freemodbus,自己写的modbus协议也可以,但考虑到时间和可扩展性还是选择开源的比较妥当些。这个协议最核心部分我感觉就是对寄存器的读写,当然如果涉及到PLC当然还有继电器等,其他部分已经把接口给你了,然后自己就按照说明去添加就可以。对了,在移植中当时对这个过程
*pucRegBuffer++ = ( uint8_t )( usRegHoldingBuf[iRegIndex] >> 8 );
*pucRegBuffer++ = ( uint8_t )( usRegHoldingBuf[iRegIndex] & 0xFF );
有点模糊,但在纸上画一下就豁然开朗了。其他的就没有难度了。下面就进入正文:
首先需要改动的部分还主要是
eMBRegInputCB(UCHAR * pucRegBuffer,USHORT usAddress,USHORT usNRegs)、
eMBRegHoldingCB(UCHAR * pucRegBuffer,USHORT usAddress,USHORT usNRegs,
eMBRegisterMode eMode)、
eMBRegCoilstCB(UCHAR * pucRegBuffer,USHORT usAddress,USHORT usNCoils,
eMBRegisterMode eMode)、
eMBRegInputCB(UCHAR * pucRegBuffer,USHORT usAddress,USHORT usNDiscrete)
这四个函数,其他部分主要是对portserial.c和porttimer.c这两个文件(相对于你下载的freemodbus-v1.5.0)的改动。而main函数你可以把下载的freemodbus文件中的demo文件下有一个BARE文件,这个文件夹有一个demo.c程序直接把main函数copy过来就大功告成了。。
好了,附工程文件
http://www.oschina.net/code/snippet_2241389_52045
至于freemodbus大家可以百度下就出来了。。
第一篇博客,如有错误希望大家相互讨论。
来源:oschina
链接:https://my.oschina.net/u/2241389/blog/528631