电工学习网

 找回密码
 立即注册
查看: 10775|回复: 0
打印 上一主题 下一主题

基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

[复制链接]
跳转到指定楼层
楼主
发表于 2019-4-30 20:56:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
       进日,客户问我如何做一个小程序,在每个星期天触发一次气缸动作用以放掉空压机里边的水。我说这个好办,直接调用系统时间就好了。我以为很简单,由于以前没有做过,网上翻了好多资料,好多都是step7做的,好多都不是大家熟悉的梯形图,今天我来一个大家熟悉的博图,梯形图版本,你会发现确实很简单。我是用s7-300模拟的,其他型号s7-400、s7-1200、s7-1500你们试试,应该也是一样的 。(英语不好,拼写错误请忽略,不影响使用)
首先,建立变量(怎么生成网络和设备组态我就不多说了,自己学习去)。
基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

Read Time这个变量注意他的数据类型“date and time”,这种类型的数据是由DB1.DBB0到DB1.DBB7这8个字节组成分别对应的是年、月、日、时、分、秒、毫秒、毫秒&星期。特别注意一下,DB1.DBB6和DB1.DBB7这两个字节,组合起来就是DB1.DBW6这个字,这个字的前12个位表示毫秒,后4个位表示星期,后四位等于1就表示星期日,等于二就表示星期一……等于七就表示星期六。(我这么说解释清楚了吗?不清楚就自己结合其他资料再想想)
其次,写程序咯

基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

看清楚了吧,块在哪里调用找得到了吧,重点解释一下块的填写和星期毫秒的提取(其他诸如年月日等信息很简单,不过多描述)。先将块的填写
1,块的填写。就两个管脚,第一个RET_VAL,这个应该是一个错误代码的意思,填一个字的变量就好,它会将读取时产生的错误代码反应到这个字上,根据代码判断错误在哪里,错误代码自行F1,不列出;第二个OUT更加好填了,把刚刚DB1生成的那个变量拖放到这里就好了
2,星期的和毫秒的提取。星期的提取,我暂时想到两种方法,①“与”运算,IN1=16#000f,过滤掉IN2也就是DB1.DBB7中我不想要的数据,将结果放到一个字(或字节)中,这个结果就是我们提取的星期信息,有了这个值,再加一个比较,就可以完成客户的需求了②移位
基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

先清零用到的两个量,防止数据出错,确保用到的数据干净。然后就好玩了,把DB1.DBB7放到一个“中间量”里左移12位,清零高12位的数据,再右移12位,得到DB1.DBB7的低四位,也就是星期信息,搞定。毫秒的提取结合方法二就简单好多了,直接将DB1.DBW6右移4位,清掉低4位(也就是星期)的数据,得到的就是毫秒数据啦。
   好咯,接下来讲一下修改系统时间,有了上边的基础,这个就简单了。
建立变量,Write Time和年月日等(如图)
基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

接下来就可以编程咯,如下图
基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

      直接将信息写入就好,红圈2处的变量与红圈1里的变量对应起来,用一个move指令就好了。比如说变量year对应DB10.DBB10。注意几点1,让时间在合理的范围(比如说不要搞个大于12的月,或者大于31的日),避免出错。2不要一直写入,最好在WR_SYS_T前加上升沿,避免出错………………
    好了,教程写完了。原谅两点1,程序风格可能比较笨拙,我也是临时写的,自己去优化吧,我懒2,拼写错误,你英语好,自行改正吧3,额,错误…………
来源:西门子工业技术论坛

回复

使用道具 举报

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

本版积分规则

电工学习网 ( )

GMT+8, 2024-8-22 21:26

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表