前言-受本人水平所限,所写内容仅为本人测试过的代码以及观点,错漏之处请不吝指正。
首先在定义区内定义我们需要的函数参数,本篇省略内部FB参数引出方式等,主要介绍基本方法。
VAR_IN_OUT Axis0 BMC_AXIS_REF //定义输入输出类型轴结构体参数,方便在FB外部指定不同的轴
VAR_IN_OUT Start BOOL //定义启动命令
VAR_IN_OUT Stop BOOL //定义停止命令
VAR APWR0 BMC_A_Power //定义轴使能FB的背景数据块
VAR AVELMOVE0 BMC_A_VelMove //定义轴速度控制FB背景数据块
VAR ASTOP0 BMC_A_Stop //定义轴停止FB背景数据块
BMC_A_Power_BODY ( &self->APWR0 );//定义使能FB并关联定义好的背景数据
BMC_A_VelMove_BODY ( &self->AVELMOVE0 );//定义使能FB并关联定义好的背景数据
BMC_A_Stop_BODY ( &self->AStop0 );//定义使能FB并关联定义好的背景数据
self->APWR0.Axis = self->Axis0;//使能FB背景数据内的参数Axis关联上面定义的FB参数Axis0
self->AVELMOVE0.Axis = self->Axis0;//速度控制FB背景数据内的参数Axis关联上面定义的FB参数Axis0
self->ASTOP0.Axis = self->Axis0;//停止FB背景数据内的参数Axis关联上面定义的FB参数Axis0
self->APWR0.Enable = 1;//使能指令FB背景数据结构体使能信号(bool型)写1即可使能
if(*self->Start)//如果启动信号为1(IN_OUT类型数据在引用时需加指针*,轴除外)
{
self->AVELMOVE0.Execute = 1;//速度控制指令FB背景数据结构体启动信号写1
self->AStop0.Execute = 0;//停止指令FB背景数据结构体启动信号写0
}
if(*self->Stop)//如果停止信号为1(IN_OUT类型数据在引用时需加指针*,轴除外)
{
self->AVELMOVE0.Execute = 0;//速度控制指令FB背景数据结构体启动信号写0
self->AStop0.Execute = 1;//停止指令FB背景数据结构体启动信号写1
}
//以下是各指令所需的部分关键参数,仅举例
self->AVELMOVE0.Vel = 10;//速度控制指令FB背景数据结构体速度参数赋值,单位为指令单位
self->AVELMOVE0.Acc = 100;//速度控制指令FB背景数据结构体加速度参数赋值,单位为指令单位的平方
self->AVELMOVE0.Deceleration = 100;//速度控制指令FB背景数据结构体减速度参数赋值,单位为指令单位的平方
self->AVELMOVE0.Jerk = 1000;//速度控制指令FB背景数据结构体加加速度参数赋值,单位为指令单位的三次方
self->ASTOP0.Deceleration = 100;//停止指令FB背景数据结构体减速度参数赋值,单位为指令单位的平方
self->ASTOP0.Jerk = 1000;//停止指令FB背景数据结构体加加速度参数赋值,单位为指令单位的三次方
self->ASTOP0.StopMode = 0;//停止指令FB背景数据结构体停止模式参数赋值,0为减速停机
以上就是一个简单的写法。在外部梯形图调用此FB,分配对应的轴与启动停止信号,即可完成对应的使能与启动停止操作。