TwinCAT用SDO访问对象字典
程序员文章站
2022-06-09 15:02:49
...
1.前言
解决了如何用SDO访问一个驱动器的多个对象字典的问题。
2.程序
举例子,读1600和1601,这个程序是用数组写的,可以访问多个对象。
①.申明变量
VAR_GLOBAL
i : INT;
j : WORD;
number : INT:=1;
a : ARRAY[1..5] OF axis_ref;
END_VAR
PROGRAM MAIN
VAR
Coe_read : FB_EcCoESdoReadEx;
coe_read_do : BOOL:=TRUE;
output : ARRAY[1..2] OF subnumber;
END_VAR
②.定义一个结构体
命名subnumber
TYPE subnumber :
STRUCT
sub01 : DINT;
sub02 : DINT;
sub03 : DINT;
sub04 : DINT;
sub05 : DINT;
sub06 : DINT;
sub07 : DINT;
sub08 : DINT;
END_STRUCT
END_TYPE
③.创建action
命名power:
FOR i:= 1 TO 5 DO
a[i].PlcToNc.ControlDWord:=7;
a[i].PlcToNc.Override:=1000000;
END_FOR
命名coe:
FOR j := 16#1600 TO 16#1601 BY 16#1 DO
IF number > 2 THEN
number:=1;
END_IF
Coe_read(
sNetId:= '192.168.0.85.4.1',
nSlaveAddr:= 1001,
nSubIndex:= 1,
nIndex:= j,
pDstBuf:= ADR(output[number]),
cbBufLen:= SIZEOF(output[number]),
bExecute:= coe_read_do,
tTimeout:= ,
bCompleteAccess:= TRUE,
bBusy=> ,
bError=> ,
nErrId=> );
Coe_read(
sNetId:= '192.168.0.85.4.1',
nSlaveAddr:= 1001,
nSubIndex:= 1,
nIndex:= j,
pDstBuf:= ADR(output[number]),
cbBufLen:= SIZEOF(output[number]),
bExecute:= FALSE,
tTimeout:= ,
bCompleteAccess:= TRUE,
bBusy=> ,
bError=> ,
nErrId=> );
number := number+1;
END_FOR
④.主程序
FOR i:= 1 TO 5 DO
a[i]();
END_FOR
power();
coe();
3.结果
下图是Coe-online里的数据,可以对比下
上一篇: 桑葚怎样泡酒才会好喝
下一篇: 豌豆角怎么炒好吃,照这种方法炒就完事儿