MCS达动控制函式库范例手册(V.5.0)

更新时间:2024-05-19 05:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MCS 运动控制函式库范例手册

MCS

运动控制函式库

范例手册

(适用于运动控制函式库 V.5.0 版或以上版本)

版本:V. 5.0

日期: 2010.5

WWW.SZMCS.COM

MCS 运动控制函式库范例手册

1. 运动控函式库范例内容说明........................................................................................ 1 2. Group 参数与机构、编码器参数设定.......................................................................... 2

3. 插值时间调整............................................................................................................... 3

4. 启动与结束运功控制函式............................................................................................ 4

5. 系统状态设定............................................................................................................... 7

6. 读取运动速度、坐标与运动命令资讯.......................................................................10

7. 运动状态检视............................................................................................................. 12

8. 加、减速段使用时间设定.......................................................................................... 14

9. 进给速度设定............................................................................................................. 15

10. 直线、圆弧、圆、螺线运动(一般运动)............................................................. 16

11. 点对点运动............................................................................................................... 19

12. JOG 运动....................................................................................................................21

13. 定位控制................................................................................................................... 22

14. 原点复归运动........................................................................................................... 24

15. 运动暂停、持续、弃值............................................................................................ 26

16. 强迫延迟执行运功命令............................................................................................ 27

17. 速度强制控制........................................................................................................... 28

18. 软件过行程检查与硬件极限开关检查..................................................................... 29

19. 连续运动功能设定................................................................................................... 32

20.读取与清除错误状态..................................................................................................33

21. 齿轮齿隙与间隙补偿................................................................................................34

22. 如何完成 6 轴连续运动............................................................................................ 35

23. 编码器(Encoder)计数值触发中断服务函式功能..................................................... 39

i

MCS 运动控制函式库范例手册

24. 门锁(Latch)编码器计数值与 INDEX 讯号触发中断服务函式功能........................ 41 25. 近端节点(Local I/O)讯号控制与触发中断服务函式功能........................................ 43 26. 计时器计时终了触发中断服务函式功能................................................................. 48

27. Watch Dog 功能......................................................................................................... 50

28. 设定与读取 Remote I/O 输出、入接点讯号............................................................ 52

29. 读取 Remote I/O 讯号传输状态................................................................................53

30. Remote I/O 输入接点讯号触发中断服务函式.......................................................... 55

31. Remote I/O 资料传输错误触发中断服务函式.......................................................... 57

32. 规划 DAC 类比电压输出......................................................................................... 59

33. ADC 电压输入单次转换............................................................................................60

34. ADC 电压输入连续转换............................................................................................62

35. ADC 比较器中断功能控制........................................................................................ 64

36. ADC 标签 Channel 触发中断服务函式功能............................................................. 67

ii

MCS 运动控制函式库范例手册

1. 运动控制函式库范例内容说明

安装光盘中所提供的范例皆为 console mode 类型,使用者可将这些范例整合到自 己的应用程序中。MCCL 最多能支持 12 张 MTC 运动控制卡与 72 个 groups,但为了 增加这些范例的可读性,大部分的范例只使用 1 张运动控制卡(运动控制卡编号使用

CARD_INDEX 来表示)与 1 个 group(group 编号使用 g_nGroupIndex 来表示)。

1

MCS 运动控制函式库范例手册

2. Group 参数与机构、编码器参数设定

相关函式

MCC_SetSysMaxSpeed() MCC_GetSysMaxSpeed() MCC_SetMacParam() MCC_GetMacParam() MCC_SetEncoderConfig() MCC_CloseAllGroups() MCC_CreateGroup() MCC_UpdateParam()

范例程序

InitSys.cpp

内容说明

本范例说明 group、机构与编码器参数的设定过程。先使用 MCC_SetSysMaxSpeed() 设定进给速度的上限,接着使用 MCC_SetMacParam()与 MCC_SetEncoderConfig()设定 各轴的机构与编码器参数,最后再使用 MCC_CreateGroup()建立一新的 group。

有关 group 使用方式与机构参数更详细的说明请参考”MCS 运动控制函式库使用

手册”。

2

MCS 运动控制函式库范例手册

3. 插值时间调整 相关函式

MCC_InitSystem()

MCC_GetCurPulseStockCount()

范例程序

CheckHWStock.cpp

内容说明

较小的插值时间拥有较佳的运动控制性能,插值时间可设定的最小值为 1ms,但 并非所有 PC 皆适用 1ms 的插值时间,这与 PC 的性能有关。为了获得最适当的插值 时间,可以使用 MCC_GetCurPulseStockCount()读取 MTC 运动控制卡上的 pulse 库存 笔数。在持续运动过程中 pulse 库存笔数必须大于或等于 60,才能保证稳定的运动性 能。若库存笔数出现等于 0 的现象,则必须延长插值时间(插值时间为 MCC_InitSystem() 所需的参数之一)。另外,若人机操作画面的显示出现迟滞的现象,也必须延长插值时 间。

3

MCS 运动控制函式库范例手册

4. 启动与结束运动控制函式库 相关函式

MCC_InitSystem() MCC_CloseSystem() MCC_GetMotionStatus()

范例程序

InitSys.cpp

内容说明

本范例说明在完成 group 参数与机构参数的设定后,使用 MCC_InitSystem()启动 运动控制函式库,所需的参数请参考”MCS 运动控制函式库使用手册”。下面说明范 例的内容。

Step 1:给定控制卡硬件参数

SYS_CARD_CONFIG stCardConfig[MAX_CARD_NUM]; ..

stCardConfig[CARD_INDEX].wCardAddress = BASE_ADDRESS stCardConfig[CARD_INDEX].wCardType stCardConfig[CARD_INDEX].wIRQ_No

= wCardType; = IRQ_NO;

Step 2:启动运动控制函式库

nRet = MCC_InitSystem( INTERPOLATION_TIME, // 插值补间时间设为 10 ms

stCardConfig,

// 硬件参数

// 只使用 1 张 MTC 卡

1);

4

MCS 运动控制函式库范例手册

if (nRet == NO_ERR)// 启动运动控制函式库成功 {

/*

使用者可于此执行其它初始化的动作,例如设定位移单位、进给速度。

}

*/

Step 3:

MCC_CloseSystem()被使用来关闭 MCCL 与驱动程序函式库,两种方式可用来关 闭系统:

i. 全部运动命令执行完成才关闭系统 需检查系统是否处于停止状态,

MCC_GetMotionStatus() 的函式传回值若为 GMS_STOP,则系统处于停止状态。

while ((nRret = MCC_GetMotionStatus(g_nGroupIndex)) != GMS_STOP) {

MCC_TimeDelay(1); // Sleep 1 ms

// 因使用”while’’命令,为避免系统死锁,影响系统的操作 // 需呼叫 MCC_TimeDelay ()释放 CPU 的使用权。

}

MCC_CloseSystem();

// 结束 MCCL 与驱动程序函式库

5

MCS 运动控制函式库范例手册

ii. 直接结束运动控制库

只需呼叫 MCC_CloseSystem()即可,系统将立刻停止运作。

6

MCS 运动控制函式库范例手册

5. 系统状态设定

相关函式

MCC_SetUnit() MCC_GetUnit() MCC_SetAbsolute() MCC_SetIncrease() MCC_Get_CoordType() MCC_SetAccType() MCC_GetAccType() MCC_SetDecType() MCC_GetDecType() MCC_SetPtPAccType() MCC_GetPtPAccType() MCC_SetPtPDecType() MCC_GetPtPDecType() MCC_SetServoOn() MCC_SetServoOff() MCC_EnablePosReady() MCC_DisablePosReady()

范例程序

SetStatus.cpp

内容说明 此范例说明如何改变系统状态。未特别设定系统状态,系统将使用预设状态

运作,

7

MCS 运动控制函式库范例手册

系统的预设状态可参阅”MCS 运动控制函式库参考手册”。下面说明函式的内容。

MCC_SetUnit(UNIT_MM, g_nGroupIndex);

// 使用 mm 为位移量单位

MCC_SetAbsolute(g_nGroupIndex); // 使用绝对坐标型态表示各轴位置

// 使用’T’型曲线为直线、圆弧、圆运动的加速型式

MCC_SetAccType(‘T’, g_nGroupIndex);

// 使用’S’型曲线为直线、圆弧、圆运动的减速型式

MCC_SetDecType(‘S’ , g_nGroupIndex);

// 使用’T’型曲线为点对点运动的加速型式

MCC_SetPtPAccType('T'', 'T', 'T', 'T', 'T', 'T', g_nGroupIndex);

// 使用’S’型曲线为点对点运动的减速型式

MCC_SetPtPDecType('S', 'S', 'S', 'S', 'S', 'S', g_nGroupIndex);

MCC_SetServoOn(0, CARD_INDEX); // 启动第 0 轴伺服系统

// 开启 Position Ready 输出接点功能

MCC_EnablePosReady(CARD_INDEX);

启动伺服系统需呼叫 MCC_SetServoOn() ,系统才能正常运作;是否需呼 叫

8

MCS 运动控制函式库范例手册

MCC_EnablePosReady()视实际情况而定。

9

MCS 运动控制函式库范例手册

6. 读取运动速度、坐标与运动命令信息

相关函式

MCC_GetCurFeedSpeed() MCC_GetFeedSpeed() MCC_GetCurPos() MCC_GetPulsePos() MCC_GetCurCommand() MCC_GetCommandCount()

范例程序

GetStatus.cpp

内容说明

MCC_GetCurFeedSpeed()用来读取目前的进给速度,MCC_GetSpeed()则可以用来 读取目前各轴的进给速度。MCC_GetCurPos()用来读取各轴目前位置之直角坐标值, MCC_GetPulsePos()则用来读取各轴目前位置之马达坐标值(或称为 pulse 坐标值)。直 角坐标值与马达坐标值可以利用机构参数换算而得,也就是马达坐标值 =直角坐标 值 × (dfGearRatio / dfPitch) × dwPPR。使用 MCC_GetCurPos()与 MCC_GetPulsePos() 所读取之各轴坐标值,只有在该轴有实际对应至硬件输出 Channel 时才有意义。

下面为使用范例:

Step 1:宣告变量

double

dfCurPosX, dfCurPosY, dfCurPosZ, dfCurPosU, dfCurPosV, dfCurPosW,

dfCurSpeed;

double dfCurSpeedX, dfCurSpeedY, dfCurSpeedZ, dfCurSpeedU, dfCurSpeedV,

dfCurSpeedW;

10

MCS 运动控制函式库范例手册

long

lCurPulseX, lCurPulseY, lCurPulseZ, lCurPulseU, lCurPulseV, lCurPulseW;

Step 2:读取目前的进给速度

dfCurSpeed = MCC_GetCurFeedSpeed(g_nGroupIndex);

Step 3:读取目前各轴的进给速度

MCC_GetSpeed( &dfCurSpeedX, &dfCurSpeedY, &dfCurSpeedZ,

&dfCurSpeedU, &dfCurSpeedV, &dfCurSpeedW, g_nGroupIndex);

Step 4:读取各轴目前位置之直角坐标值

MCC_GetCurPos( &dfCurPosX, &dfCurPosY, &dfCurPosZ,

&dfCurPosU, &dfCurPosV, &dfCurPosW, g_nGroupIndex);

Step 5:读取各轴目前位置之马达坐标值

MCC_GetPulsePos(&lCurPulseX, &lCurPulseY, &lCurPulseZ,

&lCurPulseU, &lCurPulseV, &lCurPulseW, g_nGroupIndex);

使用 MCC_GetCurCommand()可以获得目前正在执行的运动命令相关的信息,包括运 动 命 令 类 型 、 运 动 命 令 编 码 、 进 给 速 度 、 目 的 点 位 置 坐 标 等 。 使 用 MCC_GetCommandCount()可以获得运动命令缓冲区中库存且尚未执行的运动命令之 数目。

11

MCS 运动控制函式库范例手册

7. 运动状态检视

相关函式

MCC_GetMotionStatus()

范例程序

MotionFinished.cpp

内容说明

利用 MCC_GetMotionStatus()的函式传回值可检视机器目前的运动状态。若函式 传回值为 GMS_RUNNING,表示机器处于运动状态;若函式传回值为 GMS_STOP, 表示机器处于停止状态,运动命令缓冲区中已无命令;若呼叫 MCC_HoldMotion()成 功,此时 MCC_GetMotionStatus()的函式传回值为 GMS_HOLD,表示机器处于暂停状 态 , 仍 有 运 动 命 令 尚 未 执 行 完 成 ; 若 MCC_GetMotionStatus() 的 函 式 传 回 值 为 GMS_DELAYING,表示因呼叫 MCC_DelayMotion(),系统目前处于运动延迟状态。 下面为使用范例:

Step 1:宣告读取运动状态参数

int nStatus;

Step 2:启动伺服

MCC_SetServoOn(0, CARD_INDEX); MCC_SetServoOn(1, CARD_INDEX);

Step 3:直线运动,后执行运动状态读取

MCC_Line(20, 20, 0, 0, 0, 0, g_nGroupIndex);

12

MCS 运动控制函式库范例手册

Step 4:等待 MCC_Line()执行完,产生后 GMS_STOP 后方跳出循环,再继续执行下 面的命令

while (MCC_GetMotionStatus(g_nGroupIndex) != GMS_STOP); {…….}

Step 5:延迟运动命令,此时运动状态为 GMS_DELAYING MCC_DelayMotion(10000); // delay 10000 ms

Step 6:再次运动改变运动状态

MCC_Line(50, 50, 0, 0, 0, 0, g_nGroupIndex);

Step 7:当按下 H 键,运动暂停,状态呈现 GMS_HOLD

nRet = MCC_HoldMotion(g_nGroupIndex);

Step 8:当按下 C 键,将继续未完成之运动,状态呈现 GMS_RUNNING

nRet = MCC_ContiMotion(g_nGroupIndex);

printf(\

13

MCS 运动控制函式库范例手册

8. 加、减速段使用时间设定

相关函式

MCC_SetAccTime() MCC_SetDecTime() MCC_GetAccTime() MCC_GetDecTime() MCC_SetPtPAccTime() MCC_SetPtPDecTime() MCC_GetPtPAccTime() MCC_GetPtPDecTime()

范例程序

AccStep.cpp

内容说明 一般运动(包括直线、圆弧、圆运动)与点对点运动的加、减速时间默认值

为 300

毫秒,但可使用 MCC_SetAccTime()、MCC_SetDecTime()、MCC_SetPtPAccTime()、

MCC_SetPtPDecTime()调整加、减速的时间,使这些运动有较为平顺的加、减速过程。

不同速度应采用不同的加、减速时间。使用 MCCL 时,使用者需自行设计各种速 度下的加、减速时间,适当的加、减速时间会因为使用不同的马达与机构而有所差异。 加、减速时间可以利用下面的公式获得:

运动时的加速时间 = 要求的速度 / 要求的加速度 运动时的减速时间 = 要求的速度 / 要求的减速度

14

MCS 运动控制函式库范例手册

9. 进给速度设定

相关函式

MCC_SetFeedSpeed() MCC_GetFeedSpeed() MCC_SetPtPSpeed() MCC_GetPtPSpeed()

范例程序

SetSpeed.cpp

内容说明 在进行直线、圆弧、圆运动前需先设定进给速度,所设定的进给速度不

应超过

MCC_SetSysMaxSpeed()的设定值。

使用 MCC_SetFeedSpeed()设定直线、圆弧、圆、螺线运动的进给速度,例如呼叫

MCC_SetFeedSpeed (20, g_nGroupIndex) 时,表示进给速度为 20 mm/sec 或 20 inch

/sec,依所使用的单位而定。

使用 MCC_SetPtPSpeed()来设定点对点运动的速度,第一个参数为”各轴最大速度 的百分比再乘以 100”,范围从 0 ~ 100。例如执行 MCC_SetPtPSpeed(50, g_nGroupIndex) 时,表示要求各轴的点对点运动速度为(RPM × Pitch / GearRatio) × 50%。RPM、Pitch、

GearRatio 定义在机构参数中。

15

MCS 运动控制函式库范例手册

10. 直线、圆弧、圆、螺线运动(一般运动) 相关函式

MCC_SetAbsolute() MCC_SetFeedSpeed() MCC_Line() MCC_ArcXY() MCC_CircleXY()

范例程序

GeneralMotion.cpp

内容说明

在完成 group、机构与编码器参数设定、启动系统、设定进给速度的上限、开启 伺服回路(使用步进马达时不需此动作)与设定进给速度后,即可进行直线、圆弧、圆、 螺线运动。在使用圆弧函式时需注意给定的参数是否合理 (起始点、参考点与目的点 等三点的位置不能在同一直在线)。下面为函式使用范例。

Step 1:使用绝对坐标型态表示各轴位置并设定进给速度

MCC_SetAbsolute(g_nGroupIndex); MCC_SetFeedSpeed(10, g_nGroupIndex);

Step 2:执行直线运动命令

MCC_Line(10, 10, 0, 0, 0, 0, g_nGroupIndex);

Step 3:执行圆弧命令,请注意需避免起始点、参考点与目的点在同一直在线

nRet = MCC_ArcXY(10, 20, 20, 20, g_nGroupIndex);

16

MCS 运动控制函式库范例手册

if (nRet != NO_ERR) {

/*

利用传回值了解错误发生的原因,如果参数错误则传回值为 PARAMETER_ERR。

}

*/

可以利用函式的传回值了解错误发生的原因,传回值的意义请参考”MCS 运动控 制函式库参考手册”。行进的轨迹如下图所示。

y (10, 20)

(20, 20) (10, 10) x

(0 , 0 )

Step 3:执行圆命令

MCC_CircleXY(25, 20, 0, g_nGroupIndex);

运动命令的执行过程是运动函式先将运动命令(OP Code)置于各 group 专属的运 动命令缓冲区中,MCCL 再同时从不同 group 的运动命令缓冲区中撷取运动命令依序 执行。这两个动作并不是同步动作,也就是并不需等到前一笔运动命令执行完成,即 可将新的运动命令送到运动命令缓冲区中。

17

MCS 运动控制函式库范例手册

MCC_Line(10, 10, 0, 0, 0, 0, 0) available. MCC_ArcXY(10, 20, 20, 20, 0) MCC_CircleXY(25, 20, 0, 0) P u t O P C ode 1 O P C ode 2 O P C ode 3 E x e c u te

G e t Asynchronization

若运动命令缓冲区已满,则函式的传回值为 COMMAND_BUFFER_FULL_ERR,

此笔运动命令将不被接受。预设每个运动命令缓冲区拥有 10000 个运动命令储存空间。 上图显示对 group 0 运动命令缓冲区的操作过程,可看出属于同一个 group 的运动命 令将被依序执行。

因为各个 group 拥有专属的运动命令缓冲区,因此可同时执行属于不同 group 的

运动命令,更详细的说明请参考”MCS 运动控制函式库使用手册”。

18

MCS 运动控制函式库范例手册

11. 点对点运动

相关函式

MCC_SetAbsolute() MCC_SetPtPSpeed() MCC_PtP()

范例程序

PtPMotion.cpp

内容说明

在完成 group、机构与编码器参数设定、启动系统、设定进给速度的上限、开启 伺服回路(使用步进马达时不需此动作)与设定进给速度后,即可执行点对点运动。下 面为函式使用范例。

Step 1:使用绝对坐标与设定进给速度

MCC_SetAbsolute(g_nGroupIndex); MCC_SetFeedSpeed(20, g_nGroupIndex);

Step 2:设定各轴使用最大速度的 20%运动,也就是(RPM × Pitch / GearRatio) × 20% MCC_SetPtPSpeed(20, g_nGroupIndex);

Step 3:各轴使用不同动的方式运动至(10, 20) MCC_PtP(10, 20, 0, 0, 0, 0, g_nGroupIndex);

点对点运动采用不同动的运动方式,也就是各轴使用各自的速度运动,各轴在同

19

MCS 运动控制函式库范例手册

时启动后并不一定会同时到达目的点,这点与一般运动不同。一般运动使用同动的运 动方式,各轴同时启动后会同时到达目的点。下图为点对点运动的运动轨迹,此时各 轴的速度相同。

y

(10, 20)

(0 , 0 ) x

20

MCS 运动控制函式库范例手册

12. JOG 运动

相关函式

MCC_SetUnit() MCC_JogPulse() MCC_JogSpace() MCC_JogConti()

范例程序

JogMotion.cpp

内容说明

MCC_JogPulse()使用 pulse 为单位,对特定轴进行微动动作,但移动的 pulse 数不 能超过 2048。MCC_JogSpace()使用单位与一般运动相同,对特定轴进行吋动动作。 MCC_JogConti() 则可运动至机构参数所设定的工作区间边界。 MCC_JogSpace() 与 MCC_JogConti()所需的参数包括速度比例,设定方式与点对点运动类似。下面为使用 范例。

Step 1:使用 mm 为位移量单位

MCC_SetUnit(UNIT_MM, g_nGroupIndex); Step 2:使 X 轴移动 100 pulses MCC_JogPulse(0, 100, g_nGroupIndex) ;

Step 3:使用速度为(RPM × Pitch / GearRatio) × 10%,使 X 轴移动 -1mm 距离 MCC_JogSpace(-1, 40, 0, g_nGroupIndex);

Step 4:使用速度为(RPM × Pitch / GearRatio) × 10%,使 X 轴移动至工作区间的右边 界

MCC_JogConti(1, 10, 0, g_nGroupIndex);

21

MCS 运动控制函式库范例手册

13. 定位控制

相关函式

MCC_SetInPosMaxCheckTime() MCC_EnableInPos MCC_SetInPosToleranceEx MCC_GetInPosStatus

范例程序

InPosCheck.cpp

内容说明 本范例程序利用编码器的计數值(实际机台位置)与目标位置之误差,检查每

一个

运动轴是否满足定位确认条件。 当运动命令执行完成将开始检视是否满足定位条

件,若检视时间超过设定值,如

还存在某些运动轴的位置误差无法满足定位条件,则纪錄此现象,并停止执行其它运 动命令。使用者可以强制马达产生误差并观察运作情况。此项功能的使用步骤如下:

Step 1:设定定位确认最长的检查时间,单位ms

MCC_SetInPosMaxCheckTime(1000, g_nGroupIndex);

Step 2:设定定位控制模式

MCC_SetInPosMode( IPM_ONETIME_BLOCK, g_nGroupIndex);

Step 3:设定各轴误差值,单位为 mm 或 inch

MCC_SetInPosToleranceEx(0.5, 0.5, 1000, 1000, 1000, 1000, g_nGroupIndex);

22

MCS 运动控制函式库范例手册

Step 4:启动定位控制功能 MCC_EnableInPos(g_nGroupIndex);

Step 5:读取各轴定位控制状态,正确到位状态为 0xff(255)

MCC_GetInPosStatus(&byInPos0, &byInPos1, &byInPos2, &byInPos3, &byInPos4, &byInPos5, g_nGroupIndex);

Step 6:抓取错误代码

nErrCode = MCC_GetErrorCode(g_nGroupIndex);

23

MCS 运动控制函式库范例手册

14. 原点复归运动

相关函式

MCC_SetHomeConfig() MCC_Home()

MCC_GetGoHomeStatus() MCC_AbortGoHome()

范例程序

GoHome.cpp

内容说明

原点复归的程序将依照原点复归参数中 SYS_HOME_CONFIG 的设定内容,可以 使用 MCC_SetHomeConfig()设定原点复归参数(请参考”MCS 运动控制函式库使用手 册”)。

利用 MCC_GetGoHomeStatus()可获得原点复归程序是否已经完成,另外在原点复 归运动过程中可呼叫 MCC_AbortGoHome()强迫停止原点复归运动。

目前 MCCL 所提供的原点复归功能,一次只能针对一张运动控制卡,如需操作多 张运动控制卡,则需使用 MCC_GetGoHomeStatus()来确定目前进行的原点复归运动已 经完成,才能对下一张运动控制卡呼叫 MCC_Home()进行原点复归的动作。下面为使 用范例:

Step 1:设定原点复归参数

SYS_HOME_CONFIG

stHomeConfig;

stHomeConfig.wMode = 3; //

设定原点复归模式

24

MCS 运动控制函式库范例手册

stHomeConfig.wDirection

= 1;

// //

设定往负方向做原点复归运动Nor mal Open

stHomeConfig.wSensorMode

stHomeConfig.nIndexCount

stHomeConfig.dfAccTime

stHomeConfig.dfDecTime

stHomeConfig.dfHighSpeed

stHomeConfig.dfLowSpeed

stHomeConfig.dfOffset

Step 2:设定原点复归参数

= 0; = 0;

= 300;

// ms

= 300;

// ms

= 10;

// mm/s

= 2;

// mm/s

= 0;

for (WORD wChannel = 0;wChannel < 6;wChannel++)

MCC_SetHomeConfig(&stHomeConfig, wChannel, CARD_INDEX);

Step 3:原点复归,0xff 表示该轴不需进行原点复归动作

MCC_Home(0, 0xff, 0xff, 0xff, 0xff, 0xff, CARD_INDEX);

Step 4:如果有需要可使用此函式,停止原点复归运动

MCC_AbortGoHome();

Step 5:利用函式传回值判断原点复归运动是否已经完成, nStatus 的值若为 1, 表示原 点复归运动已经完成

nStatus = MCC_GetGoHomeStatus();

25

MCS 运动控制函式库范例手册

15. 运动暂停、持续、弃置

相关函式

MCC_ HoldMotion() MCC_ContiMotion() MCC_AbortMotionEx()

范例程序

CtrlMotion.cpp

内容说明

MCC_HoldMotion()用来暂停目前正在执行的运动命令,MCC_ContiMotion()则用 来继续执行被暂停执行的运动命令,因此 MCC_ContiMotion()需与 MCC_HoldMotion() 搭配使用,且需使用在相同的 group 中。MCC_AbortMotionEx()则用来设定减速停止 的时间并弃置被暂停或执行中的运动命令。

目前若无执行中的运动命令,呼叫 MCC_HoldMotion() 时的函式传回值将为 HOLD_ILLGEGAL_ERR ; 先 前 若 呼 叫 MCC_HoldMotion() 不 成 功 , 呼 叫 MCC_ContiMotion()时的函式传回值将为 CONTI_ILLGEGAL_ERR。无论目前运动状 态为何,呼叫 MCC_AbortMotionEx()皆会使运动(减速)停止并清除运动命令缓冲区中 的库存命令。

26

MCS 运动控制函式库范例手册

16. 强迫延迟执行运动命令

相关函式

MCC_InitSystem() MCC_DelayMotion()

范例程序

DelayMotion.cpp

内容说明

可以使用 MCC_DelayMotion()强迫延迟执行下一个运动命令,延迟的时间以 ms 为计时单位;下面的范例中,在执行完第一笔运动命令(Line)后,将延迟 3000 ms,才 会再执行下一笔运动命令。

Step 1:插值时间设为 INTERPOLATION_TIME

nRet = MCC_InitSystem(INTERPOLATION_TIME, stCardConfig, 1);

Step 2:开始运动命令

MCC_Line(10, 10, 0, 0, 0, 0, g_nGroupIndex);

Step 3:延迟 3000 ms 才执行下一笔命令,请观察运动状态

MCC_DelayMotion(3000);

27

MCS 运动控制函式库范例手册

17. 速度强制控制

相关函式

MCC_SetOverrideSpeed() MCC_GetOverrideRate() MCC_OverridePtPSpeed() MCC_GetPtPOverrideRate()

范例程序

OverrideSpeed.cpp

内容说明

MCC_OverrideSpeed()可用来设定直线、圆弧、圆、螺线运动速度强制比例,所 需的参数为更新速度为原来速度之百分比 × 100。MCC_GetOverrideRate()则用来获得 目前的速度强制比例。下面为使用范例。

Step 1:设定直线、圆弧、圆、螺线运动的进给速度为 20 mm/ sec

MCC_SetFeedSpeed(20, g_nGroupIndex); MCC_Line(10, 10, 0 ,0 ,0 ,0 ,0, g_nGroupIndex)

Step 2:设定运动速度强制比例,也就是目前的速度将变为 20 ×150% = 30 mm /sec

MCC_OverSpeed(150, g_nGroupIndex);

Step 3:读取强制比例,dfRate 应等于 150 dfRate = MCC_GetOverrideRate(g_nGroupIndex);

28

MCS 运动控制函式库范例手册

18. 软件过行程检查与硬件极限开关检查

相关函式

MCC_SetOverTravelCheck() MCC_GetOverTravelCheck() MCC_EnableLimitSwitchCheck() MCC_DisableLimitSwitchCheck() MCC_GetLimitSwitchStatus()

范例程序

CheckOT.cpp

内容说明

MCCL 提供软件过行程检查功能(或称为软件极限保护功能),当启动软件过行程 检查功能后,若任一轴的行进范围将超出工作区间,系统将停止运动(并产生一错误记 录)。此时若要使系统恢复正常状态,必须先清除系统中的错误纪录,然后才能往反方 向移动。机构参数中的 dfHighLimit、dfLowLimit 分别用来设定软件左右极限的位置; MCC_SetOverTravelCheck()用来启动与关闭此项功能,MCC_GetOverTravelCheck()则 用来检查目前的设定状态。下面为使用范例。

Step 1:启动 X 轴软件过行程检视功能

MCC_SetOverTravelCheck (1, 0, 0, 0, 0, 0, g_nGroupIndex);

Step 2:OT0 ~ OT5 的值若为 1 表示已设定过行程检查功能,否则为 0 MCC_GetOverTravelCheck( &OT0,

&OT1, &OT2, &OT3, &OT4, &OT5,

g_nGroupIndex);

29

MCS 运动控制函式库范例手册

Step 3:读取可能产生的错误讯息

nErrCode = MCC_GetErrorCode(g_nGroupIndex);

利用 MCC_GetErrorCode()的传回值可判断目前是否因系统位置将超出软件极限 而无法运动(因内部已产生错误记录)。传回值若为 0xF301 ~ 0xF306,则依序代表 X 轴 ~ W 轴出现此种情形,此状况下可依下面范例使系统回复正常状态。

Step 4:清除系统中的错误纪录, 使系统回复正常状态

MCC_ClearError(g_nGroupIndex);

MCCL 也提供硬件极限开关(Limit Switch)检查功能,要使极限开关能正常运作, 除 了 必 须 正 确 设 定 极 限 开 关 的 配 线 方 式 外 , 尚 必 须 呼 叫 MCC_EnableLimitSwitchCheck()

, 如

wOverTravelUpSensorMode

wOverTravelDownSensorMode 的 设 定 才 能 生 效 。 但 wOverTravelUpSensorMode 与 wOverTravelDownSensorMode 如设定为 2,则呼叫 MCC_EnableLimitSwitchCheck()并 无任何意义。

若使用 MCC_EnableLimitSwitchCheck(1),则只有在碰触到该轴运动方向的极限 开关时(例如往正方向移动且触到正向极限开关,或往负方向移动且碰触到负向极限开 关),才会停止该 Group 之运动;若呼叫 MCC_EnableLimitSwitchCheck(0),则只要碰 触到极限开关(不管行进方向),皆会停止该 Group 之运动。

利用 MCC_GetErrorCode()的传回值可判断目前是否因碰触到极限开关而无法运 动(因内部已产生错误记录)。传回值若为 0xF701 ~ 0xF706,则依序代表 X 轴 ~ W 轴 出现此种情形,此状况下可依下面范例使系统回复正常状态。

30

MCS 运动控制函式库范例手册

a.

若之前呼叫:MCC_EnableLimitSwitchCheck(0)

则:MCC_ClearError() ? MCC_DisableLimitSwitchCheck() ? 反方向退出 Limit

Switch

b. 若之前呼叫:MCC_EnableLimitSwitchCheck(1)

Limit Switch 则:MCC_ClearError() ? 反方向退出

31

MCS 运动控制函式库范例手册

19. 连续运动功能设定

相关函式

MCC_EnableBlend() MCC_DisableBlend() MCC_CheckBlend()

范例程序

SetBlend.cpp

内容说明

Velocity

Velocity

C ommand 1 C ommand 2 C ommand 1 T i m e C ommand 2

T i m e

由图中可以看出开启平滑运动功能后的运动情形,第一笔运动命令在达到等速段 后不经减速段,而直接加速至第二笔运动命令的等速段(如右图之实线所示),如此命 令的执行时间较快,但各笔命令的连接处会有轨迹失真的状况存在。

呼叫 MCC_EnableBlend() 与 MCC_DisableBlend() 可分别开启与关闭速度连续功 能。呼叫 MCC_CheckBlend()则可获得目前的状态设定,若函式传回值为 0,表示已开 启速度连续功能;若函式传回值为 1,则表示此时关闭速度连续功能。

32

MCS 运动控制函式库范例手册

20. 读取与清除错误状态

相关函式

MCC_GetErrorCode() MCC_ClearError()

范例程序

ErrorStatus.cpp

内容说明

系统错误发生后,若已排除错误状况,仍必须呼叫 MCC_ClearError(),来清除系 统中的错误记录,否则无法正常继续执行往后的运动。通常在系统运作中使用者应随 时读取目前的错误代码,以检查在系统运作时是否发生错误。下面为使用范例,另外 也可参阅”软件过行程检查与硬件极限开关检查”此节关于这两个函式的使用方式。

此部分与范例程序不同,使用者可以参考以下写法去处理错误产生。

if (MCC_GetErrorCode(g_nGroupIndex)) {

/*

在此排除错误状况

*/

MCC_ClearError(g_nGroupIndex);// 清除系统中的错误记录

}

33

MCS 运动控制函式库范例手册

21. 齿轮齿隙与间隙补偿

相关函式

MCC_SetCompParam() MCC_UpdateCompParam()

范例程序

Compensate.cpp

内容说明

MCCL 所提供的齿轮齿隙与间隙补偿功能,能弥补机台在传动时因齿轮、螺杆制 造上的缺陷所造成的误差,如齿隙误差、背隙误差,详细的说明请参考”MCS 运动控

制函式库使用手册”。

34

MCS 运动控制函式库范例手册

22. 如何完成 6 轴连续运动

相关函式

MCC_CreateGroup() MCC_SetFeedSpeed() MCC_EnableBlend() MCC_Line()

范例程序

SyncLine.cpp

内容说明

当 1 个 group 已使用 MCC_EnableBlend()开启连续运动功能后(满足路径与速度连 续条件),如多次呼叫 MCC_Line()时,虽能达到 6 轴同动要求(也就是 6 轴同时启动且 同时静止),但只有前 3 轴也就是 X、Y、Z 轴能满足路径与速度连续的条件,而后三 轴也就是 U、V、W 轴仅能满足同动要求。

如需 6 轴同运且满足路径与速度连续的条件,则可使用 2 个 group,第 1 个 group 负责前 3 轴的轨迹规划,而第 2 个 group 负责后三轴的轨迹规划。但为了满足 6 轴同 动要求,第 2 个 group 的速度可使用第 2 个 group 要求移动的距离与第 1 个 group 要 求移动的距离之比值,再乘上第 1 个 group 的进给速度而换算得到。此过程的程序代 码如下,此时使用者需呼叫 fnAsynLine()代替使用 MCC_Line()。

Step 1:宣告 fnSyncLine 函式

void fnSyncLine(double x, double y, double z, double u, double v, double w, double

dfXYZSpeed);

35

MCS 运动控制函式库范例手册

Step 2:设定并使用两个 Groups nt g_nGroupIndex0 = -1; int g_nGroupIndex1 = -1; // set group parameters

MCC_CloseAllGroups();

g_nGroupIndex0 = MCC_CreateGroup(0, 1, 2, -1, -1, -1, CARD_INDEX); if( g_nGroupIndex0 < 0 ) {

printf(\return; }

g_nGroupIndex1 = MCC_CreateGroup(3, 4, 5, -1, -1, -1, CARD_INDEX); if( g_nGroupIndex1 < 0 ) {

printf(\return; }

Step 3:启用平滑运动

MCC_EnableBlend(g_nGroupIndex0); MCC_EnableBlend(g_nGroupIndex1);

Step 4:呼叫 fnSyncLine 函式 fnAsynLine(10, 20, 30, 40, 50, 60, 10); fnAsynLine(40, 50, 60, 10, 20, 30, 10);

36

MCS 运动控制函式库范例手册

Step 5: fnSyncLine 函式定义

void fnSyncLine(double x, double y, double z, double u, double v, double w, double dfXYZSpeed)

{

double dfDistance0, dfDistance1, dfUVWSpeed;

dfDistance0 = x * x + y * y + z * z;

if (dfDistance0 && dfXYZSpeed) {

dfDistance1 = u * u + v * v + w * w; // 换算后三轴应有的速度

dfUVWSpeed = dfXYZSpeed * sqrt(dfDistance1/ dfDistance0);

MCC_SetFeedSpeed(dfXYZSpeed, g_nGroupIndex0);

// 由 group 的定义得知,第 1 个 group(也就是 g_nGroupIndex0)会将此 // 命令由前三轴输出

MCC_Line(x, y, z, 0, 0, 0, g_nGroupIndex0);

MCC_SetFeedSpeed(dfUVWSpeed, g_nGroupIndex1);

// 由 group 的定义得知,第 2 个 group(也就是 g_nGroupIndex1)会将此

// 命令由后三轴输出

MCC_Line(u, v, w, 0, 0, 0, g_nGroupIndex1); }

37

本文来源:https://www.bwwdw.com/article/d1m7.html

Top