张小粉 刘 雯 白 瑀
(①咸阳职业技术学院机电(技师)学院,陕西 咸阳 712000;②西安工业大学机电工程学院,陕西 西安 710000)
编码作为一种信息对象标识方法,采用分类和符号数据描述事物特性。实施编码规范后会带来两个问题:(1)运行编码规范一段时间后,编码空间面临不足,而编码规范是预先设定的,难以修改;(2)码位过于专业化,只有专业人员才明白代码串的具体代表含义,信息标准化人员对编码认知不足,阻碍了管理。
柔性编码系统是代码结构可调、码段长度可变以及码段内容可扩充的编码系统。可视化柔性编码采用可视化技术定制编码规则,以避免上述问题。编码规范以可视化的表格或操作界面定制,形成软件可识别的编码规则文件,同时编制码位填写软件,专业人员在软件辅助指导下编码,效率高且不易出错,最后进行分发和更新。柔性编码系统则结合了计算机高效处理和手工处理灵活的优点,具有实际应用价值。
姜迎春叙述了传统人工编码的弊端,提出用树形目录编码方案解决物料编码,排除MIS系统实施的障碍[1]。郭安东开发种面向制造业信息化的分类编码系统,码位有顺序码、分类码、结构码和组合码4种,解决企业编码码位不等、码值不能得到充分利用问题[2]。郑建鑫在成组技术(GT)的基础上,研究零件编码的含义,提出零件编码及分类,应用到工装夹具制造中,保证工艺继承与优化[3]。张旭辉分析了面向多视图的柔性编码系统,支持5种码段的建立,驱动事物编码的自动生成[4]。何云峰提出柔性编码系统是产品数据管理系统的重要组成部分,实现通用可视化柔性编码规则系统[5]。王素提出适用于汽车制造企业的编码算法,并设计物料编码系统的模型以及与PDM系统的集成方案[6]。白瑀提出刀具可视化辅助编码系统以完成多品种小批量制造模式企业加工刀具管理[7]。以上研究成果推动编码技术从人工走向计算机辅助设计,并逐步成为ERP、PDM系统中信息集成的重要技术。
从目前ERP、PDM等自带的编码模块来看,其柔性编码效果不佳,其主要问题集中在:(1)代码结构设计比较复杂。代码结构指组成代码之间的码段的相互依赖关系,由于企业希望利用尽量短的代码长度表达大量编码信息,故在代码前几位设计很复杂的层次码,后面的代码内容依赖前面层次码的输入,根据排列组合原理,最终形成复杂的编码逻辑结构,目前依然是企业人员建立编码结构最大阻碍。(2)代码中码位内容设计经常需要调整。代码结构设计完成后需要对码位内容进行设计,此时由于编码规范还没有在企业实施,码位内容不能很精确地预设,需要在生产实践运行中完善和调整,由于生产的紧迫性,此时要求有快速响应的设计工具满足此需求。
在切削刀具企业产品应用中,可视化柔性编码系统有以下需求:
(1)码段的描述方式要简单直观,有交互图形界面,适合于非计算机编程知识人员使用(实用性)。
(2)可以直观、快速地建立编码规则(可视化),编码规则文件采用独立格式存储,而不是用数据库字段存储,可以脱离本机解析和分发(实用性)。
(3)编码结构与编码长度可以随时调整,码段的合成可以灵活配置(柔性)。
(4)码段之间的关系可以用逻辑规则加以描述(强大、灵活性)。
(5)各个码段的取值弹出相应界面或者在页面中切换,统一界面,方便用户操作(易操作性)。
(6)编码期间要有各个码段的提示,有编辑和删除输入字符的功能,编码完成能存入数据库(易操作性)。
(7)编码数据库需要有按照码段查询的功能,支持复合或多次查询(灵活性)。
(8)简单的编码库管理功能,包括修改、删除编码(完整性)。
通过以上分析和实际工厂调查,代码设计主要由信息化标准人员实现并发布代码编制规范,工程技术人员在实际生产过程中不断提出代码内容调整需求,信息化标准人员根据需求不断完善规范。代码使用方法以及设计、应用流程如图1~2。
数据库开发工具虽然能够方便地对码段数据进行存储,但是在编码规则知识表达上有很多缺陷,比如可扩充性差、难以定制通用解析器、不能脱机发布以及码段之间结构难以描述等,故柔性编码系统不适合采用数据库编程工具,只能采用高级语言如VC、Java等,采用强大的数据结构和灵活的定制界面来实现特定功能,其缺点是开发工作量较大。对比分析后,本文采用Visual C作为开发工具,涉及数据库相关编程采用ODBC标准接口,数据库选型Sqlite,操作则利用SQL语言实现。
采用XML文件描述代码结构与码段详细信息具有可扩充性。本文采用的XML格式如图3,其规则如下:
(1)编码规则的结构信息和码段内容信息都采用XML文件描述。图3a为编码规则的结构信息,图3b为码段内容详细信息。
(2)在编码规则的结构信息描述中,采用XML格式中标识“编码节点”的父节点、子节点分层结构对应编码规则分层结构(图3a)。
(3)码段内容详细信息存储在标识“编码节点”节点的属性里,特定内容存储在子节点标识“编码数据”里(图3b),其特点包括:①编码规则节点的特定内容存储在标识为“编码数据”的子节点里,不同类型的节点有不同的格式与数据。②采用枚举法描述码段信息,该码段可以兼容数字0~9,字母a~z,希腊字符、中文字符等,也便于以后修改和扩充码段信息。③采用层次结构来描述码段相邻位之间的关系,以“节点”为关键字的节点建立了层次关系,最顶层节点代表第1位,次层节点对应第2位,以此类推,这种描述方式的优点是实现了变长码段。④将码段每种信息都分成2个属性加以存储,分别是“字符”和“含义”,代表用户可以输入的字符和相关含义。
如图4所示,本文采用可视化建模实现编码结构设计。对于编码结构信息采用以下定义:
(1)开始节点。表示开始编码,用户从此起点进行编码,有向图中用空心圆圈标识。
(2)结束节点。表示结束编码,代码编制过程结束,有向图中用实心圆圈标识。
(3)码段节点。 包含有层次码段、层次码段、固定码段、流水码段等,有向图中用矩形方框标识。
(4)逻辑节点。代表对用户输入字符进行逻辑判断,有向图中用蓝色逻辑表达式标识。
(5)跳转节点。当编码过程比较复杂时,将子代码结构以包形式整体处理,有向图中用点划线矩形方框标识。
(6)跳转开始节点。子代码结构的开始节点,有向图中用绿色矩形方框标识。
(7)关联。即有向连线。
对于代码结构信息,采用图形方式交互式建立逻辑结构有向图,分为3步:
(1)用户在绘图区域绘制各种节点。
(2)填写节点内容。对于码段节点,输入码段名称与变量标识,对于逻辑节点,输入逻辑判断表达式。对于码段节点可以定义状态,用户输入字符即使该码段状态,变量标识是状态的标示符,参与逻辑判断。逻辑表达式中不带变量标识时允许采用简化表达,即省略“=”符号。当逻辑表达式中有变量标识时,利用状态变量参与逻辑判断,否则利用前驱节点状态进行逻辑判断。
(3)在节点之间进行关联。当对码段节点(前)与逻辑节点(后)进行关联时,表示对该码段中用户输入字符进行逻辑判断,根据使用习惯,逻辑判断值在右边,有向图中用虚线标识。当对码段节点或逻辑节点(前)与码段节点(后)进行关联时,表示对后面代码段进行编码,有向图中用带箭头连线标识。
图4建立起山高整体硬质合金刀具编码规范,包含产品类型、系列、槽型、直径、形状、长度、刀尖形状、刀杆类型、刃数、分屑槽和镀层11个码位信息,建立代码结构逻辑模型。
有限状态机被用作设计和实现事件驱动的程序内部复杂行为的组织原则。有限状态机包含事件、事件、状态、转移、动作与变量等内容。有限状态机的两种常见表示为:二维表与方向图。在方向图中,圆圈代表状态,箭头线代表转移,标以事件和动作。二维表的行和列代表事件和状态,单元格内包含动作和转移。这两种表示是等价的,分别侧重于设计的不同方面。
建立代码结构有向图后,需要对有向图进行解析以达到实用目的,本文结合有限状态机与有向图遍历将解析过程分成2步操作:
第1步,计算所有编码路径。其操作是利用对有向图拓扑排序。有向图的第1个节点为开始节点,最后节点为结束节点。按照以下步骤进行排序:
(1)从有向图中选择开始节点作为起始定点,作为没有前驱(即入度为0)的顶点并且输出。从有向图中删去该顶点,并且删去该顶点出发的所有向边。
(2)重复上述步骤,直到图中不再存在没有前趋的顶点为止。
(3)记录每次输出的顶点,形成路径。当步骤(1)中有多个顶点可选择时,形成一组新的路径。
第2步,编码路径判断。根据有向图节点的定义以及编码路径产生的过程可知,将用户输入作为编码节点的状态,可与逻辑节点进行判断,用户输入编码的过程就是最长可达路径。对每条路径进行以下操作并选择最长可达路径:
(1)选择路径中第1个码段节点作为当前节点进行用户输入,输入结果保存为该码段节点状态。
(2)提取当前节点的后续节点,并分为4种情况判断:①如果该码段后续节点是结束节点,则本次编码结束。顺序的码段节点状态就构成用户输入代码。②如果该码段后续节点是码段节点,则将后续码段节点作为当前节点进行用户输入,重复步骤(2)。③如果该码段节点后续节点为逻辑节点,将该码段节点状态与逻辑节点进行判断。如果判断结果为真,路径长度增加1,以后续节点作为当前节点重复本步骤。④如果该码段节点后续节点为跳转节点,则进入子有向图操作,直到退出子有向图为止。
从上述过程可知,从有向图产生编码路径与编码路径的选择都是递归的操作过程,当有向图中存在环时,上述操作可能失败,由于代码结构有线分类、面分类和混合分类组成,实践中不存在反复循环的分类编码过程,故有向图可以有效、可靠地表达代码结构逻辑。
根据以上叙述,实现软件运行界面如图5所示。
本文通过对编码需求的分析,将代码规范设计分成结构设计、码段内容设计两部分,利用XML文件格式实现可扩充的编码规范描述。通过将代码结构信息设计成各种图形节点和连线实现结构可视化建模,结合有限状态机理论和有向图的遍历算法实现有效、可靠的代码结构解析与用户输入代码过程相对应,实现了代码结构与代码内容的分离,为将代码设计分成2个阶段提供可能,避免了用户编写程序工作量与建立、测试编码规范过程,最大限度地实现了刀具编码规范柔性化。