技术论坛

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

返回主题列表
作者 主题
风一样的美男子
游民

经验值:90
发帖数:3
精华帖:0
楼主    2019-04-30 09:05:41
主题:基于博图利用Rd-sys-t和wr-sys-t读取和修改系统时间

       进日,客户问我如何做一个小程序,在每个星期天触发一次气缸动作用以放掉空压机里边的水。我说这个好办,直接调用系统时间就好了。我以为很简单,由于以前没有做过,网上翻了好多资料,好多都是step7做的,好多都不是大家熟悉的梯形图,今天我来一个大家熟悉的博图,梯形图版本,你会发现确实很简单。我是用s7-300模拟的,其他型号s7-400、s7-1200、s7-1500你们试试,应该也是一样的 。(英语不好,拼写错误请忽略,不影响使用)

首先,建立变量(怎么生成网络和设备组态我就不多说了,自己学习去)。


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

其次,写程序咯


看清楚了吧,块在哪里调用找得到了吧,重点解释一下块的填写和星期毫秒的提取(其他诸如年月日等信息很简单,不过多描述)。先将块的填写

1,块的填写。就两个管脚,第一个RET_VAL,这个应该是一个错误代码的意思,填一个字的变量就好,它会将读取时产生的错误代码反应到这个字上,根据代码判断错误在哪里,错误代码自行F1,不列出;第二个OUT更加好填了,把刚刚DB1生成的那个变量拖放到这里就好了

2,星期的和毫秒的提取。星期的提取,我暂时想到两种方法,①“与”运算,IN1=16#000f,过滤掉IN2也就是DB1.DBB7中我不想要的数据,将结果放到一个字(或字节)中,这个结果就是我们提取的星期信息,有了这个值,再加一个比较,就可以完成客户的需求了②移位


先清零用到的两个量,防止数据出错,确保用到的数据干净。然后就好玩了,把DB1.DBB7放到一个“中间量”里左移12位,清零高12位的数据,再右移12位,得到DB1.DBB7的低四位,也就是星期信息,搞定。毫秒的提取结合方法二就简单好多了,直接将DB1.DBW6右移4位,清掉低4位(也就是星期)的数据,得到的就是毫秒数据啦。

   好咯,接下来讲一下修改系统时间,有了上边的基础,这个就简单了。

建立变量,Write Time和年月日等(如图)


接下来就可以编程咯,如下图


      直接将信息写入就好,红圈2处的变量与红圈1里的变量对应起来,用一个move指令就好了。比如说变量year对应DB10.DBB10。注意几点1,让时间在合理的范围(比如说不要搞个大于12的月,或者大于31的日),避免出错。2不要一直写入,最好在WR_SYS_T前加上升沿,避免出错………………

    好了,教程写完了。原谅两点1,程序风格可能比较笨拙,我也是临时写的,自己去优化吧,我懒2,拼写错误,你英语好,自行改正吧3,额,错误…………


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。