TcCOM基本概念與說(shuō)明_第1頁(yè)
TcCOM基本概念與說(shuō)明_第2頁(yè)
TcCOM基本概念與說(shuō)明_第3頁(yè)
TcCOM基本概念與說(shuō)明_第4頁(yè)
TcCOM基本概念與說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1頁(yè)TTcCOM基本概念與說(shuō)明作者:余洋職務(wù):技術(shù)支持工程師郵箱:yang.yu@日期:2023-08-04摘要:TcCOM基于COM(MicrosoftWindows世界的組件對(duì)象模型),旨在模塊化不同的組件。一個(gè)驅(qū)動(dòng)程序可以由一個(gè)或者多個(gè)TcCOM模塊組成。附件:序號(hào)文件名備注歷史版本:免責(zé)聲明:我們已對(duì)本文檔描述的內(nèi)容做測(cè)試。但是差錯(cuò)在所難免,無(wú)法保證絕對(duì)正確并完全滿足您的使用需求。本文檔的內(nèi)容可能隨時(shí)更新,如有改動(dòng),恕不事先通知,也歡迎您提出改進(jìn)建議。參考信息:目錄1. TcCom中的交互流程 31.1. 模塊ID 32. TcCom接口說(shuō)明 33. TcCom中模塊的使用壽命(周期) 44. TcCom中模塊的屬性 45. TcCom模塊狀態(tài)機(jī)(TwinCATModuleStateMachine) 56. TcCom中模塊的通訊 76.1. IO映射 76.2. IO數(shù)據(jù)指針 76.3. 接口關(guān)聯(lián) 76.4. ADS通訊 7

TcCom中的交互流程首先是不同的TcCOM類,首先這些需要被創(chuàng)建實(shí)例。實(shí)例之間可以通過(guò)方法調(diào)用交互,實(shí)例需要通過(guò)objectserver實(shí)現(xiàn)。(objectserver是TwinCAT系統(tǒng)中的一個(gè)核心組件,它充當(dāng)了一個(gè)中央服務(wù)器的角色,用于管理和協(xié)調(diào)系統(tǒng)中的對(duì)象)類的實(shí)例與ObjServer訪問(wèn)是通過(guò)TcQueryInterface交互(TcQueryInterface是TwinCAT中的一個(gè)函數(shù),用于查詢對(duì)象是否實(shí)現(xiàn)了指定的接口,并獲取該接口的引用)。模塊ID模塊自身會(huì)帶有ID,TcCOM使用的ID有兩種:GUIDs:ModulIDs,ClassIDsandInterfaceIDs.32bitlongintegers:ParameterIDs,ObjectIDs,ContextIDs,CategoryID.TcCom接口說(shuō)明接口是TcCOM非常很重要的組成部分?;赥winCAT規(guī)范,所有接口都派生自基本接口ItcUnknown。(ItcUnknown提供了TcQueryInterface和控制模塊生命周期的服務(wù))因此,每個(gè)模塊都有一些固定的接口:ITcCyclic:由模塊實(shí)現(xiàn),這些模塊稱為循環(huán)(“CycleUpdate”)。該模塊可以通過(guò)TwinCAT任務(wù)的ITcCyclicCaller接口注冊(cè)以獲取循環(huán)調(diào)用。ITcADI:可用于訪問(wèn)模塊的數(shù)據(jù)區(qū)域。ITcWatchSource:用于ADS設(shè)備通知和其他功能。ITcTask:由實(shí)時(shí)系統(tǒng)任務(wù)實(shí)現(xiàn),提供有關(guān)周期時(shí)間,優(yōu)先級(jí)和其他任務(wù)信息的信息。ITComObjectServer:接口由ObjectServer實(shí)現(xiàn),并由所有模塊引用。TcCom中模塊的使用壽命(周期)模塊的使用壽命通過(guò)參考計(jì)數(shù)器(RefCounter)確定。每當(dāng)查詢模塊接口時(shí),參考計(jì)數(shù)器都會(huì)遞增。釋放接口時(shí),計(jì)數(shù)器遞減。當(dāng)模塊登錄到ObjectServer(ITComObject接口)時(shí),還會(huì)查詢接口,此時(shí)計(jì)數(shù)器至少為1。注銷時(shí)計(jì)數(shù)器遞減。當(dāng)計(jì)數(shù)器達(dá)到0時(shí),模塊會(huì)自動(dòng)刪除釋放內(nèi)存資源。如果有別的模塊通過(guò)接口指針調(diào)用此模塊,那么該模塊將繼續(xù)存在,并且接口指針保持有效,直到釋放此指針。TcCom中模塊的屬性TcCOM模塊中有很多屬性,有些是可選(淺藍(lán)色),有些是必帶屬性(深藍(lán)色):ModuleDesctiption:每個(gè)TcCOM模塊都有一些通用描述參數(shù),比如ClassID,Class描述文件(.tmc)和實(shí)例描述文件(.tmi)。StateMachine(狀態(tài)機(jī)):每個(gè)Module都包含一個(gè)狀態(tài)機(jī),它描述了模塊的初始化狀態(tài)以及可以從外部修改此狀態(tài)的方法。狀態(tài)機(jī)描述在模塊啟動(dòng)和停止期間發(fā)生的狀態(tài)。這涉及模塊的創(chuàng)建、參數(shù)化等等。TcCOM模塊的狀態(tài)機(jī)定義了狀態(tài)INIT、PREOP、SAFEOP和OP。盡管狀態(tài)名稱與EtherCAT現(xiàn)場(chǎng)總線下的名稱相同,但實(shí)際上是完全不同的兩個(gè)概念。ITComObjectInterface/interface:兩種接口一種是模塊通用的接口,每個(gè)模塊都必須有,另外一種是開發(fā)用戶可以自定義的接口。Parameters:參數(shù)是用戶自定義的一些數(shù)據(jù),參數(shù)可以在初始化期間讀取或?qū)懭?,也可以在運(yùn)行時(shí)讀取或?qū)懭耄∣P狀態(tài))。每個(gè)參數(shù)都由對(duì)應(yīng)的參數(shù)ID指定。參數(shù)ID可以是全局的、有限的全局或特定于模塊的。Interfacepointers:接口指針是接口的對(duì)應(yīng)項(xiàng),如果一個(gè)模塊想要使用另一個(gè)模塊的數(shù)據(jù)接口,必須具有接口類型的指針才能調(diào)用,確保它能夠指向另一個(gè)模塊。DataAreas:模塊里包含了數(shù)據(jù)區(qū)域,用于存放數(shù)據(jù)。數(shù)據(jù)區(qū)域里可以包含任何數(shù)據(jù),比如輸入輸出,或者中間變量等等。DataAreaPointer:同樣,如果一個(gè)模塊下要訪問(wèn)其他模塊的數(shù)據(jù)區(qū)域,它必須包含了數(shù)據(jù)區(qū)域的指針,訪問(wèn)直接到內(nèi)存區(qū)域。Context:在模塊處理任務(wù)時(shí),即對(duì)應(yīng)的是實(shí)時(shí)任務(wù)。需要考慮上下文信息。這個(gè)內(nèi)容對(duì)于配置模塊十分重要。如EtherCAT主站可以支持多個(gè)獨(dú)立的實(shí)時(shí)任務(wù),也就是多個(gè)與時(shí)間相關(guān)的上下文(代碼)。這些內(nèi)容必須在模塊描述中進(jìn)行配置和指定。Categories:模塊可以通過(guò)實(shí)現(xiàn)接口ITComObjectCategory來(lái)提供類別。類別由ObjectServer枚舉。ADS:每個(gè)模塊都可以通過(guò)ADS訪問(wèn),每個(gè)模塊都有對(duì)應(yīng)的ADS端口,通過(guò)該端口可以接受專用的ADS指令(非實(shí)時(shí))。模塊可以用C++和ST語(yǔ)言創(chuàng)建。TwinCATPLC的面向?qū)ο髷U(kuò)展就是為創(chuàng)建模塊量身定制。兩個(gè)不同類型的模塊可以通過(guò)接口進(jìn)行交互,方式與純C++模塊相同。面向?qū)ο蟮臄U(kuò)展使接口與C++中相同。PLC模塊也通過(guò)ObjectServer進(jìn)行注冊(cè),并且通過(guò)它訪問(wèn)。PLC模塊在復(fù)雜性方面有所不同。無(wú)論是只生成一個(gè)小的FB模塊,還是將完整的PLC程序打包到一個(gè)模塊中,都沒(méi)有區(qū)別,因?yàn)槊總€(gè)PLC程序都是TwinCAT模塊意義上的模塊。PLC程序會(huì)自動(dòng)打包到一個(gè)模塊中,并在ObjectServer和一個(gè)或多個(gè)任務(wù)模塊中注冊(cè)自身。對(duì)模塊過(guò)程數(shù)據(jù)的訪問(wèn)(例如,與現(xiàn)場(chǎng)總線驅(qū)動(dòng)器有關(guān)的映射)也通過(guò)定義的數(shù)據(jù)區(qū)域和ITcADI進(jìn)行控制。TcCom模塊狀態(tài)機(jī)(TwinCATModuleStateMachine)每個(gè)TwinCAT模塊都有對(duì)應(yīng)的狀態(tài)機(jī)(INIT、PREOP、SAFEOP、OP),這個(gè)狀態(tài)機(jī)和EtherCAT狀態(tài)機(jī)的概念類似,但是內(nèi)容缺大相徑庭。除了某一個(gè)特定的狀態(tài)之外TwinCAT模塊還有對(duì)應(yīng)的轉(zhuǎn)換過(guò)程狀態(tài)(IP、PI、PS、SP、SO、OS)。(1)INIT:初始化狀態(tài)只是一個(gè)虛擬狀態(tài)。創(chuàng)建模塊后,模塊就會(huì)立即從INIT轉(zhuǎn)化為PREOP,即執(zhí)行IP狀態(tài)轉(zhuǎn)換。實(shí)例化和IP同時(shí)發(fā)生,因此模塊不會(huì)保持INIT狀態(tài)。只有當(dāng)模塊被移除時(shí),它才會(huì)在短時(shí)間內(nèi)保持INIT狀態(tài)。(2)IP(INITTOPREOP):在IP狀態(tài)轉(zhuǎn)換期間,模塊使用其唯一的ObjectID向?qū)ο蠓?wù)器(ObjectServer)注冊(cè)。初始化參數(shù)(也在對(duì)象創(chuàng)建期間分配)將傳輸?shù)侥K。在此轉(zhuǎn)換期間,模塊無(wú)法建立與其他模塊的連接,因?yàn)椴磺宄渌K是否已存在并已注冊(cè)到ObjectServer。當(dāng)模塊需要系統(tǒng)資源(例如內(nèi)存)時(shí),可以在狀態(tài)轉(zhuǎn)換期間分配這些資源。同理,在從PREOP反過(guò)渡到INIT(PI)期間,必須再次釋放所有分配的資源。(3)PREOP:在PREOP狀態(tài)下,模塊創(chuàng)建完成,模塊通常已完全參數(shù)化(不排除在從PREOP過(guò)渡到SAFEOP期間可能會(huì)添加更多參數(shù))。該模塊已在ObjectServer中注冊(cè),但尚未創(chuàng)建與其他模塊的連接。(4)PS(PREOPTOSAFEOP):在此狀態(tài)轉(zhuǎn)換中,模塊可以與其他模塊建立連接。為此,它通常會(huì)接收其他模塊的ObjectID以及初始化數(shù)據(jù),這些ObjectID現(xiàn)在通過(guò)ObjectServer轉(zhuǎn)換為與這些模塊的實(shí)際連接。在此狀態(tài)轉(zhuǎn)換期間,可以傳輸更多參數(shù)。例如,父模塊可以將自己的參數(shù)傳輸?shù)阶幽K。(5)SAFEOP:模塊在此階段仍處于非實(shí)時(shí)上下文中,正在等待系統(tǒng)或其他模塊切換到OP狀態(tài)。(6)SO(SAFEOPTOOP):從SAFEOP到OP狀態(tài)的轉(zhuǎn)換在實(shí)時(shí)上下文中進(jìn)行,此時(shí)不再分配系統(tǒng)資源。該模塊的資源現(xiàn)在可以由其他模塊請(qǐng)求,同時(shí)該模塊也可以向其他模塊注冊(cè),例如為了在任務(wù)期間獲得循環(huán)調(diào)用。(此轉(zhuǎn)換不應(yīng)用于長(zhǎng)時(shí)間運(yùn)行的任務(wù):如,文件操作應(yīng)在PS期間執(zhí)行。)(7)OP:在OP狀態(tài)下,模塊開始工作,并在TwinCAT中完全處于活動(dòng)狀態(tài)。(8)OS(OPTOSAFEOP):在此狀態(tài)轉(zhuǎn)換在實(shí)時(shí)上下文中發(fā)生。SO轉(zhuǎn)換中的所有操作都將被撤消,SO轉(zhuǎn)換期間請(qǐng)求的所有資源將再次釋放。(9)SP(SAFEOPTOPREOP):PS轉(zhuǎn)換中的所有操作都將撤消,并且PS轉(zhuǎn)換期間請(qǐng)求的所有資源將再次釋放。(10)PI:(PREOPTOINIT)IP轉(zhuǎn)換中的所有操作都將被撤消,并且IP轉(zhuǎn)換期間請(qǐng)求的所有資源都將再次釋放。模塊從ObjectServer注銷并通常會(huì)自行刪除(見(jiàn)使用壽命)。TcCom中模塊的通訊IO映射TcCOM中模塊的輸入和輸出可以通過(guò)IO映射進(jìn)行鏈接,就像PLC鏈接到實(shí)際物理模塊的輸入輸出通道一樣。對(duì)于C++模塊,可以在TMC編輯器中創(chuàng)建描述相應(yīng)輸入/輸出的數(shù)據(jù)區(qū)域。然后將這些鏈接在TwinCAT解決方案中。C++、PLC、MATLAB都可以使用該方法。IO數(shù)據(jù)指針可以通過(guò)TMC編輯器中創(chuàng)建的數(shù)據(jù)區(qū)域指針在任務(wù)中直接去訪問(wèn)內(nèi)存。但是如果出現(xiàn)一個(gè)任務(wù)的多個(gè)調(diào)用方或其他任務(wù)的調(diào)用方,用戶必須通過(guò)適當(dāng)?shù)臋C(jī)制確保數(shù)據(jù)一致性,可用于C++和MATLAB。接口關(guān)聯(lián)TcCOM模塊可以提供也在TMC編輯器中定義的接口。在TMC編輯器當(dāng)中建立完接口之后,它將提供適當(dāng)?shù)姆椒āH缓?,調(diào)用模塊將具有指向該模塊的“接口指針”,以便調(diào)用方法。使用接口的方式可能會(huì)造成調(diào)用阻塞(返回值產(chǎn)生之后才會(huì)釋放)。如果出現(xiàn)一個(gè)任務(wù)的多個(gè)調(diào)用方或其他任務(wù)的調(diào)用方,用戶必須通過(guò)適當(dāng)?shù)臋C(jī)制確保數(shù)據(jù)一致性。一般使用在C++里。ADS通訊作為TwinCAT系統(tǒng)的內(nèi)部通信方式,ADS可用于模塊之間的通信(C#中是非實(shí)時(shí)的)。ADS還可用于從UserMode收集或提供數(shù)據(jù),并與其他控制器通信(即通過(guò)網(wǎng)絡(luò))。此外ADS還可用于確保數(shù)據(jù)一致性通信,例如任務(wù)/內(nèi)核/CPU之間的通信。在這種情況下,TcCOM模塊既可以是客戶端,也可以是服務(wù)器。PLC,C++,Matlab都可以使用(具體的使用方法見(jiàn)對(duì)應(yīng)語(yǔ)言的ADS庫(kù)文件以及AutomationInterface)上海(中國(guó)區(qū)總部)中國(guó)上海市靜安區(qū)汶水路299弄9號(hào)(市北智匯園)電話 北京分公司北京市西城區(qū)新街口北大街3號(hào)新街高和大廈407室電話 郵

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論