日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flexsim第一周--代码部分学习

發(fā)布時間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flexsim第一周--代码部分学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Flexsim編寫自定義邏輯的方式有兩種:

Flexsim腳本

C++

C++的所有能力在此均可應(yīng)用。

FIexsim腳本編寫完成,即刻生效,不需要進行編譯。

如果非常關(guān)注速度問題,可以使用C++,因為它的運行速度比Flexsim腳本更快,但是必須進行編譯。

基礎(chǔ)語法規(guī)則:

  • 語言對大小寫敏感(A不同于a)
  • 不需要特殊的格式(鼓勵靈活運用空格、制表位以及語句換行)
  • 如果不明確說明,數(shù)值都是雙精度的浮點值
  • 文本字符串通常用雙引號引起來,如"mytext”
  • 函數(shù)之后有圓括號,用逗號分隔函數(shù)的參數(shù),如moveobject(objectl,object2)。
  • 函數(shù)或命令總是以分號結(jié)尾
  • 圓括號可以在數(shù)學(xué)或邏輯表達式中自由應(yīng)用生成組合
  • 花括號用來定義復(fù)合語句模塊
  • 用//將一行的其余部分注釋掉
  • 在命名時不要使用空格或特殊字符(_可以)。
  • 名稱變量和明確的值可以在表達式中互換使用
  • Current and Item:

    Current-當前變量是對當前資源對象的引用。它通常是選擇列表中的訪問變量。

    item-item變量是對觸發(fā)器或函數(shù)的相關(guān)項的引用。它通常是選擇列表中的訪問變量。

    引用對象

    數(shù)學(xué)符號:

    下列給出了用于數(shù)值計算的各種數(shù)學(xué)運算符。

    ?注意,FIexsim中默認數(shù)值為雙精度浮點數(shù),所以編寫邏輯的時候通常要把運算符當作是適

    用于浮點數(shù)運算的。

  • 當運算符用于浮點數(shù)時,可能會發(fā)生精度不夠的情況。
  • 當整數(shù)類型與浮點數(shù)類型相混合或者僅使用整數(shù)類型時,使用這些運算符需要注意。
  • 例如,如果兩個操作員都是整數(shù),/將返回整數(shù),如果需要讓C++將它詮釋為浮點類型,可以輸入5.0而非5。

    比較運算符:

    ?注意:使用==時,浮點數(shù)必須保持64比特的完全一致,因此建議比較浮點數(shù)時使用自定義函數(shù)如equal對==進行重寫

    關(guān)系變量:

    下表給出了連接幾個變量比較的不同運算符號。

    設(shè)置和改變變量

    下表給出了設(shè)定和修改變量的方式。

    變量類型

    Flexsim中,只需要使用四種類型的變量,四種類型中的每一種都應(yīng)用于數(shù)組結(jié)構(gòu)中。

    一元變量:

  • lnt
  • DoubIe
  • String
  • Treenode
  • 數(shù)組變量:

  • lntarray
  • doublearray
  • Stringarray
  • treenodearray
  • 示例:

    執(zhí)行命令


    在FIexsim執(zhí)行命令分為如下的幾步。首先鍵入命令的名稱,后面跟前括號;然后鍵入命
    令的參數(shù),用逗號隔開,每個參數(shù)都可以是變量、表達式,或者甚至也可以是另一命令:用
    后括號結(jié)束命令,并跟分號。在F1exsim的“幫助”主菜單下參考命令集可獲取有關(guān)命令的
    詳細信息以及它們的功能和參數(shù)列表。參考基本律模甬那一節(jié)可快速獲取常用命令信息。

    基本的循環(huán)如下:

    ?

    ?

    ?基本switch判斷:

    ?基本接續(xù)語句:

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    節(jié)點命令
    ?

    ?

    通過卷軸按鈕可以查看代碼,這里以定義流動實體類型和顏色為例。

    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類型的,現(xiàn)在變?yōu)榱薕bject。

    這其中,代碼表達的是:

    current代表對象本身;
    item代表剛剛創(chuàng)建的流動實體;

    Object involved = item; ?// 將item的引用賦值給involved變量 double newtype = duniform(1,3,getstream(current)); ?// 在分布中產(chǎn)生一個數(shù)賦給newtype involved.Type = newtype; ?// 將item的itemtype設(shè)為newtype involved.color = Color.byNumber(newtype); ?// 設(shè)置item的color

    FlexScript類參考

    TaskExecuter

    Dispatcher(任務(wù)分配器)

    從Object繼承,表示具有任務(wù)序列隊列的Object的類,并實現(xiàn)接收和分派TaskSequences的邏輯。

    屬性taskSequences—訪問調(diào)度程序任務(wù)序列隊列中的任務(wù)序列。

    Dispatcher.taskSequences?//任務(wù)序列讀取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(任務(wù)執(zhí)行者)

    可以執(zhí)行TaskSequences的Dispatcher的類。

    屬性activeTask—訪問對象當前正在執(zhí)行的任務(wù)。

    TaskExecuter?obj?=?Model.find("Operator1");int?taskType?=?obj.activeTask.type;...

    activeTaskSequence—訪問對象當前正在執(zhí)行的任務(wù)序列

    TaskExecuter obj = Model.find("Operator1");double tsPriority = obj.activeTaskSequence.priority;...

    1.3、TaskSequence

    表示TaskExecuter要執(zhí)行的任務(wù)序列的類。

    屬性:

    方法:

    ?靜態(tài)方法:

    ? 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

    表示任務(wù)序列中的單個任務(wù)的類。

    屬性:

    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

    訪問令牌的子節(jié)點。

    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);

    總結(jié)

    以上是生活随笔為你收集整理的Flexsim第一周--代码部分学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。