0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SMART 200中拆分提取字符串內數(shù)據(jù)

opkgjew ? 來源:PLC標準化編程 ? 2023-03-29 14:00 ? 次閱讀

我在做模擬量處理模塊時,留了一個未解決的難題,一個小尾巴。即因為程序塊中使用的TEMP變量資源已經耗盡,所以被逼無奈使用了一個全局變量MD20,做了數(shù)據(jù)的傳遞功能。

然后做好了之后,我就去做PID模塊的移植了。

對那里面留下的缺憾,其實我并不怎么著急。 模塊化的設計工作就是這樣,有遺憾不可怕。 可怕的是遺憾太多,牽扯到整個系統(tǒng)架構, 牽一發(fā)而動全身,導致不敢動。

而我留下的這種遺憾則無所謂,我只要心中隨時留個念想, 一旦有找到好的思路后,回來打個補丁,修復一下也就完美了。 而即便沒有打補丁之前,也不影響正常的使用。 這種問題,終究不是大問題,連bug都算不上。 只是完美主義者心中的一個結而已。

然后,我在做PID模塊的時候,很快就遇到了相似的問題。 原本,按照西門子LBP的數(shù)據(jù)結構,我原本是可以輕松解決的,資源完全夠用。 因而這段時間都在做這部分的調試了。

但當調試結束,發(fā)現(xiàn)了一個問題,長久以來西門子以及眾多同行都忽視的問題。

即,PID的輸出值的量綱的問題。

通常,很多模塊都直接以%為單位,或者沒有單位,就0-1的一個小數(shù)數(shù)值了。

這在閥門開度等工況時是沒問題的,然而很多的PID的輸出回路會是變頻器,變頻器的運行開度,100%對應的是50Hz,那么,如果你在窗口上顯示PID回路的輸出時,如果仍然以0-100來顯示,操作人員使用中就會有些不方便??傄鰯?shù)值的換算。 一不小心還容易遺忘,算錯。

所以,我決定要增加這部分的數(shù)值輸入。 然而就同樣遇到了變量使用超標了。

想到了這部分的數(shù)據(jù)在內部程序塊中只使用一次,并不總是參與數(shù)值計算。同時,模塊在調用時,輸入的是常量,在運行中也不會變動。 所以,可以考慮用字符串的形式輸入。

即, 把原本的UNIT的管腳,改名為RANG_UNIT, 包含了上下限和量綱:

0;10;Bar;0;50;Hz

字符串中使用分號;將所有數(shù)據(jù)分割。

S7-200中的字符串,在定義到子程序的管腳時,長度只有4byte,所以它本質上只是個指針。 而作為常量的字符串輸入時,則不占用任何寄存器資源。

所以,編制了一個對字符串分割的函數(shù)Split

45d09c90-cdeb-11ed-bfe3-dac502259ad0.png

每次調用, 只讀取指定的位置的數(shù)據(jù)。 我也順便做了轉換,即可以讀取到字符串放到S1指定的指針,也可以順便轉換為浮點數(shù)輸出到寄存器中使用。

由此,用一個字符串指針4BYTE替代了原本的多個浮點數(shù),程序塊的資源終于省出來了。

45e20764-cdeb-11ed-bfe3-dac502259ad0.png

我在幾個周之前, 還分享過一個做BCC校驗的程序塊,使用場合我沒講。 其實,也是出自同樣的原因。

在LBP原程序架構中,需要多次校驗HMI上數(shù)據(jù)序列的修改,在數(shù)據(jù)滿足變化或者不變化條件時做出邏輯處理。 在PORTAL中的方法是直接對UDT進行相等比較。 所以在數(shù)據(jù)區(qū)中建立了大量的數(shù)據(jù)備份。

而對于SMART這樣的小身板,自然是沒那么多資源來存放所有數(shù)據(jù)的備份的。 所以就想到了使用BCC校驗來做。數(shù)據(jù)序列中任何一個數(shù)值如果修改,都會導致BCC校驗碼不通過,縱然理論上會有某種巧合導致BCC相同,但幾率又是小到火星撞地球,而且又是與人機界面人工操作相關,并不關乎安全,可靠性要求也不高。 所以可以以此節(jié)省規(guī)模不菲的變量資源。

算是對數(shù)據(jù)校驗的另一種另類應用。 關于相撞的幾率,我還沒算過。與浮點數(shù)的表達規(guī)則有關,可以單獨再研究。 不過未來即便有更嚴謹?shù)膽脠龊希覀冞€可以多個校驗算法,比如BCC和CRC校驗同時上陣,估計就想撞也撞不到了。

我探討了通常意義的線性變換,PID,飛剪,卷曲等算法對我們做PLC編程的重要性并沒多高,甚至都可以認為不是我們這個行業(yè)的必備的算法技能。

然而如果非要找一些算法功能的話,這里提到的拆分和校驗,以及所實現(xiàn)的數(shù)據(jù)處理交換方式,某種程度上可以算做是了。

而且還會通用,多種模塊類型中都會遇到。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SMART
    +關注

    關注

    3

    文章

    224

    瀏覽量

    44718
  • PID
    PID
    +關注

    關注

    35

    文章

    1472

    瀏覽量

    85602
  • PLC編程
    +關注

    關注

    46

    文章

    246

    瀏覽量

    37491
  • BCC
    BCC
    +關注

    關注

    0

    文章

    10

    瀏覽量

    7542

原文標題:0329 【萬泉河】SMART 200中拆分提取字符串內數(shù)據(jù)

文章出處:【微信號:PLC標準化編程,微信公眾號:PLC標準化編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何在bash中分割字符串

    假設我們有一個由逗號或者下劃線隔開的多個單詞組成的字符串,需要拆分這個字符串提取各個單詞。
    發(fā)表于 12-07 17:10 ?3730次閱讀

    如何提取字符串某幾個位置的元素

    如何提取字符串某幾個位置的元素,如字符串AA 01 08 D6 DF FF,我想提取其中的08和D6,請問該如何實現(xiàn)?或者說如何提取一維數(shù)
    發(fā)表于 10-28 18:48

    labview截取字符串時為什么不能顯示出字符串的漢字

    我要輸出數(shù)量字符串的最后一個字符,使用截取字符串時輸出的最后一個字符是數(shù)字或字母時子字符串可以
    發(fā)表于 05-05 11:11

    采集數(shù)據(jù)經過截取字符串實時數(shù)據(jù)采集問題,求指教

    利用截取字符串函數(shù)截取數(shù)據(jù)信息,發(fā)現(xiàn)有相當大的延遲,大概幾秒鐘的間隔才能實現(xiàn)新的字符串的截取,這樣的話會出現(xiàn)對采集信息的遺漏,如何實現(xiàn)數(shù)據(jù)的實時截???求大神指教問題如圖,上面的壓力值是
    發(fā)表于 10-28 17:01

    LABVIEW中使用tdms存取字符串數(shù)組的問題

    出來的數(shù)據(jù)類型是波形,提取波形信息后沒有辦法直接索引連接字符串類型的輸出,究竟應該怎么用TDMS存取字符串類型的數(shù)據(jù)呢?
    發(fā)表于 08-15 17:26

    字符串拆分

    串口連續(xù)傳來如是字符串”V-12.98C0.18“希望把字符串拆分為V后的為一組數(shù),C后的為一組數(shù)。上述字符串應該拆為-12.98和0.18。我嘗試了用匹配模式匹配中間的空格分成兩個
    發(fā)表于 05-22 11:57

    Labview之截取字符串

    Labview之截取字符串,很好的Labview資料,快來下載學習吧。
    發(fā)表于 04-19 10:23 ?0次下載

    取字符串的C語言程序免費下載

    本文檔的主要內容詳細介紹的是讀取字符串的C語言程序免費下載。
    發(fā)表于 04-11 17:18 ?10次下載
    讀<b class='flag-5'>取字符串</b>的C語言程序免費下載

    LabVIEW字符串拆分的詳細資料說明

    本文檔的主要內容詳細介紹的是LabVIEW字符串拆分的詳細資料說明。
    發(fā)表于 12-12 08:00 ?12次下載
    LabVIEW<b class='flag-5'>字符串</b><b class='flag-5'>拆分</b>的詳細資料說明

    C語言字符串匹配和數(shù)據(jù)提取源碼

    C語言字符串匹配與數(shù)據(jù)提取源碼
    的頭像 發(fā)表于 02-27 15:42 ?2415次閱讀
    C語言<b class='flag-5'>字符串</b>匹配和<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>提取</b>源碼

    strtok拆分字符串

    大家好,我是驚覺,今天聊聊字符串字符串的使用場景非常之多,人機交互和雙機通信都會用到。比如:通過串口向單片機發(fā)送指令,以執(zhí)行操作或配置參數(shù)。單片機讀取傳感器數(shù)據(jù),數(shù)據(jù)格式是
    發(fā)表于 01-13 15:46 ?8次下載
    strtok<b class='flag-5'>拆分</b><b class='flag-5'>字符串</b>

    字符串的相關知識

    TCL 數(shù)據(jù)類型只有一種:字符串。這些字符串可以是字母、數(shù)字、布爾值、標點符號等特殊字符的組合。在某些特殊命令的作用下,
    的頭像 發(fā)表于 03-29 11:41 ?1166次閱讀

    labview掃描字符串怎么用

    介紹如何在 LabVIEW 中使用掃描字符串以及相關的技巧和注意事項。 字符串是 LabVIEW 的一種基本數(shù)據(jù)類型,表示一系列字符的序列
    的頭像 發(fā)表于 12-29 10:12 ?2105次閱讀

    字符串在編程的應用實例

    字符串在編程中有著廣泛的應用,它們被用于表示文本數(shù)據(jù)、處理用戶輸入、構建動態(tài)內容等。以下是一些字符串在編程的應用實例: 1. 用戶輸入與輸出 用戶輸入 :程序通常需要從用戶那里獲取輸
    的頭像 發(fā)表于 01-07 15:33 ?62次閱讀

    字符串數(shù)據(jù)的存儲方式

    數(shù)據(jù)庫是現(xiàn)代信息技術存儲和管理數(shù)據(jù)的核心組件。字符串作為最常見的數(shù)據(jù)類型之一,在數(shù)據(jù)
    的頭像 發(fā)表于 01-07 15:41 ?57次閱讀