Hướng dẫn đọc dữ liệu Serial Port loadcell lên C#

Trong các hệ thống cân điện tử, loadcell thường kết nối với bộ hiển thị (indicator), sau đó xuất dữ liệu qua cổng Serial (RS232 / RS485). Nhiệm vụ của C# là đọc dữ liệu này và xử lý.

1. Nguyên lý hoạt động

Flow cơ bản:

Loadcell → Indicator → Serial (COM) → C# đọc dữ liệu

Indicator sẽ gửi dữ liệu dạng chuỗi, ví dụ:

ST,GS,+00012.34kg

hoặc

+12.34

2. Chuẩn bị

Phần cứng

  • Loadcell + bộ hiển thị (indicator)
  • Cáp RS232 hoặc RS485 (có thể cần converter USB)

Thông số Serial (rất quan trọng)

Bạn phải kiểm tra đúng thông số từ thiết bị:

  • BaudRate: 9600 / 19200 / 38400
  • DataBits: 7 hoặc 8
  • Parity: None / Even / Odd
  • StopBits: 1 hoặc 2

Ví dụ phổ biến:

9600, 8, N, 1

3. Code C# đọc Serial Port

Sử dụng thư viện:

using System.IO.Ports;
Ví dụ cơ bản
SerialPort serialPort = new SerialPort(“COM3”, 9600, Parity.None, 8, StopBits.One);
private void Form1_Load(object sender, EventArgs e)
{
serialPort.DataReceived += SerialPort_DataReceived;
serialPort.Open();
}

private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = serialPort.ReadLine();
Invoke(new Action(() =>
{
txtWeight.Text = data;
}));
}

4. Xử lý dữ liệu từ Loadcell

Dữ liệu thực tế thường có ký tự dư, cần lọc:

Ví dụ chuỗi nhận:

ST,GS,+00012.34kg
Tách số:
string raw = “ST,GS,+00012.34kg”;
string weight = System.Text.RegularExpressions.Regex
.Match(raw, @”[-+]?\d*\.?\d+”)
.Value;

txtWeight.Text = weight;

5. Các chế độ đọc dữ liệu

5.1 ReadLine (phổ biến)

  • Dữ liệu có ký tự kết thúc (\n)
serialPort.ReadLine();

5.2 ReadExisting

string data = serialPort.ReadExisting();

5.3 Read byte (nâng cao)

byte[] buffer = new byte[serialPort.BytesToRead];
serialPort.Read(buffer, 0, buffer.Length);

6. Lỗi thường gặp và cách xử lý

6.1 Không nhận dữ liệu

  • Sai COM
  • Sai BaudRate
  • Chưa mở port

6.2 Dữ liệu bị loạn ký tự

  • Sai Parity / DataBits
  • Sai chuẩn RS232 vs RS485

6.3 Không vào event DataReceived

  • Chưa gán event
  • Thiết bị chưa gửi dữ liệu

6.4 Treo chương trình

  • Không dùng Invoke() khi update UI

7. Test nhanh bằng phần mềm

Trước khi code, nên test bằng:

  • Hercules
  • Serial Port Monitor
  • Putty

→ Nếu phần mềm không đọc được → C# cũng không đọc được

8. Kinh nghiệm thực tế

  • Luôn hỏi hãng:
    • Format dữ liệu
    • Protocol (ASCII hay Modbus)
  • Nếu là RS485:
    • Có thể dùng Modbus RTU → không phải đọc chuỗi thường
  • Một số cân cần gửi lệnh mới trả dữ liệu

9. Ví dụ nâng cao (tự động reconnect)

private void ConnectSerial()
{
try
{
if (!serialPort.IsOpen)
{
serialPort.Open();
}
}
catch
{
// thử lại sau
}
}
Kết luận

Đọc dữ liệu loadcell qua Serial trong C# không khó, quan trọng nhất là:

  • Đúng thông số COM
  • Hiểu format dữ liệu
  • Xử lý chuỗi chính xác

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *