Я пытаюсь создать приложение C# для чтения данных с весов (HLWagen IT1000). При использовании порта RS232 приложение смогло обнаружить и отобразить данные взвешивания. Вот мой код.
private void Weighing_Load(object sender, EventArgs e)
{
string[] availablePorts = SerialPort.GetPortNames();
if (!availablePorts.Contains(comPort))
{
MessageBox.Show("Make sure the printer is connected to COM1.", "Serial
Port Not Found", MessageBoxButtons.OK, MessageBoxIcon.Warning);
Application.Exit();
return;
}
// Close and dispose of any existing serial port
if (_serialPort != null && _serialPort.IsOpen)
{
_serialPort.Close();
}
if (_serialPort != null)
{
_serialPort.Dispose();
}
// Create and configure a new SerialPort object
_serialPort = new SerialPort(comPort, BaudRate, Parity.None, 8,StopBits.One);
_serialPort.DataReceived += SerialPortOnDataReceived;
try
{
_serialPort.Open(); // Open the serial port
}
catch (Exception ex)
{
MessageBox.Show("Error opening the serial port: " + ex.Message, "Serial
Port Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void SerialPortOnDataReceived(object sender,
SerialDataReceivedEventArgs serialDataReceivedEventArgs)
{
if (InvokeRequired) // { SerialPortOnDataReceived(sender,
serialDataReceivedEventArgs); })); //= str.Length)
{
// Handle the error here, such as by logging the error or displaying
a message to the user
return;
}
int endIndex = str.IndexOf("k", startIndex);
if (endIndex < 0 || endIndex > str.Length)
{
// Handle the error here, such as by logging the error or displaying
a message to the user
return;
}
string weightStr = str.Substring(startIndex, endIndex - startIndex);
//test display
//MessageBox.Show(weightStr);
// Trim the "k" character from the weight measurement
weightStr = weightStr.TrimEnd('k');
// Display the weight measurement and "S S" tag in the label
weight_label.Text = $"{weightStr} kg";
weightStr = str.Substring(startIndex, endIndex - startIndex - 1);
current_weight =weightStr;
current_weight = float.Parse(weightStr);
using (StreamWriter writer = new StreamWriter("log_weight.txt", true))
{
writer.WriteLine(weightStr);
writer.Flush();
}
}
}
S D 2.535 kg
S D 2.535 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S S 2.534 kg
S D 2.575 kg
S D 2.555 kg
но когда я использовал преобразователь RS-232 USB в последовательный преобразователь, используя тот же код, данные не были согласованными:
S S 2.570 кг
S D 2,565 кг
S D 2,535 кг
S D
2.
535 кг
S D
2,540
кг
S
D
2,550 кг
S
D
2,5
50 кг
S
D 2.
595 кг
S
D 2.
610 кг
S
D 2.
620 кг
S
D
2,625 кг
S
D 2,6
30 кг
S
D
2,630 кг
г
S
D 2,6
25 кг
S
D 2.
620 кг
S
D 2.
600 кг
S
D 2
.615 кг
S
D
2,575 кг
г
S
D 2
,565 кг
S D
2,555
кг
S
D
2,545
кг
S
D 2
.535 кг
S D
2.535
кг
S
D 2.
535 кг
S
D 2.
535 кг
S D
2,54
5 кг
S
D 2.
560 кг
S
D
2,555 кг
г
S
D 2.
555 кг
S
D
2,550 кг
S D
2,550
кг
S
D 2,5
50 кг
S
D 2,5
45 кг
S
D 2,4
75 кг
S
D
2,45
5 кг
S
D 2
.490 кг
S D
2,4
50 кг
S
D
2,355 кг
S
D 1.
615 кг
S
D 1.
425 кг
S
D 1.
405 кг
S
D 1
.410 кг
Мне нужна помощь, как обрабатывать такие данные, спасибо!
Я пытаюсь создать приложение C# для чтения данных с весов (HLWagen IT1000). При использовании порта RS232 приложение смогло обнаружить и отобразить данные взвешивания. Вот мой код. [code] private void Weighing_Load(object sender, EventArgs e) {
string[] availablePorts = SerialPort.GetPortNames(); if (!availablePorts.Contains(comPort)) { MessageBox.Show("Make sure the printer is connected to COM1.", "Serial Port Not Found", MessageBoxButtons.OK, MessageBoxIcon.Warning); Application.Exit(); return;
}
// Close and dispose of any existing serial port if (_serialPort != null && _serialPort.IsOpen) { _serialPort.Close(); } if (_serialPort != null) { _serialPort.Dispose(); }
// Create and configure a new SerialPort object _serialPort = new SerialPort(comPort, BaudRate, Parity.None, 8,StopBits.One); _serialPort.DataReceived += SerialPortOnDataReceived;
try { _serialPort.Open(); // Open the serial port
} catch (Exception ex) { MessageBox.Show("Error opening the serial port: " + ex.Message, "Serial Port Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs) { if (InvokeRequired) // { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); })); //= str.Length) { // Handle the error here, such as by logging the error or displaying a message to the user return; }
int endIndex = str.IndexOf("k", startIndex); if (endIndex < 0 || endIndex > str.Length) { // Handle the error here, such as by logging the error or displaying a message to the user return; }
// Trim the "k" character from the weight measurement weightStr = weightStr.TrimEnd('k');
// Display the weight measurement and "S S" tag in the label weight_label.Text = $"{weightStr} kg"; weightStr = str.Substring(startIndex, endIndex - startIndex - 1); current_weight =weightStr; current_weight = float.Parse(weightStr);
using (StreamWriter writer = new StreamWriter("log_weight.txt", true)) { writer.WriteLine(weightStr); writer.Flush(); }
} } [/code] и вот результат: [code]S D 2.535 kg S D 2.535 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S S 2.534 kg S D 2.575 kg S D 2.555 kg [/code] но когда я использовал преобразователь RS-232 USB в последовательный преобразователь, используя тот же код, данные не были согласованными:
S S 2.570 кг S D 2,565 кг S D 2,535 кг
S D 2. 535 кг
S D 2,540 кг
S D 2,550 кг
S D 2,5 50 кг
S D 2. 595 кг
S D 2. 610 кг
S D 2. 620 кг
S D 2,625 кг
S D 2,6 30 кг
S D 2,630 кг г
S D 2,6 25 кг
S D 2. 620 кг S D 2. 600 кг
S D 2 .615 кг
S D 2,575 кг г
S D 2 ,565 кг
S D 2,555 кг
S D 2,545 кг
S D 2 .535 кг
S D 2.535 кг
S D 2. 535 кг
S D 2. 535 кг
S D 2,54 5 кг
S D 2. 560 кг
S D 2,555 кг г
S D 2. 555 кг
S D 2,550 кг
S D 2,550 кг
S D 2,5 50 кг
S D 2,5 45 кг
S D 2,4 75 кг
S D 2,45 5 кг
S D 2 .490 кг
S D 2,4 50 кг
S D 2,355 кг
S D 1. 615 кг
S D 1. 425 кг
S D 1. 405 кг
S D 1 .410 кг
Мне нужна помощь, как обрабатывать такие данные, спасибо!
У меня проблема со считыванием веса с весов.
My Main просто подключается через TCP к удаленному хосту и считывает поток, чтобы определить вес.
public static void Main(String[] args)
{
TcpClient tcpClient =...
Я работаю над сайтом WordPress с BuddyPress, темой BuddyX Pro и плагином Wise Chat Pro. Недавно я занимался борьбой со злоупотреблениями на странице группового чата, где пользователи часто обходят баны по IP-адресу с помощью TOR или VPN. Чтобы...
Я работаю над сайтом WordPress с BuddyPress, темой BuddyX Pro и плагином Wise Chat Pro. Недавно я занимался борьбой со злоупотреблениями на странице группового чата, где пользователи часто обходят баны по IP-адресу с помощью TOR или VPN. Чтобы...
Я работаю над сайтом WordPress с BuddyPress, темой BuddyX Pro и плагином Wise Chat Pro. Недавно я боролся со злоупотреблениями на странице группового чата, где пользователи часто обходят баны по IP-адресу с помощью TOR или VPN. Чтобы повысить...