技术论坛

 【分享】分享下我是怎么样在FB里计时的

返回主题列表
作者 主题
宁超
至圣

经验值:11563
发帖数:1009
精华帖:39
楼主    2015-09-21 16:48:46
主题:【分享】分享下我是怎么样在FB里计时的 精华帖 

- 在编写电机阀门等一类功能块时,需要用到计时功能,如在开关阀门命令Q点输出10秒内,阀门没有反馈已经打开的命令,需要提醒操作员阀门有反馈错误的报警。

- 阀门与电机功能块在程序大量被调用,少则几十个,多则几百个,如果每次调用都分配一个单独的计时器,你会不会当心计时器不够用或者计时器混用呢?

- 下面的方法是里面时钟脉冲的方式计时,使用的是CPU自带的Clock Memory功能,被设置的MBxx字节,它的每个bit位能发出不同频率的脉冲

STEP 1.

首先在硬件组态里将CPU属性里的Clock Memory功能勾选,填写Memory byte(本例中为MB1)。

填写后点击填写栏空白处,按F1功能,点击继续选择高亮文本,

Bit 7 /6 /5 /4 /3 /2 /1 /0

Periodduration (s): 2 /1.6 /1 /0.8 /0.5 /0.4 /0.2 /0.1

Frequency(Hz): /0.5 /0.625 /1 /1.25 /2 /2.5 /5 /10

程序被下载进CPU的时候MB1的8个bit就开始有规律的闪烁了,以M 1.1为例:

接通0.2秒,休息0.2秒如此反复


STEP 2.

建立计时使用的接口,SCL编程方式为例:

我们建立两个接口在INPUT位置

VAR_INPUT

    MON_T   {S7_m_c:='true'} : REAL := 10.0;   // Monitoring Time

    SAMPLE_T     : REAL := 0.2;     // Sample time 

    PULSE        : BOOL := FALSE; 

END_VAR


VAR_OUTPUT 

   QMON_T      : REAL := 0.0;       // Current Monitoring Time Feedback

END_VAR


STEP 3.

实例程序调用,在SAMPLE_T填写0.2在PULSE填写M1.1

  

STEP 4.

    我们以计算电机启动后,运行反馈信号达到时间计时为例子,如果输出启动命令,反馈还没回来之前,我们认为电机正在启动Starting,如果停止输出命令,电机反馈信号依然存在,我们认为电机的状态是正在停止Stopping,指定DBx监控FB:

  


   正在启动和正在停止时,每次Pulse的上升沿都给QMON_T加上0.2,看看会有什么情况发生,M1.1一秒钟内会有5次上升沿,5个0.2相加其实就是1秒钟,当你MON_T电机启动监视时间设定不能超过10秒时,其实就是启动停止过程中M1.1闪烁了50次,即完成了QMON_T通过自加0.2加到了10.0秒。


QMON_ERR 监视错误出来了,传上wincc看看效果图:

剑忠
奇侠

经验值:9641
发帖数:622
精华帖:57
3楼    2015-09-22 11:14:39
精华帖  主题:回复:【分享】分享下我是怎么样在FB里计时的

1、除PID在OB35中调用外,这类FB块所有最终都是OB1调用,这应该不是个最佳OB调用方案!

2、如果将其放置在ms级OBxy块里调用,Clock Memory的Bit变量M1.1使用是否可以省去?

3、书写FB块的程序或代码,是否可以省去对Pulse上升沿的周期性判断比较?

大学之道,在明明德,在亲民,在止于至善。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。