C 接收串列埠RS232的CD CTS DSR訊號

2021-10-02 00:00:13 字數 1616 閱讀 5926

通過串列埠rs232和工控機連線,工控機可以接收裝置(光電感測器)的io訊號

serialportswitch portswitch = new serialportswitch("com3");

tooldata.writelog(lrtxtlog, "開啟" + cbcomname3.text + "成功", 0);

portswitch.switchon += pin =>

;portswitch.switchoff += pin =>

;portswitch.start();

原理是軟體後台執行緒一直發訊號檢測port.cdholding以及port.dsrholding和port.ctsholding這三個的狀態,如果狀態變化則進入到事件

serialportswitch類

/********************************************

* -------------

* \ 1 2 3 4 5 /

* \ 6 7 8 9 /

* ---------

* 原理:

* 4[dtr]作為+6v電源 也可以用[rts]替代[dtr]

* 軟體中不停檢測

* 1[cd ]

* 6[dsr]

* 8[cts]

* 三個埠的電壓變化

*********************************************/

using system;

using system.io.ports;

using system.threading;

namespace traindemo

public bool stoppedding

public serialportswitch(string portname)

,new pinstate ,

new pinstate ,};}

public void start()

catch

}public void stop(bool waituntilstoped = true)

throw new timeoutexception("stop serialportswitch failed");}}

private void onrunning()

thread.sleep(priority);}}

catch (exception ex)

finally

}private void checkstate(pinstate pin)

if (environment.tickcount - pin.hodingstabletime > filter)

else}}

private bool getpinhoding(pin pin)}}

/// /// 串列埠中的3個訊號針

///

public enum pin

public class pinstate

public bool ishoding

public int hodingstabletime

}}

串列埠 RS232與UART

mcu上的uart是ttl電平的,3.3v是高電平,0是低電平 pc上的uart是rs232電平的,5 12為低電平,5 12為高電平。下面兩張圖是傳送0000 0001時,ttl和rs232電平的波形圖,使用的器件是usb轉ttl和usb轉rs232 rs232的 6v代表高電平,6v代表低電平,...

rs232串列埠防雷電路 RS232與RS485

rs232介面是1970年由美國電子工業協會 eia 聯合貝爾系統 數據機廠家及計算機終端生產廠家共同制定的用於序列通訊的標準。它的全名是 資料終端裝置 dte 和資料通訊裝置 dce 之間序列二進位制資料交換接 術標準 該標準規定採用乙個25個腳的db25聯結器,對聯結器的每個引腳的訊號內容加以規...

rs232串列埠防雷電路 RS232與RS485

rs232介面是1970年由美國電子工業協會 eia 聯合貝爾系統 數據機廠家及計算機終端生產廠家共同制定的用於序列通訊的標準。它的全名是 資料終端裝置 dte 和資料通訊裝置 dce 之間序列二進位制資料交換接 術標準 該標準規定採用乙個25個腳的db25聯結器,對聯結器的每個引腳的訊號內容加以規...