![TwinCAT 3 PLC通過接口調(diào)用C++的函數(shù)_第1頁](http://file4.renrendoc.com/view14/M07/3E/09/wKhkGWcVM_2ACTFmAAFus64kHWA150.jpg)
![TwinCAT 3 PLC通過接口調(diào)用C++的函數(shù)_第2頁](http://file4.renrendoc.com/view14/M07/3E/09/wKhkGWcVM_2ACTFmAAFus64kHWA1502.jpg)
![TwinCAT 3 PLC通過接口調(diào)用C++的函數(shù)_第3頁](http://file4.renrendoc.com/view14/M07/3E/09/wKhkGWcVM_2ACTFmAAFus64kHWA1503.jpg)
![TwinCAT 3 PLC通過接口調(diào)用C++的函數(shù)_第4頁](http://file4.renrendoc.com/view14/M07/3E/09/wKhkGWcVM_2ACTFmAAFus64kHWA1504.jpg)
![TwinCAT 3 PLC通過接口調(diào)用C++的函數(shù)_第5頁](http://file4.renrendoc.com/view14/M07/3E/09/wKhkGWcVM_2ACTFmAAFus64kHWA1505.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1頁TTwinCAT3PLC通過接口調(diào)用C++的函數(shù)作者:余洋職務(wù):技術(shù)支持工程師郵箱:yang.yu@日期:2023-08-07摘要:TwinCAT3中不同的模塊(如PLC、C++、Matlab等等)可以通過TcCom以不同的方式交互從而完成整個項(xiàng)目對于高精度算法以及實(shí)時性的需求。一般交互的方式分為四種:IO變量直接映射、接口調(diào)用、IO數(shù)據(jù)指針以及ADS通訊。本文將在C++中創(chuàng)建一個簡單的狀態(tài)機(jī),其他模塊(PLC)可以從外部啟動和停止該狀態(tài)機(jī),也可以設(shè)置或讀取C++狀態(tài)機(jī)的特定狀態(tài)。交互的方式通過接口來進(jìn)行。附件:序號文件名備注1TwinCATCPPInterfaceTest例程歷史版本:免責(zé)聲明:我們已對本文檔描述的內(nèi)容做測試。但是差錯在所難免,無法保證絕對正確并完全滿足您的使用需求。本文檔的內(nèi)容可能隨時更新,如有改動,恕不事先通知,也歡迎您提出改進(jìn)建議。參考信息:目錄1. 軟硬件版本 31.1. 控制硬件 31.2. 控制軟件 32. 準(zhǔn)備工作 33. C++TMC編輯器配置操作 34. 修改C++頭文件(.h)以及CPP文件代碼 95. PLC調(diào)用C++中的接口 12
軟硬件版本控制硬件測試電腦(Windows11專業(yè)版)控制軟件TwinCAT3(版本為4024.47,嵌入在VisualStudio2019中進(jìn)行開發(fā))VisualStudioC++開發(fā)相關(guān)組件準(zhǔn)備工作TwinCAT3安裝在64位操作系統(tǒng)上的時候,開發(fā)并運(yùn)行PLC沒什么問題,但如果要開發(fā)并運(yùn)行matlab-simulink或者C++則需要安裝測試證書,具體操作步驟詳見文檔《TwinCAT3C++使用準(zhǔn)備教程V3.11》或者使用應(yīng)用程序“一鍵環(huán)境變量設(shè)置和64位數(shù)字簽名”。C++TMC編輯器配置操作(1)首先新建一個TwinCATProject:(2)新建一個C++Project:(3)選擇“TwinCATDriverProject”,輸入項(xiàng)目名稱,并單擊Add:(4)選擇用于此驅(qū)動項(xiàng)目的模塊模板,此例程中,選擇“TwinCATModuleClassWithCyclicIO”:(5)創(chuàng)建完模塊之后進(jìn)入TMC編輯器:(6)選中DataType右鍵選擇“Addnewdatatype…”,在跳出的窗口中編輯名稱并選擇接口:(7)在創(chuàng)建的接口中右鍵新建四個Method,分別是Start、Stop、SetState、GetState:(8)展開SetState下方的Parameters,選擇?創(chuàng)建一個新的參數(shù):(9)編輯參數(shù)名稱,類型選擇位普通INT類型,描述為普通種類:(10)同理,在GetState方法中新建一個參數(shù),名字為pState,描述設(shè)置為指針:(11)在底下的模塊中,選擇ImplementedInterfaces,在右側(cè)選擇?:(12)選擇本地新增的接口,并觀察其他系統(tǒng)接口的大?。海?2)觀察到系統(tǒng)接口的大小為4(8),重新回到接口編輯頁面進(jìn)行大小的修改,確保一致:(13)右鍵C++程序項(xiàng)目,選擇TMCCodeGenerator自動生成配置的代碼:修改C++頭文件(.h)以及CPP文件代碼(1)將配置中的變量添加到頭文件StateMachineModule.h:(2)進(jìn)入CPP文件實(shí)現(xiàn)狀態(tài)機(jī)模塊四個方法的代碼:(3)在CPP文件中,編輯循環(huán)更新的函數(shù),即如果狀態(tài)為1,則遞增計數(shù)器;狀態(tài)為2,則遞減計數(shù)器。同時,將生成的計數(shù)器的值分配給Value:(4)生成(重新生成)解決方案:(5)編譯無報錯之后右鍵C++項(xiàng)目,選擇AddNewItem:(6)選擇對應(yīng)的項(xiàng)目實(shí)例,資源管理器中就會出現(xiàn)對應(yīng)C++項(xiàng)目的實(shí)例:(7)右鍵System下方的Task,選擇AddNewItem:(8)在C++模塊的實(shí)例處,選擇Context選項(xiàng)卡,然后分配對應(yīng)的Task(2):(9)檢查實(shí)例的Interfaces選項(xiàng)卡,查看是否存在對應(yīng)的自定義接口:PLC調(diào)用C++中的接口(1)在System下方的TypeSystem處選擇Interfaces選項(xiàng)卡查看系統(tǒng)接口中是否存在C++中創(chuàng)建的自定義接口IStateMachine:(2)新建一個PLC項(xiàng)目:(3)在POUS文件夾中創(chuàng)建一個功能塊FB_StateMachine,在功能塊編輯窗口中勾選Implements,右側(cè)選擇實(shí)現(xiàn)接口IStateMachine:(4)創(chuàng)建完成之后的功能塊會自動生成關(guān)鍵字ImplementIStateMachine,由于功能塊充當(dāng)代理,本身不具體實(shí)現(xiàn)接口的具體方法(而是在C++中),因此,刪除ImplementIStateMachine。同時功能塊會自動繼承ITcUnknown父類中的方法TcAddRef(計數(shù)器的顯式方法,與模塊壽命有關(guān))、TcQueryInterface(通過模塊ID調(diào)用其中的方法)和TcRelease(遞減計計數(shù)器并返回值,如果計數(shù)器為0,則對象自動刪除),但此功能塊本身卻不需要這些方法,因此,全部刪去:(5)分別在功能塊中創(chuàng)建兩個方法FB_init和FB_exit:(6)修改FB_StateMachine、FB_init和FB_exit中的代碼:首先,修改功能塊的變量聲明區(qū),在中間變量區(qū)域先創(chuàng)建屬性{attribute'TcInitSymbol'},目的是為了能夠在實(shí)例中直接將代理功能塊與對應(yīng)C++模塊中的接口ID關(guān)聯(lián),如果不編寫此屬性,則無法進(jìn)入關(guān)聯(lián)的界面。ipStateMachine:IStateMachine;則用于創(chuàng)建代理功能塊的ID。最后需要創(chuàng)建一個HERSULT類型的函數(shù)返回值,用來監(jiān)控函數(shù)處理狀態(tài):接著,編輯方法FB_init,該方法創(chuàng)建完會默認(rèn)新增兩個輸入變量,分別是bInitRetains以及bInCopyCode,代表TwinCAT軟冷熱啟動以及onlinechange狀態(tài)(激活硬件配置啟動程序之后默認(rèn)情況下對應(yīng)的顯式調(diào)用格式為FB_init(bInitRetains:=TRUE,bInCopyCode:=FALSE);)。在FB_init方法中,需要編寫相關(guān)程序,當(dāng)程序不處于在線更改模式下(即剛上電),判斷接口值是否為0,如果是,則調(diào)用FW_ObjMgr_GetObjectInstance,將代理功能塊實(shí)例與對應(yīng)C++模塊中的接口實(shí)例配對:然后,編輯FB_exit方法,當(dāng)退出onlinechange模式之后,使用函數(shù)FW_SafeRelease引用遞減計數(shù)器,釋放內(nèi)存資源,并將接口指針置為0:除此之外,編輯功能塊繼承接口中自定義的方法,由于C++中GetState函數(shù)返回的值會回到調(diào)用者,作為一個參數(shù)來傳遞,所以在C++中當(dāng)時就設(shè)置的是一個指針pState,同理,在GetState方法中,也要設(shè)置為INT類型的指針,并且在程序區(qū)域判斷接口是否等于0。如果不是,則能夠調(diào)用接口中的方法,因此進(jìn)行調(diào)用,而其中的參數(shù)即為pState:同理,編寫SetState、Start、Stop方法。(這里SetState的State只參與運(yùn)算,不用作為參數(shù)傳遞,因此,可以設(shè)置為普通的INT類型變量)最后,在主程序中調(diào)用功能塊FB_SateMachine,聲明三個變量nCounter、nCurrentState和功能塊實(shí)例fbStateMachine:PLC計數(shù)器nCounter計數(shù)器的循環(huán)遞增如果nCounter=500,則C++狀態(tài)機(jī)以狀態(tài)“1”啟動,以遞增其內(nèi)部C++計數(shù)器。然后使用GetState(ADR(nCurrentState))讀取C++的狀態(tài)。如果nCounter=1000,則C++狀態(tài)機(jī)設(shè)置為狀態(tài)“2”,以遞減其內(nèi)部C++計數(shù)器。然后使用GetState(ADR(nCurrentState))讀取C++的狀態(tài)。如果nCounter=1500,則停止C++狀態(tài)機(jī)。PLCnCounter也設(shè)置為“0”,以便一切從頭開始。(7)編譯之后在PLC實(shí)例的SymbolInitialization中關(guān)聯(lián)接口:(8)激活硬件配置下載程序:可以觀察到PLC中隨著nCounter不斷增加,到500之后,調(diào)用接口中SetState方法,nCurrentState被置為1,并且StateMachine被啟動。nCounter到1000之后,再次調(diào)用SetState方法,nCurrentState被置為2.最后,當(dāng)nCounter超過2000時,StateMachine被停止,nCounter再次歸0,從而開始一輪新的循環(huán)。在C++的TwinCATLiveWatch中,也可以觀察到當(dāng)前的狀態(tài)和輸出計時器的值:
上海(中國區(qū)總部)中國上海市靜安區(qū)汶水路299弄9號(市北智匯園)電話 北京分公司北京市西城區(qū)新街口北大街3號新街高和大廈407室電話 郵箱:beijing@ 廣州分公司廣州市天河區(qū)珠江新城珠江東路32號利通廣場1303室
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國機(jī)器人用立體攝像頭行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國油藏模擬軟件行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國電子保險絲芯片行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球中低牌號無取向硅鋼行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國特殊需求三輪車行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國超精密非球面磨床行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球軟件工程智能平臺行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球1P儲能鋰電池行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國漫畫書出版商行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國自動血壓脈搏測試儀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年廣州中醫(yī)藥大學(xué)順德醫(yī)院(佛山市順德區(qū)中醫(yī)院)招考聘用高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- 2024-2025學(xué)年北京石景山區(qū)九年級初三(上)期末語文試卷(含答案)
- 藥品流通監(jiān)管培訓(xùn)
- 中國高血壓防治指南(2024年修訂版)
- 北京市海淀區(qū)重點(diǎn)中學(xué)2025屆高考數(shù)學(xué)押題試卷含解析
- GB/Z 44765.3-2024用戶端能源管理系統(tǒng)和電網(wǎng)側(cè)管理系統(tǒng)間的接口第3部分:架構(gòu)
- 《春酒》琦君完整版
- 北師大版(2024新版)七年級上冊數(shù)學(xué)第四章《基本平面圖形》測試卷(含答案解析)
- 湖南省邵陽市武岡市2024屆高三上學(xué)期期中考試地理含答案解析
- 春節(jié)后復(fù)工安全教育培訓(xùn)考試試題及答案
評論
0/150
提交評論