我有两个USB串口电缆在同一台PC上的2个不同的USB端口上相互连接。
地线和A和B电缆都相互连接。电压电缆是隔离的。
当我使用串行终端发送ASCII字符时,我可以双向通信。
但是,当我为一个modbus奴隶和一个大师运行一个python脚本它有时会工作,有时它不会。我找不到一个模式,当它工作时和不工作时。
我可以看到它何时工作所有发送的字节都由从机接收但是当它不工作时,从机接收至少1个字节而不是其余的。 然后它显然会出现CRC错误并崩溃。 为什么通过modbus而不是ASCII串行终端丢失了一些字节?
这是硬件问题吗?我该怎么知道?我没有连接额外的电阻器。
我可以显示奴隶和主人的代码,谢谢
如您所见,我有三根并联的USB转串口电缆,橙色和黄色电缆是A和B电缆,黑色电缆是接地电缆。
电缆是http://www.ftdichip.com/Products/Cables/USBRS485.htm
这是奴隶代码,但我尝试了不同的库并得到了相同的结果,所以我怀疑它的代码:
/**
* Calculate Lowest Common Multiplier
*/
public static int LCM(int a, int b) {
return (a * b) / GCF(a, b);
}
/**
* Calculate Greatest Common Factor
*/
public static int GCF(int a, int b) {
if (b == 0) {
return a;
} else {
return (GCF(b, a % b));
}
}
编辑:我刚改为波特率为115200,误差更小。还有什么我可以做的吗?