注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

SIEMENS运动控制器/伺服驱动器

SIMOTION/S120——纯技术BLOG

 
 
 

日志

 
 

SIMOTION FIFO功能块,ST程序  

2016-08-31 09:00:24|  分类: SIMOTION_D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SIMOTION命令库中并没有提供FIFO功能块,论坛上有人编了一个,摘录在此。
原文链接:https://support.industry.siemens.com/tf/us/en/posts/47017/
FIFO缓冲区的长度与数据类型可以自定义。程序如下:
//-----------START---------
INTERFACE
USEPACKAGE cam;

VAR_GLOBAL CONSTANT
g_i32NUMBER_OF_DELAY_CYCLES : DINT := 1;
g_i32RING_BUFFER_SIZE: DINT := 80;            //这里缓冲区的长度
END_VAR


VAR_GLOBAL
g_aRingBuffer : ARRAY[0..g_i32RING_BUFFER_SIZE - 1] OF BOOL;  //这里可修改缓冲区的数据类型
END_VAR

FUNCTION_BLOCK FBRingBuffer;

END_INTERFACE

IMPLEMENTATION
FUNCTION_BLOCK FBRingBuffer
VAR_INPUT
i_boNew : BOOL;
i_boReset : BOOL;
i_boSignal : BOOL;
END_VAR

VAR_OUTPUT
q_boReadInformation : BOOL;
q_boDone : BOOL;
q_boError : BOOL;
END_VAR

VAR
s_myRTrig : R_TRIG;
s_i32WriteIndex : DINT;
s_i32ReadIndex : DINT := g_i32RING_BUFFER_SIZE - g_i32NUMBER_OF_DELAY_CYCLES;
s_i32Counter : DINT;
END_VAR;

s_myRTrig(clk := i_boNew);

IF(s_myRTrig.Q)
THEN
q_boReadInformation := g_aRingBuffer[ s_i32ReadIndex ]; 
 g_aRingBuffer[ s_i32WriteIndex ] := i_boSignal;
;
s_i32WriteIndex := (s_i32WriteIndex + 1) MOD g_i32RING_BUFFER_SIZE; 
 s_i32ReadIndex := (s_i32ReadIndex + 1) MOD g_i32RING_BUFFER_SIZE; 
 END_IF;

//Reset ring buffer
IF(i_boReset)
THEN 
 FOR s_i32Counter := 0 TO g_i32RING_BUFFER_SIZE - 1 DO
g_aRingBuffer[s_i32Counter] := FALSE;
END_FOR;
END_IF;
END_FUNCTION_BLOCK

END_IMPLEMENTATION
//---------END----------
  评论这张
 
阅读(109)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017