欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.结果
TwinCAT用SDO访问对象字典
下图是Coe-online里的数据,可以对比下
TwinCAT用SDO访问对象字典