与 C# 程序相比,使用 jSerialComm 库的 Java 程序中的数据损坏问题

问题描述 投票:0回答:1

我有一个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 c# serial-port com-port
1个回答
0
投票

在 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
© www.soinside.com 2019 - 2024. All rights reserved.