Setp1:创建串口对象,并配置其属性,也可以使用SerialPort控件
SerialPort sp = new SerialPort();
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.ReadBufferSize = 500000;
//读写超时,如果底层串口驱动效率问题,能有效的避免死锁
sp.ReadTimeout = 200;
sp.WriteTimeout = 200;
sp.DtrEnable = true; //如果是RS232转RS485,此句必须要,否则不能通讯
sp.NewLine = "\r\n";
sp.Open();
Step2:创建定时器对象,也可以用Timer控件
Timer tScan =Timer();
tScan.Interval = 1000;//表示一秒钟扫描一次
tScan.Enable=true;
Step3 利用ReceivedData方法接收下位机数据并显示下位机数据
在Timer事件里添加
byte[] Received_Datas = new byte[29];
DataManager.ReceivedData(Received_Datas, 0, Received_Datas.Length, sp);
//显示下位机数据
如:txtControlVol.Text=Received_Datas.toString();
/// <summary>
/// 接收信息
/// </summary>
/// <param name="data">存储接收到的信息</param>
/// <param name="offset">缓冲区数组中开始写入的偏移量</param>
/// <param name="count">要读取的字节数</param>
/// <param name="sp">串行口</param>
/// <returns></returns>
public bool ReceivedData(byte[] data, int offset, int count,SerialPort sp)
{
if (sp.IsOpen)
{
try
{
//System.Threading.Thread.Sleep(50);
sp.Read(data, offset, count);
return true;
}
catch
{
return false;
}
}
else
{
return false;
}
}
如需更复杂的通讯(如多线程监控,多设备数据并发处理)请留言给我。文字文字 |