本人是做工業控制的,對C#了解很薄弱,目前才開始學習,用于專案比較急,所以自己重新學習可能時間很緊,特來求助大神,情況是這樣的:
有一批自帶RS485的設備,現在需要做成無線通訊,并集中監控,由于工業環境干擾較大,顧不考慮WiFi,采用ZigBee模式,將各個設備上的485轉為Zigbee無線信號,通過Zigbee模塊接收后通過網線連接至PC,該模塊配置為虛擬串口形式,通過modbus poll軟體可監控到各個設備的資料,現在需要做一個應用程式讀取各個設備中的部分資料,通訊資料格式和需讀取的RTU設備地址如下,串口形式,最好可選,9600,8,N,1,需讀取的從站可選,讀取地址為設備的讀保持暫存器(4X),地址為0開始的資料,之前有考慮過用組態王寫,但是C#功能強大故采用C#,請問各位大佬有沒有遇到過類似的專案,還望指點
uj5u.com熱心網友回復:
打算用VS2015做成Winform程式uj5u.com熱心網友回復:
c#實作串口通訊是基本功能,沒什么難的,直接用即可。樓主應考慮的是通訊協議,也就是資料決議。
uj5u.com熱心網友回復:
百度 NModbus4uj5u.com熱心網友回復:
讀取MODBUS_RTU 本質是多位元組接收,用陣列處理2.發送資料
private void SerialPortSend()
{
if (!serialPort.IsOpen)
{
MessageBox.Show("串口未打開,無法發送資料!");
return;
}
try
{
Encoding encoding = Encoding.GetEncoding("GB2312");
byte[] bytes = encoding.GetBytes(data);
SendCount += (long)bytes.Length;
serialPort.Write(bytes, 0, bytes.Length); }
catch
{
MessageBox.Show("發送失敗!");
}
}
3. 收資料
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (this.SerialPortIsReceiving)
{
return;
}
try
{
SerialPortIsReceiving = true;
string text = string.Empty;
int num;
text = serialPort.ReadExisting();
num = serialPort.Encoding.GetBytes(text).Length;
}
finally
{
SerialPortIsReceiving = false;
}
}
uj5u.com熱心網友回復:
讀取回來的資料是十六進制還是十進制的呢轉載請註明出處,本文鏈接:https://www.uj5u.com/net/120307.html
標籤:C#
上一篇:救急,關于程式死鎖的問題
