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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

opkgjew ? 來源:PLC標(biāo)準(zhǔn)化編程 ? 2023-03-29 14:00 ? 次閱讀

我在做模擬量處理模塊時(shí),留了一個(gè)未解決的難題,一個(gè)小尾巴。即因?yàn)槌绦驂K中使用的TEMP變量資源已經(jīng)耗盡,所以被逼無奈使用了一個(gè)全局變量MD20,做了數(shù)據(jù)的傳遞功能。

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

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

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

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

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

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

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

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

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

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

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

0;10;Bar;0;50;Hz

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

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

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

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

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

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

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

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

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

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

算是對數(shù)據(jù)校驗(yàn)的另一種另類應(yīng)用。 關(guān)于相撞的幾率,我還沒算過。與浮點(diǎn)數(shù)的表達(dá)規(guī)則有關(guān),可以單獨(dú)再研究。 不過未來即便有更嚴(yán)謹(jǐn)?shù)膽?yīng)用場合,我們還可以多個(gè)校驗(yàn)算法,比如BCC和CRC校驗(yàn)同時(shí)上陣,估計(jì)就想撞也撞不到了。

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

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

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






審核編輯:劉清

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

    關(guān)注

    3

    文章

    222

    瀏覽量

    44635
  • PID
    PID
    +關(guān)注

    關(guān)注

    35

    文章

    1467

    瀏覽量

    85113
  • PLC編程
    +關(guān)注

    關(guān)注

    46

    文章

    245

    瀏覽量

    37304
  • BCC
    BCC
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7519

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

文章出處:【微信號:PLC標(biāo)準(zhǔn)化編程,微信公眾號:PLC標(biāo)準(zhǔn)化編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在bash中分割字符串

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

    如何提取字符串某幾個(gè)位置的元素

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

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

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

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

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

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

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

    字符串拆分

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

    Labview之截取字符串

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

    取字符串的C語言程序免費(fèi)下載

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

    LabVIEW字符串拆分的詳細(xì)資料說明

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

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

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

    strtok拆分字符串

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

    如何截取字符串字符?

    2 方法 .當(dāng)字符串中有特定的分隔符時(shí),可以使用split()方法,非常簡便。 public class Test01 { public static void main
    的頭像 發(fā)表于 02-24 10:36 ?753次閱讀

    字符串的相關(guān)知識

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

    labview掃描字符串怎么用

    的函數(shù): 文本掃描器(Text Scan)函數(shù):這個(gè)函數(shù)可以從一個(gè)字符串提取出特定的數(shù)據(jù),例如數(shù)字或者其他文本。你可以指定要提取數(shù)據(jù)的格
    的頭像 發(fā)表于 12-26 16:58 ?1714次閱讀

    labview掃描字符串怎么用

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