普通電腦沒有通用的輸入輸出口(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口是否有輸入:
1view code/********************************************
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 }
man函式:
1view codeclass
program2;
13 portswitch.switchoff += pin =>14;
1718
portswitch.start();
19 console.writeline("
串列埠輸入執行中,按任意鍵結束...");
20console.readkey();
21portswitch.stop();22}
23 }
怎麼樣,是不是很簡單。一起來動手做乙個吧~~~
伺服器與普通電腦的區別?
伺服器與普通電腦的區別?伺服器配置不怎麼高,可是 都很貴。想知道,伺服器和普通電腦的區別在 呢?目前使用伺服器的站長和企業也比較多,也許有人會覺得二者差不多。從表面上看,伺服器和我們日常用的pc電腦都是由cpu 記憶體 硬碟等部分組成,那麼,伺服器與普通電腦有什麼區別呢?伺服器中在穩定性和可擴充套件...
工控機與PLC 普通電腦的區別
工控機與plc的區別並不在於長得什麼樣子,也不在於使用的工作環境,而在於它們的功能。它就發展來說,它們來自不同的途徑,plc 以繼電器為特徵的電氣邏輯控制,工控機 於計算機。早期plc只能用於進行邏輯運算,現在功能越來越強大了,但總體來說,還是適合於進行以順序控制為主的自動化工程中,如流程工業。工控...
工控機與PLC 普通電腦的區別
工控機即工業控制計算機,隨著社會資訊化的不斷深入,關鍵性行業的關鍵任務將越來越多地依靠工控機。一些工控機和一些具有特殊功能的工控主機板相結合使用,有些只是完成一普通電腦一樣的功能,完全可以用普通電腦來實現它的功能,其實簡單說,普通的的家用或辦公電腦是民用級的,而工控機是工業級的,它在結構其它方面是有...