Cam数据结构

在工程项目进行编译过程中,凸轮数据会在内部转化成一个全局变量的列表(“cam数据”)。

每个点击凸轮都是一个 “MC_CAM_REF”类型的结构体。这些结构体都是标准的IEC编程结构,可以通过电子凸轮函数或者功能块进行直接编辑。为了对编译的结果进行管理,一些特殊的结构体变量必须支持编程系统中添加 SM3_Basic.library函数库后可进行编译。

此外结构体数据 _SMC_CAM_LIST (指向 MC_CAM_REF的数组指针)中包含变量指针和数据结构对所有cam产生的变量都有效。

当然也可以直接创建相应的数据结构。在运行的时候直接调用IEC程序。由于这个原因,对所有的数据结构,不仅仅是内部使用结构。都可以在 “Cam 数据结构以及全局访问”.中找到帮助。

示例

首先,是数据接结构的描述:

TYPE mySMC_CAMTable_LREAL_10000_2 :
STRUCT
    Table: ARRAY[0..9999] OF ARRAY[0..1] OF LREAL;
    (* setting all scaling definitions to 0 and 1 
       means that the values from the table are not scaled *)
    fEditorMasterMin: REAL := 0;
    fEditorMasterMax: REAL := 1;
    fEditorSlaveMin: REAL := 0;
    fEditorSlaveMax: REAL := 1;
    fTableMasterMin: REAL := 0;
    fTableMasterMax: REAL := 1;
    fTableSlaveMin: REAL := 0;
    fTableSlaveMax: REAL := 1;
END_STRUCT
END_TYPE
 

然后是数据结构的初始化:

Cam: MC_CAM_REF;
Cam_PointArray : mySMC_CAMTable_LREAL_10000_2;
 

凸轮的计算方法:

Cam.byType:=2;
Cam.byVarType:=6;
Cam.nTappets:=0;
Cam.strCAMName:='myCAM';
Cam.pce:= ADR(CAM_PointArray);
FOR i:=0 TO 9999 DO
    (*example cam: master 0..360, slave 0..100, constant velocity shape *)
    Cam_PointArray.Table[i][0]:=UDINT_TO_LREAL(I)/10000 * 360;             (* X *)
    Cam_PointArray.Table[i][1]:=UDINT_TO_LREAL(I)/10000 * 100;             (* Y *)
END_FOR
Cam.nElements:=10000
Cam.xStart:=0.0;
Cam.xEnd:=360.0;