建立一个存储机器人信号的功能块FB5

发布者:数字冲浪最新更新时间:2020-09-03 来源: 酷扯儿作者: Lemontree 手机看文章 扫描二维码
随时随地手机看文章

BLKMOV:存储区移动(SFC20)

使用“块移动”指令,可将存储区(源区域)的内容移动到其它存储区(目标区域)。移动操作沿地址升序方向执行。可使用 ANY 指针定义源区域和目标区域。

移动操作的通用规则

源区域和目标区域不得重叠。如果源和目标区域长度不同,则只能移动较小长度的区域。

如果源区域小于目标区域,则将整个源区域的数据都写入到目标区域中。而目标区域的其余字节则保持不变。

如果目标区域小于源区域,将写满整个目标区域。而忽略源区域的剩余字节。

如果复制 BOOL 数据类型的区域,则此区域的指定长度必须是 8 的整数倍,否则将无法执行指令。

移动串的规则

还可以使用“块移动”指令移动 STRING 数据类型的源区域和目标区域。如果只有源区域为 STRING 数据类型,则移动字符串中实际包含的字符。有关实际和最大长度的信息,将写入目标区域。如果源和目标区域都是 STRING 数据类型,则将目标区域中字符串的当前长度设置为实际移动的字符数。

如果要移动字符串实际长度和最大长度的信息,则需要以字节为单位将相关区域指定给 SRCBLK 和DSTBLK 参数。

函数值 (RET_VAL) INT 错误信息

0000 无错误

8092 源或目标区域只能在装载中。

8xyy 有关错误的更多信息,

使用复杂参数类型ANY:

STEP 7以10个字节存储参数类型ANY。当构造类型为ANY的参数时,必须确保所有10个字节都被占用,因为调用块估计参数整个内容的值。例如,如果以字节4指定DB编号,也必须以字节6明确地指定存储器区。

参数类型的ANY格式

对于参数类型,STEP 7存储数据类型和参数的地址。重复因子始终是1。字节4、5和7始终是0。字节8和9指示、计数器或块的编号。

重复因子识别由参数类型ANY传送的指示数据类型的数量。这意味着可以指定数据区,也可以和参数类型ANY结合使用数组和结构。STEP 7将数组和结构识别为数据类型的编号(借助重复因数)。例如,如果要传送10个字,必须为重复因子输入数值10,并且必须为数据类型输入数值04。

地址以格式By.Bit存储,此处字节寻址存储在字节7的位0 - 2,节字8的位0 - 7,节字9的位3 - 7。位地址存储在字节9的位0 - 2。

建立一个存储机器人信号的功能块FB5

FUNCTION_BLOCK FB5

VAR_INPUT

Rob_A:POINTER; 机器人的地址

pRobAAT Rob_A: STRUCT 拆分地址

DBNR :WORD;

BZ :DWORD;

END_STRUCT;

END_VAR

VAR_OUTPUT

ST_ROB: ST_Rob;

END_VAR

VAR_TEMP

r_Rob_A :INT ;

AnyRob_A :ANY;

pRob_AAT AnyRob_A: STRUCT

SyntaxId:BYTE; // Byte 0

DataType:BYTE; // Byte 1

DataCount:WORD; // Byte 2+3

DBNR :WORD; // Byte 4+5

BZ :DWORD;// Byte 6

END_STRUCT;

AnyST_ROB :ANY;

pST_ROBAT AnyST_ROB: STRUCT

SyntaxId: BYTE; // Byte 0

DataType: BYTE; // Byte 1

DataCount:WORD; // Byte 2+3

DBNR :WORD; // Byte 4+5

BZ :DWORD; // Byte 6

END_STRUCT;

AnyST_ROB_A_Rob:ANY;

pST_ROB_A_RobAT AnyST_ROB_A_Rob: STRUCT

SyntaxId: BYTE; // Byte 0

DataType: BYTE; // Byte 1

DataCount:WORD; // Byte 2+3

DBNR :WORD; // Byte 4+5

BZ :DWORD; // Byte 6

END_STRUCT;

erg_SFC20 :INT;用于SFC20的变量反馈点

END_VAR

VAR

END_VAR

Adr_Rob_A := WORD_TO_INT(DWORD_TO_WORD(SHR(IN:=pRobA.BZ,N:=3))); 提取IO点地址

pRob_A.SyntaxId := B#16#10;

pRob_A.DataType := 02;

pRob_A.DataCount := W#16#22;

pRob_A.DBNR := pRobA.DBNR;

pRob_A.BZ := pRobA.BZ;

AnyST_ROB := ST_ROB.A1_8_Folgesegelung;DB块首位

pST_ROB.SyntaxId := B#16#10;

pST_ROB.DataType := 02;

pST_ROB.DataCount := W#16#22;

AnyST_ROB_A_Rob := ST_ROB.A_Rob;

pST_ROB_A_Rob.SyntaxId := B#16#10;

pST_ROB_A_Rob.DataType := 02;

pST_ROB_A_Rob.DataCount := W#16#22;

erg_SFC20 := BLKMOV(SRCBLK := AnyRob_A

,DSTBLK:= AnyST_ROB

);传输机器人的输出状态

erg_SFC20 := BLKMOV(SRCBLK := AnyST_ROB

,DSTBLK:= AnyST_ROB_A_Rob

);

引用地址:建立一个存储机器人信号的功能块FB5

上一篇:环卫“超人”背后的超声波感知力
下一篇:一文解析KUKA CELL程序

小广播
最新机器人文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关:

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved