0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

西门子SCL建立功能块ACQUIRE的步骤

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-04-15 09:52 次阅读

声明部分的结构(Structure of the Declaration Section)

块中的声明部分包含以下子域:

常量:在CONST和END_CONST之间。

输入参数:在VAR_INPUT和END_VAR之间。

输出参数:在VAR_OUTPUT和END_VAR之间。

静态变量:在VAR和END_VAR之间。也包括对EVALUATE块的本地实例的声明。

CONST
LIMIT := 7;
QUANTITY := LIMIT + 1;
END_CONST
VAR_INPUT 输入变量声明
measval_in :INT ; // 新测量值
newval :BOOL; // 在环形缓冲区"measvals"中的测量值
resort :BOOL; // 对测量值进行排序
funct_sel :BOOL; // Select calculation square root/square
newsel :BOOL; // 取得输出地址
selection :WORD; // 输出地址
END_VAR
VAR_OUTPUT 输出变量声明

result_out :INT; // 计算值
measval_out:INT; // 相应的测量值
END_VAR
VAR 静态变量声明
measvals:ARRAY[0..LIMIT] OF INT := 8(0);
resultbuffer:ARRAY[0..LIMIT] OF
STRUCT
squareroot:INT;
square:INT;
END_STRUCT;
pointer:INT:= 0;
oldval:BOOL:= TRUE;
oldsort:BOOL:= TRUE;
oldsel:BOOL:= TRUE;
address:INT:= 0; // 转换后的输出地址
outvalues_instance: EVALUATE;// 定义本地实例
END_VAR

静态变量(Static Variables)

因为某些数据要保留到下一个程序循环,所以选择FB块类型。有些静态变量在声明部分"VAR, END_VAR"中声明。

静态变量是本地变量,其值保留贯穿每个块处理过程。他们用来保留功能块的值,且存贮在实例数据块中。

初始化变量(Initializing Variables)

记住当块被初始化时(下载CPU之后),在变量中键入初始值。功能块EVALUATE的本地实例也在声明子域"VAR, END_VAR"中声明。其名字是以后调用和存取输出参数使用的。共享的实例ACQUIRE_DATA用来存贮数据。

语句部分的结构(Structure of the Statement Section)

ACQUIRE的语句部分分为三个子部分:

获取测量值:
如果输入参数"newval"与"oldval"不同,则读入一个新测量值到环形缓冲区。

启动排序和计算:
比较输入参数"resort"和"oldsort",发生改变时,通过调用EVALUATE功能块启动排充和计算。

求取代码并准备输出:
按字读取代码。根据SIMATIC转换规则,意思是上开关组(字节0)包含输入字的高8位,下开关组(字节1)包含低8位。下图显示代码开关的位置。

计算地址(Calculating the Address)

下图显示如何计算地址:检测取码开关(位15)一个边沿,输入字IW0的12至14位包含了读入的代码。用标准函数SHR右移并用AND屏蔽相应的位得到“地址”。

地址用来将数组元素(计算结果和对应测量值)写入输出参数。是均方根据,还是平方值决定于"funct_sel"。

检测到取码开关的一个边沿,是因为"newsel"和"oldsel"不同。

2dff77b6-dadf-11ed-bfe3-dac502259ad0.png

逻辑块的语句部分如下:

BEGIN
(*****************************************************************
第1部分:获取测量值。

如果"newval"值发生改变,则输入了测量值。MOD运算是用来实现测量值用的环形缓冲区。
******************************************************************)
IF newval <> oldval THEN
pointer := pointer MOD QUANTITY;
measvals[pointer] := measval_in;
pointer := pointer + 1;
END_IF;
oldval := newval;
(*****************************************************************
第2部分:启动排序和计算

如果"resort"发生改变,则启动对环形缓冲区的排序和运行对测量值的计算。

结果存贮在一个新的叫"calcbuffer"的数组里。
******************************************************************)
IF resort <> oldsort THEN
pointer := 0; //复位缓冲区指针
eval_instance(sortbuffer := measvals); //调用EVALUATE
END_IF;
oldsort := resort;
resultbuffer := eval_instance.calcbuffer; //平方值和均方根

(*****************************************************************
第3部分:求代码值和准备输出

如果"newsel"发生改变,则计算用来输出的数组元素的寻址代码:屏蔽"selection"

的相应位并转换为整数。依据"funct_sel"开关的设置,选择"squareroot"或

"square"用于输出。
******************************************************************)
IF newsel <> oldsel THEN
address := WORD_TO_INT(SHR(IN := selection, N := 12) AND 16#0007);
END_IF;
oldsel := newsel;
IF funct_sel THEN
result_out := resultbuffer[address].square;
ELSE
result_out := resultbuffer[address].squareroot;
END_IF;
measval_out := measvals[address]; //Measured value display
END_FUNCTION_BLOCK






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 西门子
    +关注

    关注

    93

    文章

    2995

    浏览量

    115470
  • VaR
    VaR
    +关注

    关注

    0

    文章

    38

    浏览量

    11308
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    17022

原文标题:西门子SCL 建立功能块ACQUIRE(获得)

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何去制作出完美的西门子的modbus Rtu/Tcp指令功能块

    如何去制作出完美的西门子的modbus Rtu/Tcp指令功能块?有哪些步骤可以分享一下吗?
    发表于 07-02 06:44

    如何去使用西门子的modbus Rtu/Tcp通讯功能块

    请问一下怎样去制作西门子的modbus Rtu/Tcp通讯功能块呢?如何去使用西门子的modbus Rtu/Tcp通讯功能块呢?
    发表于 09-08 06:32

    浅谈西门子PLC的“SCL语言”编程

    介绍西门子PLC的“SCL语言”编程,相关编程代码
    发表于 01-22 17:25 0次下载

    西门子PLC的功能功能块

    本文档的主要内容详细介绍的是西门子PLC的功能功能块
    发表于 11-09 17:49 63次下载
    <b class='flag-5'>西门子</b>PLC的<b class='flag-5'>功能</b>和<b class='flag-5'>功能块</b>

    西门子PLC系统功能块和系统功能

    系统功能块(SFB )和系统功能(SFC ) 已经编好程序 用户不需要每个功能都自己编程。S7 CPU为用户提供了一些已经编好程序,这些
    的头像 发表于 12-23 17:55 1.1w次阅读

    西门子TDC编程语言CFC功能块详细说明

    西门子TDC编程语言CFC功能块详细说明免费下载。
    发表于 04-22 10:06 22次下载

    西门子PLC中使用SCL语言编程的技巧

    西门子PLC中使用SCL语言编程的技巧说明。
    发表于 04-22 11:15 63次下载

    西门子PLC FB41中PID功能块说明和调整方法

    西门子PLC FB41中PID功能块说明和调整方法说明。
    发表于 04-22 11:48 13次下载

    浅谈西门子PLC的SCL语言编程

    西门子PLC的SCL语言编程说明。
    发表于 04-22 14:39 46次下载

    浅谈西门子SCL编程

    浅谈西门子SCL编程资料免费下载。
    发表于 04-23 10:44 27次下载

    西门子TDC编程语言CFC功能块详细说明中文版

    西门子TDC编程语言CFC功能块的详细介绍说明。
    发表于 04-30 14:15 0次下载

    西门子SCL语言编程系列-写立方根FB

    由于西门子PLC本身并没有带求立方根的指令,我们用SCL来写一个求立方根的FB
    的头像 发表于 02-06 15:17 1839次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>SCL</b>语言编程系列-写立方根FB<b class='flag-5'>块</b>

    普通电机功能块的封装

    学过西门子TIA(博途)的朋友都知道它的FC/FB非常好用,深受开发者的喜欢,今天我们简单的讲一个普通电机功能块的封装。
    的头像 发表于 03-13 17:46 1460次阅读
    普通电机<b class='flag-5'>功能块</b>的封装

    西门子博图SCL练习1:使用FC计算平均值

    西门子博图SCL练习1:使用FC计算平均值
    的头像 发表于 01-02 10:25 2518次阅读
    <b class='flag-5'>西门子</b>博图<b class='flag-5'>SCL</b>练习1:使用FC计算平均值

    西门子PLC中OB功能详解

    西门子PLC(Programmable Logic Controller)作为工业自动化领域的核心设备,其内部功能强大、应用广泛。在西门子PLC中,OB(Organization B
    的头像 发表于 06-15 11:27 3772次阅读