衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Actor Framework仿真線性編碼器

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

在學習LabView面向對象編程過程中,相信大家也都接觸到了Actor Framework。該框架于2010年NI Week首次公布,經過多年不斷迭代更新,逐漸成為LabVIEW中最為重要的并發開發框架。

我們將通過本期內容綜合學習Actor Framework的一些基礎知識,包括Actor的創建、方法的重寫、輔助循環的構建、Actor嵌套關系、以及接口消息的應用。讓大家對AF能有一個更深入的了解。

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

一、整體功能展示:

程序主體由三部分構成,分別為Business Logic、Linear Encoder、User Interface。

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

用戶操作Linear Encoder產生數據,分兩種形式更新到User Interface:單點實時更新、多點緩沖更新(利用隊列緩沖區溢出產生注冊事件)。最終實現的效果如下圖所示:

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

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

二、設計實現:

1.建立Actor并構造輔助循環

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

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

分別創建Business Logic、Linear Encoder、User Interface三個Actor。

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

接下來我們來重寫Actor的方法,可以重寫Actor Core構建輔助循環以實現用戶交互界面。我們可以選中Linear Encoder這個類,右鍵—>新建—>用于重寫的VI。

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

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

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

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

正常程序關閉時,需要向Actor Core 發送Stop Message消息,以關閉Actor Core執行消息的循環。

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

我們可以利用注冊消息的形式,在Pre Launch Init中創建用戶事件,當執行Stop Core時產生注冊事件,輔助循環響應停止?,F在我們來重寫Pre Launch Init,右鍵—>用戶界面—>事件,就可以看到關于用戶事件相關API。

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

我們要在Pre Launch Init中創建用戶事件并將事件的輸出存到LinearEncoder的私有數據中,雙擊這個帶紅色鑰匙標識項,便可以看到類存放私有數據的地方。

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

創建一個Events的簇用于存放注冊事件,將其拖進類私有數據簇進行保存。

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

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

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

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

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

接著我們重寫Stop Core,產生用戶事件并銷毀用戶事件。

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

接下來便可以重寫Actor core 來搭建輔助循環。

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

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

2.重構Actorcore前面板

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

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

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

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

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

3.構造傳輸數據的方法

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

接下來我們處理多點的緩沖數據:在Actor core中增加數值控制值改變的事件。

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

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

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

我們先在類私有數據的簇中,增加隊列引用句柄。

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

回到Pre Launch Init中,在初始化時創建用于存放緩沖數據的隊列,將隊列引用存放在私有數據中。隊列緩沖大小設置為100,即超出100個數據,在入隊列時會造成超時。

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

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

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

隊列的準備工作完成,我們回到新增的Add Value to Buffer.vi處理緩沖數據,可以通過入隊列是否超時來判斷緩沖區是否滿100個點的數據,滿足則將數據更新出去。

(此時Business Logic的接口消息還未創建,數據并未傳遞出去)

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

接下來我們重寫User Interface的Actor core,按上面同樣的步驟構建輔助循環。同時增加兩個用戶事件,分別用于更新單點位置數據和波形數據。

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

接著我們構建User Interface Actor core的前面板,需要波形圖用于顯示100個點的緩沖數據、數值控件顯示Current Position如下圖所示:

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

在事件結構中創建兩個用戶事件的響應:

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

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

接著我們去創建兩個靜態分配的VI,分別是:Update Current Position.vi和Update Graph.vi。這兩個VI用于產生用戶事件,由Business Logic 發送消息將Linear Encoder 產生的數據更新到前面板。

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

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

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

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

4.接口的應用

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

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

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

右鍵接口—>新建—>基于動態模板分配的VI。

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

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

Position Updated.vi

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

Encoder Buffer Updated.vi

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

分別右鍵兩個方法—>操作者框架—>創建消息,為其創建消息,如下所示:

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

接口創建完畢,我們右鍵Business Logic類,選擇屬性為它繼承這個接口。

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

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

繼承接口后我們會發現Business Logic這個Actor斷線了,這是因為繼承接口后必須重寫接口方法。右鍵Business Logic新建—>用于重寫的VI。

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

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

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

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

此處用的是啟動嵌套操作者函數,它會將Calling Actor與 Nested Actor操作者關聯起來,Launch Nested Actor有一個Auto-Stop默認為T,為T狀態下啟動 NestedActor會將隊列進行保存,當此Calling Actor退出時便會自動關閉其下所有的Nested Actoor。

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

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

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

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

此處的兩個Send Message:

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

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

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.創建啟動器

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

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

三、內容總結:

1、創建Actor,重寫Actor Method;

2、構建輔助循環,利用注冊事件關閉輔助循環;

3、學習使用接口,進行模塊間解耦;

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

注意:本文中的示例程序將會放在以下百度網盤鏈接中,大家可自行下載并參考學習,注意軟件版本哦(本篇練習使用的LabVIEW版本為2020)~

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3669

    瀏覽量

    135261
  • LabVIEW
    +關注

    關注

    1977

    文章

    3657

    瀏覽量

    325678
  • 仿真
    +關注

    關注

    50

    文章

    4124

    瀏覽量

    134008

原文標題:教程 | Actor Framework練習——仿真線性編碼器

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

收藏 人收藏

    評論

    相關推薦

    編碼器仿真模型

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

    sushu---Actor Framework基本介紹

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

    actor framework 學習

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

    Actor Framework -- Test Sequence

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

    什么是線性編碼器

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

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

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

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

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

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

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

    編碼器正交編碼工作原理

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

    編碼器基礎知識簡介與分類

    什么是編碼器?編碼器是對旋轉角度和線性位移進行編碼的傳感
    的頭像 發表于 03-18 11:41 ?6715次閱讀

    在LabVIEW中創建Actor Framework的同步消息

    首先,第一次使用Reply Msg時,繼承關系中是沒有Reply Msg的,因為默認Reply Msg不包含在Actor Framework.lvlib中的,需要手動添加。
    的頭像 發表于 11-04 10:33 ?4197次閱讀

    教程|創建你的第一個Actor Framework

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

    編碼器種類及型號

    編碼器種類及型號:最常見的編碼器類型是旋轉編碼器線性編碼器。旋轉編碼器通常用于測量機器人的關節
    的頭像 發表于 05-18 11:15 ?5940次閱讀
    <b class='flag-5'>編碼器</b>種類及型號

    編碼器的主要作用與應用有哪些?

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

    編碼器與PLC的接線方法

    編碼器分為旋轉編碼器線性編碼器兩種。旋轉編碼器用于檢測旋轉位置和速度,而線性
    發表于 12-22 09:20 ?1714次閱讀
    <b class='flag-5'>編碼器</b>與PLC的接線方法
    微信百家乐群规则大全| 华泰百家乐官网的玩法技巧和规则| 现金百家乐官网网上娱乐| 金湖县| 百家乐官网玩法秘诀| 金赞百家乐官网娱乐城| 免费百家乐官网娱乐城| 百家乐官网视频桌球| 百家乐官网赌王有哪些| 视频百家乐官网平台出租| 新加坡百家乐官网赌法| 牌九百家乐官网的玩法技巧和规则| 小孟百家乐官网的玩法技巧和规则| 澳门百家乐官网规| 百家乐技巧心得| 澳门百家乐有哪些| 太阳百家乐代理| 德州扑克偷鸡| 娱乐论坛| 百家乐官网正确的打法| 网络百家乐官网金海岸破解软件| 宝马会百家乐官网的玩法技巧和规则 | 百家乐官网网络娱乐场开户注册| 百家乐官网倍投工具| 澳门百家乐职业赌客| 百家乐书| 老虎机游戏下载| 大方县| 百家乐官网过两关| 百家乐长路投注法| 百家乐导航| 石棉县| 葡京百家乐官网的玩法技巧和规则| 玩百家乐五湖四海娱乐城| 全讯网25900.com| 大发888通宝| 百家乐官网怎么压对子| 金矿百家乐官网的玩法技巧和规则| 百家乐官网台布21点| 百家乐靠什么赢| 桐城太阳城招聘|