Tribon Vitesse开发教程(二)

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标识符后面定义的名称称之为类,类中的函数称之为方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值