0

我有一个非常可怕的问题,让我几乎生病了。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 不会触发。

4

2 回答 2

0

我解决了与平价相关的问题。默认情况下它没有,但在我的系统中它应该是均匀的。所以我现在可以接收数据,但问题是现在的数据速度。

在Vb中。我正在使用 Valveopen 功能来打开阀门。因此我的代码如下;

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

然而在 C# 中,天知道它会运行多少次 :)。我现在可以任意打开阀门。所有的东西都是一样的,没有问题。我认为 MSComn 和串行端口的数据传输速度是不同的。

于 2014-07-12T10:14:29.620 回答
0

我通过刷新读取和发送数据解决了这个问题。

于 2014-07-13T16:42:38.683 回答