私は本当にひどい問題を抱えており、ほとんど病気になります。2 ~ 3 日間、私はこのプロトコルの問題に対処してきました。私が解決することを願っています。前もって感謝します。古い MsComm ライブラリを使用する Vb のコードがありました。そこで、すべてを 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は発火しません。