「原創經驗」崑崙通態觸摸屏讀取S7-1200的ASCII字符串時的問題

字符串是西門子PLC和崑崙通態觸摸屏的基本變量類型之一,有著重要的作用。但是,在崑崙通態與S7-1200的通訊配置裡,卻沒有這個數據類型(KEPWARE、西門子觸摸屏裡都有這種數據類型)。網上也無法找到相關資料,於是自己琢磨,沒有快捷的方法,應該有笨的方法,字符串無非就是一串字節而已。另外,崑崙通態裡有ASCII值轉字符串的函數(!I2Ascii(s)),可以通過編程來獲得字符串。

基本思路:在S7-1200裡,字符串的第一個和第二個字節都是字符串的長度值,從第3個字節開始就是實際的字符ASCII值。在觸摸屏裡設置一個開關量(也是整型變量)對應長度字節,另外,再設置一組開關量對應自己需要讀取的字符值。在策略裡定時讀取這些值,用循環來將數字轉換成字符,再組合成一個完整的字符串。

想清楚了,就動手,代碼就幾行,但是,就是無法獲得字符串。妖怪了,於是,捨棄循環,更換函數,更換函數參數的數據類型都不行。最後決定,先轉幾個字符看看。由於,崑崙通態觸摸屏沒有PLC那樣的調試功能,因此,只能這幾個字符的原始值、轉換結果等內容做在一個測試畫面上進行查看。發現這幾個字符一切正常,組合成字符串也是正常。自認為找到原因了,再次用循環讀取剩下的字符,並將結果放置在正式畫面裡。結果,只有前面這幾個字符是正常的,且重新上電後,這幾個字符也不正常。進測試畫面後,發現這幾個字符正常,回到正式畫面後,發現這幾個字符也出現了。這個問題,困惑了很久,不停地改代碼,測試,都沒有發現問題。

真的過了好久,突然想,其他字符到底是怎麼回事呢?於是在測試畫面再增加監控幾個字符,發現這幾個字符也正常了。突然明白了,

問題出現在通訊變量的更新機制上:在西門子觸摸屏裡配置變量時,可以選擇是顯示時再更新,還是後臺持續更新。但是,崑崙通態並沒有給這個選擇,卻默認為顯示時再更新。這樣,當我將變量做到測試畫面,並進入測試畫面後,這些變量開始更新,於是就能得到這些變量的值,其他沒有做出來的變量還是沒有更新。同樣的原因,剛上電時,如果不進入測試畫面,那幾個變量不更新,後臺的策略也讀不到值,因此,也不能獲得字符串。

想明白了這個機制後,於是就將這些通道變量做在需要看字符串的畫面裡(想辦法藏起來即可),這樣,進入這個畫面後,變量開始更新,果然能得到正確的字符串了。

這是個笨辦法,崑崙通態的報警變量肯定是持續更新的,因此,應該還是有辦法的,找機會諮詢一下售後再告訴大家結果。

崑崙通態內部的函數做的還是強壯的,比如上邊這個!I2Ascii(s),可以接受所有的數值型的變量(整型、浮點),因此,根本找不到數值類型轉換的函數(它內部會自動轉換的)。

2019年1月13日


說明:

1、本文是實踐經驗,非嚴格論文,與相關產品和理論可能不完全相符。

2、如需控制、三電相關幫助,交流,請關注本人,並加入技術討論QQ群:877456127,那裡有很多熱心同行。


分享到:


相關文章: