搜索网卡
接口:IMC_FindNetCard
参数1:网卡信息结构体
参数2:网卡数量
返回值:接口状态码
示例代码
1 | NIC_INFO info; |
打开设备
接口:IMC_Open
参数1:IMC设备句柄
参数2:IMC设备编号
返回值:接口状态码
示例代码
1 | IMC_STATUS st; |
关闭设备
接口:IMC_Close
参数1:IMC设备句柄
返回值:接口状态码
示例代码
1 | IMC_Close(m_Handle); |
参数和指令
16位指令设置
1 | IMC_API IMC_STATUS WINAPI IMC_SetParam16(IMC_HANDLE Handle, IMC16 paramloc, IMC16 thedata,IMC32 axis,int Sel); |
32位指令设置
1 | IMC_API IMC_STATUS WINAPI IMC_SetParam32(IMC_HANDLE Handle, IMC16 paramloc, IMC32 thedata,IMC32 axis,int Sel); |
48位指令设置
1 | IMC_API IMC_STATUS WINAPI IMC_SetParam48(IMC_HANDLE Handle, IMC16 paramloc, __int64 thedata,IMC32 axis,int Sel); |
参数1:IMC设备句柄
参数2:参数地址
参数3:参数指令,有16位指令、32位指令、48位指令
参数4:当前控制轴编号
参数5:**fifo模式,指定该指令发往那个 FIFO **
返回值:接口状态码
示例代码
1 | IMC_STATUS status; |
控制卡配置
控制卡上电时需要针对控制轴进行一些配置
1 | void MainWindow::initAxis(int axis) |
clearLoc:写入非零值对该轴实施清零操作。清零该轴的编码器计数、指令位置、目标位置等各种位置参数
accellimLoc:设置该轴的加速度极限值
vellimLoc:设置该轴的速度极限值
mcsmaxvelLoc:点到点运动的最大速度(主坐标系)
mcsaccelLoc:加速度(主坐标系)
mcsdecelLoc:减速度(主坐标系)
steptimeLoc:设定脉冲有效电平宽度,单位是系统的时钟周期
enaLoc:脉冲输出及驱动器使能,写入FFFFh则使能脉冲输出及使能驱动器
aioctrLoc:轴I/O数据寄存器,某I/O设为输入时,读出的是对应管脚的实时信号值,写入0或1可使该管脚输出低或高电平,读则得到写入到该寄存器的值
homeseqLoc:设置搜寻原点过程的运动序列和操作方式
lowvelLoc:搜寻原点时,低速段的速度预设值
highvelLoc:搜寻原点时,高速段的速度预设值
exitfiltLoc:指定发生何种错误时停止该轴运行,exitfilt中置位的位域将致使:若错误寄存器error中对应的位域置位则停止运行(清零run)
stopfiltLoc:指定发生何种错误时停止规划运动,stopfilt中置位的位域将致使:若错误寄存器error中对应的位域置位则停止运动
gout1Loc:全局开关量输出gout1
runLoc:运行该轴,只有运行该轴才能进行运动规划,若该轴因错误退出运行,run清零,该轴处于停止运行状态
设置和搜索原点
设置原点
1.原点的偏移位置值,设置机械原点时,该值被拷贝到指令位置寄存器curpos和编码器寄存器encp中
2.设置搜索速度
3.进行搜索
1 | IMC16 direction, RiseEdge, stop, useI; |
搜索速度
1.设置搜寻原点时,低速段的速度预设值
2.搜寻原点时,高速段的速度预设值
1 | bool MainWindow::SetHomeVel(int highvel, int lowvel, FIFO_SEL fifo) |
搜索原点
根据指定方向(正负),边沿,停止标记,索引,轴编号配置搜索过程
1 | IMC_STATUS MainWindow::FindHome(IMC16 direction, IMC16 RiseEdge, IMC16 stop, IMC16 useindex, IMC32 axis) |
点对点运动
以绝对位置运动为例:需要配置IMC设备句柄、运动位置、运动轴、fifo模式,调用使电机移动到绝对位置的函数,运行过程中的指令是发送到QFIFO的
1 | bool MainWindow::MoveAbs(int pos, int axis) |
等待运动结束
1 | bool MainWindow::WaitMoved(int axis) |
movingLoc:标志是否规划运动(包括主坐标系和辅坐标系)以及运动平滑处理中,0:停止规划运动且停止平滑处理,FFFFh:规划运动未完成或运动平滑处理进行中
急停和停止
停止点对点:往地址mcsgoLoc写入FFFFh启动点到点运动,写入0,停止当前的点到点运动(主坐标系)
1 | bool MainWindow::StopPos2Pos(int axis) |
点对点急停:暂停该轴的运动
1 | bool MainWindow::PosEmstop(int axis) |
smoothLoc:运动平滑因子
mcsgoLoc:写入FFFFh启动点到点运动,写入零,停止当前的点到点运动(主坐标系)
mcsvelLoc:当前规划速度(主坐标系)
mcstgvelLoc:连续速度运动的目标速度(主坐标系)
以上地址配置为0即可急停该轴运动
多线程
IMC系列接口在进行点对点运动时需要开辟一个线程来执行(不然会堵塞主线程),以Qt为例turnToAngles动作需要放到子线程去执行
1 | QFuture<void> future = QtConcurrent::run(this, &MainWindow::turnToAngles); |
位置反馈
数据原因声明
1 | // 参数类型原型 |
配置机械位置、指令位置、错误寄存器地址信息
1 | for (int axis = 0; axis < m_Naxis; axis++) |
开辟定时器轮询机械位置、指令位置、错误信息
1 | void MainWindow::timerEvent(QTimerEvent *event) |
接口:IMC_GetMulParam
参数1:IMC设备句柄
参数2:多轴参数结构体,包括参数地址、轴号、参数长度、写或读回的数据
参数3:总轴数
返回值:接口状态码