各位前辈好,现在手头上有个小需求,就是要求7天头尾的两个数相减:
比如今天3月1日,记录一个数V1,7天后就是3月7日,记录一个数V2。
3月7日后开始计算,V1-V2。这个没有问题。
但目前是要需求是要7日头尾的数相减,以此类推:
3月8日的数值-3月2日数值
钻石用户推荐最佳答案
1、用设置系统时钟指令对系统的时钟进行校时,当然也可以用上位、HMI 做时钟同步,或都用PG设置时钟,根据实际软硬件情况。
2、用读取时钟指令获取 CPU 当前时钟,且记它时 BCD 码的,如果要使用先要将其转换成十进制的。
另外有库指令可以获取十进制的时钟,可以直接用。
3、关开时钟方面的资料
S7-200 SMART实时时钟常见问题
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/SmartSMS/010.html
Clock_integer 库
功能:由于S7-200时钟指令的数据格式是BCD码,使用该库指令可以直接读取S7-200 CPU时钟并以整数格式输出所读取的值。
http://support.automation.siemens.com/CN/view/zh/19294366
4、变量是字型的,还是双字型的呢?
如果是字型的,可以在V存储区定义一个最大条目数为 7 表格,比如从 VW0 开始,其中 VW0 为表格最大长度,值为 7,VW2为当前条目数。
VW4、VW6、VW8、VW10、VW12、VW14、VW16就是预留的存储空间。
处理思路:
1)当时钟条件满足时,用一条 AD_T_TBL 指令先将当前的值添加到表中。
2)判断当前条目数 VW2 是不是等于 7,如果等于 7,则做两步工作
第一步, VW16-VW4得到相减的值存储到你想存的其它地方。
第二步, 用一次 FIFO 指令将此时 VW4 弹出队列;
资料可参考
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/programming/table/table.html
4、如果是双字型的变量
可以在 V 存储区定义一个最大条目数为 14 表格,比如从 VW0 开始,其中 VW0 为表格最大长度,值为 14,VW2为当前条目数。
VD4、VD8、VD12、VD16、VD20、VD24、VD28 就是预留的存储空间。
处理思路:
1)当时钟条件满足时,用二条 AD_T_TBL 指令将当前的值添加到表中。注意先添加双字变量的高字,然后再添加其低字,这样在使用时位序是不变的。
2)判断当前条目数 VW2 是不是等于 14,如果等于 14,则做两步工作
第一步, VD28-VD4得到相减的值存储到你想存的其它地方。
第二步, 用二次 FIFO 指令将此时 VW4、VW6 弹出队列;
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc280995.html