我在 Mac (10.8.5) 上使用 SainSmart 4 Relay USB 时遇到问题。我尝试在使用 d2xx/fdti 驱动程序时通过 Java 进行访问。
这是我的 Java 代码:
public class Demo {
public static void main(String[] args) throws InterruptedException {
try {
List<FTDevice> fTDevices;
fTDevices = FTDevice.getDevices();
for (FTDevice fTDevice : fTDevices) {
System.out.println("fTDevice:" + fTDevice);
System.out.println("fTDevice.DevType:" + fTDevice.getDevType());
System.out.println("fTDevice.DevID:" + fTDevice.getDevID());
System.out.println("fTDevice.DevLocationID:" + fTDevice.getDevLocationID());
fTDevice.open();
fTDevice.setBaudRate(9600);
[...]
fTDevice.close();
}
} catch (FTD2XXException ex) {
Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我刚刚得到这个异常:
com.ftdi.FTD2XXException: D2XX error, ftStatus:INVALID_HANDLE
at com.ftdi.FTDevice.ensureFTStatus(FTDevice.java:139)
at com.ftdi.FTDevice.setBaudRate(FTDevice.java:324)
at de.relay.Demo.main(Demo.java:27)
“INVALID_HANDLE”是什么意思?
我还尝试通过串行端口进行连接,这有效。
# kextload -b com.FTDI.driver.FTDIUSBSerialDriver
# cu -l /dev/tty.usbserial-XXXXXXX --baud 9600
Connected.
哪个“回声”会切换继电器?我该如何修复异常?我真的很感谢任何帮助!
干杯, 菲利克斯
最佳答案
我在 Fedora 19 上遇到了同样的问题。
事实证明,该问题是在 64 位 JVM 上运行的 JavaFTD2XX 的问题。句柄看起来是一个整数,但对于 64 位来说它需要是长。
切换到 32 位 JRE 后它就可以工作了。
对于 Mac,您可能只需将 -d32
参数添加到 JVM。
关于java - 在 Mac OS 10.8.5 上使用 Java 访问 SainSmart 4 Relay 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448032/