C# Read and Write data to COM Serial Port, R232 có nghĩa là đọc và ghi dữ liệu vào cổng COM R232 bằng ngôn ngữ lập trình C#.
Khi làm phần mềm điều khiển thiết bị, bạn cần phải kết nối tới thiết bị để lấy dữ liệu hoặc gửi dữ liệu cho thiết bị thông qua cổng COM Serial Port hoặc R232 hoặc cổng mạng RJ45 hoặc Wifi, Bluetooth…
Bài này chúng tôi sẽ hướng dẫn các bạn viết chương trình mô phỏng quá trình kết nối và gửi nhận dữ liệu giữa 2 cổng COM1 và COM2 để mô phỏng việc kết nối, gửi và nhận dữ liệu từ chương trình phần mềm trên máy tính-Computer đến thiết bị điều khiển.
Để xây dựng chương trình phần mềm kết nối máy tính (Computer) với thiết bị (Máy , PLC…) thông qua cổng COM Serial Port, R232 sử dụng ngôn ngữ lập trình C# trong Window Form bạn cần làm các bước sau:
1.Tạo Project kết nối cổng COM Serial Port, R232 trong Window Form
2.Kết nối máy tính (Computer) với thiết bị (Machine, Device) thông qua cổng COM Serial Port, R232 để kiểm tra kết nối, gửi dữ liệu và nhận dữ liệu.
Chúng tôi sẽ tạo Project kết nối cổng COM trong Window Form bằng ngôn ngữ lập trình C#.Chương trình mô phỏng quá trình kết nối dữ liệu giữa 2 thiết bị máy tính (Computer) và thiết bị điều khiển (Machine, Device). Nếu các bạn có thiết bị thật các bạn có thể thử nghiệm và test trên các thiết bị vật lý thật.Trong bài này chúng tôi sẽ dẫn các bạn Test và thử nghiệm bằng phần mềm tạo cổng COM ảo Virtual Serial Port Driver Pro.
- Tạo dự án với tên là COM_Demo.
Tạo Form tên là Demo_COM_Port :
Form Demo_COM_Port bao gồm các Controls :
+ cbo_COMPort1 : là Combobox để load các cổng COM trong máy tính.
+ txt_ShowData : là Texbox dùng để nhập dữ liệu bạn cần ghi vào cổng COM.
+ btn_OpenCOM1 : là nút Button Open COM 1 đùng để mở và kết nối cổng COM 1.
+ btn_CloseCOM1: là nút Button Close COM 1 dùng để đóng kết nối cổng COM 1
+ btn_COM1_Send: là nút Button Send Data Form COM1 to COM2 dùng để ghi dữ liệu vào COM 1
+ cbo_COMPort2 : là Combobox để load các cổng COM trong máy tính.
+ txt_ShowData2 : là Texbox dùng để nhập dữ liệu bạn cần ghi vào cổng COM.
+ btn_OpenCOM2 : là nút Button Open COM 2 đùng để mở và kết nối cổng COM 2.
+ btn_CloseCOM2: là nút Button Close COM 2 dùng để đóng kết nối cổng COM 2
+ btn_COM2_Send: là nút Button Send Data Form COM2 to COM1 dùng để ghi dữ liệu vào COM2.
Thêm 2 control serialPort1, serialPort2 bằng cách kéo control SerialPort từ Toolbox vào Form Demo_COM_Port như hình sau:
SerialPort là một control được dùng để giao tiếp với cổng COM.
Viết hàm Get_COM_Port1(), Get_COM_Port2() để load danh sách cổng COM trong máy tính vào Combobox cbo_COMPort1, cbo_COM2.
private void Get_COM_Port1()
{
// Get a list of serial port names - Lấy danh sách cổng COM.
string[] ports = SerialPort.GetPortNames();
// Display each port name to the console - Hiển thị cổng COM vào cbo_COMPort1.
foreach (string port in ports)
{
cbo_COMPort1.Items.Add(port);
}
}
private void Get_COM_Port2()
{
// Get a list of serial port names - Lấy danh sách cổng COM.
string[] ports = SerialPort.GetPortNames();
// Display each port name to the console - Hiển thị cổng COM vào cbo_COMPort2.
foreach (string port in ports)
{
cbo_COM2.Items.Add(port);
}
}
Chạy chương trình xem kết quả:
Sau khi tạo Form và thêm các controls xong bây giờ chúng ta sẽ viết code để mở và kết nối với cổng COM Serial Port.Nếu mở cổng COM và kết nối thành công thì nút Button btn_OpenCOM1, btn_OpenCOM1 sẽ có màu xanh (Green).Nếu cổm COM là đóng hoặc ngắt kết nối sẽ có màu đỏ (Red).
Để mở và kết nối cổng COM (Open COM Port and Close COM Port) sử dụng phương thức Open().
private void btn_OpenCOM1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
serialPort1.PortName = cbo_COMPort1.Text;
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Open(); //Mở cổng COM
if (serialPort1.IsOpen)
{
btn_OpenCOM1.BackColor = Color.Green;
btn_OpenCOM1.ForeColor = Color.White;
btn_OpenCOM1.Text = "COM Openned";
}
else
{
btn_OpenCOM1.BackColor = Color.Red;
btn_OpenCOM1.ForeColor = Color.White;
btn_OpenCOM1.Text = "COM Closed";
}
}
private void btn_OpenCOM2_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.Close();
}
serialPort2.PortName = cbo_COM2.Text;
serialPort2.DataReceived += new SerialDataReceivedEventHandler(serialPort2_DataReceived);
serialPort2.Open();
if (serialPort2.IsOpen)
{
btn_OpenCOM2.BackColor = Color.Green;
btn_OpenCOM2.ForeColor = Color.White;
btn_OpenCOM2.Text = "COM Openned";
}
else
{
btn_OpenCOM2.BackColor = Color.Red;
btn_OpenCOM2.ForeColor = Color.White;
btn_OpenCOM2.Text = "COM Closed";
}
}
Chạy chương trình xem kết quả:
Ghi dữ liệu vào cổng COM sử dụng phương thức Write().
Giả sử chúng ta sẽ nhập dữ liệu là 'A' vào ô texbox Send data 1 sau đó nhấn nút Button Send Data Form COM1 to COM2 để ghi dữ liệu vào cổng COM1.
private void btn_COM1_Send_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
// Ghi dữ liệu vào cổng COM
serialPort1.Write(txt_ShowData.Text);
}
}
Đọc dữ liệu từ cổng COM sử dụng phương thức ReadExisting().
Sau ghi dữ liệu 'A' vào cổng COM1 bây giờ chúng ta sẽ viết code để COM2 đọc và nhận dữ liệu từ COM1.
private void serialPort2_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// COM 2 đọc dữ liệu
string data2 = serialPort2.ReadExisting();
if (data2.ToString() != "")
{
if (txt_ShowData2.InvokeRequired)
{
txt_ShowData2.Invoke(new MethodInvoker(delegate { txt_ShowData2.Text = data2.Trim(); }));
}
}
}
Chạy chương trình xem kết quả:
Để đóng cổng COM sử dụng phương thức Close().
private void btn_CloseCOM1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
btn_OpenCOM1.BackColor = Color.Red;
btn_OpenCOM1.ForeColor = Color.White;
btn_OpenCOM1.Text = "COM Closed";
}
}
private void btn_CloseCOM2_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.Close();
btn_OpenCOM2.BackColor = Color.Red;
btn_OpenCOM2.ForeColor = Color.White;
btn_OpenCOM2.Text = "COM Closed";
}
}
Chạy chương trình xem kết quả:
Để thử test và thử nghiệm chương trình các bạn có thế kết nối máy tính (Computer) với các thiết bị điều khiển vật lý thật qua cổng COM.Nếu không có thiết bị vật lý thật để test, các bạn có thể sử dụng phần mềm tạo cổng COM ảo Virtual Serial Port Driver Pro để test.Trong bài này chúng tôi sẽ hướng dẫn các bạn test kết nối tới COM ảo và gửi dữ liệu qua cổng COM.
2.1 Kiểm tra kết nối, mở cổng COM :
-Mở và kết nối tới COM1
-Mở và kết nối tới COM1 và COM2
2.2 Kiểm tra ghi, đọc dữ liệu của COM:
2.3 Kiểm tra đóng Close cổng COM