|
当我使用PCIe-8431通过双线自动模式的MODBUS与外部仪器进行通信的时候,通信出现了问题。但是我可以使用一个第三方的MODBUS板卡来与这个仪器进行正常的通信。图1是在RS-485总线环境下用示波器捕获到的数据。
图 1.
MODBUS主设备输出的数据显示在左侧,而外部仪器的响应显示在右侧。我已经确认过我的连线和程序中写入的数据是正确的。从图1可以看到,来自主设备的数据看起来是一样的,除了一开始简短的突刺。那么,这有没有可能是两种情况下(使用PCIe-8431或者第三方板卡),数据看起来不一样的原因呢?
为了弄清这里发生了什么情况,我们首先回顾下双线自动模式的工作流程。
1.主机向通用异步收发传输器(UART) FIFO中写入数据。
2. UART发出数据终端就绪信号(DTR),同时发出数据。
3. FPGA根据UART的DTR信号,发出启用收发器信号。这里可以看出,在启用收发器和UART发出DTR信号之间有一个延迟。
图2所示的是,PCIe-8431和第三方板卡之间输出信号的不同。
图2
现在详细分析下数据中一开始的突刺,我们可以发现,在两种情况下,收发器被启用的时间稍有不同,更准确的说,第三方板卡在接收收发器输入前,就启用了收发器。这会导致收发器输出在一开始会被拉高一小段时间,然后再开始输出它的数据。
由于开始时间不一致,我们可以看到,在PCIe-8431收发器输出的过度是从0V到-3.3V,而第三方板卡是从3.3V到-3.3V的。外部仪器的接收器不能识别从0到3.3V的下降沿,所以也就不能识别开始位。
如果是这种情况,那么很有可能是外部仪器不具备自动防故障装置,或者在总线上没有偏置电阻。在图1中,我们可以看到空闲状态总是0V,并且处于不确定状态,因此可以确定总线上没有偏置电阻。为了解决这个问题,请在RS-485总线上加上偏置电阻,因为PCIe-8431\8\16上没有内置偏置电阻选项。偏执电阻的说明请参照这篇文档Serial Troubleshooting Wizard。请注意所有指定的偏置电阻和终端电阻都是必须的。
|