历史上的今天
今天是:2024年09月03日(星期二)
2020年09月03日 | 建立一个存储机器人信号的功能块FB5
2020-09-03 来源:酷扯儿
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
);
上一篇:环卫“超人”背后的超声波感知力
下一篇:一文解析KUKA CELL程序
史海拾趣
|
复古磁带又出现了!这次要介绍的是款磁带形式的 MP3,没错,它看起来很像是一个磁带,却是个 MP3。它的特色可是不为人知了,看外形与价格也知道,没有昂贵的LCD 屏幕,而且它还有一个秘密,就是没有存储,底部可以发现个 SD 槽,那就是要点所在,你 ...… 查看全部问答> |
|
小弟也是程序员,不过总听公司的前辈们说,做MPEG视频算法啥的都是牛人,不知道是不是指这个领域薪水比较高? 说心里话,既然入了行,当然希望工资高点,挑战多点没关系,既然已经选择了这个职业,也不怕再多吃点苦,多用点脑,只是找不准方向, ...… 查看全部问答> |
|
请教一个问题: 我在Platform Builder 建立和模拟器的连接、下载运行时映像时,遇到下面的问题。 the specified ce boot image couldnot be loaded. your virtual machi ...… 查看全部问答> |
|
我单位设备最近直流24V电源电压一直偏低,一般工作的时候电压都在17 -18V,有时候能低到15V,380V变220V变压器电压都比正常低20V左右,220V变24V直流电源在拔掉24V输出的时候,变压器电压恢复正常了,只要接上24V变压器电压变低,直流输出的24V电源 ...… 查看全部问答> |
|
看了STM32应用上讲的使用定时器产生PWM输出,其中一个配置步骤: 根据需要的频率和占空比计算出输出高电平的时间和低电平的时间:OCHy = 通道y的高电平时间;OCLy =通道y的低电平时间把OCHy写入对应的输出比较寄存器,并启动计数器开始计数,比较 ...… 查看全部问答> |




