2014-07-11 59 views
0

我真的很可怕的問題,讓我幾乎生病。 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主機不會發射。

+0

我比較發送的數據與C#和Vb.Net,都顯示相同的輸出文本文件(我寫在文本輸出)。所以從這一點來看,我所理解的問題應該是與輸出函數[sp.Output(VB.Net MSComm)sp.Write(C#Serial Com))相關聯 – Destroy

回答

0

我通過刷新讀取和發送數據來解決問題。

0

我解決了與平價相關的問題。在默認情況下,它只是在我的系統中應該是平坦的。所以我現在可以收到數據,但現在的問題是數據的速度。

在Vb。我正在使用valveopen功能來打開閥門。因此,我編寫的代碼就像;

valveopen(); 
valveopen(); 
valveopen(); 
valveopen(); 

然而,在C#中,它就像上帝知道它會運行多少次:)。任意地,我現在能夠打開閥門。所有的東西都是一樣的,沒有問題。我認爲MSComn和串行端口的數據傳輸速度是不同的。

相關問題