我有一个非常可怕的问题,让我几乎生病了。2-3 天以来,我一直在处理这个协议问题,我发现自己在这里寻求你们的帮助。我希望我能解决。提前致谢。我在 Vb 中有使用旧 MsComm 库的代码。所以我决定用 C# 来改变所有的东西。我可以打开、关闭端口和发送数据等。
在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 起火。通常在接收数据时,您可以看到红色的 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 led 看到它,它在我发送数据时一直在触发。但是,正如我再次所说,RX led 不会触发。