我有一个非常可怕的问题让我几乎生病了。 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发送数据时,我可以看到黄色引发火灾。通常在接收数据时,您可以看到红色指示灯也会触发。 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不会发射。
答案 0 :(得分:0)
我解决了与平价相关的问题。在默认情况下它是没有,但在我的系统中,它应该是均匀的。所以我现在可以接收数据,但问题是现在的数据速度。
在Vb。我正在使用valveopen功能四次打开阀门。因此我编码像;
valveopen();
valveopen();
valveopen();
valveopen();
然而在C#中,就像上帝知道它将运行多少次:)。任意我现在可以打开阀门了。所有的东西都是一样的,没问题。我认为MSComn和串口的数据传输速度不同。
答案 1 :(得分:0)
我通过刷新读取和发送数据来解决问题。