簡體   English   中英

如何在.NET中實現RS485 2線雙向通信?

[英]How can I implement RS485 2 wires bidirectional communication in .NET?

我正在嘗試使用RS485 2線進行雙向通信,到目前為止我嘗試過的所有操作都失敗了。

我可以發送數據並使外圍設備按預期進行反應(因此接線正確),但是我從未收到任何回復。


我正在使用.NET SerialPort ,我嘗試使用DataReceived事件以及Thread輪詢端口的循環。 我什至嘗試僅阻止讀取,直到接收到足夠的數據。


我嘗試了幾種硬件選項:

  • 帶Sena RS232-RS485轉換器的PCI RS232卡
  • 帶Moxa RS232-RS485轉換器的PCI RS232卡
  • PCI RS485卡

我玩過驅動程序設置:-FIFO中斷觸發級別-接收器FIFO流控制閾值-RS485緩沖區啟用(正常,高電平有效,低電平有效)


遵循各種線索(例如, 無法使用rs232到rs485轉換器在.net 2.0中接收串行數據 ),我嘗試將DtrEnable設置為true或false,或對其進行切換。

我還嘗試過在發送和接收時切換RtsEnable (遵循http://en.wikipedia.org/wiki/RS-232#RTS.2FCTS_handshaking )。


我現在看不到其他方法可以嘗試不采用其他接線方式。 有什么事嗎


根據要求,提供一些代碼(經過多次嘗試僅是快照):

打開:

_serialPort = new SerialPort(comboBoxSerialPort.Text, 9600, Parity.None, 8, StopBits.One)
{
    WriteTimeout = 500,
    ReadTimeout = 500,
    Handshake = Handshake.None
};

_serialPort.Open();
_serialPort.DtrEnable = true;
_serialPort.RtsEnable = true;

發送:

_serialPort.RtsEnable = false;
_serialPort.Write(data, 0, data.Length);
_serialPort.RtsEnable = true;

Thread.Sleep(1);
_dataSent.Set();

讀者線程:

var port = form1._serialPort;
byte[] buffer = new byte[128];
int read = 0;
do
{
    Array.Clear(buffer, 0, buffer.Length);
    read = 0;

    try
    {
        form1._dataSent.WaitOne();

        //if (port.BytesToRead > 0)
        read = port.Read(buffer, 0, buffer.Length);
    }
    catch (TimeoutException)
    {
    }
    catch (Exception ex)
    {
        form1.Invoke(form1.AddErrorMethod, ex.ToString());
        continue;
    }

    if (read > 0)
    {
        form1.Invoke(form1.AddOutputMethod, ByteListToString(buffer));
    }

    Thread.Sleep(20);
}
while (_continue);

注意:雙向的數據包長度為10個字節。

我已通過以下方法解決了一種硬件配置(RS485卡)的問題:

  • 固定布線:盡管它被稱為“ 2根電線”,但需要使用卡上的4根針腳/電線,通過傳輸線將其2根連接在一起。
  • 使用DtrEnable指示發送/接收
  • 在發送后啟用接收模式之前等待。

我的發送代碼現在如下所示:

// Enable send mode
SerialPort.DtrEnable = false;
SerialPort.Write(data, 0, data.Length);

// Wait a little, then enable response mode.
Thread.Sleep(15);
SerialPort.DtrEnable = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM