Python简介
Python是一种动态的面向对象语言。Python语言简单易学,网上的资源也很多,对它不了解的朋友在这里需要花些时间去学习一下。有编程基础的人,两天应该就可以写程序了。在Tribon系统中,Python语言被赋予了特殊的使命,它是调用Vitesse API的唯一语言。Tribon自带了Python安装文件,Tribon M3所带的版本是Python 2.3.3, wxPython 2.4.2.4。可以使用下面的链接下载:
Vitesse程序环境配置
- 在d065文件中设置两个Tribon环境变量,以下是默认的例子:
SB_PYTHON C:\Tribon\M3\Vitesse\
SBB_TRIGDIR C:\Tribon\M3\Vitesse\Trigger\
- 在Windows系统环境变量中修改PythonPath系统环境变量,以下是默认的例子:
C:\Tribon\M3\Vitesse;C:\Tribon\M3\Vitesse\Basic_Design;C:\Tribon\M3\Vitesse\Lib;C:\Tribon\M3\bin\python;C:\python23;C:\Tribon\M3\Vitesse
在Vitesse程序中导入kcs_dex,即可调用以下API:
extract(dexstring)
Perform data extraction
get_box()Get box
get_commandstring()Get Data Extraction command string
get_indexedreal(index)Get value from real vector
get_int()Get integer value
get_real()Get real value
get_reavec2d()Get 2D real vector
get_reavec3d()Get 3D real vector
get_string()Get string
next_result()Get next result
extract()是执行数据抽取命令。
next_result() 用于移到下一个结果,并产生一个返回值,根据不同的返回值,可以判断出下一个数据的数据类型。以下是不同的返回值代表的数据类型:
= 0 empty tree part.
= 1 integer type result
= 2 real value type result.
= 3 string type result.
= 4 real vector 3D type result
= 5 box type result
= 6 real vector 2D type
>10 real vector nD type. Subtracting 10 from the result gives the number of elements in the vector.
= -1 End of result tree.
其他的命令是根据不同的数据类型来获得数据。一段典型的数据抽取代码如下:
import kcs_dex st = "HULL.BLOCK(*).NAME" if kcs_dex.extract(st) == 0: #抽取是否成功 dataType = kcs_dex.next_result() while dataType >= 0: #是否有能被抽取的数据 if dataType == 3 #是否为字符串类型 block = kcs_dex.get_string() #获得block名 dataType = kcs_dex.next_result() #移到下一个结果
代码的注释出的语句是执行数据抽取操作的五个关键步骤。Tribon自带的COM对象数据抽取例子中,使用VBA和C++语言进行数据抽取,也是要经历这几个过程。看了上面的代码,我们不禁怀念SX700交互式数据抽取,比起这么多代码,它是那样的简单。难道Vitesse数据抽取就不能够像SX700一样简单么?当然可以,而且Tribon已经为我们准备好了。我们甚至可以通过自己的努力让Vitesse数据抽取变得比SX700更简单。如何做,此处暂且不表。我们先来看如何让Vitesse变简单。
大家是否有这样的疑虑:Python既然是动态语言,为什么在数据抽取的时候还要考虑数据类型呢?答案是Python不需要考虑数据类型,API需要。所以只要使用Python对Vitesse API进行封装,就能体现出Python的动态特性来。Tribon安装目录X:\Tribon\M3\Vitesse下的aadAssDataExtraction.py就实现了封装。aadAssDataExtraction模块中有一个名为DataExtraction的类,这个类的ExtractData方法(注1)就是实现的关键部分,我将它列出来:
def ExtractData(self,Stat): self.DataNumber=0 self.DataType=0 self.DataResult=[] self.DataStat=Stat try: res = kcs_dex.extract(self.DataStat) if res == kcs_util.success(): type=1 while (type>=0): type = kcs_dex.next_result() if type == 1: self.DataNumber=self.DataNumber+1 self.DataResult.append(kcs_dex.get_int()) elif type == 2: self.DataNumber=self.DataNumber+1 self.DataResult.append(kcs_dex.get_real()) elif type == 3: self.DataResult.append(kcs_dex.get_string()) self.DataNumber=self.DataNumber+1 elif type == 4: self.DataResult.append(kcs_dex.get_reavec3d()) self.DataNumber=self.DataNumber+1 elif type == 5: self.DataResult.append(kcs_dex.get_box()) self.DataNumber=self.DataNumber+1 elif type == 6: self.DataResult.append(kcs_dex.get_reavec2d()) self.DataNumber=self.DataNumber+1 elif type >10: for j in range(type-10): self.DataResult.append(kcs_dex.get_indexedreal(j)) self.DataNumber=self.DataNumber+1 if type>0: self.DataType=type except: print 'Extract ' + str(res) print 'Statement=', self.DataStat print 'Data Extraction Error....', kcs_dex.error
这段代码实现了无论数据抽取的结果是什么数据类型,这些数据都会被放入self.DataResult这个列表属性中,这样进行数据抽取的时候就无需关心数据类型了。Tribon自己的代码有调用这个类实现数据抽取的例子,文件名是:aadAssExtractData.py,同样位于X:\Tribon\M3\Vitesse文件夹下。我截取一段代码:
st="STRUCT.ITEM('"+nam+"')" tdm_data=aadAssDataExtraction.DataExtraction(st+".TDM_INFORMATION.STATUS_MANUFACT") if len(tdm_data.DataResult)>0: status=tdm_data.DataResult[0]
与上面典型的数据抽取比较,我们可以看到现在的Vitesse数据抽取只需要拼接字符串st,形成一句数据抽取命令,然后传入数据抽取对象中,就能获得数据,与SX700数据抽取一样了。
注1:在Python中,py文件称之为模块,class标识符后面定义的名称称之为类,类中的函数称之为方法。