萬泉河
WX:ZHO6371995,歡迎+
級別: 略有小成
|
【萬泉河】征集FB的編程題:獲取SID 我在推廣宣傳PLC編程煙臺方法的時候,總有人疑惑是在做了什么。 講解是用計算機編程中的面向對象的方法來進行PLC編程。 那么在PLC中是用什么手段實現的面向對象呢? 回答是用FB,做成庫函數應用。 然后對方瞬間就恍然大悟了, FB啊,不是什么新玩意,我們20年前就會用了。你這把FB換個高大上的名字,也太能忽悠人了。 原來做標準化就是開發(fā)FB啊, 那我們正在做,或者早就在自己做了。你這做的沒啥稀奇的。 好吧。 如果對方既沒有感知到自身的痛點,又沒有機會見過真正的應用實例,那說破了嘴皮子對方也想象不出是啥樣子。畢竟,PLC編程煙臺方法的實現是古今中外開天辟地以來都沒有過的,大部分的PLC工程師包括我自己入行開始,都是從模仿入門的,沒有完全創(chuàng)新的經驗,在沒有見過豬跑之前讓他們想象出豬肉的味道,確實有些難度。 我當然知道,PLC系統(tǒng)中早就有FB功能塊的功能,也早已經用了二十多年。但我自己能用面向對象的方法來做PLC程序,也不過近2-3年的事。 然而,我同樣也知道,我們許多同行,盡管可能不懂得計算機高級語言編程,但對FB的各種理論技巧還是很熟練的。我也見過一些比較復雜的PLC程序,看到里面非常豐富的FB的用法,但從中很明顯地可以看出來,設計者對FB原理是非常懂,然而卻沒有面向對象的理念。 也有過比較熟識的西門子網站的驅動板塊的版主,在了解到我的標準化編程理論之后就非常高傲地表示,即便不算驅動方面的技能,僅僅拿PLC編程的經驗和水平PK,對我也照樣是不服的,完全可以一比高下。 我也只能攤手認慫,不跟你比。 現在拋開面向對象,拋開標準化編程,有一道比較有意思的題目,拋出來給大家練練手,可以算是檢驗下自己對FB的理解深度,同時對自己也算做個知識技能的儲備。 臨近春節(jié)假期,大家項目工作應該已經不太忙碌,可以有空閑時間為自己充充電了。這里算是給大家提供一個學習方向。 題目的原委是這樣的,在PLC項目中FB功能塊的調用,通常被稱為實例,而一個FB有可能被調用多次,那就是產生多個實例。 現在需要對每一個實例做出ID的標識,即為SID。 比方說一個FB在整個OB1環(huán)境中被調用了10次,那么我希望它們分別得到從1到10連續(xù)且不相等的ID號。 這個功能的實現,應該是一個完全封裝好的獨立完成功能的函數塊,FB或者FC。當然,因為它的實現還是比較復雜,我認為FB實現會比FC實現能方便些,名字定義為GetSID。 有了這個FB ,那么在需要區(qū)分SID的項目設備FB中,只需要調用一次函數,就可以得到了SID。 最好的結果是按照OB1執(zhí)行的順序,第一個調用的ID=1,第二個為ID=2, 最后一個ID=MAX。 然后如果PLC調試過程中實例有增加或減少,不管是中間增減還是尾部的增補,都應該能刷新更新。 有人會疑問得到這個SID有啥用? 我順手就可以舉例出好多個應用場景。比如。。。。。再比如。。。。,以及。。。。 然而,我非常了解咱們許多同行的調性,如果我把應用舉例描述詳細了,很多人會跑題去探究我所舉例具體的應用,去用他自己的方式千方百計繞過SID,找方法實現。然后回過來再跟我證明獲取SID無意義。 所以具體舉例就不提了。標準化學習營的學員,可以積極參與實現這個應用,將來你們在具體的項目中會遇到這種需求的時候,我會適時與你們講解。 (這里也透漏出個信息,以往的標準化應用分享項目中并未用到SID) 為了鼓勵同行朋友積極參與,對成功實現功能并投稿的朋友,給出一點彩頭。獎勵方式三種,獲獎者三種之中任選一種: 1, PLC標準化編程例程優(yōu)惠1000元,所有品牌任選。 2, 《萬泉河著PLC標準化編程原理與實踐》書稿電子加密版。 3, 現金100元。 然后是具體要求: 1, 可以使用主流PLC任一品牌實現,不僅僅西門子, 也更不僅僅TIA PORTAL。 所以這是一場面向全行業(yè)的應用比武。我相信所有品牌的PLC,都可以實現。 2, 編程語言建議使用SCL語言。因為這樣更會容易跨品牌跨平臺移植。 這也是我所以可以接受全行業(yè)所有品牌的原因。同時大家未來也可以了解,任何企業(yè),只要實現了標準化編程,是可以實現跨平臺跨品牌移植的。比如2021年的斷貨危機,換品牌就易如反掌。不會因為擔憂品牌更換而所有程序從頭再來。 3, 如果實在不會使用SCL,或者所用的PLC不支持SCL, 那么也可以用LAD來實現,并投遞交稿。不過,將來的獎勵需要減半。 4, 為了方便檢查評審功能,做好的程序塊請錄制運行監(jiān)控視頻,動態(tài)顯示運行結果。交稿時除源程序外,視頻文件也一并提交。 5, 投稿截止時間為2月底,即現在起到正月期間均可參加。 只要認證功能完整有效,均給予獎勵。有意投稿者,可以先加我微信:zho6371995,進行預報名。報名后在截止期之前完成正式交稿都可以。到時如果有特殊情況需要延時,可以提前打招呼獲準。 6, 預報名限制人數100人, 正式獲獎人數限30人, 按交稿先后順序且功能正確者排名。 為了堵住一部分不懷好意的同行的嘴,提防他們罵我低價購買別人的智力,或者說我自己的問題沒有能力解決,換了個方式來找別人幫忙解決。 我截圖展示一下我已經實現的效果: 我這里SID是得到了,但ID1的位置是隨機的。并沒有嚴格地讓第一臺必須為1。因為我這里應用誰是ID=1不重要,所以就沒有特意去實現了。 最后提醒大家多去讀我以往發(fā)表的文章,包括公眾號《PLC標準化編程》以及西門子論壇我開設的專欄《萬泉河講故事》,找不到路的百度或者微信搜一搜”【萬泉河】”,我的所有文章標題都帶了這樣的標識。 好多文章,發(fā)表了很多年,逐漸都被遺忘了。然而最近,有好多朋友提出的問題,一看都是我在多年前發(fā)表文章中提及的技術或問題。 比如最近連續(xù)兩次不同的場合,針對網友的提問推薦了文章 【萬泉河】PLC編程求3/8的題目 http://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1256568&b_id=80&s_id=157&num=34#anch 問題都得到了解決。說明,他們還是文章讀少了。 這篇文章看來對同行如此有用,那就在本文下面再發(fā)一次。以前已經讀過的請再次溫習一下。 |
---|---|
|
uthman
QQ:3749615
級別: 家園常客
|
GetInstanceName直接讀取實例名稱不香嗎? GetSymbolName讀取變量名 |
---|---|
|
payfsl
級別: 工控俠客
|
啰哩啰嗦的,上個小例子比什么都強 |
|
---|---|---|
|
蘇州工人
級別: 工控俠客
|
【萬泉河】PLC編程求3/8的題目 看了這個,感覺挺好笑的,三菱就有對應的指令SUM 用來判斷有ON位數,我不知道別的PLC有沒有這個指令,但自己用的PLC連編程手冊都不看,不看詳細的,至少指令表過一遍吧 |
---|---|
|
flyfeky
bilibili 工控貴族
級別: 論壇先鋒
|
搞的故作高深 。 面向對象編程是有標準方法的。 看看倍福是怎么實現的。 比如一個槽 體,定義一個fb ,這個FB可以實例化。 fb里有變量 ,結構體(屬性) , 有方法, (加熱,循環(huán), 各種加熱, 各種方法) 這個FB能被繼承。 一個FB里包括所有槽體功能 。 具體到某個功能槽 , 我們只需要 實例名. 方法(); 提取跟工藝相吻合的方法。 |
|
---|---|---|
|
huanjue
級別: 略有小成
|
感謝大神的解釋,受益匪淺. |
---|---|
|