我真的很可怕的問題,讓我幾乎生病。 2-3天,我一直在處理這個協議問題,我發現自己在這裏得到你們的幫助。我希望我會解決。提前致謝。我有Vb中使用舊的MsComm庫的代碼。所以我決定用C#來改變所有的東西。我很開放,關閉端口和發送數據等。如何從C#中的Mbus正確接收數據?
在Vb;我有以下部分代碼,用於通過RS485從Mbus驅動程序接收數據。一旦你發送它,它會迴應你獲得數據。它的工作原理並沒有問題。
Dim SendData(19) As Byte
Dim sending As String
SendData(0) = &HFA
SendData(1) = Mid(DriverNo, 1, 2)
SendData(2) = Mid(DriverNo, 3, 2)
SendData(3) = Mid(DriverNo, 5, 2)
SendData(4) = Mid(DriverNo, 7, 2)
SendData(5) = 210
SendData(6) = CheckSum_Temass(5)
SendData(7) = &HFB
sending = ""
For i = 0 To 7
sending= sending + Chr(SendData(i))
Next
SP.Output = sending
因此,上面的代碼在Vb和Vb.Net中工作正常。但是,當我將它轉換爲C#時,如下所示;我無法得到mbus驅動程序的迴應。在通過RS485發送數據時,我可以看到黃色指示燈亮起。通常在接收數據時,您可以看到紅色LED也閃爍。 C#中的代碼;
string sending= "";
byte[] SendData = new byte[8];
SentData[0] = 0xfa;
SendData[1] = Convert.ToByte((Strings.Mid(DriverNo, 1, 2)));
SendData[2] = Convert.ToByte((Strings.Mid(DriverNo, 3, 2)));
SendData[3] = Convert.ToByte((Strings.Mid(DriverNo, 5, 2)));
SendData[4] = Convert.ToByte((Strings.Mid(DriverNo, 7, 2)));
SendData[5] = 210
SendData[6] = CheckSum_Temass(5);
SendData[7] = 0xfb;
for (int i = 0; i <= 7; i++)
{
sending= sending+ ((char)SendData[i]);
}
sp.Write(sending);
我不能看到任何問題,但Vb代碼的作品和C#沒有。
在c#中,以下是我的開放端口函數的一部分;
sp.PortName = portName;
sp.BaudRate = baudRate;
sp.DataBits = databits;
sp.Parity = parity;
sp.StopBits = StopBits.One;//stopBits;
sp.PinChanged += SerialPinChangedEventHandler1;
sp.ErrorReceived += SerialErrorReceivedEventHandler1;
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
sp.ReadTimeout = 1000;
sp.WriteTimeout = 1000;
一切工作正常。當我說通過RS485通過Mbus傳輸數據時,我可以看到。我可以從發送數據的TX主機看到它。但是,正如我再次說的,RX主機不會發射。
我比較發送的數據與C#和Vb.Net,都顯示相同的輸出文本文件(我寫在文本輸出)。所以從這一點來看,我所理解的問題應該是與輸出函數[sp.Output(VB.Net MSComm)sp.Write(C#Serial Com))相關聯 – Destroy