基于开放式数控系统的辅助控制系统设计*
2017-02-15张海浪舒志兵郑之开
张海浪,舒志兵,郑之开
(南京工业大学 电气工程与控制科学学院,南京 211816)
基于开放式数控系统的辅助控制系统设计*
张海浪,舒志兵,郑之开
(南京工业大学 电气工程与控制科学学院,南京 211816)
为辅助开放式数控系统完成外围端口控制及数控功能指令订制,在研究了PLC控制系统的基础上,设计一种专用辅助控制系统。该系统采用虚拟plc技术,VC++开发平台,设计开放的指令解析器和运行系统,通过定义二进制编码规则和指令解析表实现数控子功能指令拓展。该系统与主控制系统功能独立,经过实际应用证明,该辅助系统能够根据加载的PLC程序控制端口状态,并成功运行数控子功能。
虚拟PLC;端口控制;子功能订制;MFC消息映射;开放式数控系统
0 引言
开放式数控系统[1]是目前数控技术的重点发展方向。当今数控技术的发展,已经由面向硬件转向面向软件。其最高程度的开放应是以软件技术为基础的控制器[2]。
基于IPC工控机和PMAC(Programmable Multi-axis Controller)运动控制卡的运动控制系统[3]是开放式数控系统的典型代表。而PLC[4]作为数控系统的重要组成部分,用软件来实现其功能已经成为开放式数控系统中PLC的发展趋势。
目前数控PLC控制模块有三种,传统硬件PLC控制器,基于嵌入式的PLC控制器,虚拟PLC。三者各有优势,并存于市场。针对虚拟PLC,国外已有基于PC的开放式控制软件,具有开放的控制平台,但大都与硬件产品配套,价格高昂。部分国内大型数控系统有PLC控制模块,可以为主系统提供端口管理功能,但是开放性不强,功能指令订制尚未有公认的管理机制。
基于以上考虑,设计二进制码的编译和解析方法,定义解析和运行指令表,完成满足外围端口控制和数控功能指令设计的数控专用辅助控制系统。采用VC++开发平台[5],动态链接库技术(dll),可以用于大多数数控系统的移植[6];设计纯软件的辅助控制系统[6-9]。最终应用于实际投入市场的运动控制产品中。
1 运动控制主系统分析
设计辅助系统应用于Ncstudio V10多Z轴运动控制系统中验证。系统硬件采用工控机+PM95A运动控制板卡+控制器搭建。
PM95A匹配NCstudio V10版本控制系统软件。软件由维宏电子股份有限公司自主研发,可为支持不同行业提供运动控制解决方案。软件架构如图1所示。
图1 控制系统软件架构
系统上层是面向用户的操作界面,满足客户参数设定、加工路径显示、加工程序编辑、手动控制、状态监视等。通过窗口响应显示和刷新界面。业务逻辑层实现数控专用功能。核心功能层包含内核和解析器,系统内核负责系统的状态监控,调度系统资源。解析器主要工作是对刀路程序进行解析,下发控制指令NCCMD到驱动层。驱动层是软件和硬件交互信息的重要模块,核心功能层通过R3R0缓冲区和外部硬件交换数据、下发控制脉冲。
设计辅助控制系统于系统内核,可享有较高优先级,与内核共享系统资源,方便通过驱动层获取和改变外部端口状态。
2 数控辅助控制系统虚拟PLC设计
虚拟PLC系统主要包括编译系统和运行系统,在此基础上加入实时监控系统。系统框图如图2所示。
图2 辅助控制系统框图
系统运行开始首先完成编译过程,然后建立定时器,周期性触发扫描过程。监视过程在读取辅助系统内部存储区更新数据。
2.1 编译系统设计
设计PLC程序编译过程如图3所示。
图3 编译过程
编译系统主要通过设计编译功能类CPlcCompiler,报错字符类plc_exception,实现编译过程。编译功能设计中核心的是CPlcCompiler解析指令功能,在文件处理等流程操作后,循环调用解析指令功能。
解析指令功能相关的成员变量如表1所示。
表1 解析指令相关成员变量
解析指令功能按顺序调用的成员方法如下:
//在系统初始化中调用,开始编译成二进制代码
bool Compile(LPCTSTR pszFnIn_, LPCTSTR pszFnOut_)
//在Compile函数中调用,将m_szCurCode断句为字段,并匹配对应的字段标示,放入m_nCurToken
word_t ReadNextToken()
//在Compile函数中调用,获取字段标示对应的解析函数,在之后执行
PCODEFUNC GetStatementHandler(word_t token_)
//在每个字段标示对应解析函数调用,写入二进制代码,可根据指令不同重载写入形式。
void Output(int v1_)
解析指令功能:定义Output(int v1_)为写入基础单元的编译模式, GetStatementHandler()成员函数通过定义指令编译解析表调用对应的指令解析函数,编译解析表中成员格式:{字段标识符, &解析指令函数}。
plc_exception定义各类型报错宏,及报错字符串。通过结构体将宏名和报错字符串对应。在编译源程序的过程中,根据逻辑判断,出错的地方传入特定的报错宏,实现编译错误记录。
2.2 运行系统设计
设计运行过程如图4所示。
图4 运行过程
运行系统主要通过设计运行系统类CPlc、代码类CPlcCode实现运行过程。指令解析与编译系统相似,设计有运行指令解析表,最终将逻辑运算拆解为堆栈操作和参数获取操作。相关成员方法按顺序调用如下:
//在多媒体定时器响应函数中调用,执行plc扫描
void CPlc::Scan()
//在Scan()调用,获取字段标示
ins_t CPlcCode::GetCode()
//在Scan()调用,从运行指令解析表获得指令解析函数
inline PINSFUNC CPlc::GetInstructionHandler(ins_t code_)
//在指令解析函数中调用,执行堆栈操作存取逻辑值
void CPlc::Push(int val_)
int CPlc::Pop()
int CPlc::Top()//只取值不移动堆栈指针
//在指令解析函数中调用,从二进制代码中获取地址、立即数、参考类型等参数数据
int GetBitAddr()
int GetImmInt()
REFINT GetRef()
逻辑运算功能:指令解析函数利用GetBitAddr()等方法传入参数,扫描过程中执行Pop()等操作,将逻辑运算结果存入堆栈中,最终根据参数和堆栈中的结果输出一组相关逻辑结果。
运行系统还需要建立内部存储空间,并完成和驱动层和监控系统的数据交互。CPlc类中定义int m_nChannels[c_nNUMOF_CHANNEL]进行内部存储区管理。定义GetChannels()成员方法向外传递m_nChannels。
2.3 监控系统设计
监视过程通过设计页面管理类CPLCIOPage和绘制Xaml资源文件实现。采取字符数组显示的方法,建立二维坐标系。通过按钮可选择地显示部分通道状态。相关成员变量如表2所示。
表2 监控界面相关成员变量
//在消息映射机制里调用,实现按钮响应,提供对话框修改上述三类起始号
oid OnInputShownChannelBase();
void OnInputShowTimerBase();
void OnInputShowCounterBase();
//在WM_TIMER消息响应函数OnTimer()调用,定时刷新页面
void FreshUI()
// 在FreshUI()调用,从Cplc的成员m_nChannels处更新选择的定时器、计数器、通道状态,x,y为在字符数组中的坐标
void ShowBitChannel(int channel_, int x_, int y_);
void ShowTimerChannel(int channel_, int x_, int y_);
void ShowCounterChannel(int channel_, int x_, int y_);
通过设置起始号,可显示10个通道、16个定时器和16个计数器的状态。最终建立的监控界面如图5所示。
图5 监控界面
3 数控子功能指令添加示例
添加PLC数控指令,可以实现数控子功能订制。可设计包括润滑油泵控制、上下料控制的流程控制指令,识别刀具信息的换刀指令等数控专用指令。现通过设计调用主系统功能的通讯指令来说明功能指令添加流程。
PLC专用通讯指令设计
通讯指令格式:
MSG <消息类型>, <消息ID>
(1)在编译系统的编译指令解析表中添加成员:
{CPlcCompiler::USW_MSG &CPlcCompiler::CodeMSG}
(2)设计void CodeMSG()
解析函数主体如下:
//匹配当前字段
Match(USW_MSG);
//定义参考整形变量,从源代码传入参数
REFINT _msg;
GetRefInt(&_msg);
REFINT _v1;
GetRefInt(&_v1);
REFINT _v2;
GetRefInt(&_v2);
//写入二进制文件
Output(INS_LN, m_nLineno);
Output(INS_MSG);
Output(_msg);
Output(_v1);
Output(_v2);
参考整形REFINT是包含数据类型和数值的结构体:
struct REFINT{ ref_t nRef;
int nVal;};
//目前支持类型
enum ref_t{ REF_IMM,
REF_CHANNEL,
REF_VAR,};
REFINT支持立即数、通道、变量格式的参数,通过GetRefInt(REFINT* pRefInt_)分析源代码参数类型,存入pRefInt_。
(3)运行系统指令解析表添加成员,设计解析函数。
添加解析表和编译系统相似;设计解析函数即根据传入的消息ID调用::Postmessage()发送相应消息到消息队列,在此不再详细描述。
4 结论
在基于IPC和PMAC形式的运控系统中,综合应用虚拟PLC技术、MFC消息映射和类封装、VC++编程等技术,设计实现可添加数控子功能指令和外围端口控制的运控专用辅助控制系统。经测试,本文设计的二进制代码编译方法和指令解析机制,可以方便地添加数控指令,对开放性数控系统的设计具有应用价值。
[1] 郭鼓,李树军. 一种基于PMAC的开放式数控系统的设计与实现[J]. 制造业自动化,2012(4):106-110.
[2] Sergej N Grigoriev, Georgi M Martinov. The Control Platform for Decomposition and Synthesis of Specialized CNC Systems [J]. Procedia CIRP, 2016, 41:858-863.
[3] 汪龙祺,李文明,李友一. 基于运动控制卡的机电控制系统实现[J]. 微计算机信息,2011(3):9-10.
[4] 乔东凯,陈军. 基于PLC和变频器的C650卧式车床主轴电机多段速系统设计[J]. 组合机床与自动化加工技术,2016(1):98-100.
[5] 侯俊杰. 深入浅出MFC[M]. 武汉:华中科技大学出版社, 2001.
[6] 陆丽丽,季建华. 基于CNC的软PLC虚拟机中元件库的研究[J]. 机械研究与应用,2015(3):6-8.
[7] 刘安民,尹兰,沈航. CXK650型数控机床切削参数优化及实时监控系统开发研究[J]. 机械科学与技术,2015(12):113-117.
[8] 王建. 嵌入式数控系统中软PLC的研究与实现[D]. 哈尔滨:哈尔滨工业大学,2013.
[9] Adam Milik. On Hardware Synthesis and Implementation of PLC Programs in FPGAs[J]. Microprocessors and Microsystems, 2016.
[10] 董烈超,周凤星,卢少武. 基于FPGA的交流伺服系统高速数据传输的设计[J]. 组合机床与自动化加工技术,2015(11):61-64.
(编辑 李秀敏)
Design of Auxiliary Control System Based on Open CNC System
ZHANG Hai-lang, SHU Zhi-bing, ZHENG Zhi-kai
(College of Electrical Engineering and Control Science, Nanjing Tech University, Nanjing 211816, China)
In order to assist the open CNC system to complete the peripheral port control and NC function instruction customization, a special auxiliary control system is designed on the basis of the study of the PLC control system. The system uses the virtual PLC technology, VC++ development platform, designs the open command parser and operation system. By defining binary encoding rules and directives resolution table , it achieve NC sub function instruction development. The system function is independent of the main control system function. It is proved by the practical application that the auxiliary system can control the port state according to the loading PLC program and successfully operate the NC sub function.
virtual PLC; port control; special functions; MFC message mapping; open CNC system
1001-2265(2017)01-0082-03
10.13462/j.cnki.mmtamt.2017.01.022
2016-04-14;
2016-05-08
2015年江苏省研究生培养创新工程(KYLX15_0783)
张海浪(1990—),男,河南洛阳人,南京工业大学硕士研究生,研究方向为运动控制、智能驱动及计算机技术,(E-mail)zhlwqq@163.com。
TH166;TG659
A