另類,用串列埠實現普通電腦的開關量輸入

2022-01-11 05:46:52 字數 3090 閱讀 9557

普通電腦沒有通用的輸入輸出口(gpio),但有時候我就想輸入乙個開關量。

比如讓使用者拉一下拉繩開關就啟動某個應用,比如裝乙個觸點開關判斷門是開啟的還是關閉的,比如....

需求是如此簡單,你都不願意花幾十塊錢去買乙個微控制器,更不用說pci擴充套件卡、plc之類的了。。怎麼辦吶?

有辦法!最簡單的用串列埠就能實現。

原理:串列埠的pin4[dtr]和pin7[rts] 可以輸出+6v的電(好吧,你的電腦上不一定是+6v,但肯定大於+3v就可以了),將該輸出分別接入到pin1[dcd]、pin6[dsr]、pin8[cts],在pc上就能檢測出來,從而實現開關量輸入。

核心**:

//

往pin口輸出電壓

serialport.dtrenable = true

;serialport.rtsenable = true;//

判斷pin是否有電壓輸入

bool cd =serialport.cdholding;

bool dsr =serialport.dsrholding;

bool cts = serialport.ctsholding;

知道原理,剩下的就好辦了。

首先是接線:(你需要乙個9針串列埠母頭、若干個開關、導線、電烙鐵)

如圖,我接了3個開關,4作為公共引腳,1、6、8分別接乙個開關用於輸入訊號。當然,你只接乙個開關也可以的。

(電腦主機板上的帶針的是公頭,接線要用母頭否則插不到電腦上,如果沒有可以到電子城去買乙個很便宜的,上面的編號很小要仔細看

沒有串列埠的筆記本可以**上買一條usb轉串列埠線也可以的)

然後寫一段**不停檢測1、6、8口是否有輸入:

1

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

2* -------------

3* \ 1 2 3 4 5 /

4* \ 6 7 8 9 /

5* ---------

6* 原理:

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

8* 軟體中不停檢測

9* 1[cd ]

10* 6[dsr]

11* 8[cts]

12* 三個埠的電壓變化

13********************************************

*/14

15using

system;

16using

system.io.ports;

17using

system.threading;

1819

namespace

portsignalreader

2047

48public

bool stoppedding

4950

public serialportswitch(string

portname)51,

65new pinstate ,

66new pinstate ,

67};68}

6970

public

void

start()

7181

catch

8287}88

89public

void stop(bool waituntilstoped = true)90

101throw

new timeoutexception("

stop serialportswitch failed");

102}

103}

104105

private

void

onrunning()

106116

thread.sleep(priority);

117}

118}

119catch

(exception ex)

120124

finally

125129

}130

131private

void

checkstate(pinstate pin)

132138

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

139145

else

146149

}150

}151

152private

bool

getpinhoding(pin pin)

153165

}166

}167

168///

169///

串列埠中的3個訊號針

170///

171public

enum

pin172

177178

public

class

pinstate

179181

182public

bool ishoding

183184

public

int hodingstabletime

185}

186 }

view code

man函式:

1

class

program2;

13 portswitch.switchoff += pin =>14;

1718

portswitch.start();

19 console.writeline("

串列埠輸入執行中,按任意鍵結束...");

20console.readkey();

21portswitch.stop();22}

23 }

view code

怎麼樣,是不是很簡單。一起來動手做乙個吧~~~

伺服器與普通電腦的區別?

伺服器與普通電腦的區別?伺服器配置不怎麼高,可是 都很貴。想知道,伺服器和普通電腦的區別在 呢?目前使用伺服器的站長和企業也比較多,也許有人會覺得二者差不多。從表面上看,伺服器和我們日常用的pc電腦都是由cpu 記憶體 硬碟等部分組成,那麼,伺服器與普通電腦有什麼區別呢?伺服器中在穩定性和可擴充套件...

工控機與PLC 普通電腦的區別

工控機與plc的區別並不在於長得什麼樣子,也不在於使用的工作環境,而在於它們的功能。它就發展來說,它們來自不同的途徑,plc 以繼電器為特徵的電氣邏輯控制,工控機 於計算機。早期plc只能用於進行邏輯運算,現在功能越來越強大了,但總體來說,還是適合於進行以順序控制為主的自動化工程中,如流程工業。工控...

工控機與PLC 普通電腦的區別

工控機即工業控制計算機,隨著社會資訊化的不斷深入,關鍵性行業的關鍵任務將越來越多地依靠工控機。一些工控機和一些具有特殊功能的工控主機板相結合使用,有些只是完成一普通電腦一樣的功能,完全可以用普通電腦來實現它的功能,其實簡單說,普通的的家用或辦公電腦是民用級的,而工控機是工業級的,它在結構其它方面是有...