全球FlexSim系统仿真中文论坛

标题: flexsim代码区起始部位代码解析 [打印本页]

作者: zorsite    时间: 2013-9-12 13:51
标题: flexsim代码区起始部位代码解析
本帖最后由 zorsite 于 2013-9-12 20:14 编辑 8 V" [! M2 m; W$ }: U

# y6 m" K4 Y/ }, N$ ?$ p在触发器中常会看到顶端已经自动写好的一些代码,通常如下: 
  1. treenode current = ownerobject(c);
    $ a) W4 P: Q% X0 t
  2. treenode item = parnode(1);0 b, e9 X8 m! j0 D; R4 }
  3. int port = parval(2);
复制代码
 
# w/ \/ |$ s% W) ^# I' N# P$ I4 X意思大概是声明了三个变量,current表示当前实体,item表示当前临时实体,port表示端口。9 r2 ~, i7 ]/ w1 `
在接下来的代码中可以直接引用这三个已经声明好了的变量。& Z/ V' M0 n3 g/ Y: f* K9 X
对于初学者来说,这段神奇的文字就像各种分布一样让人不解其意。
& c+ |- ^5 r( K下面是我自己的一点不成熟的理解,有些地方也不明白,可能理解有误的地方,请大家帮忙释疑、纠正、完善。7 y5 P$ T! O, c
5 c7 D! ~% q6 O5 Q# C" f* y- J7 M
treenode9 j" g7 M/ g2 v( n+ s! e/ h
Variable Types/ x& u- |' ^" W$ C& ?9 `- C
Flexsim uses just four variable types. Each of the four types can also be used in an array structure. The following explains each of these types.) q1 g% ?+ O$ U5 I2 v
Type Description
" b9 F- Z' Y5 Q9 P3 b' S) u! Bint  integer type  
* t# p/ {8 m0 @4 Jdouble  double precision floating point type  " u4 F- p+ U# N! V" U, U/ c
string  text string  1 ^# S1 z0 P1 N8 x' o% @
treenode  reference to a Flexsim node or object  % x% Q& f1 K' P- s$ _' _
flexsim中有4种类型的变量:int,double,string,treenode。treenode指的是flexsim中的一个节点或者一个实体。
2 t) r- C/ ~% S5 S
$ `& `: F/ u0 @5 B& Gcurrent<no parentheses>
& g9 N; d( W3 vDescription:  
  Q1 i5 k0 ?8 t. _Deprecated. This should not be used as a special command with the setcurrent command anymore. Instead, declare a treenode variable type as current, then use current in your code as any other variable type.
* B, E; I  ^! {. D3 o2 ^不建议使用。current和setcurrent不应再被用作命令。如果需要设置某实体为当前实体,应先声明一个名为current的树节点型变量,然后在代码中引用该变量。  ~; \" m3 s! n6 @1 l* R, X  a
不解:2 ^6 V4 w5 t3 T$ c6 h2 `3 e
1.used...with....是什么意思?# ]0 d4 k+ m) D! a4 l
以前current是必须和setcurrent一起使用的吗?  ]! |4 Q: P% s
  S2 a4 y) u! \7 w! Q! z, X' e  a
2.as any other variable type是什么意思?
9 a, {0 x+ s* L0 B9 u前面说要声明一个名为current的树结点型变量,然后在代码中可以把current作为任意类型的变量使用?可以用为string型变量吗?

  z$ x+ U% c$ l/ W: AExample: , H& u5 |# M- G" c. D
  1. treenode current = rank(model(),3);
    4 `  m/ I. r3 ?0 N1 z% Y; w8 e5 L
  2. pt(getname(current));
复制代码
 : Y* ?" F4 g! S
This sets the object that is ranked 3 in the model to current and prints its name to the output console.  ' W" p. ?' L' r# z; K' t% b
/ a8 n# t( f4 m( i5 z1 I& c3 B

5 r* f% M# ?, v- {/ Zownerobject(node thenode)
  {/ ^7 T: i  c" E7 T- g
Description:# W; f: F) }1 f" k5 U# m
This command returns the node with object data attached to it that is the start of the sub-tree that thenode is in. In other words, it returns the object node that contains thenode.
2 }1 [1 I2 a% |3 S; J8 P2 OThis command is used in most code fields and trigger fields to set the access variable current. In these fields, c references the node that contains the code, and ownerobject(c) references the object that "owns" that node.* S5 B/ [1 G0 P' W
该函数返回参数节点所在的实体。
& r. X3 A) _8 M) i- N8 ~4 Z+ C8 U
Example:
) Q: G$ N- o& P+ a, H
  1. string objname = getname(ownerobject(c));
复制代码
 6 O: A/ e! {, K1 C9 O$ j! b" G
This sets objname to the name of the object that contains the node referenced by c. The c usually refers to the node where the code is being written.   
  1. treenode current = ownerobject(c);
复制代码
 
0 ^- f+ g" h" r# w. [* v, dThis example is present in most code fields in Flexsim, and retrieves access to the "current" object.- l! I& L. G$ V, {
这段代码出现在大多数flexsim代码的开头部位,指的是“当前”实体,就是代码所在实体。
0 w% @6 i3 y6 H/ M# E) s8 K! V6 h! J/ C1 P0 u4 i8 l6 u
c<no parentheses>. t. F0 [9 `1 [5 c
Description:  
, s, y1 Q+ T" P( w, f+ X$ R( iThis command is used to reference the active node during a function's execution.
- I! R- g* N6 e7 VIf the function was called using nodefunction(), c returns a reference to the node on which the function is written.8 H% A0 e$ b$ o/ f4 v' W, ], p
If the function is an event function, c returns a reference to the object that contains the event. , `9 G4 k5 ^3 {3 Q" x2 n* v
c在函数执行的过程中指向活动实体。
9 h6 n+ o# g9 g* l* E% I" m如果是节点型函数,c指向函数所在实体,
8 g& E8 e8 y! O$ y如果是事件型函数,c指向事件所在实体。0 D$ b" A4 H. Q) S" Q- I% _
Example: 
  1. treenode current = ownerobject(c);
复制代码
 : O6 ^( B2 `- n) `3 Q6 l- w0 v

8 W$ k, g' z( T7 f( U( y  ^9 hsetcurrent(thing)
. B( ^2 B* Z( r- j! I8 m5 h
Description: Deprecated. Do not use. + g& [0 e) {4 Z# K: [; g  F
Example: /4 t" k- U: ^0 m% U) M! U
此命令不再使用。
" L+ c( a* O) ^: \+ ?7 C9 i, [# M3 R3 t
item<no parentheses>
. {0 @4 J) @/ E0 m( D+ Y) Z
Description:  
$ M) e2 B) m9 [' N6 X/ G+ }Deprecated. This should not be used as a special command with the setitem command anymore. Instead, declare a treenode variable type as item, then use item in your code as any other variable type.
+ \2 ?4 L8 Y0 B; @' R不要再使用item和setitem命令了。如果需要指向某一临时实体,应该先声明一个名为item的树节点型变量,然后在代码中引用该变量。
3 y! Q/ J7 i& [+ u0 L$ xExample: 
  1. treenode item = rank(model(),3);/ U0 B& p8 S( q9 t8 r; n
  2. pt(getname(item));
复制代码
 & Y$ W, q  ~' a) O' ^
This sets the object that is ranked 3 in the model to item and prints its name to the output console.  * V9 j" ]# t7 o9 n* `% H

& H7 z( i; x( |8 o7 n0 R% q
9 y$ d) b# O4 f2 ]& Esetitem(thing)
0 E) {; o9 y& Q  b7 Z: W3 W! ]
Description: Deprecated. Do not use. ' G$ {& b# k0 r- j) |" D
Example: /
1 ^; N+ w: C& P$ Y) r. i此命令不再使用。* p5 N1 N# ~1 D7 |
) a1 N$ B; {" {" C! G
parnode(num index)
3 D% H7 G, A, G7 \Description:  % V& Q+ v( ~: |
This command is used inside a function that is called by the nodefunction() command.4 Q, G; ?; j4 v1 L
此命令用在一个被nodefunction调用的函数中。"nodefunction() command"指的是什么?command和function有何不同?
( `% c  w6 n& ~# [% D8 f5 p8 C& w: wIt returns the parameter passed to nodefunction specified by index as a node (or treenode). " A( w8 ?1 G1 b  R* N0 y' f0 |9 X
此命令返回一个节点(或树结点)参数.该参数由序号指定,并会传递给nodefunction.
7 S3 u6 m, P( F8 U* m节点和树节点有何不同?
% |7 H7 R8 N7 `% r$ @; O6 a  D" EThe first additional parameter passed to nodefunction() is parameter 1, the second is parameter 2, etc., K/ P  e) E+ f2 @) {. u
parnode,parval,parstr这三个命令真是让人搞不懂啊...
$ M$ u" J4 c+ P& eParameters can also be retrieved using parval() and parstr() for casting them as numbers and strings respectively. # T' q' n7 \: j4 M
Example:
) ]+ w! n: s- S. f& EIf a trigger/field is called with: $ k$ p- Q- Q" j0 Y7 l4 U; [
nodefunction(thefuncnode, item)! s4 ^( v% Y3 |7 D# Z
then within the trigger/field, getting access to the item passed as the first additional parameter would be done with:
  1. treenode item = parnode(1);
复制代码
  
# r* T5 G4 G, f5 u# T* S0 j
+ j( L- Y+ H2 K1 s1 _3 Oport<no parentheses>
( \) y: v0 d: F6 p! `+ fDescription: - c( p- B% F2 M5 T$ ~
Deprecated. This should not be used as a special command with the setport command anymore. Instead, declare an int variable type as port, then use port in your code as any other variable type.
" X! X$ b' P9 eExample:
2 G8 o# h! `2 ]) [& r, f
  1. int port = parval(3);  n/ ?! C' P/ [- h6 Z. P2 e
  2. pd(port);
复制代码
 
" X1 O% E" U1 ]) p- pThis sets port to parval(3) and then prints the value to the output console.
  N; E6 C0 D# a$ W# M% b7 u7 W6 l8 |% f: F
不推荐使用。port和setport都不应再作为命令来使用。如果在代码中需要使用端口,需要声明一个名为port的整数型变量,然后在代码中直接使用port作为变量。
作者: 天性518    时间: 2013-9-17 13:56
1# zorsite 1 {) q7 \0 z6 u0 N

, j. f5 p0 V* O7 G" l6 v7 ^" m" g! ~, h, V6 _" B
首先谢谢加老师分享,我在这里也补充一下,对于加老师你讲到的”c“,我们一般都是在代码框和做GUI时会遇得多些,下面我具体讲一下他们的区别。9 T: u! |' R7 k( b; C3 p( E* {* A
    首先在GUI中,它是这样的,如下图:[attach]1559[/attach]. m& r- o0 f: U' Q8 i
而在代码框中却是这样的,如下图:[attach]1560[/attach]
作者: fl2014    时间: 2014-8-10 18:29
大神啊,解决了我多日的困惑
作者: 1010265352    时间: 2014-8-11 13:56
额,很值得一看
作者: 一骑绝尘    时间: 2014-8-20 10:01
C 一扫疑惑,  但parval(),parnode() 还是有点不解




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3