Flexsim第一周--代码部分学习
Flexsim编写自定义逻辑的方式有两种:
Flexsim脚本
C++
C++的所有能力在此均可应用。
FIexsim脚本编写完成,即刻生效,不需要进行编译。
如果非常关注速度问题,可以使用C++,因为它的运行速度比Flexsim脚本更快,但是必须进行编译。
基础语法规则:
- 语言对大小写敏感(A不同于a)
- 不需要特殊的格式(鼓励灵活运用空格、制表位以及语句换行)
- 如果不明确说明,数值都是双精度的浮点值
- 文本字符串通常用双引号引起来,如"mytext”
- 函数之后有圆括号,用逗号分隔函数的参数,如moveobject(objectl,object2)。
- 函数或命令总是以分号结尾
- 圆括号可以在数学或逻辑表达式中自由应用生成组合
- 花括号用来定义复合语句模块
- 用//将一行的其余部分注释掉
- 在命名时不要使用空格或特殊字符(_可以)。
- 名称变量和明确的值可以在表达式中互换使用
Current and Item:
Current-当前变量是对当前资源对象的引用。它通常是选择列表中的访问变量。
item-item变量是对触发器或函数的相关项的引用。它通常是选择列表中的访问变量。
引用对象
数学符号:
下列给出了用于数值计算的各种数学运算符。
注意,FIexsim中默认数值为双精度浮点数,所以编写逻辑的时候通常要把运算符当作是适
用于浮点数运算的。
- 当运算符用于浮点数时,可能会发生精度不够的情况。
- 当整数类型与浮点数类型相混合或者仅使用整数类型时,使用这些运算符需要注意。
例如,如果两个操作员都是整数,/将返回整数,如果需要让C++将它诠释为浮点类型,可以输入5.0而非5。
比较运算符:
注意:使用==时,浮点数必须保持64比特的完全一致,因此建议比较浮点数时使用自定义函数如equal对==进行重写
关系变量:
下表给出了连接几个变量比较的不同运算符号。
设置和改变变量
下表给出了设定和修改变量的方式。
变量类型
Flexsim中,只需要使用四种类型的变量,四种类型中的每一种都应用于数组结构中。
一元变量:
- lnt
- DoubIe
- String
- Treenode
数组变量:
- lntarray
- doublearray
- Stringarray
- treenodearray
示例:
执行命令
在FIexsim执行命令分为如下的几步。首先键入命令的名称,后面跟前括号;然后键入命
令的参数,用逗号隔开,每个参数都可以是变量、表达式,或者甚至也可以是另一命令:用
后括号结束命令,并跟分号。在F1exsim的“帮助”主菜单下参考命令集可获取有关命令的
详细信息以及它们的功能和参数列表。参考基本律模甬那一节可快速获取常用命令信息。
基本的循环如下:
基本switch判断:
基本接续语句:
节点命令
通过卷轴按钮可以查看代码,这里以定义流动实体类型和颜色为例。
Object current = ownerobject(c);
Object item = param(1);
int rownumber = param(2); //row number of the schedule/sequence table{ // ************* PickOption Start ************* //
/***popup:SetTypeAndColor*/
/**Set Item Type and Color*/
Object involved = /** \nFlowitem: *//***tag:involved*//**/item/**/;
double newtype = /** \nItem type: *//***tag:type*//**/duniform(1,3,getstream(current))/**/;
involved.Type = newtype;
involved.color = Color.byNumber(newtype);
} // ******* PickOption End ******* //
{ // ************* PickOption Start ************* //
旧版本中,各种对象都是treenode类型的,现在变为了Object。
这其中,代码表达的是:
current代表对象本身;
item代表刚刚创建的流动实体;
Object involved = item; // 将item的引用赋值给involved变量
double newtype = duniform(1,3,getstream(current)); // 在分布中产生一个数赋给newtype
involved.Type = newtype; // 将item的itemtype设为newtype
involved.color = Color.byNumber(newtype); // 设置item的color
FlexScript类参考
TaskExecuter
Dispatcher(任务分配器)
从Object继承,表示具有任务序列队列的Object的类,并实现接收和分派TaskSequences的逻辑。
属性:taskSequences—访问调度程序任务序列队列中的任务序列。
Dispatcher.taskSequences //任务序列读取Dispatcher disp = Model.find("Dispatcher1");int numTaskSequences = disp.taskSequences.length;for (int i = 1; i <= numTaskSequences; i++) {TaskSequence ts = disp.taskSequences[i];...}
1.2、TaskExecuter(任务执行者)
可以执行TaskSequences的Dispatcher的类。
属性:activeTask—访问对象当前正在执行的任务。
TaskExecuter obj = Model.find("Operator1");int taskType = obj.activeTask.type;...
activeTaskSequence—访问对象当前正在执行的任务序列
TaskExecuter obj = Model.find("Operator1");double tsPriority = obj.activeTaskSequence.priority;...
1.3、TaskSequence
表示TaskExecuter要执行的任务序列的类。
属性:
方法:
静态方法:
TaskSequence.currentTaskTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int curTaskType = ts.currentTask.type;...TaskSequence.preemptTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int preempt = ts.preempt;...TaskSequence.priorityTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];double priority = ts.priority;...TaskSequence.rankTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int tsRank = ts.rank; // should be 1...TaskSequence.tasksTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int numTasks = ts.tasks.length;for (int i = 1; i <= numTasks; i++) {Task task = ts.tasks[i];}TaskSequence.addTask()TaskSequence.Task addTask( int type , treenode involved1 = null , treenode involved2 = null ,Variant var1 = nullvar , Variant var2 = nullvar , Variant var3 = nullvar , Variant var4 = nullvar )TaskSequence ts = TaskSequence.create(Model.find("Operator1"));ts.addTask(TASKTYPE_LOAD, item, current);...ts.dispatch();TaskSequence.dispatch()TaskSequence ts = TaskSequence.create(Model.find("Operator1"));ts.addTask(TASKTYPE_LOAD, item, current);...ts.dispatch();
1.4、TaskSequence.Task
表示任务序列中的单个任务的类。
属性:
TaskSequence.Taskhttps://link.zhihu.com/?target=https://docs.flexsim.com/en/19.1/Reference/CodingInFlexSim/FlexScriptAPIReference/TaskExecuter/TaskSequence.Task.html%23top
TaskSequence.Task.involved1TaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];treenode involved1 = ts.currentTask.involved1;...TaskSequence.Task.rankTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int rank = ts.currentTask.rank;...TaskSequence.Task.stateTASKSTATE_UNFINISHED
TASKSTATE_ACTIVE
TASKSTATE_COORDINATED
TASKSTATE_FINISHED
TaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int state = ts.currentTask.state;...TaskSequence.Task.typeTaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];int curTaskType = ts.currentTask.type;...TaskSequence.Task.var1TaskExecuter op = Model.find("Operator1");TaskSequence ts = op.taskSequences[1];Variant var1 = ts.currentTask.var1;...
2、Token
表示Process Flow令牌的类。
属性:
方法:
Token.activity
获取对令牌当前活动的引用。
treenode curActivity = token.activity;
Token.childRank
获取子令牌的等级
int childRank = token.childRank;
Token.children
访问令牌的子节点。
token.children.length
token.children[1] // first child
token.children[token.children.length] // last child
token.children[i] // i-th child
Array childTokens = token.children.toArray();
Token.entryTime
获取令牌进入其当前活动的模型时间。
double entryTime = token.entryTime;
Token.id
获取令牌的唯一ID。
int id = token.id;
Token.instance
获取令牌的Process Flow实例。
treenode instance = token.instance;
Token.name
string name = token.name;
token.name = "Bottle";
Token.parent
TokenparentToken=token.parent;
Token.processFlow
获取令牌的Process Flow对象。
treenode flow = token.processFlow;
Token.byID()
TokenbyID(intid ,VariantprocessFlow = NULL )
Token token = Token.byID(25);
Token token = Token.byID(4, "ProcessFlow1");
Token.release()
release(Variantconnector )
token.release("Failed");
Token.setColor()
setColor(intred ,intgreen ,intblue ,intalpha )
token.setColor(255, 0, 0);
Token.setShape()
setShape(intshapeIndex )
token.setShape(1);
Token Constructor
static create(treenodeownerNode ,Variantactivity ,intstart = 1 ,Tokenparent = NULL ,intlabelAcess = 1 )
Token aToken = Token.create(NULL, getactivity("ProcessFlow", "Start"), 0); //General Process Flow
Token newToken = Token.create(Model.find("Processor1"), "Start", 0, aToken, TOKEN_LABEL_ACCESS_READ);
newToken.Type = 1;
newToken.release(0);
Flexsim第一周--代码部分学习相关推荐
- 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 深度学习笔记第一门课第一周:深度学习引言
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 第一周前端web学习记录
第一周前端web学习记录 #什么是HTML.CSS? 如何写代码以及在哪里写 vs code 的基本使用方法 浏览器 网站开发 HTML 的结构基础和属性 创建标签 嵌套 HTML标签 设置属性 HT ...
- e智团队实验室项目-第一周-神经网络的学习
e智团队实验室项目-第一周-神经网络的学习 张钊 *, 赵雅玲* , 李锦玉,迟梦瑶,贾小云,赵尉,潘玉,刘立赛,祝大双,李月,曹海艳, (淮北师范大学计算机科学与技术学院,淮北师范大学经济与管理学院 ...
- 第一周:深度学习引言(Introduction to Deep Learning)
1.1 欢迎(Welcome) 深度学习改变了传统互联网业务,例如如网络搜索和广告.但是深度学习同时也使得许多新产品和企业以很多方式帮助人们,从获得更好的健康关注. 深度学习做的非常好的一个方面就是读 ...
- Android 《第一行代码》学习笔记
目录 第一章 准备工作 一.Android 系统架构 二.Android 开发特点 1.四大组件 2.系统控件丰富 3.SQLite数据库 4.多媒体功能强大 5.地理位置定位 三.日志工具的使用 第 ...
- 《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码
1.3 创建你的第一个Android项目 1.3.1 创建HelloWorld项目 1.Application Name代表应用名称,手机上显示的就是它: 2.Project Name代表项目名称,其 ...
- 第一周—Fortran语言学习
使用教材:Fortran95程序设计[彭国伦] 第二章 编译器的使用 编译结果的好坏 1.翻译正确 2.执行文件的运行效率 3.翻译出来的执行码的长短 4.编译过程花费的时间 5.编译器提供Debug ...
- 《第一行代码》学习笔记16-碎片Fragment(1)
1.碎片( Fragment):一种可以嵌入在活动当中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,在平板上的应用广泛. 2.碎片同样包括布局,有自己的生命周期,甚至可理解成一个迷你型的活动. ...
最新文章
- 开发者推出BCH“信用卡”,方便用户离线发送BCH
- 对Exchange 事件ID 9154 DSACCESS 返回 DS 通知出现的错误“0x80004005”的处理
- Sencha-概念-Events(事件)(官网文档翻译10)
- HDU - 4333 Revolving Digits(扩展KMP)
- Oracle数据库间的数据复制 - SQLPlus中的COPY命令
- WordPress缓存插件WP-Super-Cache安装使用
- pcb 理论阻值、 过孔_PCB设计中过孔常用的处理方式
- linux u盘写保护,用usboot解决u盘写保护
- GNU开发工具——GNU Binutils快速入门
- 如何编辑图片上的文字?在线图片去字工具怎样使用?
- APIView 怎么写?
- 安卓 View 开发 绘制尺子
- Java语言程序设计 例题9.8(Fan类)
- matlab 逐步回归代码,(最新整理)逐步回归matlab程序
- Python3.X识别混合编码,顺便解决“AttributeError: 'module' object has no attribute 'urlopen'”
- 局域网联机_MC联机教程
- java面试题库收集 - 7(面试必问)
- 松松团队举办了夏季团建烧烤活动
- 设计提效-Figma技巧篇
- centsos7网络连接激活失败_CentOS 7 网络连接优先由与无线问题解决