S7_200系列一个工艺要求:在某个时段,一秒启动模拟量读取值;每50毫秒读取一次,依次送入VB0-VB19,20个存储区,不能丢失;得出这次的平均值;在程序运行至第二个读取时间时,一秒启动模拟量读取值;每50毫秒读取一次,依次送入VB20-VB39,20个存储区,不能丢失,得出平均值;再用VB0对应VB20、VB1比对VB21、、、、、依次做出比值,得出比对值送入一个独立存储区,然后这20个比对值得出平均值,乘以一个百分数,精度要求就是这么多;求大神、大侠们赐教;
问题补充:
第二个VB20_VB39数据不是减去第一次对应数据,而是除以第一次对应的那个区数据;嗯,是不是先要在数据块定义存储区?关于指针,一直很忌讳使用,有过失败记忆;能求一段代码吗?谢谢!
图片说明:
最佳答案
思路:设置V区断电保持范围
数据采集:
设置定时中断SMB34 = 50(mS),在中断中利用指针及加1指令,使每一个50mS的中断子程序执行时,将数据分次写入由指针指向的V地址区;同时,进行数据的累加,当中断20次后,取一次平均值。第二个读取的原理与第一次一致,只是指针指向的V地址区为VB20开始的地址区。
对比:
当40此中断结束时,依次将VB0与VB20相减,结果放置在VB40起始地址,依次方式执行20次,将由VB40起始的V地址区依次累加,取平均值,乘以一个百分数。
初始:
当程序进入到第41个中断时,首先初始化这些V地址存储区,然后再这些数据采集;对比;计算的过程,如此循环。
补充问题回复:
是的。事先定义数据区,有助于V区的利用。
关于指针的使用,我之前有几个程序,参考,http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1344733&b_id=64&s_id=83&num=10#anch
提问者对于答案的评价:
这个思路很好,实践证明精度取值不能太高;这是一个深潜器的光学浓度测试设计,每一万个脉冲下潜十米,启动一秒读取模拟量,得出水中的浑浊度、游离物、矿物质的百分比等等;有一套复杂的光学组件输出信号;想用S7_200代替某些个专用仪器;估计还得加一个64K的外存储器才行;
最佳答案作者回复:
存储卡,256K (用户程序、配方和数据记录) 6ES7 291--8GH23--0XA0
存储卡,64K (用户程序、配方和数据记录) 6ES7 291--8GF23--0XA0
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc137873.html