『7x24小时有问必答』
     大家好,最近在学习SCL语言,新学的一个指令,感觉很实用,在这里跟大家聊一聊,可能大家在以后也可能用到,纯分享个人观点,不对的地方,欢迎留言区交流指正,感谢您的阅读.
一.POKE指令介绍:
     POKE   是西门子S7-1200/1500的直接写入指令,可以绕过变量符号名,直接按「存储区类型 + 地址」写入数据.本质是按绝对地址向PLC的存储区写入数据(DB、M、I、Q等),属于“底层地址操作指令”.

POKE(

       area := 16#84,             // 存储区类型

       dbNumber := 3,             // DB块编号(仅DB区需要)

       byteOffset := #I,       // 字节偏移地址

       value := BYTE#0           // 要写入的值

);

各个管脚的定义如下:
1.   area  :存储区类型代码
代码(area)对应存储区说明
输入过程映像区(I)直接写物理输入,不建议使用
输出过程映像区(Q)直接写物理输出
位存储区(M)写入M区地址
数据块(DB)写入DB块,你程序里用的就是这个
定时器(T)写入定时器
计数器(C)写入计数器
2.   dbNumber  :DB块编号(仅DB区需要)
  
- 当   area=16#84  (DB区)时,这个参数必须填写目标DB块的编号。
- 比如   dbNumber := 3 ,就是指定写入   DB3   数据块。
- 其他存储区(如M、I、Q)使用时,这个参数可以省略或填0。

3.   byteOffset  :字节偏移地址
  
- 目标地址相对于存储区起始位置的字节偏移量。
- 程序里   byteOffset := #I  ,这是可变变量,这里也可以直接写字节偏移的个数
- 注意:偏移量是字节为单位,和变量的数据类型无关。

4.   value  :要写入的值
  
- 支持的数据类型:Byte、Word、DWord、Int、DInt等。
- 写入长度由   value   的数据类型决定:
-   BYTE#0   → 写入1个字节
-   WORD#16#0000   → 写入2个字节
-   DINT#0   → 写入4个字节

二.程序编写测试
1.打开博图软件,创建清零数据SCL项目
2.配置CPU1517 PLC,修改PLC属性中相关参数
3.程序块中添加全局DB数据块3,变量定义为ARRY[0..20]个字节.
3.程序块中添加数据清零块FB2,语言为SCL
4.定义背景接口信号INPUT定义清零开始,临时变量I 用于数据的偏移,如下图
5.插入一个上升沿指令,背景数据块选择多重实例.
6.插入IF指令,编写如下程序.
这段程序的核心作用是:
当「清零开始」信号产生上升沿时,用   POKE   指令,把 DB3数据块中从 DB3.DBB0 到 DB3.DBB14 共15个字节 全部清零(写0).
  程序很简单,大家自己动手做一下试试,加深一下理解,个人觉得SCL语言不是很难,掌握关键的几个指令如IF/CASE/FOR/WHILE,还有几个常用指令用法就基本能写程序啦,大家有时间多练习练习,好了,今天就到这里,感谢您的阅读,喜欢的点个赞和关注.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码