4 系统的软件设计
在Windows2000 操作系统下,以Visual Basic6. 0为开发工具采用面向对象的编程方法,充分利用控制卡配套的动态链接库中的函数,对开放式数控系统软件进行了开发,实现了数控系统的基本功能。具体实现的功能包括:Windows 风格的人机接口界面、系统初始化预处理、工作方式的选择、手轮跟踪进给、机床状态的监控、坐标位置和转速的实时显示、加工程序段及轨迹图形跟踪显示、运动程序的编制及下载,数控程序的译码、内置PLC功能等。系统软件主界面如图2所示。
4.1 系统初始化
系统的初始化在系统主界面窗口调入的过程中完成,主要进行PMAC 卡参数的预置、电机返回原点以及与服务器建立TCP/ IP 连接。初始化子过程如下:
Private Sub Form load()
Call OpenPmacDevice (0) ′起动PMAC 卡
Call PmacFlush(0) ′清空PMAC 内存缓冲区
Call PmacDPRControlPanel (0 , 1) ′置控制面板功能
Call PmacSendLineA(0 ,
″# 1j/ # 3j/ # 4j/ # 1hm # 3hm # 4hm″) ′电机闭环控制并返回原点
tcpclient. RemoteHost = ″192. 168. 142. 10″′指定远程主机
IP 地址
tcpclient. RemotePort = 1000 ′初始化端口
tcpclient. Close ′关闭连接
tcpclient. Connect ′请求与主机连接
End Sub
4.2 工作方式的选择
本系统设有7 种工作方式,Auto 、Mdi 、Step 、Handle、Rapid、Jog、Home。各种工作方式间实现了互锁,系统不能同时工作于两种方式下。在机床运行期间,方式选择无效。图3 所示的是方式选择的程序流程图。方式选择的实现使用了一组OptionButton控件,使用Case 语句触发各方式,并利用PictureBox控件使用贴图的方式点亮所选工作方式。方式选择之前使用条件判断语句确定机床是否处于程序运动状态,若是,屏蔽方式选择操作。
4.3 手轮跟踪进给( Handle)
手轮直接连接PMAC 的控制面板(Control Panel) 接口J2 ,接好手轮的四个端子:HWCA、HWCB、+ 5V、GND。关闭伺服,摇动手轮,ENC2 的坐标值稳定均匀变化。
手轮脉冲编码器必须占用一个码盘信号输入口,跳上短接块E22 和E23 , 手轮输入就连接至PMAC 的第2 编码计数器ENC2 ,ENC2 上不能再接任何其它编码器,而且要保证跳线E26接在1、2 脚上。
控制面板的输入使能由参数I2控制,设置I2=0 ,启动控制面板输入功能。
控制面板各输入点原始状态位都为1,当前轴的选择由选择位FPD0~ FPD3通过外部轴选择开关指定,如表1所示。
4.4 机床状态的监控、进给轴坐标值和转速的实时显示
这里利用了Timer 定时器控件。系统的每坐标每轴的状态以及各种参数变量都存在PMAC 内存中,分别用M变量去指向各状态,可通过操作M变量进行状态的读取和参数的写入以及完成I/O口的控制,部分程序代码如下:
Private Sub Timer1 Timer ()
Dim limit1p ,limit1n ,imit3p ,limit3n , limit4p , limit4n As
String
Dim PosX, PosY, PosZ, responsex , responsey , responsez As
String 3 255
If tcpClient. State = 7 Then ′若已与主机通讯连接,网络指示灯闪烁
If Picture12 = LoadPicture () Then
Picture12 = LoadPicture (″E: \ . . . . . . \ red. bmp″)
Else : Picture12 = LoadPicture ()
End If
End If
Call PmacGetResponseA(0 , limit1p , 2 , ″m121″) ′读取极限状态
Call PmacGetResponseA(0 , limit1n , 2 , ″m122″)
If Val (limit1p) = 1 Or Val (limit1n) = 1 Then
If Picture6 = LoadPicture () Then
Picture6 = LoadPicture (″E: \ . . . \ red. bmp″) ′指示极限状态,红灯亮
End If
Else : Picture6 = LoadPicture ()
End If
Call PmacGetResponseA(0 , PosX, 255 , ″m162″) ′取# 1 位置实际值
Poslabel (0) . Caption = Format (Val (PosX) / 4000/ 32/ 96 ,
″# # # # 0. 000″)
′将单位转换为mm
Call PmacGetResponseA(0 , responsex , 255 , ″m166″) ′取# 1 实际速度
Speedx. Text = Format (Val (responsex) 3 8388608 /3713707 3 60 / 24 , ″# # # # 0. 000″) &″rpm″
. . . . . .
End Sub