我的单片机是原子的阿波罗STM32F429 与施耐德的PLC通过Modbus协议进行485通讯。
单片机为主站,PLC为从站。
调试时发现PLC能够收到单片机的下发通讯报文,并能正确动作,但单片机收到的PLC回复报文死活不对。
我在通讯链路中加入USB转485对整个的通讯报文监视发现PLC的回复报文是正确的,但单片机就是收不到正确报文。
我通过对比报文发现单片机收到的报文比PLC发出报文少了开始的近11个字节的数据。
为了查找这个原因,我在线跟踪后发现485芯片的读取控制端用的是PCF8574的P6口,这个是IIC接口,485芯片从发送模式改为接收模式需要运行这个PCF8574_WriteBit(RS485_RE_IO,en)函数,而运行这个函数需要将近25ms的时间,就是这个25ms造成了有部分数据无法接收。从而使得MODBUS通讯一直报错无法正常通讯。
最后希望把485端口的控制端直接用IO控制,减少切换时间。 |