Flexsim编写自定义逻辑的方式有两种:

Flexsim脚本

C++

C++的所有能力在此均可应用。

FIexsim脚本编写完成,即刻生效,不需要进行编译。

如果非常关注速度问题,可以使用C++,因为它的运行速度比Flexsim脚本更快,但是必须进行编译。

基础语法规则:

  1. 语言对大小写敏感(A不同于a)
  2. 不需要特殊的格式(鼓励灵活运用空格、制表位以及语句换行)
  3. 如果不明确说明,数值都是双精度的浮点值
  4. 文本字符串通常用双引号引起来,如"mytext”
  5. 函数之后有圆括号,用逗号分隔函数的参数,如moveobject(objectl,object2)。
  6. 函数或命令总是以分号结尾
  7. 圆括号可以在数学或逻辑表达式中自由应用生成组合
  8. 花括号用来定义复合语句模块
  9. 用//将一行的其余部分注释掉
  10. 在命名时不要使用空格或特殊字符(_可以)。
  11. 名称变量和明确的值可以在表达式中互换使用

Current and Item:

Current-当前变量是对当前资源对象的引用。它通常是选择列表中的访问变量。

item-item变量是对触发器或函数的相关项的引用。它通常是选择列表中的访问变量。

引用对象

数学符号:

下列给出了用于数值计算的各种数学运算符。

注意,FIexsim中默认数值为双精度浮点数,所以编写逻辑的时候通常要把运算符当作是适

用于浮点数运算的。

  1. 当运算符用于浮点数时,可能会发生精度不够的情况。
  2. 当整数类型与浮点数类型相混合或者仅使用整数类型时,使用这些运算符需要注意。

例如,如果两个操作员都是整数,/将返回整数,如果需要让C++将它诠释为浮点类型,可以输入5.0而非5。

比较运算符:

注意:使用==时,浮点数必须保持64比特的完全一致,因此建议比较浮点数时使用自定义函数如equal对==进行重写

关系变量:

下表给出了连接几个变量比较的不同运算符号。

设置和改变变量

下表给出了设定和修改变量的方式。

变量类型

Flexsim中,只需要使用四种类型的变量,四种类型中的每一种都应用于数组结构中。

一元变量:

  1. lnt
  2. DoubIe
  3. String
  4. Treenode

数组变量:

  1. lntarray
  2. doublearray
  3. Stringarray
  4. 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. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  2. 深度学习笔记第一门课第一周:深度学习引言

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  3. 第一周前端web学习记录

    第一周前端web学习记录 #什么是HTML.CSS? 如何写代码以及在哪里写 vs code 的基本使用方法 浏览器 网站开发 HTML 的结构基础和属性 创建标签 嵌套 HTML标签 设置属性 HT ...

  4. e智团队实验室项目-第一周-神经网络的学习

    e智团队实验室项目-第一周-神经网络的学习 张钊 *, 赵雅玲* , 李锦玉,迟梦瑶,贾小云,赵尉,潘玉,刘立赛,祝大双,李月,曹海艳, (淮北师范大学计算机科学与技术学院,淮北师范大学经济与管理学院 ...

  5. 第一周:深度学习引言(Introduction to Deep Learning)

    1.1 欢迎(Welcome) 深度学习改变了传统互联网业务,例如如网络搜索和广告.但是深度学习同时也使得许多新产品和企业以很多方式帮助人们,从获得更好的健康关注. 深度学习做的非常好的一个方面就是读 ...

  6. Android 《第一行代码》学习笔记

    目录 第一章 准备工作 一.Android 系统架构 二.Android 开发特点 1.四大组件 2.系统控件丰富 3.SQLite数据库 4.多媒体功能强大 5.地理位置定位 三.日志工具的使用 第 ...

  7. 《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码

    1.3 创建你的第一个Android项目 1.3.1 创建HelloWorld项目 1.Application Name代表应用名称,手机上显示的就是它: 2.Project Name代表项目名称,其 ...

  8. 第一周—Fortran语言学习

    使用教材:Fortran95程序设计[彭国伦] 第二章 编译器的使用 编译结果的好坏 1.翻译正确 2.执行文件的运行效率 3.翻译出来的执行码的长短 4.编译过程花费的时间 5.编译器提供Debug ...

  9. 《第一行代码》学习笔记16-碎片Fragment(1)

    1.碎片( Fragment):一种可以嵌入在活动当中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,在平板上的应用广泛. 2.碎片同样包括布局,有自己的生命周期,甚至可理解成一个迷你型的活动. ...

最新文章

  1. 开发者推出BCH“信用卡”,方便用户离线发送BCH
  2. 对Exchange 事件ID 9154 DSACCESS 返回 DS 通知出现的错误“0x80004005”的处理
  3. Sencha-概念-Events(事件)(官网文档翻译10)
  4. HDU - 4333 Revolving Digits(扩展KMP)
  5. Oracle数据库间的数据复制 - SQLPlus中的COPY命令
  6. WordPress缓存插件WP-Super-Cache安装使用
  7. pcb 理论阻值、 过孔_PCB设计中过孔常用的处理方式
  8. linux u盘写保护,用usboot解决u盘写保护
  9. GNU开发工具——GNU Binutils快速入门
  10. 如何编辑图片上的文字?在线图片去字工具怎样使用?
  11. APIView 怎么写?
  12. 安卓 View 开发 绘制尺子
  13. Java语言程序设计 例题9.8(Fan类)
  14. matlab 逐步回归代码,(最新整理)逐步回归matlab程序
  15. Python3.X识别混合编码,顺便解决“AttributeError: 'module' object has no attribute 'urlopen'”
  16. 局域网联机_MC联机教程
  17. java面试题库收集 - 7(面试必问)
  18. 松松团队举办了夏季团建烧烤活动
  19. 设计提效-Figma技巧篇
  20. centsos7网络连接激活失败_CentOS 7 网络连接优先由与无线问题解决

热门文章

  1. html控制智能家居,一种基于数据库中间件和HTML5的智能家居控制软件系统
  2. uniapp pdf阅读插件(手势缩放、显示页数) Ba-Pdf
  3. 满足ASIL D的新能源汽车紧凑型逆变器产品开发及量产
  4. linux的asil等级 - 及改进 之一
  5. 论文怎样写才能保证查重率低?
  6. 用omnipeek抓取配网组包
  7. 一般用什么邮箱发开发信,外贸开发信邮箱用哪个比较好?
  8. OpenWRT中使用无线网卡做中继器与AP热点
  9. python编程入门pdf-PYTHON游戏编程入门 PDF 下载
  10. 尚邮的”pushmail“原理估计