XDPS功能模块手册(第1章-第2章) 点击:432 | 回复:0



世猫

    
  • 精华:3帖
  • 求助:9帖
  • 帖子:812帖 | 6279回
  • 年度积分:0
  • 历史总积分:28999
  • 注册:2011年10月16日
发表于:2013-05-08 00:41:44
楼主

XDPS功能模块手册(第1章-第2章)

第1章概述

1 概述

XDPS的软件功能分DPU和MMI,MMI又包括OPU、ENG、HSU等,DPU又有VDPU、专用GTW等。从客户(Client)/服务器(Server)观点来看,DPU、VDPU、专用GTW、HSU等又是服务器,其它为客户。所有软件功能可分解在不同的节点上实现。

XDPS的数据采集、报警检测、闭环控制、计算等必须在DPU上完成。DPU的计算控制可由工程师组态、修改和调试。XDPS提供了符合IEC 1131-3标准的控制算法语言,特别强化了其中的以功能块为基本的图形组态和调试语言,使组态和调试非常直观方便。

XDPS提供了各种常用的功能块,用户只需从这些功能块选出所需的,相互连接,就可实现DPU的图形组态,而无需了解编程语言。用户还可用XDPS的工具生成自已特殊的功能块。

2 DPU简介

DPU称为分布式处理单元,是XDPS的控制器。DPU是XDPS的一种功能,而并不具体到什么硬件。我们往往将只实现DPU功能的软硬件一起称为DPU,将运行于MMI站上的DPU功能称VDPU,用于与外部设备接口的VDPU称为GTW。

每个DPU至少有一个节点号对应。DPU通过实时网或内部路由器与其它DPU和MMI连接,实时网可以是冗余的,可以采用不同协议。DPU可以通过I/O驱动与不同的I/O硬件连接。但有的DPU(如只实现计算统计功能的DPU)可以没有直接的I/O连接,而是仅通过实时网与其它DPU交换数据。

DPU可以被冗余配置。XDPS系统规定,冗余配置DPU的节点号占用1~20号和61~80号,相应的冗余DPU为21~40和81~100,即相差20。而DPU以小号码对外标识。如3号与23号DPU被认为是互为冗余的DPU,在发操作指令时,指明3号、23号也会接收。对组态指令,则必须指明3号还是23号。

MMI的号取1~120中任一个号,但一般取在41~60或101~120之间。单DPU或VDPU取1~120中任一号。

DPU运行后有三种状态,初始态、跟踪态和主控态。其中跟踪态与主控态,DPU软件会根据自已的CPU状态、I/O状态和网络状态作相应的自动切换,以便在主控机故障时,跟踪机可马上代替主控机正常工作。另外,工程师也可使用调试工具请求切换DPU。DPU刚启动时或组态的算法与主控DPU不同时,进入初始态,自检中以黄色标识。

DPU内部的数据分为DPU总体描述、页和功能块对象。总体描述包含了DPU的说明信息和其中所有的页数。每个页对象具有指定的执行周期。而功能块对象只能存在于页中,同页中的功能块具有相同的计算周期。

页和功能块分别用页号和功能块号命名。页和功能块具有执行序号,执行序号表达了它们在DPU中执行的次序。具有较小执行序号的页和功能块先于具有较大执行序号的页和功能块执行。用户可用在线调试工具更改页和块的执行序号,以调整执行次序。但用户不可在线更改页号和功能块号。

3 DPU组态过程

XDPS的DPU组态工具有两个组态方式,离线和在线。

离线方式时,用户实质上仅打开一个数据文件,进行页、块功能的编辑、连接块的输入输出,然后存入这个数据文件。

在线组态方式时,用户必须先向被组态DPU登录,获得相关权限之后,才能对DPU读写。用户可将离线生成的组态文件下装到DPU,也可将DPU运行的组态内容上装上来,进行写文件、修改和调试。用户完全可以以在线方式对DPU页和功能块执行修改、删除、插入等等操作,同时可以看到DPU中的运行数据,进行直观的在线调试。结束之后,用户须退出登录。

4 页

页(Page),常用Pg或P表示。

页是DPU组态软件的一个基本对象。功能块必须存在于页中。页的实例中包含页号(名称)、执行序号、页状态、执行周期、最后修改日期时间和页的描述等属性,还包含了功能块对象实例。

页状态记录了页的工作状态,如是否被Disable等。页状态只能被在线组态工具读取和修改。

执行周期表示了页被计算的周期。周期通常取50ms、100ms、200ms、250ms、500ms、1s、2s、5s和0。0表示本页不被周期计算,可能由特殊功能块按用户定义的方式调用计算。页在计算时按页执行序号排序执行。

页描述记录了本页的功能、注释等与控制无关的信息。

5 功能块

功能块(Function Block),常用FB或B来表示。XDPS的功能块附合IEC-1131-3的标准。

功能块是XDPS中能被组态修改的最小对象。所有功能都需用功能块来实现。

功能块用户定义中包括三项内容:输出、输入、参数。功能块实例化后,还应包含功能块位号(即名称)、执行序号、状态、计算中间量。XDPS以对象方式将所有数据封装在一起。

功能块之间传递的数据有三种类型:布尔量(1字节)、浮点数(IEEE标准4字节)和长整型(4字节)。但参数、中间量、状态等不受此限。浮点数与长整型统称模拟量,它们可以相互转递,功能块会自动转换,但用户需注意转换引起的精度损失。布尔量只能传递给布尔变量。

功能块在计算时,输出量、状态、中间量都会更新,其它功能块可以取得其输出量的值,通过特殊功能块TQ也可间接取得其状态(转为n个布尔量),但不能取得其中间量的值。输出量、状态、中间量的值不能被其它功能块改变,只能在其本身计算时有可能改变。

输出量可以为浮点、长整型、布尔量中的任何一种;状态为一个WORD,其中记录了本功能块处于Enable还是Disable状态(Disable时功能块不再被计算)、本功能块的输入是否有坏点而使本块输出变成不可信、本功能块接收的点是否超时(用于网络和I/O模块);中间量可以是任何软件允许的类型,与用户是无关的,它记录了功能块的计算状态。

每个功能块都有一个状态字,描述了本功能块在运行中的状态。功能块的状态可按用户定义的方式传递。除一些特殊的功能块之外,所有的功能块都可定义为不传递、OR传递、AND传递。如一个功能块有3个输入,则这3个输入所属功能块的品质会以用户定义的方式传递到这个功能块的品质上,而且空脚不参与品质传递。传递方式定义在方式字中,0—不传递,1—OR传递,2—AND传递,缺省为OR传递。

在功能块被初始化时,输出量、状态、中间量都会被设置为初值。其中输出量的初值是用户可定义的。

参数定义了功能块行为的方式或范围。参数可以是多种数据类型,用户不必关心。在用户组态和在线修改时,用户可定义修改参数值。参数一经设置,不会改变。也就是说参数是用户设置的,不会被功能块本身改变。

功能块的输入定义可以是一个指针,也可以是一个立即常数。说它是一种定义,表明是用户设置的,计算时不会被改变。如定义为一个指针时,指向其它或本功能块的输出,以功能块号B、哪个输出I的形式表示。指向的数据只能为浮点、长整型、布尔型三种类型。布尔型的输出只能连到布尔型的输入上,浮点或长整型输出只能连到浮点或长整型的输入上。同页内用B.I指针表示,P隐含为本页。B.I为全1时为NULL指针,表示本输入点无可取数据。页间引用必须通过特定的功能块实现,它们是XPgAI和XPgDI,被引用的必须为XPgAO,XPgDO或其它上网模块。

输入也可被定义为一个立即常数,立即常数也必须为浮点、长整型、布尔型数据中的一种。这样XDPS任何一个功能块的输入可被连接到常数上,使变量变为参数。这个功能有很大灵活性,可变限的功能块都可用此特性实现。

简单地说,输入可以是指针、NULL(空指针)、立即常数。

功能块可以分为上下网I/O模块、硬件I/O模块、页间I/O模块、模拟函数、选择比较器、控制算法、逻辑运算、逻辑控制算法、操作器等等。详见具体说明。

描述中用NULL表示空指针,内部表示用<65535.65535>。布尔量在算法模块上用1/0表示真/假,内部用T/F表示真/假。

第2章XDPS实时网I/O功能块

1 模拟量下网功能块XNETAI,  ID=100

图形表示:

无显式输入   XNETAI    Y─→


标记说明:

标记名数据类型缺省值描述

输出       Yfloat0.0取网上指定点的模拟量

参数      GIDwordFFFFH模拟点全局ID

参数       Tword500超时周期, 取10~36000 (x10ms)


算法说明:

本功能块将其它DPU上网的模拟点取下,存放在Y中,供其它功能块读取。

如果网上点为坏点,则本模块状态为坏状态。 如在指定超时时间内未收到点值,则本模块状态为超时状态并置为坏点。后续模块可使用这些状态作为坏点标志。


2 开关量下网功能块 XNETDI,  ID=101

图形表示:

无显式输入   XNETDI    D─→


标记说明:

标记名数据类型缺省值描述

输出       DboolF取网上指定点的开关量

参数      GIDwordFFFFH开关点全局ID

参数       Tword500超时周期, 取10~36000 (x10ms)


算法描述:

本功能块将其它DPU上网的开关量点取下,存放在D中,供其它功能块读取。

如果网上点为坏点,则本模块状态为坏状态。 如在指定超时时间内未收到点值,则本模块状态为超时状态并置为坏点。后续模块可使用这些状态作为坏点标志。


3 模拟量上网功能块 XNETAO,  ID=102

图形表示:

─→X   XNETAO   无显式输出


标记说明:

标记名数据类型缺省值描述

输入     XfloatNull以B.I方式表示的指针,或是立即浮点数/长整形

参数   GIDwordFFFFH模拟点全局ID

参数    SHword0低字节为是否被其它DPU共享标记

高字节为报警复归时不自动确认报警标记

0=不共享且报警复归时不自动确认

1=共享且报警复归时不自动确认

256=不共享且报警复归时自动确认

257=共享且报警复归时自动确认

参数     Tword1s上网周期,取 0.5,1,2,5,10s(内部x100ms),同页周期

参数    HHfloat0.0报警高高限,如HH==LL,高高低低限对不存在

参数     Hfloat0.0报警高限,如H==L,高低限对不存在

参数     Lfloat0.0报警低限,应有HH≥H≥L≥LL  

参数    LLfloat0.0报警低低限

参数    DBfloat0.0报警死区,报警恢复时加入DB  

参数 Phh,Mhhbyte,byte0, 5H高高报警优先级和缺省记录方式

参数  Ph,Mhbyte,byte0, 5H高报警优先级和缺省记录方式

参数  Pl,Mlbyte,byte0, 5H低报警优先级和缺省记录方式

参数 Pll,Mllbyte,byte0, 5H低低报警优先级和缺省记录方式

参数     Rfloat0.0速率报警限,如==0.0,速率报警限不存在

参数  Pr,Mrbyte,byte0, 5H速率报警优先级和缺省记录方式

参数   DB1float0.0增量重复报警值,0.0=无此功能

参数   DB2float0.0减量重复报警值,0.0=无此功能

参数    T1word0延迟重复报警时间,0~36000  (秒),0=无此功能


算法说明:

本功能块将其它功能块的浮点和长整形变量广播到XPDS实时网上去,并作报警检查。

如果前续功能块为坏状态,则输出为坏全局点。上网值等于输入值。


其中:

报警优先级:取值0~5的数字,0为最低,5为最高。

缺省记录方式: b7=1时,本报警限不存在、不检查。

增量和减量重复报警是指超过最外报警限DB1或DB2时,再发一次报警信息。

延迟重复报警是指报警维持时间大于T1时,再发一次报警信息。

4 开关量上网功能块 XNETDO,  ID=103

图形表示:

─→Z   XNETDO   无显式输出


标记说明:

标记名数据类型缺省值描述

输入       ZboolNull以B.I方式表示的指针,或是立即布尔数

参数      GIDwordFFFFH开关全局ID

参数      SHword0低字节为是否被其它DPU共享标记

高字节为报警复归时不自动确认报警标记

0=不共享且报警复归时不自动确认

1=共享且报警复归时不自动确认

256=不共享且报警复归时自动确认

257=共享且报警复归时自动确认

参数       Tword1s上网周期,取0.5,1,2,5,10s(内部x100ms) ,同页周期

参数      AAword0报警定义,0=无报警,1=0报警,2=1报警

参数     P,Mbyte,byte0, 5H报警优先级和缺省记录方式

参数      T1word0延迟重复报警时间,0~36000 (秒), 0=无此功能


算法说明:

本功能块将其它功能块的布尔变量广播到XPDS实时网上去,并作报警检查。

如果前续功能块为坏状态,则输出为坏全局点。上网值等于输入值。

其中:

报警优先级:取值0~5的数字,0为最低,5为最高。

缺省记录方式: b7=1时,本报警限不存在、不检查。

延迟重复报警是指警维持时间大于T1时,再发一次报警信息。

状态字中 Alarm On/Off是针对所有报警限的。


5 模拟量输入功能块 XAI,  ID=104

图形表示:

补偿点─→X        XAI       Y─→


标记说明:

标记名数据类型缺省值描述

输出     Yfloat0.0取指定卡件模入的工程量

输入     XfloatNull补偿源测点,本点只在Cvt=CT类时有效

参数    AddrwordNullI/O地址  (站号,板号,通道号)    

参数    Cvtword0输入转换类型,缺省=线性

参数  MaxADword3840与量程上限对应的AD值

参数  MinADword768与量程下限对应的AD值

参数     Avfloat0.0RTD和TC时板的放大倍数

参数    R0

        或I0float80.0电桥式RTD采样电路时为电桥的标准电阻;

恒流源式RTD采样电路时为恒流源电流;

参数   MaxYfloat100.0量程上限

参数   MinYfloat0.0量程上限

参数   Biasfloat0.0零偏,用于较正零点,以工程量值表示  

参数    Fltfloat0.0低通滤波的时间常数,单位秒。0.0=无滤波功能  

参数   按序捆绑XNetAO的所有参数  


AV—  缺省值:对PT100为20;  对CU50/CU53为40;   对TC为200。

R0--  缺省值:对CU50/CU53为40;  对PT100为80。

按序捆绑XnetAO的所有参数指XnetAO从GID到T1的22个参数。

注:Cvt 输入转换类型

0 - 线性: K(n)= (AD(n)-MinAD)/(MaxAD-MinAD); R0为小信号切除限值,当K(n)的绝对值小于R0时,K(n)=0;

           Y(n) = (MaxY-MinY)*K(n)+MinY; 参数Av无意义。

    0~10V, 0~5V, 1~5V, 0~10mA, 4~20mA,-5V~+5V, 测速值(=AD值)等都用此转换类型实现。定义时需对I/O卡的AD范围有一定了解。

1 - 线性开方:K(n)= (AD(n)-MinAD)/(MaxAD-MinAD); R0为小信号切除限值,当K(n)的绝对值小于R0时,K(n)=0;

              Y(n) = (MaxY-MinY)*SQR(K(n))+MinY; 参数Av无意义。

              如被开方值K(n)<0.0,则输出Y(n)=0.0,该输出点为坏点。

2 - 直接浮点数转换:Y(n) = Av*输入的浮点数;Av为比例系数,缺省(Av=0)为1。参数MaxAD,、MinAD、R0不用定义。 用于IEEE单精度浮点输入的场合。

3 -16位带符号AD值直接转换:Y(n) = Av*AD(n);Av为比例系数,缺省(Av=0)为1。参数MaxAD,、MinAD、R0不用定义。

4 -32位AD值二进制不变转换:Y(n) = Av*f32;Av为比例系数,缺省(Av=0)为1。参数MaxAD,、MinAD、R0不用定义。用于交流采样卡中浮点数f32由相邻两个16位通道拼接而成的输入,低在前,高在后。

5 -16位带符号AD值倒数转换:Y(n) = Av/AD(n);Av为比例系数,缺省(Av=0)为1。参数MaxAD,、MinAD、R0不用定义。


10~19 -RTD热电阻转换,具体定义了:

10=Cu50热电阻,       11=Cu50热电阻(3mA恒流源),

12= Pt100热电阻,     13=Pt100热电阻(3mA恒流源),

14= Pt10热电阻,      15=Pt10热电阻(3mA恒流源),  

16=Cu53热电阻,       17=Cu53热电阻(3mA恒流源),

18=BA1热电阻,        19=BA1热电阻(3mA恒流源),


20~25 -CT热电偶转换,具体定义了:

20=K(EU)热电偶,,21= E(EA)热电偶,22=T热电偶,23=B热电偶

24=K(EU2)热电偶,,25=s热电偶

对于RTD和TC,必须定义量程限和与量程对应的MaxAD和MinAD值。若MaxAD=MinAD=0,DPU将采用缺省的XDPS卡件的特定转换,此时量程限不参与转换,只用于判别越限故障;参数Av如填0.0,则DPU内部在Pt100时Av=20倍,在Cu50/Cu53时取Av=40倍,在TC时Av=200倍;其它类型Av=1,作为输入的比例系数;参数R0(或称 I0),只用于RTD的场合,电桥时为桥臂电阻;恒流源时为恒流源电流。


算法说明:

本功能块从一个I/O地址取得一个A/D值,进行转换,将工程值结果存放在Y中,供其它功能块读取。如果I/O通道有故障,则本模块状态为坏状态。 后续模块可使用这些状态作为坏点标志。

转换时,如为TC,则作相应的冷端补偿;再在工程值加上Bias;所有类型在工程转换时,工程值限制在 (MinY-量程*10%) 到 (MaxY+量程*10%)之间,超越或达到此限的,本功能块状态将标识为溢出OFW,品质为Bad。转换后,算法再进行低通滤波(如定义的话),滤波的传递函数为1/(1+TS),T即为参数Flt。滤波后,进行捆绑的XNetAO处理。

该输入从状态好点变为坏点后,输出值保持状态好时的值。

参数Flt<0时,对RTD和TC类型,系统提供以下功能,此时无滤波功能。

RTD: Flt=-1时,当输入X为温度值时,输出为该温度对应的该RTD的电阻值;

     Flt=-2时,当输入X为电阻值时,输出为该RTD的电阻值对应的温度值;

     Flt=-3时,当输入X为温度值时,输出为对应信号的MV值,根据MV值与AD值的线性关系,可求出该RTD信号的温度与AD值的对应关系。

     Flt=-4时,输入X为空,输出为实际信号的电阻值,而不是通常测量的温度值;

MV :Flt=-1时,当输入X为温度值时,输出为该温度对应的MV值;

    Flt=-2时,当输入X为MV值时,输出为MV值对应的温度值。


6 开关量输入功能块 XDI,  ID=105

图形表示:

无显式输入   XDI    D─→


标记说明:

标记名数据类型缺省值描述

输出     DboolF取指定卡件的开关状态

参数    AddrwordNullI/O地址  (站号,板号,通道号)    

参数    Cvtword0输入方式,0=不求反;   1=求反;

         2=SOE不求反;3=SOE求反

参数    TD_Onword00->1,需延迟的周期数

参数    TD_Offword01->0,需延迟的周期数

参数    ……按序捆绑XNetDO的所有参数

按序捆绑XNetDO的所有参数,指XnetDO从GID到T1的7个参数。


算法说明:

本功能块从一个XDPS I/O地址取得一个bit,按是否取反定义Cvt,转换为bool值,再进行TD_On或TD_Off滤波,将结果存放在D中,供其它功能块读取。 最后,进行捆绑的XNetDO处理。

如果I/O通道有故障,则本模块状态为坏状态。 后续模块可使用这些状态作为坏点标志。

当该点为SOE时,除了通常DI扫描外,还从I/O驱动的SOE队列读取数据。


7 模拟量输出功能块 XAO,  ID=106

图形表示:

─→X      XAO    无显式输出


标记说明:

标记名数据类型缺省值描述

输入     Xfloat0.0以B.I方式表示的指针,或是立即浮点数

参数    AddrwordNullI/O地址  (站号,板号,通道号)    

参数    Cvtword0转换类型,0=输出AD,1=输出浮点数

参数  MaxADword0FFFH与量程上限对应的AD值(20mA)

参数  MinADword0333H与量程下限对应的AD值(4mA)

参数   MaxXfloat100.0量程上限

参数   MinXfloat0.0量程下限

参数    Resword0保留=0,用于设置I/O卡失电保护方式

参数    ……按序捆绑XNetAO的所有参数

按序捆绑XNetAO的所有参数,指从XnetAO的GID到T1的22个参数。


算法描述:

本功能块将其它功能块的模拟点送到XDPS AO输出端子上。最后,进行捆绑的XNetAO处理。

在Cvt=0时,输出AD(n) =(X(n)-MinX)*(MaxAD-MinAD)/(MaxX-MinX)+MinAD

在Cvt=1时,输出 = X(n),本类型主要用于通讯驱动场合,向其它系统直接输出IEEE单精度浮点数。



8 开关量输出功能块 XDO,  ID=107

图形表示:

─→Z      XDO    无显式输出


标记说明:

标记名数据类型缺省值描述

输入     ZboolF以B.I方式表示的指针,或是立即布尔数

参数    AddrwordNullI/O地址  (站号,板号,通道号)    

参数    Cvtword0输出方式:=0,不求反输出,=1求反输出

参数    Resword0保留=0,用于设置I/O卡失电保护方式

参数    ……按序捆绑XNetDO的所有参数

按序捆绑XNetDO的所有参数,指从XnetDO的GID到T1的7个参数。


算法说明:

本功能块将其它功能块的布尔点送到XDPS DO输出端子上。最后,进行捆绑的XNetDO处理。如果前续功能块为坏状态,则本功能块不输出bool值。


9 脉冲量输入功能块 XPI,  ID=108

图形表示:

─→Rst       XPI      Y─→



标记说明:

标记名数据类型缺省值描述

输出     Yfloat0.0脉冲数输出

输入     RstboolF复位开关量,以B.I方式表示的指针,或是立即数

参数    AddrwordNull硬件I/O地址  (站号,板号,通道号)    

参数     Kfloat1.0系数。当k=0.0时,为增量型PI。

参数   MaxADlongFFFFH硬件寄存器满度值    

参数    …… 按序捆绑XNetAO的所有参数

按序捆绑XNetAO的所有参数,指从XnetAO的GID到T1的22个参数。


算法说明:

本功能块从一个XDPS I/O地址取得一个脉冲计数值,转换为long值,将结果存放在Y中,供其它功能块读取。 最后,进行捆绑的XNetAO处理。

输入开关量Rst由0变到1时,Y(n)=0.0。

在k=0时,输出 Y(n) =((AD(n)-AD(n-1)) mod MaxAD)

在k!=0时,输出 Y(n) =Y(n-1) +((AD(n)-AD(n-1)) mod MaxAD)×k

DPU刚启动时,需跟踪一次AD值。

如果I/O通道有故障,则本模块状态为坏状态。 后续模块可使用这些状态作为坏点标志。



10 页间模拟量输入功能块 XPgAI,  ID=110

图形表示:

无显式输入  XPgAI   Y─→


标记说明:

标记名数据类型缺省值描述

输出     Yfloat0.0取指定页号功能块号模拟量的值

参数   PagewordFFFFH被引用页的页号    

参数   BlockwordFFFFH被引用的XPgAO的功能块号


算法说明:

本功能块从本DPU中另外页的 XPgAO、XAI、XAO、XPI其中之一取得模拟值,将结果存放在Y中,供本页其它功能块读取。

本功能块传递被引用的功能块的状态。如被引用模块不存在或被引用模块不是上述4个模块之一,则本功能块状态为坏,输出保持不变。


11 页间开关量输入功能块 XPgDI,  ID=111

图形表示:

无显式输入  XPgDI   D─→


标记说明:

标记名数据类型缺省值描述

输出     DboolF取指定页号功能块号开关量的值

参数   PagewordFFFFH被引用页的页号    

参数   BlockwordFFFFH被引用的XPgDO的功能块号


算法说明:

本功能块从本DPU中另外一页的 XPgDo、XDI、XDO 其中之一取得开关值,将结果存放在D中,供本页其它功能块读取。

本功能块传递被引用的功能块的状态。如被引用模块不存在或被引用模块不是上述3个模块之一,则本功能块状态为坏,输出保持不变。


12 页间模拟量输出功能块 XPgAO,  ID=112

图形表示:

─→X  XPgAO  无显式输出


标记说明:

标记名数据类型缺省值描述

输入     XfloatNull以B.I方式表示的指针,或是立即浮点数


算法说明:

本功能块将本页的模拟量存在本块中,供本DPU中另外一页的XPgAI读取。


13 页间开关量输出功能块 XPgDO,  ID=113

图形表示:

─→Z  XPgDO  无显式输出


标记说明:

标记名数据类型缺省值描述

输入     ZboolNull以B.I方式表示的指针,或是立即浮点数


算法说明:

本功能块将本页的开关量存在本块中,供本DPU中另外一页的XPgDI读取。  




热门招聘
相关主题

官方公众号

智造工程师