女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Actor Framework仿真線性編碼器

華穗科技 ? 來源:華穗科技 ? 2023-12-22 10:15 ? 次閱讀

在學(xué)習(xí)LabView面向?qū)ο?a target="_blank">編程過程中,相信大家也都接觸到了Actor Framework。該框架于2010年NI Week首次公布,經(jīng)過多年不斷迭代更新,逐漸成為LabVIEW中最為重要的并發(fā)開發(fā)框架。

我們將通過本期內(nèi)容綜合學(xué)習(xí)Actor Framework的一些基礎(chǔ)知識,包括Actor的創(chuàng)建、方法的重寫、輔助循環(huán)的構(gòu)建、Actor嵌套關(guān)系、以及接口消息的應(yīng)用。讓大家對AF能有一個(gè)更深入的了解。

本文教程 Actor Framework練習(xí)—仿真線性編碼器

一、整體功能展示:

程序主體由三部分構(gòu)成,分別為Business LogicLinear Encoder、User Interface。

c2ab4ade-a06e-11ee-8b88-92fbcf53809c.png

用戶操作Linear Encoder產(chǎn)生數(shù)據(jù),分兩種形式更新到User Interface:單點(diǎn)實(shí)時(shí)更新、多點(diǎn)緩沖更新(利用隊(duì)列緩沖區(qū)溢出產(chǎn)生注冊事件)。最終實(shí)現(xiàn)的效果如下圖所示:

c2bc3f2e-a06e-11ee-8b88-92fbcf53809c.png

接下來小編將帶著大家從零開始,完成這個(gè)程序的編寫。

二、設(shè)計(jì)實(shí)現(xiàn):

1.建立Actor并構(gòu)造輔助循環(huán)

首先我們創(chuàng)建一個(gè)空白項(xiàng)目Simulate Linear Encoder(項(xiàng)目需要先保存),在我的電腦右鍵—>新建 —>操作者。

c2cf6cf2-a06e-11ee-8b88-92fbcf53809c.png

分別創(chuàng)建Business Logic、Linear Encoder、User Interface三個(gè)Actor。

c2dce35a-a06e-11ee-8b88-92fbcf53809c.png

接下來我們來重寫Actor的方法,可以重寫Actor Core構(gòu)建輔助循環(huán)以實(shí)現(xiàn)用戶交互界面。我們可以選中Linear Encoder這個(gè)類,右鍵—>新建—>用于重寫的VI。

c2e7a95c-a06e-11ee-8b88-92fbcf53809c.png

可以看到Actor類支持重寫的方法,構(gòu)建輔助循環(huán)我們一般需要重寫:Actor Core、Pre Launch Init、Stop Core這三個(gè)VI。

c2f94d7e-a06e-11ee-8b88-92fbcf53809c.png

如果想要在Linear Encoder的Actor Core構(gòu)建用戶交互界面,就需要一個(gè)額外的輔助循環(huán)以響應(yīng)前面板的事件。格外要注意的是輔助循環(huán)的停止,不然可能會無法正常退出程序。

正常程序關(guān)閉時(shí),需要向Actor Core 發(fā)送Stop Message消息,以關(guān)閉Actor Core執(zhí)行消息的循環(huán)。

c300482c-a06e-11ee-8b88-92fbcf53809c.png

我們可以利用注冊消息的形式,在Pre Launch Init中創(chuàng)建用戶事件,當(dāng)執(zhí)行Stop Core時(shí)產(chǎn)生注冊事件,輔助循環(huán)響應(yīng)停止。現(xiàn)在我們來重寫Pre Launch Init,右鍵—>用戶界面—>事件,就可以看到關(guān)于用戶事件相關(guān)API

c3141190-a06e-11ee-8b88-92fbcf53809c.png

我們要在Pre Launch Init中創(chuàng)建用戶事件并將事件的輸出存到LinearEncoder的私有數(shù)據(jù)中,雙擊這個(gè)帶紅色鑰匙標(biāo)識項(xiàng),便可以看到類存放私有數(shù)據(jù)的地方。

c3225a52-a06e-11ee-8b88-92fbcf53809c.png

創(chuàng)建一個(gè)Events的簇用于存放注冊事件,將其拖進(jìn)類私有數(shù)據(jù)簇進(jìn)行保存。

c32ad90c-a06e-11ee-8b88-92fbcf53809c.png

其中Stop用戶事件的引用句柄可以通過右鍵“用戶事件輸出”創(chuàng)建輸入控件得到。

c3431fe4-a06e-11ee-8b88-92fbcf53809c.png

這樣我們便可以在Pre Launch Init中將產(chǎn)生用戶事件的引用句柄存到類私有數(shù)據(jù)中(注意用戶事件數(shù)據(jù)類型需要命名)。

c34d8f9c-a06e-11ee-8b88-92fbcf53809c.png

接著我們重寫Stop Core,產(chǎn)生用戶事件并銷毀用戶事件。

c35827d6-a06e-11ee-8b88-92fbcf53809c.png

接下來便可以重寫Actor core 來搭建輔助循環(huán)。

c36e941c-a06e-11ee-8b88-92fbcf53809c.png

輔助循環(huán)完成之后,便可以開始前面板用戶交互界面的搭建。

2.重構(gòu)Actorcore前面板

c38556e8-a06e-11ee-8b88-92fbcf53809c.png

這是Actor core前面板,我們一般情況下不需要在程序運(yùn)行時(shí)顯示這些,可以隱藏這些控件或者在VI前面板中尋找一個(gè)空白的地方,放置一個(gè)水平指針滑動桿以模擬線性編碼器的位置輸出,如下圖所示:

c3930f9a-a06e-11ee-8b88-92fbcf53809c.png

將Linear Encoder的Actor Core的VI窗口外觀屬性更改為自定義,調(diào)用時(shí)顯示前面板(User Interface的Actor Core也需要進(jìn)行設(shè)置)

c39fdf36-a06e-11ee-8b88-92fbcf53809c.png

3.構(gòu)造傳輸數(shù)據(jù)的方法

本次范例中模擬位置數(shù)據(jù)更新到用戶界面方式有兩種形式:單點(diǎn)實(shí)時(shí)更新,多點(diǎn)緩沖更新(利用隊(duì)列緩沖區(qū)溢出產(chǎn)生注冊事件)。

接下來我們處理多點(diǎn)的緩沖數(shù)據(jù):在Actor core中增加數(shù)值控制值改變的事件。

c3b429dc-a06e-11ee-8b88-92fbcf53809c.png

我們新增一個(gè)方法Add Value to Buffer.vi用于將數(shù)據(jù)存儲到隊(duì)列的緩沖區(qū),右鍵LinearEncoder類,新建基于靜態(tài)分配模板的VI(動態(tài)分配模板的VI,子類繼承可以重寫)。

c3c449f2-a06e-11ee-8b88-92fbcf53809c.png

我們先在類私有數(shù)據(jù)的簇中,增加隊(duì)列引用句柄。

c3cf4bfe-a06e-11ee-8b88-92fbcf53809c.png

回到Pre Launch Init中,在初始化時(shí)創(chuàng)建用于存放緩沖數(shù)據(jù)的隊(duì)列,將隊(duì)列引用存放在私有數(shù)據(jù)中。隊(duì)列緩沖大小設(shè)置為100,即超出100個(gè)數(shù)據(jù),在入隊(duì)列時(shí)會造成超時(shí)。

c3e4120a-a06e-11ee-8b88-92fbcf53809c.png

同樣的在Actor停止時(shí),需要將隊(duì)列的句柄釋放,即在Stop core增加釋放隊(duì)列引用。

c3efadae-a06e-11ee-8b88-92fbcf53809c.png

隊(duì)列的準(zhǔn)備工作完成,我們回到新增的Add Value to Buffer.vi處理緩沖數(shù)據(jù),可以通過入隊(duì)列是否超時(shí)來判斷緩沖區(qū)是否滿100個(gè)點(diǎn)的數(shù)據(jù),滿足則將數(shù)據(jù)更新出去。

(此時(shí)Business Logic的接口消息還未創(chuàng)建,數(shù)據(jù)并未傳遞出去)

c3fa7e78-a06e-11ee-8b88-92fbcf53809c.png

接下來我們重寫User Interface的Actor core,按上面同樣的步驟構(gòu)建輔助循環(huán)。同時(shí)增加兩個(gè)用戶事件,分別用于更新單點(diǎn)位置數(shù)據(jù)和波形數(shù)據(jù)。

c4066f26-a06e-11ee-8b88-92fbcf53809c.png

User Interface —— Pre Launch Init 程序框圖:

c4164f86-a06e-11ee-8b88-92fbcf53809c.png

User Interface —— Stop core 程序框圖:

c424ff36-a06e-11ee-8b88-92fbcf53809c.png

User Interface —— Actor core 程序框圖:

c42f3adc-a06e-11ee-8b88-92fbcf53809c.png

接著我們構(gòu)建User Interface Actor core的前面板,需要波形圖用于顯示100個(gè)點(diǎn)的緩沖數(shù)據(jù)、數(shù)值控件顯示Current Position如下圖所示:

c44a0312-a06e-11ee-8b88-92fbcf53809c.png

在事件結(jié)構(gòu)中創(chuàng)建兩個(gè)用戶事件的響應(yīng):

c4591168-a06e-11ee-8b88-92fbcf53809c.png

c467a1f6-a06e-11ee-8b88-92fbcf53809c.png

接著我們?nèi)?chuàng)建兩個(gè)靜態(tài)分配的VI,分別是:Update Current Position.vi和Update Graph.vi。這兩個(gè)VI用于產(chǎn)生用戶事件,由Business Logic 發(fā)送消息將Linear Encoder 產(chǎn)生的數(shù)據(jù)更新到前面板。

c477fcc2-a06e-11ee-8b88-92fbcf53809c.png

c48e7434-a06e-11ee-8b88-92fbcf53809c.png

記得在前面板連接好輸入輸出接線端,分別在Update Current Position.vi和UpdateGraph.vi上右鍵—>操作者框架—>創(chuàng)建消息,LabIVEW會自動用腳本幫我們創(chuàng)建好操作者消息,User Interface的內(nèi)容就完成了。

c4995228-a06e-11ee-8b88-92fbcf53809c.png

4.接口的應(yīng)用

現(xiàn)在我們來處理Business Logic的部分,用戶邏輯是將Linear Encoder傳遞進(jìn)來的數(shù)據(jù)更新到User Interface,我們不能直接在Linear Encoder中發(fā)送Business Logic的更新數(shù)據(jù)消息,這樣會使Linear Encoder與Business Logic產(chǎn)生耦合,所以我們使用接口來解耦,進(jìn)行數(shù)據(jù)的傳遞。

右鍵我的電腦—>新建—>接口,命名為BusinessLogic Interface。

c4a2ba34-a06e-11ee-8b88-92fbcf53809c.png

右鍵接口—>新建—>基于動態(tài)模板分配的VI。

c4abb300-a06e-11ee-8b88-92fbcf53809c.png

分別在前面板放置數(shù)值控件、數(shù)值數(shù)組控件作為輸入端,并連接好接線端。

Position Updated.vi

c4b3637a-a06e-11ee-8b88-92fbcf53809c.png

Encoder Buffer Updated.vi

c4c45e64-a06e-11ee-8b88-92fbcf53809c.png

分別右鍵兩個(gè)方法—>操作者框架—>創(chuàng)建消息,為其創(chuàng)建消息,如下所示:

c4d1c41e-a06e-11ee-8b88-92fbcf53809c.png

接口創(chuàng)建完畢,我們右鍵Business Logic類,選擇屬性為它繼承這個(gè)接口。

c4e074dc-a06e-11ee-8b88-92fbcf53809c.png

c4ef8f08-a06e-11ee-8b88-92fbcf53809c.png

繼承接口后我們會發(fā)現(xiàn)Business Logic這個(gè)Actor斷線了,這是因?yàn)槔^承接口后必須重寫接口方法。右鍵Business Logic新建—>用于重寫的VI。

可以看到增加了兩個(gè)帶星號的方法,也就是我們剛才接口里創(chuàng)建的兩個(gè)方法。我們按住Ctrl同時(shí)選中Actor Core.vi、Encoder Buffer Updated.vi、Position Updated.vi對這三個(gè)VI進(jìn)行重寫。

c4f764bc-a06e-11ee-8b88-92fbcf53809c.png

首先對Actor core進(jìn)行重寫,我們需要在這個(gè)Actor內(nèi)啟動Linear Encoder、User Interface,并將兩個(gè)Actor的消息隊(duì)列引用,保存到Business Logic的私有數(shù)據(jù)中,以便在該Actor內(nèi)可以隨時(shí)引用。

c5015d50-a06e-11ee-8b88-92fbcf53809c.png

此處用的是啟動嵌套操作者函數(shù),它會將Calling Actor與 Nested Actor操作者關(guān)聯(lián)起來,Launch Nested Actor有一個(gè)Auto-Stop默認(rèn)為T,為T狀態(tài)下啟動 NestedActor會將隊(duì)列進(jìn)行保存,當(dāng)此Calling Actor退出時(shí)便會自動關(guān)閉其下所有的Nested Actoor。

c50fd5b0-a06e-11ee-8b88-92fbcf53809c.png

接著我們重寫Encoder Buffer Updated.vi。

c5249b58-a06e-11ee-8b88-92fbcf53809c.png

c53a3a6c-a06e-11ee-8b88-92fbcf53809c.png

此處的兩個(gè)Send Message:

c5476160-a06e-11ee-8b88-92fbcf53809c.png

回到Linear Encoder Actor補(bǔ)全Business Logic傳遞數(shù)據(jù)的部分,打開Add Value to Buffer.vi ,用接口消息Send EncoderBuffer Updated.vi將數(shù)據(jù)傳遞出去。

c55ed48a-a06e-11ee-8b88-92fbcf53809c.png

最后打開Linear Encoder的Actor core,將Linear Encoder Position值傳遞到Add Value to Buffer.vi以及接口消息PositionUpdated.vi中。

c56b2cee-a06e-11ee-8b88-92fbcf53809c.png

5.創(chuàng)建啟動器

這樣我們的程序就編寫完畢了,可以創(chuàng)建一個(gè)Launcher.vi用于啟動Business Logic,驗(yàn)證最終成果。

c57aaad4-a06e-11ee-8b88-92fbcf53809c.png

三、內(nèi)容總結(jié):

1、創(chuàng)建Actor,重寫Actor Method;

2、構(gòu)建輔助循環(huán),利用注冊事件關(guān)閉輔助循環(huán);

3、學(xué)習(xí)使用接口,進(jìn)行模塊間解耦;

4、了解嵌套操作者之間的啟停機(jī)制。

注意:本文中的示例程序?qū)旁谝韵掳俣染W(wǎng)盤鏈接中,大家可自行下載并參考學(xué)習(xí),注意軟件版本哦(本篇練習(xí)使用的LabVIEW版本為2020)~

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3772

    瀏覽量

    137114
  • LabVIEW
    +關(guān)注

    關(guān)注

    1995

    文章

    3670

    瀏覽量

    333063
  • 仿真
    +關(guān)注

    關(guān)注

    51

    文章

    4234

    瀏覽量

    135293

原文標(biāo)題:教程 | Actor Framework練習(xí)——仿真線性編碼器

文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    編碼器仿真模型

    在搗鼓溫度控制仿真,需要用到編碼器,型號為EC11E.原理圖都畫好了,其他仿真模型也都有了,就是編碼器
    發(fā)表于 07-15 01:30

    sushu---Actor Framework基本介紹

    一練]Actor Framework框架(1125-1201)2016-02-28 20:15:20新寫的一篇帖子:sushu---Actor Framework一種使用方式主貼里面循
    發(fā)表于 01-03 20:05

    actor framework 學(xué)習(xí)

    本帖最后由 yingtn 于 2018-2-27 11:47 編輯 各位前輩:小弟在學(xué)習(xí) actor framework 時(shí)遇到了一個(gè)問題:在右擊類新建時(shí)“重寫的VI項(xiàng)”是灰色的,不可選 ,求教?我用的是 labview 2015 32位。
    發(fā)表于 02-27 11:44

    Actor Framework -- Test Sequence

    本帖最后由 shenjianym 于 2019-10-29 08:13 編輯 用Actor Framework框架寫了一個(gè)關(guān)于測試序列(生成隨機(jī)數(shù)并判斷)的程序。該程序使用的是LabVIEW2017版本,加2017版JKL狀態(tài)機(jī)。注:程序跑第二次的時(shí)候會出現(xiàn)BUG,
    發(fā)表于 10-28 15:28

    什么是線性編碼器

    `線性編碼器是什么呢,首先我們要先了解一下編碼器什么,編碼器就是把數(shù)據(jù)利用一定的原理,把數(shù)據(jù)編輯整理,進(jìn)而轉(zhuǎn)換成能利用通訊采集的信號的一種設(shè)備。這里我們一般認(rèn)為
    發(fā)表于 12-17 11:22

    什么是編碼器 什么叫編碼器 編碼器什么意思

    什么是編碼器 什么叫編碼器 編碼器什么意思 第一種含義:編碼器是把角位移或直線位移轉(zhuǎn)換成電信號的一種裝置。前者成為碼盤,后者稱碼尺.按照讀
    發(fā)表于 12-18 00:13 ?1.6w次閱讀
    什么是<b class='flag-5'>編碼器</b> 什么叫<b class='flag-5'>編碼器</b> <b class='flag-5'>編碼器</b>什么意思

    編碼器,編碼器是什么意思

    編碼器,編碼器是什么意思 編碼器 編碼器(encoder)是將信號
    發(fā)表于 03-08 15:04 ?3248次閱讀

    光電編碼器,光電編碼器是什么意思

    光電編碼器,光電編碼器是什么意思 光電編碼器光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或
    發(fā)表于 03-08 15:20 ?1608次閱讀

    編碼器正交編碼工作原理

    正交編碼器(又名雙通道增量式編碼器),用于將線性移位轉(zhuǎn)換為脈沖信號。
    發(fā)表于 08-02 08:50 ?3.3w次閱讀

    編碼器基礎(chǔ)知識簡介與分類

    什么是編碼器編碼器是對旋轉(zhuǎn)角度和線性位移進(jìn)行編碼的傳感
    的頭像 發(fā)表于 03-18 11:41 ?6862次閱讀

    在LabVIEW中創(chuàng)建Actor Framework的同步消息

    首先,第一次使用Reply Msg時(shí),繼承關(guān)系中是沒有Reply Msg的,因?yàn)槟J(rèn)Reply Msg不包含在Actor Framework.lvlib中的,需要手動添加。
    的頭像 發(fā)表于 11-04 10:33 ?4942次閱讀

    教程|創(chuàng)建你的第一個(gè)Actor Framework

    本文小編將手把手教你如何在LabVIEW中創(chuàng)建你的第一個(gè)Actor Framework,跟著搭建并感受對象和類的神奇吧!
    的頭像 發(fā)表于 12-26 17:00 ?4229次閱讀

    編碼器種類及型號

    編碼器種類及型號:最常見的編碼器類型是旋轉(zhuǎn)編碼器線性編碼器。旋轉(zhuǎn)編碼器通常用于測量機(jī)器人的關(guān)節(jié)
    的頭像 發(fā)表于 05-18 11:15 ?6637次閱讀
    <b class='flag-5'>編碼器</b>種類及型號

    編碼器的主要作用與應(yīng)用有哪些?

    在速度、距離和方向反饋系統(tǒng)中,編碼器必須充分利用其功能。簡而言之,編碼器主要檢測和控制可用于調(diào)整或監(jiān)控傳輸?shù)倪\(yùn)動傳感編碼器:通常用于精確測量線性
    的頭像 發(fā)表于 09-10 08:08 ?4035次閱讀
    <b class='flag-5'>編碼器</b>的主要作用與應(yīng)用有哪些?

    編碼器與PLC的接線方法

    編碼器分為旋轉(zhuǎn)編碼器線性編碼器兩種。旋轉(zhuǎn)編碼器用于檢測旋轉(zhuǎn)位置和速度,而線性
    發(fā)表于 12-22 09:20 ?2253次閱讀
    <b class='flag-5'>編碼器</b>與PLC的接線方法