Tình hình là em đã truyền dât từ vi xử lý lên C# được rồi nhưng không hiểu sao mà khi nhấn nút đọc kết quả thì có lúc nó nhận đủ data có khi nó nhận không đủ data đã gửi. Ví dụ dưới vi xử lý gửi là 13523 mà trên C# có khi nhận đủ 13523 cũng có khi nó chỉ nhận là 3 hoặc là 23 hoặc là 523 có khi không có gì. Em đã tìm nhiều cách rồi mà không làm sao cho C# nhận đủ data hết. Mong các Pro giúp em với.
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Xml;
namespace Giao_tiep
{
public partial class Form1 : Form
{
SerialPort P = new SerialPort(); // Khai báo 1 Object SerialPort mới.
string InputData = String.Empty; // Khai báo string buff dùng cho hiển thị dữ liệu sau này.
delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string
public Form1()
{
InitializeComponent();
string[] ports = SerialPort.GetPortNames();
// Thêm toàn bộ các COM đã tìm được vào combox cbCom
cbCom.Items.AddRange(ports); // Sử dụng AddRange thay vì dùng foreach
P.ReadTimeout = 500;
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void ngat_Click(object sender, EventArgs e)
{
P.Close();
status.Text = "Đã Ngắt Kết Nối ";
cbCom.Enabled = true;
ngat.Visible = false;
ketnoi.Visible = true;
dockq.Visible = false;
thoat.Visible = true;
timer2.Stop();
data = "";
kq.Text = "- - - - - ";
}
private void ketnoi_Click(object sender, EventArgs e)
{
try
{
P.BaudRate = 9600;
P.DataBits = 8;
P.Parity = Parity.None;
P.StopBits = StopBits.One;
P.Handshake = Handshake.None;
ngat.Visible = true;
ketnoi.Visible = false;
cbCom.Enabled = false;
dockq.Visible = true;
P.Open();
status.Text = "Đang kết nối với cổng " + cbCom.SelectedItem.ToString() + ".";
status.ForeColor = Color.Black;
}
catch (Exception ex)
{
thoat.Visible = true;
dockq.Visible = false;
ketnoi.Visible = true;
ngat.Visible = false;
cbCom.Enabled = true;
MessageBox.Show("Không kết nối được.", "Thử lại", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void thoat_Click(object sender, EventArgs e)
{
this.Close();
}
private void cbCom_SelectedIndexChanged(object sender, EventArgs e)
{
if (P.IsOpen)
{
P.Close(); // Nếu đang mở Port thì phải đóng lại
}
P.PortName = cbCom.SelectedItem.ToString(); // Gán PortName bằng COM đã chọn
}
private void dockq_Click(object sender, EventArgs e)
{
timer2.Interval = 500;
timer2.Enabled = true;
timer2.Start();
}
private void kq_Click(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
thoigian.Text= DateTime.Now.ToString("hh:mm:ss");
}
private void label1_Click(object sender, EventArgs e)
{
}
private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void thoigian_Click(object sender, EventArgs e)
{
}
string data;
private void timer2_Tick(object sender, EventArgs e)
{
data = P.ReadExisting();
thoat.Visible = false;
if (data != String.Empty)
{
kq.Text = data;
}
}
}
}
Comment