2019年就要過去了,當初的新年愿望都實現了么?反正我的網紅愿望是沒有實現,為什么呢?實力不行,還不夠努力!這一年中奮力拼搏的人一定有所收獲,向你們致敬!
言歸正傳,上回我們說完了PLC的兩條腿——數字量輸入(DI)和數字量輸出(DO),就好像我們手臟了,去水池邊洗手,水龍頭接收到我們手的開信號(DI),流出水來(DO),洗好了接收到我們手的關信號,龍頭關閉。So easy吧?
可現在冬天了,用涼水洗手太冷了,而且像我這樣的纖纖玉指是不能沾涼水的,那就需要熱水器里的熱水。水太涼了不行,會肚子疼,太熱了也不行,二師兄燙毛的時候可以,雖然二師兄已經貴不可攀燙不起了。那怎么判斷涼還是燙呢?這就需要模擬量輸入(AI)了,也就是Analog Input,我們手所感知的溫度就是一個模擬量輸入值,它跟數字量的區別顯而易見,數字量只有兩種狀態,0或者1,而模擬量是連續變化的,比如水溫,就是0-100°C,我們的手就負責感知溫度,接收溫度的信號值,10度、20度太涼,30度溫吞吞,40度剛剛好,50度、60度就燙手了,這樣的一個信號就是典型的模擬量輸入信號。
我們的大腦除了感知喜怒哀思悲恐驚的感情,還可以負責數據的計算處理,手接觸到水,就會告訴我們熱還是涼,那PLC怎么像大腦一樣做出這樣的判斷呢?我們就來看一下這個重要的處理過程A/D轉換,也就是模擬量怎么變成計算機可以識別的數字信號。
轉換過程中有兩個重要的概念,第一個是分辨率,也就是用幾位數字信號代表一個模擬量值,或者換一種簡單的說法,把一個模擬量值分幾份。還是用水溫0-100°C來舉例子,如果只用一位數字量來分辨水溫,那么就只有兩個狀態:0代表0度,1代表100度,這太不精確了。那如果用兩位數字量來表示呢?把0-100°C分三份,如下表(注意是三份,不是四份,原因自己找哦):
如果是8位呢,正好一個字節(Byte),2進制縮寫為:2#,那么一個字節就是2#0000 0000到2#1111 1111,變成10進制就是0到255,水溫被分的更細,如果16位,正好是一個字(Word),那就是10進制的0到65535,可以看到,分辨率越高,分的越細,水溫會被表示的更為精確。有點像我們顯示器、電視或者手機的分辨率,分辨率越高,畫面被切割的越細膩,圖像也就越清晰,道理相同。
第二個概念是采樣頻率,也就是單位時間內測量多少次模擬量的值,如果一年測兩次,大年初一吃餃子一次,夏天吹空調吃冰棍的時候一次,那中間的春天的溫度信息都是遺失的,這樣做的結果一定讓你妥妥的被人罵到狗血淋頭。趕緊動起來,一分鐘測一次,結果稍稍可以接受,如果是在健身房上班,讓你測游泳池溫度,這樣的頻率應該可以過關。但如果讓你測的是洗澡水的溫度,那說不定又要被投訴了,水溫到60度了,還沒到測量的時間,客人已經被燙傷了,那必須增加測量的頻率,五秒一次,水溫不合適隨時調節。但如果在化工廠上班,溫度的變化直接影響一罐原料的成品質量,一秒三次的頻率才能保證正常的生產。可以看到,不同的場合需要不同的采樣頻率,采樣頻率的大小決定了這個模擬量值變化的趨勢是否平滑。
最后就是A/D轉換的過程了,其實就是一個比較的過程,首先根據采樣頻率采集模擬量值,如下圖:
然后把采到的值,根據分辨率,與每個階梯對比,下圖以三位為例,還是測量水溫。把0-100°C分了7份,溫度階梯如下:
如果測到的溫度在0-14.29度之間,輸出的數字量值為000,溫度上升到14.3度,輸出數字就變為了001,單純比較測得的水溫和階梯值就得到了輸出的數字量值。
當然,這其中還有濾波、算法、電路設計等問題,不過,不重要,我們了解原理就可以了,模擬量模塊讀取模擬量值,最終轉換成數字量的一個值(一般是一個Word),并傳送到PLC的處理器中,就像手感知水溫,傳送到大腦,告訴我們,水溫正好,可以準備脫衣服洗澡了。
可是萬一測到水溫不合適,怎么調節一下呢?別急,下次我們就看水溫是怎么調節的,聊聊模擬量輸出AO是怎么一回事。