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();
}
{
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;
.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);
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
}
}
{
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

