我有一个Java程序,它与各种设备通信以通过串行通信检索数据。我正在使用 jSerialComm 库来实现此目的。
但是,当我使用此 Java 程序从特定设备检索数据时,数据似乎已损坏。
令人惊讶的是,当我使用没有任何外部库的 C# 程序从同一设备检索数据时,数据被正确接收,没有任何损坏。
设备配置设置如下:
Port: COM3
BaudRate: 2400
Parity: EVEN
Databits: 7
Stopbits: 1
在我的 Java 程序中,我使用 jSerialComm 库,而在 C# 程序中,我不使用任何外部库。
我的 Java 程序可以使用相同通信设置从其他设备成功检测并检索正常数据。数据损坏问题似乎是特定于该特定设备的。
我比较了两个程序的日志,发现 C# 程序始终接收预期的数据,而 Java 程序始终从该特定设备接收损坏的数据。我也尝试过修改Java程序中的波特率和奇偶校验设置,但问题仍然存在。
Java程序连接设备:
SerialPort[] serialPorts = SerialPort.getCommPorts();
for (SerialPort port : serialPorts) {
if (DEVICE_PORT.equals(port.getSystemPortName())) {
bolFound = true;
serialPort = port;
try {
log.info("Opening port '" + DEVICE_PORT + "'...");
log.info("Connecting to device '" + DEVICE_NAME + "'...");
serialPort.setComPortParameters(DEVICE_RATE, DEVICE_DATABITS, DEVICE_STOPBITS, DEVICE_PARITY);
serialPort.addDataListener(this);
serialPort.openPort();
...........
Java 程序日志文件:
2023-11-09 10:38:58.165 INFO 21320 [Thread-117 thread] h.h.c.v.l.BaseListener : Trying to init Test Listener (COM5)...
2023-11-09 10:38:58.350 INFO 21320 [Thread-117 thread] h.h.c.v.l.BaseListener : Opening port 'COM5'...
2023-11-09 10:38:58.350 INFO 21320 [Thread-117 thread] h.h.c.v.l.BaseListener : Connecting to device 'Testing'...
2023-11-09 10:38:58.350 INFO 21320 [Thread-117 thread] h.h.c.v.l.BaseListener : Opening port 'COM5' Success
2023-11-09 10:38:58.350 INFO 21320 [Thread-117 thread] h.h.c.v.l.BaseListener : Connecting to device 'Testing' Success
2023-11-09 10:38:59.211 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:38:59.215 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:[
2023-11-09 10:38:59.217 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[
2023-11-09 10:38:59.219 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:38:59.221 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:l
2023-11-09 10:38:59.222 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l
2023-11-09 10:38:59.225 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:38:59.227 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:@ 1
2023-11-09 10:38:59.229 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1
2023-11-09 10:39:00.215 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:39:00.215 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:{=Um%
2023-11-09 10:39:00.226 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1{=Um%
2023-11-09 10:39:00.230 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:39:00.232 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:l
2023-11-09 10:39:00.232 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1{=Um%l
2023-11-09 10:39:00.236 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:39:00.237 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response: ,a
2023-11-09 10:39:00.238 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1{=Um%l ,a
2023-11-09 10:39:00.241 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:39:00.242 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:
2023-11-09 10:39:00.243 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1{=Um%l ,a
2023-11-09 10:39:01.202 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : COM5 Reading Comm...
2023-11-09 10:39:01.217 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : Real Time Response:
2023-11-09 10:39:01.217 INFO 21320 [Thread-120 thread] h.h.c.v.l.TestListener : value:[ l@ 1{=Um%l ,a
C#程序连接设备:
string portName = "COM5";
int baudRate = 9600;
Parity parity = Parity.None;
int dataBits = 8;
StopBits stopBits = StopBits.One;
_serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
_serialPort.DataReceived += SerialPort_DataReceived;
_serialPort.Open();
C# 程序日志文件:
[09/11/2023 10:53:09] Received data: US,+000091.50 kg
[09/11/2023 10:53:09] Received data: US,+000091.50 kg
[09/11/2023 10:53:10] Received data: US,+000091.50 kg
[09/11/2023 10:53:10] Received data: US,+000091.50 kg
[09/11/2023 10:53:10] Received data: S
[09/11/2023 10:53:10] Received data: T,+171.4 cm
[09/11/2023 10:53:11] Received data: ST,+000091.50 kg
[09/11/2023 10:53:11] Received data: US,+0000
[09/11/2023 10:53:11] Received data: 91.50 kg
[09/11/2023 10:53:12] Received data: US,+000091.50 kg
[09/11/2023 10:53:12] Received data: US,+000091.50 kg
[09/11/2023 10:53:13] Received data: US,+00
[09/11/2023 10:53:13] Received data: 0091.50 kg
[09/11/2023 10:53:13] Received data: US,+000091.50 kg
我的目标是理解为什么使用 jSerialComm 库的 Java 程序仅在该特定设备上遇到数据损坏,而它可以成功地从其他设备检索正常数据。
此外,如果您能提供有关如何修改我的 Java 程序以从该特定设备正确接收数据的任何见解或建议,我将不胜感激。
谢谢您的帮助!
在 Java 中,更改
Port
、Baudrate
、Parity
和 Databits
的配置,并将其与 C# 匹配。
Port: COM3
BaudRate: 2400
Parity: EVEN
Databits: 7
Stopbits: 1
更改为
Port: COM5
BaudRate: 9600
Parity: None
Databits: 8
Stopbits: 1