gkket 发表于 2021-4-12 11:51:52

博途SCL编程-批处理模拟量

博途的间接寻址和S7-300/400大不一样。博途中的间接寻址主要用peek/poke指令,peek/poke指令不能用于优化的数据块。优化数据块可以用数组类寻址。这次的控制任务是模拟类的批量处理,s7-300/400模拟量批量处理很繁琐。控制任务把数量不定的模拟量转换成工程量,然后保存到指定的数据块中。这里我们为了测试,不读取PIW中的模拟值,而用MW代替。象这样的控制任务,我们一般用SCL来写会比较方便。请看下面的程序。控制程序https://p3-tt.byteimg.com/origin/pgc-image/25433088e5264625b3727dc143067b6c?from=pc


https://p6-tt.byteimg.com/origin/pgc-image/dd77ba4d10384ea18d0514f7bdde636d?from=pc

https://p6-tt.byteimg.com/origin/pgc-image/5a74255a750e4775bc0c390093762b1f?from=pc

https://p1-tt.byteimg.com/origin/pgc-image/dc99b6bc131141d9a874c9a8fa1ad53b?from=pc

程序简单说明一下:
[*]LOWER_BOUND 读取 resultArray的下限
[*]UPPER_BOUND读取resultArray的上限
[*]lenOfEmtpyArray是数组除去offsetArray偏移量后还剩的空余长度,如果这个长度小于模拟量的数量,则退出。另外如果arrayLowerBound小于下限,也退出。
[*]第19行,SCL 中的循环要注意,开始和结尾都是闭区间,和c语言等高级语言不一致。
[*]第20行,PEEK_WORD 就是读取M区的模拟量。具体用法可以参看手册。
[*]第25行,对数组的读写,也是间接寻址,在scl中没有这种说法了。间接寻址等概念都是汇编下的,高级语言没有这种叫法。
https://p3-tt.byteimg.com/origin/pgc-image/b2350faf8d024d1ba73e5437bbb3cb3a?from=pc

最后,模拟量转化为工程量后为100.0 和 54.0,存入数据块。

xuhailin1185 发表于 2021-4-20 06:57:31

楼主您的技术水准,我最服你,其他都是浮云

manyoushijie 发表于 2021-4-22 06:35:45

绝对干货,楼主给力,支持了!!!

蜗牛 发表于 2025-11-14 13:10:29

楼主辛苦啦,期待下一篇分享

13325275868 发表于 2025-11-14 13:13:26

蹲一波同款,有没有姐妹 / 兄弟推荐?

雁过也 发表于 2025-11-14 13:14:38

笑不活了,评论区比正文还精彩!

wx_CMw9IquM 发表于 2025-11-14 13:16:27

谁懂啊!这内容我能循环看十遍

taoyongt2l91 发表于 2025-11-14 13:22:38

不请自来,只为说一句:太精彩了!

luyin 发表于 2025-11-14 13:22:51

水个经验,支持楼主,加油呀

martin 发表于 2025-11-14 13:24:40

理性围观,感觉大家说得都有道理
页: [1] 2
查看完整版本: 博途SCL编程-批处理模拟量