本次更新优化了使用体验,不需要写头文件了,直接在FC里操作。
原理是一个.c文件里可以写很多函数,所以只需要在一个文件里写一个返回值为轴结构体指针、索引为参数的函数就可以了。其他POU也就是.c文件在函数调用位置前声明一下即可。同时利用条件预处理指令,现在不需要手动注释未定义/未使用的轴,只需要在宏定义处更改轴数即可,但是超出未定义的轴范围时仍然会报错。
下面是函数代码:
void A_pAxis()//无用,仅作新建.c文件存储函数用
{
#define SysRegAddr_HD_D_HM_M
}
BMC_AXIS_REF *Axis(int index)
{
#define num 4 //此处修改轴数量
BMC_AXIS_REF *Axis_a[num];
#if(num >= 1)
Axis_a[0] = &BMC_Axis000;
#endif
#if(num >= 2)
Axis_a[1] = &BMC_Axis001;
#endif
#if(num >= 3)
Axis_a[2] = &BMC_Axis002;
#endif
#if(num >= 4)
Axis_a[3] = &BMC_Axis003;
#endif
#if(num >= 5)
Axis_a[4] = &BMC_Axis004;
#endif
#if(num >= 6)
Axis_a[5] = &BMC_Axis005;
#endif
#if(num >= 7)
Axis_a[6] = &BMC_Axis006;
#endif
#if(num >= 8)
Axis_a[7] = &BMC_Axis007;
#endif
#if(num >= 9)
Axis_a[8] = &BMC_Axis008;
#endif
#if(num >= 10)
Axis_a[9] = &BMC_Axis009;
#endif
#if(num >= 11)
Axis_a[10] = &BMC_Axis010;
#endif
#if(num >= 12)
Axis_a[11] = &BMC_Axis011;
#endif
#if(num >= 13)
Axis_a[12] = &BMC_Axis012;
#endif
#if(num >= 14)
Axis_a[13] = &BMC_Axis013;
#endif
#if(num >= 15)
Axis_a[14] = &BMC_Axis014;
#endif
#if(num >= 16)
Axis_a[15] = &BMC_Axis015;
#endif
#if(num >= 17)
Axis_a[16] = &BMC_Axis016;
#endif
#if(num >= 18)
Axis_a[17] = &BMC_Axis017;
#endif
#if(num >= 19)
Axis_a[18] = &BMC_Axis018;
#endif
#if(num >= 20)
Axis_a[19] = &BMC_Axis019;
#endif
#if(num >= 21)
Axis_a[20] = &BMC_Axis020;
#endif
#if(num >= 22)
Axis_a[21] = &BMC_Axis021;
#endif
#if(num >= 23)
Axis_a[22] = &BMC_Axis022;
#endif
#if(num >= 24)
Axis_a[23] = &BMC_Axis023;
#endif
#if(num >= 25)
Axis_a[24] = &BMC_Axis024;
#endif
#if(num >= 26)
Axis_a[25] = &BMC_Axis025;
#endif
#if(num >= 27)
Axis_a[26] = &BMC_Axis026;
#endif
#if(num >= 28)
Axis_a[27] = &BMC_Axis027;
#endif
#if(num >= 29)
Axis_a[28] = &BMC_Axis028;
#endif
#if(num >= 30)
Axis_a[29] = &BMC_Axis029;
#endif
#if(num >= 31)
Axis_a[30] = &BMC_Axis030;
#endif
#if(num >= 32)
Axis_a[31] = &BMC_Axis031;
#endif
return Axis_a[index];
}
下面是其他POU调用函数示例:
BMC_AXIS_REF *Axis ( int );//其他.c文件中调用外部函数前声明函数
void FB_Axis_Absolute_BODY(FB_Axis_Absolute* self)//批量绝对运动FB
{
#define SysRegAddr_HD_D_HM_M
int i;
for(i=0;i<self->Num_Of_Axis;i++)
{
BMC_A_MoveA_BODY ( &self->AMoveA[i] );
self->AMoveA[i].Execute = self->ManCtrl[i].MoveAbsolute;
self->AMoveA[i].Axis = Axis(i);//调用函数,参数为for索引i
self->AMoveA[i].Pos = self->ManPara[i].AbsolutePosition;
self->AMoveA[i].Vel = self->ManPara[i].Velocity;
self->AMoveA[i].Acc = self->ManPara[i].Acceleration;
self->AMoveA[i].Deceleration = self->ManPara[i].Deceleration;
self->AMoveA[i].Jerk = self->ManPara[i].Jrek;
}
}