偶像来了毁了林青霞:基于PC机的DNC传输软件的开发--中国自动化网文库中心

来源:百度文库 编辑:中财网 时间:2024/05/03 05:55:51
1 引言
随着我国制造业的迅速发展,数控机床在机械加工行业得到了广泛的应用。要实现数控机床对整个机械加工过程的自动控制就必须编写机床数控系统能够识别的数控加工程序,该程序可由人工进行编写,也可由计算机辅助制造(CAM)软件自动生成。近年来,CAM软件得到了迅猛地发展,如国外的Pro/E、UG、MASTERCAM和国内的CAXA,其功能也日趋智能化,可以实现复杂曲面结构零件的快速编程,给产品的生产加工带来了巨大的便利。但是随着零件结构的复杂化,CAM软件生成加工代码的容量将会很大,如果超过了机床数控系统的程序存储空间,将不能一次性存储在数控系统中。虽然目前较为先进的数控系统配有以太网或USB通信接口,但考虑到早期生产的数控系统只配备了RS232C串行通信接口,且在很多企业中占有一定的比重。为了解决该类型数控系统对于大容量程序的处理问题,必须使数控机床处于DNC加工状态,即通过串行通信接口将一部分程序先传输至数控系统,由数控系统处理并完成零件加工过程的控制,当这部分程序执行完之后再由数控系统将其删除,并继续通过串行通信接口读取剩余的程序,如此循环直到程序全部执行完毕,该过程即结束。
本文作者讨论了在实现数控机床DNC加工过程中的硬件连接要求、机床数控系统参数设置和VB程序的设计方法。
2 硬件连接要求
本次研究使用的机床设备为南通机床厂制造的V600数控铣床,配备的数控系统型号为FANUC 0iMATE-MC,该数控系统提供了一个25针的RS232C串行通信接口。数控加工程序由PC机通过串行通信接口进行发送,由于目前市场上的PC机只提供9针的RS232C串行通信接口,因此微机与数控机床进行连接时需提供一根一端为9针(DB9)另一端为25针(DB25)的串行通信电缆线。下面对该电缆线的电气信号和连接注意事项做出说明。
2.1 电气信号
串行通信电缆线可由机床制造商提供,也可从电子产品市场购买。RS232C的各个引脚有着不同的功能,要想实现微机与机床数控系统之间的串行通信一般只需要用到其中的3个引脚,它们分别是接收数据、发送数据和信号地。其引脚连接关系如表1所示。
表1 DB9和DB25常用引脚连接关系

在进行串行通信时,数控系统的接收数据引脚和发送数据引脚必须分别接微机的发送数据引脚和接收数据引脚,以达到数据的“收”与“发”,因此在电子产品市场购买的串行通信电缆线必须进行跳线处理,方法是将电缆线一端的接收数据引脚和发送数据引脚进行对调。如果是机床制造商提供的串行通信电缆线,因为厂家已经事先进行跳线处理,因此不需要再进行跳线。
在通信过程中还需考虑数据的流量控制,以防止数控系统和微机的串口接收缓冲区发生“溢出”,而实现流量控制的便是握手信号。握手分硬件握手和软件握手,硬件握手需要通过串口中专门的握手信号引脚来实现,而软件握手是通过数控系统和微机串口的发送数据引脚发送ASCII码第19个字符和第17个字符来控制数据发送的暂停和恢复。如果发送的数据中存在ASCII码第19个字符或第17个字符便不能使用软件握手方法,否则会出现“错误的握手”。由于数控加工程序的指令中并没有ASCII码第19个字符和第17个字符对应的加工指令,因此不会出现“错误的握手”情况的发生,同时FANUC Oi-MATE-MC数控系统支持软件握手,如采用软件握手实现串行通信则只需使用3个引脚便能完成任务,其硬件连接将变得简单易行。
2.2 连接注意事项
当数控系统和微机中的任何一个先上电时,由于两者串口电路的电位可能不同,如果此时直接使用电缆线连接数控系统和微机的串口,可能会因为电位差而出现放电,烧坏串口电路。因此推荐使用光电隔离器安装于电缆线的两端,以分别保护数控系统和微机。
使用光电隔离器可以保证设备的使用安全,但是会增加硬件投入成本。如果在数控机床和微机上电之前先将两者用串行通信电缆线进行连接,此时因为两者串口电路的电位已经相同,然后再对数控机床和微机分别上电,这样就不会造成串口电路的损坏。在实际生产使用中因为很少会频繁将串行通信电缆线拔下,因此在不使用光电隔离器时使用以上方法连接数控系统和微机的串口是安全的,同时也是可以减少硬件成本投入的。
3机床数控系统参数设置
串行通信过程中通信双方必须按照相同的通信协议才能实现数据的正确传输,其中数控系统是以系统参数的形式完成串行通信参数的设置的。针对本次研究中所使用的FANUC 0i-MATE-MC数控系统,其必须设置的串行通信参数如表2所示。
串行通信过程中对于数据位和奇偶校验也需要进行正确的设置,FANUC 0i-MATE-MC数控系统对这两个参数有其固定值,无需对其进行设置。但是在使用VB软件编程时必须知道该数控系统中数据位和奇偶校验的设置情况,否则无法进行正确的通信。通过查阅该数控系统的使用说明书可以知道其数据位为7位,可以表示ASCII码为0-127的字符,由于数控加工程序的指令均为ASCII码0-127的字符,因此在VB软件中也应使用7位数据来传输各个字符。同时该型号的数控系统不进行奇偶校验,因此VB软件中也应设置无奇偶校验。
表2 机床数控系统串行通信参数设置值及含义
4 VB程序的设计方法
图1 数控DNC软件运行界面

本次研究使用的编程软件为Visual BASIC 6.0,考虑到该DNC软件应简单易用,因此使用了单一编程界面(SDl),所有的操作选项均按类别分类。编程中使用的主要控件为RichTextBox、ProgressBar、ComboBox、CommonDialog和MSComm。RichTextBox控件的功能为显示加载的数控加工程序文本;ProgressBar控件的功能为显示发送程序的进度;ComboBox控件的功能为提供各通信参数的选择操作;CommonDialog控件的功能为产生文件打开与保存的对话框;MSComm控件的功能为通过PC机的串行通信接口实现数据的收与发。该DNC软件提供了两大功能:一是微机发送数控加工程序至机床,实现DNC加工;二是微机读取机床发送出的数控加工程序,实现机床程序存储区的备份。下面对该软件运行的主要流程和各功能的关键设计方法进行介绍,其运行界面如图1所示。

4.1 软件运行的主要流程
发送文件时,应通过CommonDialog控件及相关代码生成打开文件的对话框,并将选中的文件内容加载至RichTextBox控件的文本显示区域内,最后通过按下发送文件按钮将数控加工程序发送至数控系统。接收文件时,当按下接收文件按钮后将通过CommonDialog控件及相关代码生成保存文件的对话框,并选择保存路径,然后进入等待接收状态,一旦有数据进入即开始接收,接收完毕后将自动保存文件至相应的路径,图2为发送与接收过程的设计流程图。
图2 发送与接收过程的设计流程图

4.2 各功能的关键设计方法
4.2.1 分割文件
发送给数控系统的数控加工程序的容量可能比较大,考虑到MSComm控件发送缓冲区的大小不可能设置太大(此处使用默认的512字节),因此必须对数控加工程序进行分割,分多次进行发送。此处可采用FOR循环结构来实现多次的发送,而循环的次数由文件总大小和每次发送数据的大小来决定,考虑到数控系统串口的接收缓冲区比较小,如果一次发送的数据过大则会使其缓冲区溢出并产生报警,此处可设置每次发送数据的大小为200字节。
4.2.2 软件握手的实现
在进行DNC加工时必须进行流量控制,以防止PC机串口发送超速而造成数控系统的溢出报警,此处采用软件握手来实现对流量的控制。其设计方法是在发送循环中加入DoLoop循环结构,通过不断读取输入缓冲区并查找是否收到数控系统发来的暂停发送(13H)或恢复发送信号(11H)来决定是否继续发送数据,该循环结构的程序代码如下:
Do
bufwait:Comml.Input‘读取输人缓冲区
If InStr(bufwait,Chr$(&H13))>0Then
wait=True
End If‘判断是否暂停发送
If InStr(bufwait,Chr$(&H11))>0Then
wait=False
End If‘判断是否收恢复发送
DoEvents‘先将控制权交给Windows
Loop While wait=True‘
以上程序代码中必须事先定义bufwait为字符串变量,wait为布尔型变量。
4.2.3 检查输出缓冲区
在通过串口发送一个程序段之前还必须检查输出缓冲区中是否有未发送完的字节,否则可能会使得输出缓冲区中不断堆积新的数据而导致溢出。实现以上功能的设计方法是在软件握手的功能后加入一个DoLoop循环结构,通过不断检查MSComm控件中的OutBufferCount属性是否为0来决定是否继续发送数据,该循环结构的程序代码如下:
Do
outcount=Comml.OutBufferCount‘读取输出缓冲区的字节数
If outcount=0 Then
sendempty=False
Else
sendempty=True
End If‘判断是否是零字节
读取输出缓
DoEvents‘先将控制权交给Windows
Loop While sendempty=True
以上程序代码中必须事先定义outcount为整形变量,sendempty为布尔型变量。
4.2.4 检查文件发送或接收是否结束
在发送文件的过程中要想知道是否发送结束可以检查FOR循环的当前循环次数是否为总循环次数,但是在接收文件的过程中因为事先并不知道数控系统发送的程序有多大,因此必须采用其它方法来解决该问题。
FANUC数控系统对程序传输的通信协议做了如下规定:程序的开头和结尾必须采用“%”来表示程序传输的开始和结束。因此要想知道程序是否发送或接收完毕可以通过查找程序中的“%”这一字符来实现,在文件发送循环中实现该功能的程序代码如下:
j=InStr(buf,“%”)‘返回发送数据中“%”字符的地址
If j>0 Then
counter=counter+1‘对“%”字符计数
If times=1 Then
j=j+1
If InStr(j,bur,“%”)>0 Then
counter=counter+1
End If
End If‘对总发送次数为1的情况作“%”字符的2次检查
End If‘检查文件是否发送结束
If counter=2 Then
msgvalue=MsgBox(“传输完毕”,vbOKOnly+vbInformation,“消息”)
If msgvalue=vbOK Then
Frame3.Enabled=True
Comm1.PortOpen=False‘关闭串口,结束发送过程
ProgressBar1.Visible=False
Label1.Visible=False
Command1.Enabled=True
Commanc3.Enabled=True
Command4.Enabled=True
End If
Exit Sub
End If
以上程序代码中必须事先定义buf为字符串变量,j、counter、times和msgvalue为整形变量。设计中还考虑到了如果发送的程序过短(总发送次数times变量为1),可能在发送的字符串变量buf中存在2个“%”字符,因此对于该情况必须在查找到第一个“%”之后对剩余的字符串再查找一次,以确定是否还有第二个“%”字符。如果找到2个“%”字符(计数器变量counter为2),则提示用户程序传输完毕。检查接收文件是否结束的程序代码与检查发送文件是否结束的程序代码类似,在此不再赘述。
4.2.5 文件接收的自动化
当接收程序处于等待状态时,在操作人员按下数控系统的发送程序按键后,该软件的文件接收过程即自动开始。为了实现文件接收过程的自动化,应使用MSComm控件的OnComm过程来处理数据的接收。在通信参数初始化中应设置MSComm控件的RThreshold属性为1,以保证串口一旦接收到字符即引发OnComm过程接收数据并对收到的数据进行处理。为方便将来数据的处理,在OnComm过程中应使用字节型数组以二进制方式接收并暂存数据,实现该功能的部分程序代码如下:
Select Case Comm1.CommEvent
Case comEvReceive‘判断串口是否收到数据
slen=Comm1.InBufferCount‘读取输入缓冲区收到的字节数
Comm1.InputLen=slen‘设置读取字节长度为收到的字节数
ReDimbytlnput(slen)‘重新定义字节数组的长度
tmp=Comm1.Input
bytInput=tmp‘读取输入缓冲区数据至字节数组
processdata‘调用数据处理函数
以上程序代码中必须事先定义slen为整形变量,tmp为变体型变量,bytInput()为字节型数组。processdata为数据处理函数,该函数的功能为过滤无需显示的字符并将数据在RichTextBox控件的文本框中显示。
5 结束语
本文作者在介绍PC机与数控系统进行串行通信时其硬件连接要求和数控系统的通信参数设置方法的基础上,利用VB6.0软件实现了DNC加工状态下的程序发送和程序接收备份功能。该软件在FANUC 0iMATE-MC数控上经过测试,运行正常。同时该软件提供了丰富的通信参数选项,因此在其它型号的FANUC数控系统上或通信协议相同的其它厂商的数控系统上均能正常运行,这大大提高了该软件的通用性。