在實際自動化專案中,不管用上位機還是PLC做控制器,都經常會用到定時器。
我們PLC攻城獅朋友,知道會有定時器指令。那麼上位機C#沒有指令怎麼做?
一.我們先看PLC的效果
PLC定時器
1.圖中有個定時器物件,都有4個引腳和1個例項
2.我們再看看F1幫助(順便告訴老鐵F1的資料也許比培訓機構要好)
引腳功能
3.現在明白這些引腳的功能了吧?
IN輸入引腳 判斷要不要計時
PT輸入引腳 用來設定時間
Q輸出引腳 計時結果
ET輸出引腳 當前計時時間
二.C#定時器封裝切入主題(直接幹)
1.首先了解一點知識,Stopwatch物件,這個是.net平臺給我們的定時器物件,我們需要進一步封裝達到我們的需求,我們首先看看物件原型。
Stopwatch物件原型
原型註釋
2.知道這麼多已經夠了,開幹寫程式碼吧,建立TON.cs類
3.我們想想定時器的邏輯是什麼?
是不是突然腦子空白了?想啥呢,別鬧,大家都很忙的。多看看F1的幫助,西門子已經寫的很清楚了。
我把定時器邏輯複製下來
這個是重點,給大家寫出來,不用背,理解一下
接通延時
可以使用“接通延時”指令將 Q 引數的設定延時 PT 指定的一段時間。
當引數 IN 的邏輯運算結果 (RLO) 從“0”變為“1”(訊號上升沿)時,啟動該指令。指令啟動時,預設的時間 PT 即開始計時。
超過持續時間 PT 時,引數 Q 的訊號狀態變為“1”。
只要啟動輸入仍為“1”,引數 Q 就保持置位。如果 IN 引數的訊號狀態從“1”變為“0”,則復位引數 Q。
當在引數 IN 上檢測到一個新的訊號上升沿時,將重新啟動定時器功能。
4.程式碼框架給大家列出來,方法,屬性,成員組成。
定時器類架構
5.我們建立成員,並用構造方法例項化成員
成員及構造方法
為什麼要用上升沿下降沿,前面的原理已說明,如果不清楚上升沿下降沿怎麼做,翻我前面的文章 C#如何封裝PLC的上升沿下降沿物件
6.所有屬性解讀
屬性就是向外界提供介面
IN我在這裡做的讀寫 對應setget屬性
輸出Q就是 只讀對應get屬性
PT我在這裡做的讀寫 getset屬性
輸出ET就是隻讀 對應get屬性
7.IN引腳程式碼
8.Q引腳程式碼
9.PT引腳程式碼
10.ET引腳程式碼
11.效果怎麼樣?我們測一下,看會不會翻車?
定時器演示
分析:我定時為3000毫秒。第一次賦值為1(true)時,開始計時,但是我中途賦值為0(false)時,定時器停止。第二次賦值為1(true)時,開始計時,直到時間到輸出ture;
12.總結:當我們使用多個定時器我們只需要new定時器定時器即可,需要多少個new多少個,面向物件程式設計。一個一個new,for迴圈new都可以,怎麼高興怎麼來。把它們放到死迴圈執行緒中,就可以和使用PLC一樣愉快的使用定時器了。
13.拋磚引玉,給大家思路,可以嘗試面向物件的方式,實現PLC其它指令。