0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SMART 200中拆分提取字符串内数据

opkgjew 来源:PLC标准化编程 2023-03-29 14:00 次阅读

我在做模拟量处理模块时,留了一个未解决的难题,一个小尾巴。即因为程序块中使用的TEMP变量资源已经耗尽,所以被逼无奈使用了一个全局变量MD20,做了数据的传递功能。

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

对那里面留下的缺憾,其实我并不怎么着急。 模块化的设计工作就是这样,有遗憾不可怕。 可怕的是遗憾太多,牵扯到整个系统架构, 牵一发而动全身,导致不敢动。

而我留下的这种遗憾则无所谓,我只要心中随时留个念想, 一旦有找到好的思路后,回来打个补丁,修复一下也就完美了。 而即便没有打补丁之前,也不影响正常的使用。 这种问题,终究不是大问题,连bug都算不上。 只是完美主义者心中的一个结而已。

然后,我在做PID模块的时候,很快就遇到了相似的问题。 原本,按照西门子LBP的数据结构,我原本是可以轻松解决的,资源完全够用。 因而这段时间都在做这部分的调试了。

但当调试结束,发现了一个问题,长久以来西门子以及众多同行都忽视的问题。

即,PID的输出值的量纲的问题。

通常,很多模块都直接以%为单位,或者没有单位,就0-1的一个小数数值了。

这在阀门开度等工况时是没问题的,然而很多的PID的输出回路会是变频器,变频器的运行开度,100%对应的是50Hz,那么,如果你在窗口上显示PID回路的输出时,如果仍然以0-100来显示,操作人员使用中就会有些不方便。总要做数值的换算。 一不小心还容易遗忘,算错。

所以,我决定要增加这部分的数值输入。 然而就同样遇到了变量使用超标了。

想到了这部分的数据在内部程序块中只使用一次,并不总是参与数值计算。同时,模块在调用时,输入的是常量,在运行中也不会变动。 所以,可以考虑用字符串的形式输入。

即, 把原本的UNIT的管脚,改名为RANG_UNIT, 包含了上下限和量纲:

0;10;Bar;0;50;Hz

字符串中使用分号;将所有数据分割。

S7-200中的字符串,在定义到子程序的管脚时,长度只有4byte,所以它本质上只是个指针。 而作为常量的字符串输入时,则不占用任何寄存器资源。

所以,编制了一个对字符串分割的函数Split

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

每次调用, 只读取指定的位置的数据。 我也顺便做了转换,即可以读取到字符串放到S1指定的指针,也可以顺便转换为浮点数输出到寄存器中使用。

由此,用一个字符串指针4BYTE替代了原本的多个浮点数,程序块的资源终于省出来了。

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

我在几个周之前, 还分享过一个做BCC校验的程序块,使用场合我没讲。 其实,也是出自同样的原因。

在LBP原程序架构中,需要多次校验HMI上数据序列的修改,在数据满足变化或者不变化条件时做出逻辑处理。 在PORTAL中的方法是直接对UDT进行相等比较。 所以在数据区中建立了大量的数据备份。

而对于SMART这样的小身板,自然是没那么多资源来存放所有数据的备份的。 所以就想到了使用BCC校验来做。数据序列中任何一个数值如果修改,都会导致BCC校验码不通过,纵然理论上会有某种巧合导致BCC相同,但几率又是小到火星撞地球,而且又是与人机界面人工操作相关,并不关乎安全,可靠性要求也不高。 所以可以以此节省规模不菲的变量资源。

算是对数据校验的另一种另类应用。 关于相撞的几率,我还没算过。与浮点数的表达规则有关,可以单独再研究。 不过未来即便有更严谨的应用场合,我们还可以多个校验算法,比如BCC和CRC校验同时上阵,估计就想撞也撞不到了。

我探讨了通常意义的线性变换,PID,飞剪,卷曲等算法对我们做PLC编程的重要性并没多高,甚至都可以认为不是我们这个行业的必备的算法技能。

然而如果非要找一些算法功能的话,这里提到的拆分和校验,以及所实现的数据处理交换方式,某种程度上可以算做是了。

而且还会通用,多种模块类型中都会遇到。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SMART
    +关注

    关注

    3

    文章

    221

    浏览量

    44614
  • PID
    PID
    +关注

    关注

    35

    文章

    1467

    浏览量

    84978
  • PLC编程
    +关注

    关注

    46

    文章

    245

    浏览量

    37275
  • BCC
    BCC
    +关注

    关注

    0

    文章

    10

    浏览量

    7515

原文标题:0329 【万泉河】SMART 200中拆分提取字符串内数据

文章出处:【微信号:PLC标准化编程,微信公众号:PLC标准化编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在bash中分割字符串

    假设我们有一个由逗号或者下划线隔开的多个单词组成的字符串,需要拆分这个字符串提取各个单词。
    发表于 12-07 17:10 3615次阅读

    如何提取字符串某几个位置的元素

    如何提取字符串某几个位置的元素,如字符串AA 01 08 D6 DF FF,我想提取其中的08和D6,请问该如何实现?或者说如何提取一维数
    发表于 10-28 18:48

    labview截取字符串时为什么不能显示出字符串的汉字

    我要输出数量字符串的最后一个字符,使用截取字符串时输出的最后一个字符是数字或字母时子字符串可以
    发表于 05-05 11:11

    采集数据经过截取字符串实时数据采集问题,求指教

    利用截取字符串函数截取数据信息,发现有相当大的延迟,大概几秒钟的间隔才能实现新的字符串的截取,这样的话会出现对采集信息的遗漏,如何实现数据的实时截取?求大神指教问题如图,上面的压力值是
    发表于 10-28 17:01

    LABVIEW中使用tdms存取字符串数组的问题

    出来的数据类型是波形,提取波形信息后没有办法直接索引连接字符串类型的输出,究竟应该怎么用TDMS存取字符串类型的数据呢?
    发表于 08-15 17:26

    字符串拆分

    串口连续传来如是字符串”V-12.98C0.18“希望把字符串拆分为V后的为一组数,C后的为一组数。上述字符串应该拆为-12.98和0.18。我尝试了用匹配模式匹配中间的空格分成两个
    发表于 05-22 11:57

    Labview之截取字符串

    Labview之截取字符串,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:23 0次下载

    取字符串的C语言程序免费下载

    本文档的主要内容详细介绍的是读取字符串的C语言程序免费下载。
    发表于 04-11 17:18 10次下载
    读<b class='flag-5'>取字符串</b>的C语言程序免费下载

    LabVIEW字符串拆分的详细资料说明

    本文档的主要内容详细介绍的是LabVIEW字符串拆分的详细资料说明。
    发表于 12-12 08:00 12次下载
    LabVIEW<b class='flag-5'>字符串</b><b class='flag-5'>拆分</b>的详细资料说明

    C语言字符串匹配和数据提取源码

    C语言字符串匹配与数据提取源码
    的头像 发表于 02-27 15:42 2307次阅读
    C语言<b class='flag-5'>字符串</b>匹配和<b class='flag-5'>数据</b><b class='flag-5'>提取</b>源码

    strtok拆分字符串

    大家好,我是惊觉,今天聊聊字符串字符串的使用场景非常之多,人机交互和双机通信都会用到。比如:通过串口向单片机发送指令,以执行操作或配置参数。单片机读取传感器数据数据格式是
    发表于 01-13 15:46 8次下载
    strtok<b class='flag-5'>拆分</b><b class='flag-5'>字符串</b>

    如何截取字符串字符

    2 方法 .当字符串中有特定的分隔符时,可以使用split()方法,非常简便。 public class Test01 { public static void main
    的头像 发表于 02-24 10:36 719次阅读

    字符串的相关知识

    TCL 数据类型只有一种:字符串。这些字符串可以是字母、数字、布尔值、标点符号等特殊字符的组合。在某些特殊命令的作用下,
    的头像 发表于 03-29 11:41 1026次阅读

    labview扫描字符串怎么用

    的函数: 文本扫描器(Text Scan)函数:这个函数可以从一个字符串提取出特定的数据,例如数字或者其他文本。你可以指定要提取数据的格
    的头像 发表于 12-26 16:58 1595次阅读

    labview扫描字符串怎么用

    介绍如何在 LabVIEW 中使用扫描字符串以及相关的技巧和注意事项。 字符串是 LabVIEW 的一种基本数据类型,表示一系列字符的序列
    的头像 发表于 12-29 10:12 1638次阅读