运动控制卡说明书Word文档格式.docx
《运动控制卡说明书Word文档格式.docx》由会员分享,可在线阅读,更多相关《运动控制卡说明书Word文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
✧标准PCI总线通讯方式
5.系统软件
✧用户接口函数库
✧WindowsXP设备驱动程序
✧用户示例程序
PCI_SERVO4
正是由于PCI_SERVO4的开放式结构,使之应用范围十分广泛,在由步进电机和数字式伺服电机组成的基于PC机的运动控制系统中,都可以使用PCI_SERVO4作为核心控制单元,例如:
●数控机床、加工中心、机器人等;
●X-Y-Z控制台;
●绘图仪、雕刻机、印刷机械;
●送料装置、云台;
●打标机、绕线机;
●医疗设备;
●包装机械、纺织机械;
等等。
1.4 PCI_SERVO4的运动控制功能
PCI_SERVO4控制卡的运动控制功能主要取决于运动函数库。
运动函数库为单轴及多轴的步进或伺服控制提供了许多运动函数:
单轴运动、多轴独立运动、多轴插补运动等等。
1.4.1单轴运动控制
1.4.2多轴独立运动控制
1.4.3多轴插补运动控制
1.4.4光码盘反馈和其它能力
第二章控制卡的安装
2.1硬件安装
PCI_SERVO4控制卡对PC机的硬件要求十分简单:
能安装Windows2000及以上操作系统,并带有PCI插槽的486以上机型即可,建议使用更高主频的Pentium及以上机型以获取更好的性能。
为了整个控制系统的可靠性,建议使用工控PC机。
PCI_SERVO4卡基于PCI总线,因此卡上无需进行跳线设置。
为了保证安全,插卡时应按照下列步骤操作:
1)关PC机,并切断电源;
2)打开PC机箱,选择未用的扩展槽,并插入PCI_SERVO4控制卡;
3)固定PCI_SERVO4控制卡,并盖好PC机;
4)连接PCI_SERVO4与电机驱动器等;
5)接上电源,并启动PC机。
2.2软件安装
2.2.1驱动程序安装和使用
插入运动控制卡,启动电脑,进入操作系统后,计算机提示找到新硬件,如果没有提示则打开设备管理器,右键选择“扫描硬件改动”,扫描后会提示找到新硬件,按要求加载安装信息文件和驱动程序,根据提信息,打开驱动文件所在的文件夹,找到所编制的安装文件Pci9052.inf,然后根据安装文件提供的驱动序信息,系统自动安装驱动程序Pci9052.sys。
安装后重新启动系统,所安装的驱动程序便可以正常的工作了。
驱动的使用方法可以参考示例程序。
2.2.2运动函数库安装和使用
可以参考4.1.2章的DLL的显示链接和示例程序。
2.3PCI_SERVO4接口
PCI_SERVO4控制卡采用100芯SISC接口,外接线可采用屏蔽线缆,以提高控制卡的抗干扰能力。
其中开关量信号(原点、减速、限位以及I/O信号等)采用5DCV光电隔离;
脉冲量信号(脉冲、方向、编码器反馈等)采用5DCV高速光电隔离。
2.3.1信号接口定义
PCI_SERVO4卡SISC100的接口定义为:
编号
名称
定义
ZH
51
EX5VX
X轴+5V外部电源正
50
~52
GNDX
X轴+5V外部电源地
49
53
SDIRX
X轴方向输出
48
XALRM
X轴报警输入
54
SDATAX
X轴脉冲输出
47
XLMTP
X轴正向限位输入
55
XENABLE
X轴使能输出
46
XLMTM
X轴负向限位输入
56
XINPOS
X轴到位信号输入
45
XORGIN
回原点
57
XSTATE
X轴的准备状态
44
XENCA
X轴编码器A/脉冲+入
58
NC
43
XENCB
X轴编码器B/脉冲-入
59
EX5VY
Y轴+5V外部电源正
42
60
GNDY
Y轴+5V外部电源地
41
61
SDIRY
Y轴方向输出
40
YALARM
Y轴报警输入
62
SDATAY
Y轴脉冲输出
39
YLMTP
Y轴正向限位输入
63
YENABLE
Y轴使能输出
38
YLMTM
Y轴负向限位输入
64
YINPOS
Y轴到位信号输入
37
YORGIN
65
YSTATE
36
YENCA
Y轴编码器A/脉冲+入
66
35
YENCB
Y轴编码器B/脉冲-入
67
OS1
通用输出(与OS2构成开关型输出)
34
OS2
通用输出(与OS1构成开关型输出))
68
OS3
通用输出(与OS4)
33
OS4
通用输出(与OS3)
69
OS5
通用输出(与OS6)
32
OS6
通用输出(与OS5)
70
OS7
通用输出(与OS8)
31
OS8
通用输出(与OS7)
71
OS9
通用输出(与OS10)
30
OS10
通用输出(与OS9)
72
OS11
通用输出(与OS12)
29
OS12
通用输出(与OS11)
73
OS13
通用输出(与OS14)
28
OS14
通用输出(与OS13)
74
OS15
通用输出(与OS16)
27
OS16
通用输出(与OS15)
75
26
76
IOINP2
通用输入2+
25
IOINP1
通用输入1+
77
IOINN2
通用输入2-
24
IOINN1
通用输入1-
78
IOINP4
通用输入4+
23
IOINP3
通用输入3+
79
IOINN4
通用输入4-
22
IOINN3
通用输入3-
80
IOINP6
通用输入6+
21
IOINP5
通用输入5+
81
IOINN6
通用输入6-
20
IOINN5
通用输入5-
82
IOINP8
通用输入8+
19
IOINP7
通用输入7+
83
IOINN8
通用输入8-
18
IOINN7
通用输入7-
84
17
85
EX5VZ
Z轴+5V外部电源正
16
86
GNDZ
Z轴+5V外部电源地
15
87
SDIRZ
Z轴方向输出
14
ZALARM
Z轴报警输入
88
SDATAZ
Z轴脉冲输出
13
ZLMTP
Z轴正向限位输入
89
ZENABLE
Z轴使能输出
12
ZLMTM
Z轴负向限位输入
90
ZINPOS
Z轴到位信号输入
11
ZORGIN
91
ZSTATE
10
ZENCA
Z轴编码器A/脉冲+入
92
9
ZENCB
Z轴编码器B/脉冲-入
93
EX5VU
U轴+5V外部电源正
8
94
GNDU
U轴+5V外部电源地
7
95
SDIRU
U轴方向输出
6
UALRM
U轴报警输入
96
SDATAU
U轴脉冲输出
5
ULMTM
U轴正向限位输入
97
UENABLE
U轴使能输出
4
UORGIN
U轴负向限位输入
98
UINPOS
U轴到位信号输入
3
99
USTATE
2
UENCA
U轴编码器A/脉冲+入
100
1
UENCB
U轴编码器B/脉冲-入
注:
NC为空连接
红色标记的nINPOS(XYZU)硬件连接有错,它和nState共用了一条线
2.3.2接线方法
接线方法可以参看电路图。
第三章运动控制系统的开发
3.1开发Windows下的运动控制系统
利用PCI_SERVO4的动态链接库(DLL),开发者可以很快开发出Windows平台下的运动控制系统。
PCI_SERVO4动态链接库是标准的Windows32位动态链接库,选用的开发工具应支持Windows标准的32位DLL调用。
以下介绍如何利用两种常用的开发工具MicrosoftVisualBasic和MicrosoftVisualC++开发基于Windows平台的运动控制程序
3.1.1开发VisualBasic控制程序
1.概述
2.动态链接库函数调用方法
3.演示示例程序的使用
3.1.2用VisualC++开发控制程序
1.开发环境
用户可以使用VC6.0或更高版本,来进行Windows平台下运动控制系统开发。
在VC中调用动态链接库DLL中函数有两种方法:
1)隐式调用
隐式调用需要如下文件:
Ø
DLL函数声明头文件PCI_SERVO4.h;
编译连接时用的导入库文件PCI_SERVO4.lib;
动态链接库文件PCI_SERVO4.dll;
设备驱动程序PCI_SERVO4.sys;
对于以上的调用方法可以参考MFC中关于对DLL调用的那一章
2)显式调用
显式调用只需要如下文件:
设备驱动程序PCI_SERVO4.sys。
显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法做到的,所以显式链接具有更好的灵活性。
它需要调用WindowsAPI函数加载和释放动态链接库。
方法如下:
✓调用WindowsAPI函数LoadLibrary动态加载DLL;
✓调用WindowsAPI函数GetProcAddress取得将要调用的DLL中函数的指针;
✓用函数指针调用DLL中函数完成相应功能;
✓在程序结束时或不再使用DLL中函数时,调用WindowsAPI函数FreeLibrary()释放动态链接库。
如下是通过显式链接调用pci_servo4.dll中的Pmove1函数的例子:
……
typedefint(*Pmove1_d)(intch,longldata);
……
HINSTANCEhDLL;
Pmove1_dPmove1;
……
hDLL=LoadLibrary("
pci_servo4.dll"
);
//加载动态链接库pci_servo4.dll文件;
Pmove1=(Pmove1_d)GetProcAddress(hDLL,"
Pmove1"
//获得pci_servo4.dll中函数Pmove1的指针
Pmove1(chx,1000);
//执行Pmove1函数
……
FreeLibrary(hDLL);
//卸载pci_servo4.dll文件
在例子中使用类型定义关键字typedef,定义指向和pci_servo4.dll中相同的函数原型指针,然后通过LoadLibray将pci_servo4.dll加载到当前的应用程序中并返回当前pci_servo4.dll文件的句柄,然后通过GetProcAddress函数获取导入到应用程序中的函数指针,函数调用完毕后,使用FreeLibrary卸载pci_servo4.dll文件。
以上在两种方法均为VC中调用动态链接库函数的标准方法,若要获得更具体的调用方法和帮助,请参考微软VisualStutio开发文档MSDN或相关VC参考书籍中相应部分内容。
参看演示程序。
3.2运动函数库中函数的说明
3.2.1初始化函数、轴设置函数与其设置量获得函数
1)boolinit(void)
目的:
打开板卡获得句柄
语法:
boolinit();
调用例子:
init();
返回值:
如果成功返回0,否则返回1;
注释:
打开板卡获得句柄,如果没有插卡或没有正确安装驱动,提示“设备打不开!
”
2)voidreset()/*复位板卡*/
复位板卡
voidreset();
reset();
无
3)intInit_Board()/*初始化板卡*/
Init_Board函数主要初始化控制卡的各个寄存器、各轴的脉冲输出模式(脉冲/方向或者双脉冲,脉冲逻辑)、常速度(2000pps)、梯形速度(初速2000pps,高速8000pps,加减速12500ppss)等等。
该函数在程序中只能调用一次。
intInit_Board();
Init_Board();
如果调用成功,函数返回0,失败返回1。
如果不调用Init_Board函数初始化,控制卡将不能正常工作。
若需改变脉冲输出模式、速度等初始化数据,可调用其它函数来修改。
4)voidset_r(intch,intudata)/*设置倍率*/
设置各轴的倍率,因为寄存器的位长所致,速度,加速度等的值在一个范围,比如速度v范围(0-8000pps),如果想范围达到(0-80000),则倍率应至少设为10.
voidset_r(intch,intudata)/;
set_r(chx,10);
/*将x轴的倍率设定为10.(chx=1);
描述:
初始化后倍率为1.如果想改变某个轴的倍率,调用它就可以了.如果ch=0xf,则是一起设置四个轴的倍率。
无.
5)intget_r(intch)/*获得某个轴的倍率*/
获得某个轴的倍率.
intr=get_r(chx);
//chx=1
6)voidset_lp(intch,unsignedlongldata)附1
设置逻辑寄存器的值。
set_lp(chx,0);
//chx=1,设置当前逻辑位置为0
设置逻辑寄存器的值,即逻辑上某个轴所在的位置,如果ch=0xf则为同时设置四个轴,ldata的范围是(-2,147,483,648~+2,147,483,647)
在运行中每输出一个脉冲,逻辑寄存器就加1,这里设置逻辑寄存器实际上就是设置逻辑寄存器的基数。
7)longget_lp(intch)
获得逻辑寄存器的值
longlp=get_lp(chx)//chx=1
获得逻辑寄存器的值,即逻辑上某个轴所在的位置
逻辑上某个轴所在位置的值
8)voidset_ep(intch,unsignedlongldata)附1
设置实际位置寄存器。
set_ep(chx,0)//chx=1,设置当前实际位置为0
设置实际位置寄存器,既某个轴所在的位置,如果chx=0xf则为同时设为四个轴,ldata的范围是(-2,147,483,648~+2,147,483,647)
在运行中,运动卡接收到编码器一个脉冲,实际寄存器(EP)就加1,这里设置实际位置寄存器实际上就是设置寄存器的基数。
运行中可以选择逻辑寄存器(LP)或者实际位置寄存器(EP)与限位寄存器(COMP+/COMP-)比较来限定位置。
9)longget_ep(intch)
获得实际寄存器的值
longep=get_ep(chx)//chx=1
获得实际寄存器的值。
实际寄存器的值
10)voidset_cp(intch,unsignedlongldata)附1
设置正向比较寄存器COMP+的值.
(chx,1000)//chx=1,设定正相限位为1000,正相输出1000个脉冲后停止
设置正向比较寄存器COMP+的值,作为正方向的软件限位,在运行中也可以改写COMP+的值
执行函数set_SLMT来使能软件限位,调用函数set_CMPEP或set_CMPLP来确定与COMP+比较的是实际位置还是逻辑位置。
Ldata范围(-2,147,483,648--2,147,483,647)。
执行clr_SLMT取消软件限位,本函数失效。
11)longget_cp(intch)
读取正向比较寄存器的限位值
longcp=get_cp(chx)//chx=1
ch为轴号,取值为1,2,3,4。
正向比较寄存器的值
12)voidset_cm(intch,unsignedlongldata)附[1]
设置负向比较寄存器COMP-的值
set_cm(chx,-1000);
//chx=1;
设置负向比较寄存器COMP-的值,作为负方向的软件限位,在运行中也可以改写COMP-的值
执行函数set_SLMT来使能软件限位,调用函数set_CMPEP或set_CMPLP来确定与COMP-比较的是实际位置还是逻辑位置。
13)longget_cm(intch)
读取负向比较寄存器的限位值
longcm=get_cm(chx);
//
负向比较寄存器的限位值
14)voidset_sv(intch,longldata)
设置初始速度或者是定速驱动中的速度SV
set_sv(chx,1000);
//chx=1,sv=1000
ch为轴号,取值为1,2,3,4,0xf。
如果ch=0xf,则同时设定四个轴,ldata:
参数值
在倍率为1(set_r(chx,1))的时候,ldata的范围是0-8000.ldata的范围是倍率为1的范围乘以倍率,如:
倍率为5的时候,ldata的范围为0-40000(5*8000).
15)unsignedlongget_sv(intch)
获得所设置初始速度
unsignedlonguldata=get_sv(chx);
//chx=1
获得某个轴的初始速度.
某个轴的所设置的初始速度
它是某个轴的所设置的初始速度值,并非是正在运行时的速度,察看运行时的速度是函数get_v
16)voidset_a(intch,longldata)
设置加速度参数A
set_a(chx,8000)//chx=1,ldata=8000
如果ch=0xf,则同时设定四个轴,ldata:
倍率为5的时候