Plant Simulation 进阶学习记录(一)--常用语法函数

Plant Simulation 进阶学习记录(一)–常用语法函数

本文梳理了一些常见的语法函数,包括其含义、一些特殊的用法、示例代码等,方便使用时查找。感谢B站白木杉UP主Plant simulation(进阶篇),进阶篇案例讲的很好,后续也会更新(传送带、AGV、免费库等进阶篇内容的学习记录)
tip:文中如果有错误会检查修改~~

常用字符串处理函数

关键词/函数名称含义/示例代码
sprint(i,j,k)返回ijk从左到右相拼接结果(字符串相加),返回值类型为string
strlen(Text:string) → integer输出字符串长度。例如:strlen(“abcd”),返回值为 4
strcopy(SourceText:string, NumberOfCharacters:integer) → string将字符串从右边往左开始复制指定位数的字符。 例如strcopy(“zhishenkeji”,4),返回值为”keji”
strRpos(TextToBeFound:string, SourceText:string) → integer输出指定字符在字符串中的位置,有多个相同字符时,从左向右输出最后一个相同字符的位置。例如:strrpos(“I”,“zhishenkeji”),返回值为11
omit(SourceText:string, Position:integer, NumberOfCharacters:integer) → string该函数省略复制一个字符串并从中删除一系列字符。例如:print omit(“abcdef”,3,2) ,返回值为 “abef”
incl(TextToBeInserted:string, Text:string, Position:integer) → string将字符串A插入到字符串B的指定位置。例如:incl(“.tech”,“zhishenkeji”,12),返回值为"zhishenkeji.tech"
copy(String:string, Position:integer, NumberOfCharacters:integer)按指定位置和长度,从目标字符串复制部分字符。如:copy(“zhishenkeji.tech”,13,4),返回值为" tech"(omit功能更强)

常用表格处理函数

特殊表格

  • StackFile.push(<value>):表中第一格插入数据(字符串要用 “”)
  • QueneFile.push(<value>):表中最后一格插入数据
  • StackFile.pop 或者 QueneFile.pop:读取表中第一格内容并删除它
  • CardFile.read (3):读取表中第三行内容,但不删除它
  • CardFile.insert(5,<value>):写表,将值插入表中第五行单元格,原来第五行单元格内容及以下的单元格内容都往下自动移一格(不覆盖)
  • StackFile.dimQueneFile.dimCardFile.dim:返回最后有内容的行号

一般表格

  • tablefile.dim=tablefile.Xdim*tablefile.Ydimtablefile.Xdim 为去除 0 列的列数,tablefile.Ydim 为去除 0 行 (索引行) 的行数
  • tablefile.indexydim:返回开了列索引的最后有内容的行号,如果没内容则返回 0

通用表格

  • <Path>.find ({"MU", 1}..{"MU",*},< 所找寻的值 >):在指定范围内寻找值,找到了返回 true,没找到返回 false
  • <Path>.setCursor (Column:any, Row:any) → boolean:设置光标在指定位置,与 find 搭配使用时,find 从光标处开始寻找,并将光标设置为下一个找到的项目
  • <Path>.CursorY:返回目前光标所在的行号
  • <Path>.CursorX:返回光标所在的列号
  • <Path>.cutrow (1):删除第一行(可与循环搭配)
  • <Path>.copyContentTo (DestinationTable:list):将 path 路径的表格内容复制给目的表格,列索引不复制。
  • <Path>.meanValue ({1,1}..{1,*}):返回范围内所有实数型和整型的数据的算术平均值
  • <Path>.writeRow (Column:any, Row:any, Value:any [, Value:any, …, Value:any]):将 Value 的值按顺序写入表中的一行,参数至少为三个,其中 Column 表示开始写入的列数,Row 表示在第几行写入,Value 填入对应列类型的值。(一般)
  • <Path>.create:创建表格。例如:var OrderList : table [string,real] ; OrderList.create; OrderList [1,1] := "Cans"

常用属性转换命令

关键词/函数名称含义/示例代码
to_str()其他类型转换成字符串
str_to_num()字符串转换成整型
num_to_str()整型转换成字符串
str_to_obj()字符串转换成已存在对象的绝对路径
obj_to_str()对象转换成字符串(绝对路径显示)
num_to_bool(1)1 转换成 true
bool_to_num(true)true 转换成 1

常用数学函数

关键词/函数名称含义/示例代码
pow(x, y)计算 x 的 y 次幂
sqrt(x)计算 x 的平方根
ceil(x)将小数 x 向上取整
floor(x)将小数 x 向下取整
max(x, y)返回 x 和 y 中的最大值
round(x)将 x 四舍五入到个位
round (x, y)将 x 四舍五入到 y 位小数
div计算整除的商
mod计算整除后的余数

常用对象相关语法函数

  • &:引用操作符,只有对全局变量和方法指定的时候使用,代表只引用其本身,而不引用其值
  • existsObject (NameOfObject:string) → boolean:判断是否有对象为该名字,如有则返回 true(比 ._3D.Exists 好用)
  • <Path>.deleteObject → boolean:删除 Path 的所有对象,path 为相对路径时删除框架中的实例,为绝对路径时删除类库中的类和衍生的实例
  • <类库中类的绝对路径>.createObject (Destination:object,Xpos:integer,Ypos:integer, Name:string)→ object:创建对象,Destination 为创建后框架的路径,Xpos、Ypos 为位置,Name 为对象名
  • <类库中类的绝对路径>.derive ([Destination:object, Name:string]) → object:用于派生对象,Destination 为派生后框架的路径,Name 为对象名
    示例:.信息流.&方法.derive (current,"My_method") —— 在当前模型中派生创建名字为 My_method 的方法(可用 duplicate 复制代替 derive
  • <Path>.createAttr (AttributeName:string, DataType:string) → boolean:创建自定义属性
  • <Path>.createSensor (Position:real, PositionType:string, Control:method [, Front:boolean, Rear:boolean [,Destination:Path [, BothLanes:boolean [, LightBarrierMode:boolean]]] → integer]):创建传感器,位置类型可为 “Length” 或 “Relative”
    示例:
  MyConveyor.createSensor (0.5,"Length","MyControl",true,false,VOID,false,false) 
  MyTrack.createSensor (0.7,"Relative",&myMethod,false,true)
  • <Path>.deleteSensor (SensorID:integer) → boolean:删除传感器
  • <框架名>.deletemovables:删除框架中的所有 MU
  @.deletemovables—— 删除 MU(@)上的所有零件

访问容量大于1的函数方法

  • <Path>.pe(X:integer, Y:integer) → object
  • <Path>[X:integer, Y:integer] → boolean
    情景一:对有容量的 MU(小车,容器)
  print.MUs.Transporter:1 [3,2].Cont  --打印小车位置 [3,2] 上的内容  
  @.pe (3,2).Cont.move (machine) --传感器处小车第二行第三列的内容移动至机器上(注意中括号和小括号的区别)  

情景二:对存储和并行工位

  @.move (MyStore.pe (2,3)) -- @代表的 MU 移动到存储的第三行第二列的位置处  
  MyStore [2,3].Cont.move (Station) --存储的第三行第二列上的内容移动到工站上

情景三:对 (放置) 缓冲区

  • @.move (MyPlaceBuffer [2]) 等价于 @.move (MyPlaceBuffer.pe (2))

  • <Path>.mu (Index:integer) → object

  • <Path>.muPart(Index:integer)
    情景四:对传送带 —— 返回路径对象上的 MU 对象,Index 为进入的顺序,最先进入(即第一个单元格或者传送带上最末端)的标号为 1,以此类推。
    例如让机械臂从容器的最后一格开始抓取:

	for var j := @.numMU downto 1
		var mu : object := @.mu (j)
		-- 容器上的最后一格
		mu.move (机械臂)
	next

其他

messageBox (Text:string, Buttons:real, Icons:real) → integer

代码运行到此弹出消息框,按下不同按钮会返回不同的整型值,可根据返回值执行对应的操作。
(Buttons 是显示的按钮返回值之和,返回值汇总:确定 1,取消 2,忽略 4,继续 4,重试 8,是 16,否 32,终止 64。) (Icons 是显示不同图标:无 0,错误 1,问题 2,警告 3,消息 4)

switch messageBox ("My message text: 请输入操作",50, 4)
case 16 -- 是
	print "Yes" -- 这里可用来执行自定义操作
case 32 -- 否
	print "No"
else -- 取消
	print "Cancel"
end

prompt (Text:string [,MoreText:string, …]) → string

弹出一个输入框,用户输入字符串数据。
例如可在 init 方法中写入:

轨道.capacity:=str_to_num (prompt ("轨道的容量是 (请输入 1-5):") )
for var i:=1 to 轨道.capacity
	.MU. 小车.create (轨道,轨道.length-i*4)
	轨道.mu (i).speed:=str_to_speed ( prompt ("第 i 辆小车的速度是:") )
next

execute

execute (SourceCode:string [,Parameter:parameter, …])

函数 execute 接收一个字符串,并将其解释为方法的源代码。SourceCode 为源代码,Parameter 为传递的参数值。
例 1:

var objPath : string := "Track"
var attrName: string := "Length"
var attrVal : length:= 20
execute (to_str (objPath, ".", attrName, ":=", attrVal))

上面的代码等同于:Track.Length:=20

例 2:

execute ("param x, y: integer; print x+y", 1, 2)

(源代码多条语句间用分号隔开,传递参数值为 1 和 2,故输出值为 3)

&Method.execute ([Argument1:any, … [,@:object=@, ?:object=self]])

调用指定路径的方法并可传递参数值 (其中 @,?为系统内置)。
例 1:

var Varobj :any:= &MyMethod1
varobj.execute

例 2:

 &MyMethod2.execute("abc",2)

例 3:

 &MyMethod2.execute("abc",2,self.~,~)

&MyMethod.executeIn (CallAt:time [,Argument1:any, …]) → boolean

在方法(?)中指定时间秒速过后调用另一个方法(&MyMethod),调用时可传递多个参数值。老版本的语法函数叫做 methcall。
小技巧:

self.executein (1) -- 使该方法一直重复自我调用,调用间隔为 1 秒。等同于 self.methcall (1)

CallEvery (Frame:path, Method:string [, Parameters:parameters])

CallEvery 调用在指定框架以及子框架中具有指定名称的所有方法,可传递参数。

一般对象控件的触发方式

  • 构造器:复制、派生或实例化对象(插入到框架中)时
  • 解构器:删除对象时
  • 连接:用连接器连接对象时
  • 打开:打开对象时(可选择无控件打开)
  • 关闭:关闭对象时
  • 真实性:在对象对话框中点击应用或确定时
  • 选择:鼠标左键选中对象时
  • 拖放:将其他对象拖到创建拖放控件的对象上时
  • 允许删除:试图删除为其编程控件的对象时
  • 移入框架:在框架中拖动对象位置时
  • 重命名:为对象重新命名时
  • 重标:为对象修改标签时
  • 失败:对象发生故障时
  • 暂停:对象暂停工作时
  • 更改路径、移至文件夹:在类库中进行相应操作时
  • 初始化:当前框架的事件控制器初始化仿真(init)时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值