




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章DCS數據采集技術10頁1.6萬字目前各種I/O設備提供的對外數據接口可分為以下幾類:數字通訊接II,包括串II類,以太網(TCP/IP協(xié)議)類,現場總線類,儀器總線類通訊接口(如GPIB等).模擬量通道輸出,設備直接提供4-20niA,l-5V或繼電器接點信號等.力控具有世界上人部分主流設備的I/O接II程序,對GPIB總線以及Honeywell,Yokogawa,Foxboro,Fisher-Rosemount等廠家的DCS也能夠支持.除通常意義上的數據采集外,力控可以利用采集到的實時數據對裝置進行實時建模,插入力控自己的先進控制控件,實施先進控制.5.1對一個設備上的數據定義不同的
2、釆集周期如果一臺設備上有1000個實時數據需要采集,而在這1000個數據中只有10個是經常刷新且需要密切監(jiān)視的,其余990個全部是輔助數據,但是也需要時常查看.如果把這1000個數據同等地對待,采用統(tǒng)一的掃描周期進行采集,就會嚴重影響10個重要數據的刷新速度怎樣既保證1000個數據都能夠采集,又確保這10個重要數據的采集速度呢有兩種辦法:辦法1:為一個設備定義兩個邏輯設備,使其具有不同的采集周期,如圖5-1所示.但是這種方法定義的最長掃描周期為10分鐘.辦法2:不用上面的辦法,一臺設備只定義一個設備名稱也可以達到要求.因為力控的I/O驅動對畫面中不顯示而且沒有組態(tài)歷史趨勢和報警的數據是不采集的
3、,僅當畫面中顯示這個數據時才進行采集.因此將不常用的數據單獨組態(tài)在一個或幾個畫面中,使用完畢馬上關閉就不會影響整個采集速度這種方法適用于存在有大量不需要快速更新的數據的情況.圖5-15.2合理設置掃描周期,避免引起設備死機有些I/O設備內部只有一個CPU,同時負責數據通訊和計算,如果在力控上設置的數據打描周期太快容易使設備死機,因此在設置這一參數時應該慎重,最好通過多次試驗確定一個合適的掃描周期一般的串I設備的掃描周期可設在10J00亳秒之間.5.3通過撥號方式與DO設備通訊力控的所有串丨IbO驅動程序都支持通過MODEM以撥號方式與設備通訊.只要正確設置電話號碼即可,如圖5-2所示.15.4
4、通訊狀態(tài)監(jiān)視,設備狀態(tài)數據的讀取力控為每一個O設備自動定義了一個系統(tǒng)變量,假如系統(tǒng)中有一個設備PLC1,則每當PLC1不能與力控正常通訊時,系統(tǒng)變量SIOPLC1的值就會被置為1.IO設備故障屬于系統(tǒng)報警.計算機通訊II故障,電纜,PLC端通訊II的故障,PLC通訊II與計算機通訊II的參數設置不一致都會造成這種結果.還有一種可能,就是數據連接項錯誤,如果計算機的命令發(fā)給PLC的只讀參數,PLC是不會予以理睬的.5.5怎樣用LO驅動程序調試IO設備力控的I/O驅動程序有數百個,針對每一種設備都有一個獨立的程序.當力控實時數據庫DB沒有啟動時,單獨啟動LO驅動可以作為本地I/O設備調試工具使用.
5、此時可以測試計算機與IO設備的通訊情況,摸索最佳的掃描周期.菜單”設置S/參數”用來規(guī)定I/O通訊過程中是否顯示計算機發(fā)出和設備響應的通訊信息.如圖5-3所示.菜單”工具T/工具”用來在不啟動實時數據庫及其數據連接項的情況卞執(zhí)行與I/O設備的通訊彈出對話框如圖5-5上部所示.此時可以按”參數設置”按鈕設置通訊參數,如圖5-6和5-7所示,主要是設置串【啲DCB參數,IP地址等.圖5-2圖5-3圖5-4正確設置參數后,按”連接設備”按鈕,如果成功的話,“連接設備”按鈕的標題變成”斷開連接”,表示可以收發(fā)數據了.如果在“參數設置”中設置”周期性發(fā)送周期”不為0,則在”連接設備”后會出現”周期發(fā)送”
6、按鈕,否則出現”手動發(fā)送”按鈕使用”周期發(fā)送”或吁動發(fā)送“按鈕,可以周期性或一次性地發(fā)送編輯框中的數據了.編輯框中數據的格式缺省是混合方式的,如果你想發(fā)送編輯框中的數據,這也是唯一的數據類型,它的形成規(guī)則如下:任何ASCII碼(除T)可以直接輸入工可以使用”來輸入;”內是由(空格)分隔的轉意字符,它們的意義為:圖5-5T:用來輸入T;2嗦:在發(fā)送數據是表示延時1亳秒圖5-6#:在發(fā)送數據是表示延時10亳秒S*:在發(fā)送數據是表示延時100亳秒T:在發(fā)送數據是表示延時1000亳秒V:表示它后面的數據是十進制的(缺省是16進制)氣空格):作為分隔符,任何未定義的字符都可以作為分隔符,最好使用空格.0
7、9:可以用來輸入10進制或16進制數據.AF/af:可以用來輸入16進制數據.例子:abcv30*#$!345對應的16進制數據串為:61H.62H,63H,76H.5BH,30H,33H.34H,35H;而且在30H之后有1111亳秒的延時.當用在其它情況(不是用來發(fā)送數據)時,唯一的差別是沒有了延時的概念.”其它工具“:校驗使用混合格式的數據,計算常用的校驗碼,ASCII碼表顯示使用16進制和10進制顯示的ASCII碼表,各種數據轉換把混合格式,16/32位整數,32位浮點數等轉換位十幾種常用數據格式,除混合格式外,其它數據格式為直接用空格分隔的數據串圖5-75.6如何開發(fā)I/O設備驅動程
8、序在力控中有一個SDKT具包,叫做FIOSSDK;口J以開發(fā)硬件設備與計算機的通訊接II程序.最簡單的只需要編寫幾個函數就可以可以做自己的I/O驅動,現在支持的硬件類型有串丨l(RS485/232/422),網絡,板卡,硬件廠家提供DLL等多種方式的通訊類型.在該SDK中開發(fā)自己的通訊接II,不需要關心硬件和計算機通訊的細節(jié),只需要了解通訊協(xié)議就可以了.如果通訊協(xié)議很復雜,該SDK中提供了足夠靈活的手段滿足不同層次的需要.例如:在設備初始化時發(fā)什么命令或做其他處理,動態(tài)改變硬件通訊參數等等.FIOS開發(fā)包簡介FIOS負貴完成與各種VO設備進行數據交換.一方面,它把從EO設備采集到的實時過程數據
9、發(fā)送給數據庫DE,另一方面,從DB發(fā)出的下置數據也通過FIOS發(fā)送給LO設備.根據監(jiān)控PC與I/O設備之間通信機制的不同,FIOS主要支持兩種工作方式:同步方式與異步方式.異步方式適用以卞一類I/O設備:這類EO設備一般可以獨立運行,與監(jiān)控計算機之間通過串II,網絡或MODEM連接.與監(jiān)控計算機之間通過明確的消息傳送(文本或二進制消息)完成數據交換數據交換過程為異步方式.同步方式適用以卞一類I/O設備:這類EO設備或者依賴PC運行(如:插在PC插槽內),或者獨立運行.但與監(jiān)控計算機之間主要通過直接訪問方式進行數據交換,具體形式包括:寄存器直接訪問(如:板卡),API函數調用ActiveX控件訪
10、問等.數據交換過程為同步方式.下面列舉了FIOS可實現的一些基本功能:底層通信功能:1),串II通信,包括:RS232/422/485.2),TCP.IP網絡通信.3),MODEM3通信,通過模擬MODEM在電話網上通信.4),寄存器訪問,如:各種DAS板卡.5),其它.鏈路控制功能:用M代表Master,即上位機(監(jiān)控PC工作站);S代表Slaver,即下位機(各種VO設備).對于異步方式,FIOS支持多種鏈路控制方式.鏈路控制方式支持以下幾種方式:1),M請求,S應答方式.2),M請求,S無應答方式.3),S主動發(fā)送,M被動等待.另外,對一次完整數據處理(讀或寫)過程,支持以下方式:1),
11、1次請求,0次應答方式.2),1次請求,1次應答方式.3),1次請求,多次應答方式.4),0次請求,1次應答方式.5),多次請求,多次應答方式.冗余功能:FIOS支持的冗余方式包括:1),單監(jiān)控站,雙VO冗余.2),雙監(jiān)控站,單IO冗余.3),雙監(jiān)控站,雙LO冗余.4),對于總線型設備(如RS485),提供總線監(jiān)測功能,可實現對冗余通信網絡的保護和監(jiān)測.前端機功能:DE與IOServer不在同一工作站上,IOServer運行在前端機上,前端機與操作站之間通過串II,TCP/IP網絡或MODEM進行通信.硬件測試與遠程調試功能:使用FIOS可完成對I/O設備的簡單測試功能.另外可實現遠程調試.故
12、障診斷與恢復功能:FIOS提供診斷機制,在較短的采集周期內報告故障的發(fā)生,診斷出下位機故障情況.當卞位機更換或恢復后,不需要對FIOS及相關程序進行任何人工干預,而在較短時間自動恢復通信.當某一臺,幾臺或部分通道發(fā)生故障,FIOS要自動優(yōu)化通信鏈,使其與其他下位機或通道之間的通信不受影響,保證通信效率.界面顯示功能:為測試,調試,運行維護方便,FIOS提供顯示界面,可顯示包扌舌:發(fā)送,應答,狀態(tài)信息,啟動時河,分包數,分包信息,成功通信次數(發(fā)送次數,成功應答次),故障次數等信息.歷史數據處理功能:對于某些能保存歷史數據的設備(如:無紙記錄儀等),FIOS能將采集到的歷史數據恢復到數據庫DB中
13、.FIOSSDK編程方式FIOSSDK提供了一種簡潔的,面向對象的編程方式以縮短開發(fā)時間,降低開發(fā)難度.FIOSSDK提供標準的開發(fā)接II和程序模板,程序員僅需要根據I/O設備的具體通信協(xié)議或驅動接II說明,填寫幾個掃描函數的實現代碼,進行必要的調試與測試,即可完成一種FIOS的開發(fā).FIOS提供的開發(fā)工具封裝了人部分程序員不必關心的技術環(huán)節(jié),如:底層通信功能(串II通信,網絡通信等),設備超時處理,設備故障診斷等.同時FIOS提供各種調試工具,方便程序員進行系統(tǒng)測試.FIOS開發(fā)壞境完全基于32位Windows平臺.它使用動態(tài)鏈接庫(DLL)技術將程序員開發(fā)的代碼整合到力控系統(tǒng)中.FIOS提
14、供給程序員的開發(fā)接II為API函數和C卄類庫.FIOSSDK組件及示例程序FIOSSDK主要由4部分組成:設備組態(tài)接Il(Iodevm),數據連接組態(tài)接Il(Ioitemui),編程接IIIoapi和描掃程序IoscanJodevm:負貴管理設備組態(tài)過程.Ioitemur負責管理數據連接組態(tài)過程.Ioapi:負貴完成與LO設備間的數據交換,包括:對通信協(xié)議的解析,數據格式的轉換等.Ioscan:主要完成對Ioapi部分的dll代碼進行周期性地掃描.同時完成與I/O設備的底層通信(串丨I通信,網絡通信等),以及設備超時處理,設備故障診斷等.Ioscan還負貴與數據庫DB之間的通信與協(xié)作.它把從I
15、/O設備采集到的數據經Ioapi解析轉換后提交給DE,或將DB下置給I/O設備的數據經Ioapi解析轉換后寫入I/O設備.Ioscaii是FIOSSDK提供的一個標準軟件工具.程序員僅需要開發(fā)IodeuiJoitennii,Ioapi三部分的代碼.示例程序4FIOSSDK提供了兩個示例:DemoControllerDemoModbus.DemoConU-oller是一個初級編程示例,它能引導初學者快速掌握開發(fā)FIOS的基本概念和方法.DemoModbus是一個實用編程示例,它釆用標準MODBUS通信協(xié)議,通過該示例,可以掌握在力控平臺上開發(fā)標準MODBUS設備I/O驅動程序的方法.FIOSSD
16、K的全部內容都是在安裝在力控自動安裝的,在力控目錄卞的子目錄Fiossdk中.FIOSSDK主要包含以下幾部分內容:Examples,程序示例,仿真程序.Include,頭文件.Manual,文檔說嘰Utility,調試工具.這2個示例具有一定的代表性,它們體現了FIOSSDK的主要功能.FIOSSDK提供了這2個示例的全部源代碼,在它們的基礎上,稍做改動,就可以開發(fā)出新的FIOS.我們把象這2個示例源程序一樣具有模板作用的程序稱為LO模板程序.為了提高開發(fā)效率,我們建議盡量使用LO模板程序,這在一定程度上,也減少,降低了編程錯誤的發(fā)生.常用術語我們把FIOSDK中經常涉及的一些概念給出定義,
17、有些術語雖然是通用名詞,但在FIOSDK中有特定含義.這些術語有一些在前文給出了解釋,有一些會在后文中陸續(xù)給出解釋.FIOSForceContiolI/OSeiver,即力控I/O驅動程序FIOSSDKFIOS軟件開發(fā)工具包FCINSTDIR力控軟件系統(tǒng)的安裝目錄FCAPPINSTDIR用力控創(chuàng)建的工程應用的目錄IOLD唯一區(qū)別各個PO驅動程序的I/O標志Iodevm設備組態(tài)接口Ioitemui數據連接組態(tài)接IIIoapi編程接口Ioscan掃描程序IO模板程序FIOS工SDK附帶示例的源程序IO配置文件設備組態(tài)時的缺省參數設置保存文件連接項結構保存數據連接信息的數據結構IOITEMDEFIO
18、描述文件定義設備的類別,廠商,型號,通信方式等參數的文本文件Iodesc.txt程序員在本文檔范圍內專指用FIOSSDK進行開發(fā)的技術人員打描函數包含在Ioapi中的API函數,它們由打描程序周期打描.打描函數完成對設備數據解析及格式轉換IOCInputOutputClass(輸入輸出類庫)的縮寫.設備組態(tài)接IIIODEVUI.DLLLO描述文件在使用力控進行組態(tài)時,一般均涉及定義O設備的過程.在定義設備時,要選擇設備的類別(PLC,智能儀表等),廠商,設備型號或通信協(xié)議,然后根據設備通信方式(串I方式網絡方式,其它方式等)設置參數以上關于一種設備的信息(類別,廠商,型號,通信方式等)完全是由
19、IO描述文件決定的.1/0描述文件是一個標準文本文件,根據其規(guī)定的填寫格式,由程序員根據具體設備自行填寫.下面介紹I/O描述文件的填寫格式.IO描述文件的文件名為IODESC.TXT,安裝目錄為:FCINSTDIRJOSeiversIOIDH.IO文件說明格式為:類別;廠商或IO程序描述;執(zhí)行文件名稱5子類型1;類型號;資源標志;提供設備地址子類型2;類型號;資源標志;提供設備地址注意,子類型號不能重復.表示回車換行最上面一行是驅動程序的總體描述,包括三項.各項之間必須以分號“;“分隔.各項內容不能含有分號”;各項含義如下:類別,驅動程序所屬類別,現分為以下幾類:PLC,智能儀表,智能模塊,變
20、頻器程序員也可以自行擴展廠商或IO程序描述,DO設備生產廠商名稱,協(xié)議名稱,如西門子.執(zhí)行文件名稱,1/0驅動程序(運行程序)的名稱,如opto_div.exe接下來幾行為驅動程序所包含的設備類型的描述,如西門子包括S5,S7等,每一子類別一行,每行包括三項,各項之間必須以分號“;”分隔.各項內容不能含有分號“;“.各項含義如下:子類型,設備類型描述如S5.類型號,設備類型編號,類型號不能重復.合法的值為0丄2,3等.使用計算機資源,使用計算機何種通信資源通信,合法的值為0,1,2等.含義如下:0,同步通信方式;1,串II通信方式;2,TCP.IP網絡通信方式;3,MODEM通信方式;4,板卡
21、方式;5,并II通信方式.提供設備地址:1表示需要指定設備地址,否則表示不需要設備地址.管理程序會自動將相同廠商或IO程序描述相同的驅動程序歸為同一樹卞.開發(fā)Iodevui力控組態(tài)環(huán)境DRAW中的設備管理功能提供了一個根據IO描述文件可靈活配置的標準設備組態(tài)接II.這個組態(tài)接II提供了一些對常用設備參數進行設置的方法.如:設備名稱,設備地址,通信端口,端口參數等.如下圖所示:對于很多設備,如果標準設備組態(tài)接II能夠滿足要求,就不再需要自己編寫Iodevui接II程序了.比如示例DemoController采用的就是標準設備組態(tài)接II.而示例DemoModbus因為涉及一些特殊的參數設置,就需要
22、自己編寫Iodevui接門程序了.因此,Iodevm接II程序實際上就是對標準設備組態(tài)接II的一個補充和擴展,并可由程序員靈活控制.Iodevui要以DLL形式提供.該DLL必須是MFC擴展DLL.該DLL的缺省文件名稱為IODEVUI.DLL,該文件必須安裝在目錄FCINSTDIRIOServersIOID”F.在進行設備組態(tài)時,力控的I/O設備管理程序會自動檢查在目FCINSTDIRIOSeiversIOEDF是否存在IODEVUI.DLL文件.如果存在,則首先根據I/O描述文件的格式,調出標準設備組態(tài)接II界面,當用戶確認后,再調出Iodevm組態(tài)接II界面;若不存在該文件,則只調出標準
23、設備組態(tài)接匸I界面.示例DemoModbus的Iodevui接II程序可以做為開發(fā)Iodevui的模板程序.我們結合示例DemoModbus的Iodevui模板程序具體解釋實現過程.查看頭文件Iodevui.h可以發(fā)現,Iodevm.dll主要實現3個輸出函數:6externCAFX_EXT_APIlongAddIoDev(constchai*szDeviceName,intnTvpe);externCAFX_EXT_APIlongModIoDev(constchar*szDeviceName);externCAFX_EXT_APIlongDelloDev(constchai*szDevice
24、Name);在進行設備組態(tài)時,當增加一個設備時,力控設備管理程序會自動調用AddIoDev()函數;當修改一個已創(chuàng)建設備時會調用ModIoDev()函數;當刪除一個設備時會調用DelloDev()函數.其中,參數szDeviceName為I/O設備名稱(輸入值,組態(tài)時由用戶指定J.nType為設備子類型號,由程序員在IO描述文件中指定.返回值為0表示操作成功;其它表示操作失敗為了較好地實現程序結構化,本模板程序提供了一個CDevMan類對設備及組態(tài)操作過程進行管理.Iodevui.dll的3個輸出函數AddIoDev(),ModIoDev()DelIoDev()的具體實現過程是在CDevMan
25、的三個成員函數Add(),Mod()和Del()中實現的.首先看一下Add()的實現代碼:*/添加I/O設備/szDeviceName,設備名稱(輸入值)/“Type,設備子類型(用于一個驅動程序驅動多種類型設備)(輸入值)/返回值說明O操作成功;其它,操作失敗longCDevMan:Add(constchar*szDeviceName,iiitnType)if(Fiiid(szDeviceName)AfxMessageBox(ni數據源名已經存在!J;return-1;CDevice*pDev=newCDevice(szDeviceNaine4iTvpe);if(CallDialog(pDe
26、v)m_list.AddTail(pDev);StoreQ;return0;elsedeletepDev;return-1;程序的一開始,調用Fmd()函數來查找是否已有相同的設備名存在,如果有給出提示并返回-1表示操作失敗,否則生成一個CDevice對象并調用CallDialog函數來顯示一個對話框,讓用戶做進一步的選擇,如呆用戶進行確認,操作成功,它把此CDevice對象加入設備鏈表中,并調用Store函數來保存設備信息.另外兩個函數和它類似.Stoie。函數如下:voidCDevMaii:Store()CFilefile;7if(file.Open(coustchaiXddeacc.da
27、fjCFilemodeReadWnteCFile:modeCreate)CArchivea】(&file,CArchive:store);Senalize(ai);ar.Close();file.CloseQ;該函數它先打開ddeacc.dat文件,如果不存在,就建立此文件.然后調用序列化函數對它進行保存,最后關閉此文件再看一看序列化函數:voidCDevMaii:Serialize(CAichive&ai)TRYCObject:Serialize(ai);m_list.Seiialize(ar);CATCH(CFileException.e)AfxMessageBox(H件版本不匹配!J;E
28、NDCATCH該函數對m_Ust(由CDevice類實例組成)進行序列化.在調用各個CDevice類實例的序列化函數時,如果是讀取操作,會依次創(chuàng)建CDevice實例,并調用CDevice的序列化函數,隨后把CDevice實例加入mjist鏈表.具體保存和讀取的變量數據在CDevice類中控制,也就是說程序員針對不同的設備可以改寫CDevice類,定義不同的成員變量,記錄設備的不同的屬性,對CDevice類重載Serialize即可實現設備的保存,加載,增加,刪除和修改等功能.我們再看一下CDevice類序列化的實現過程:voidCDevice:Serialize(CAicluve&ar)if(
29、ar.IsStormgQ)arm_csNam亡;設備名稱arom.csName;arm.dwData;如呆是保存操作,序列化函數會將參數自動存盤;如果是讀取操作,序列化函數會從磁盤上讀取參數值.8察看CallDialog函數可以發(fā)現,它生成了一個對話框,讓用戶做相應的選擇,然后把用戶選擇的信息保存在CDevice類的成員函數中,以便于儲存.整個程序框架使用CDevice類來保存設備的信息.在CallDialog函數中使用一個對話框,來讓用戶進行選擇設備的屬性,并且在CallDialog函數中把它保存在CDevice類中.所以對于一個新的設備,程序員所要做的工作就是,分析設備的協(xié)議查看是否僅使用
30、描述文件就可以完成設備的定義,如果不能,那么應該編制IoDevUi.dll.這時應分析應該增加哪一些屬性,定義哪一些CDevice類的成員變量,以及顯示什么樣的對話框,讓用戶做什么樣的選擇.所以程序員的工作重點在于修改CDevice類,增加成選變量,并重載它的Serialize函數,然后修改對話框,讓用戶做不同的選擇,并把選擇保存在CDevice類的成員變量中即可.在該示例中,我們定義了2個設備參數:CStrmgm_csName;設備的名稱DWORDm_dwData;/用于保存數據這樣只需在對話框中對m_csName和m_dwData賦值即可.*調用對話框定義數據源/pDev數據源指針返回值t
31、rue成功*boolCDevMan:CallDialog(CDevice*pDev)ASSERT(pDev);CDevDefdig;dlg.m_naine=pDev-m_csName;dlg.m_iiPiotocol=(pDev-m_dwData&0 x01);dlg.m_uiPackLong=(pDev-m_dwData)8)&0 xff;if(IDOK=dlg.DoModalQ)pDev-m_csNaine=dlg.m_naine;pDev-m_dwData=(dlg.m_iiPiotocol&OxO1);/nudwData的第0位為1表示是RTU方式0表示ASCH方式pDev-m_dwD
32、ata=(pDev-m_dwData)|(dlg.m_HiPackLongcsPath+=Hddeacc.daty/數據保存在了工程目錄的ddeacc.dat中DWORDdata;CStimgstrtemp;9shorttemp:CFilefile;if(file.Open(coustchai*)csPath,CFile:modeRead)/打開該文件CArchivea】(&file,CArchive:load);讀取的第一個數據是定義的設備的個數,但是因為可以通過GetDeviceCount函數得到設備的個數,所以這里把讀到的數據簡單的丟掉.artemp;mtliDevCnt=pMaiiag
33、ei-GetDeviceCountQ;for(mti=0;iGetDevice(i);arsutemp;/讀取設備的名字ardata;讀取數據/這兩句在講到Ioapi.dll時再進行介紹pDevice-SetPrivateData(1Jong(data&!);pDevice-SetPrivateData(2Jong(data8)&0 xff);DCBdeb;pDevice-GetDCB(dcb);dcb.fBiiiaiy=TRUE;dcb.fOutxCtsFlow=FALSE;dcb.fOutxDsiFlow=FALSE;dcb.fDuControl=DTRCONTROLDISABLE;dcb
34、.fNull=FALSE;dcb.fRtsControl=RTSjCONTROL_DISABLE;pDevice-SetDCB(dcb);ar.Close();file.CloseQ;/關閉文件elsestnemp=H對不起,沒有找到”;stnemp+=csPath;strtemp+=”程序不能運行!”;AfxMessageBox(strtenip);PostQuitMessage(O);沒有找到文件,給出提示,并終止程序的運行.注意序列化的內容和順序必須和IoDevUi.dll一致,否則會導致程序運行時產生錯誤.5.6.5Ioitemui介紹及編程示例在用力控進行組態(tài)時,把數據庫DE中的點參
35、數與某種設備的具體通道建立連接的過10程被為數據連接過程在進行數據連接時,一般還要指定數據轉換格式,數據長度等參數.數據連接過程對于不同的I/O設備,其形式和內容可能完全不同.因此必須針對不同的IO設備,設計相應的數據連接形式,保存各種參數信息.Ioitemui接II主要完成的兩部分功能,一是為用戶進行數據連接組態(tài)時提供一個界面;另外就是將用戶組態(tài)的設備參數信息用某種格式保存起來,以便在開發(fā)編程接IIIoapi時使用我們定義了一個數據結構來保存設備參數信息,這就是數據連接項結構(下面簡稱連接項結構JIOITEMDEF.IOITEMDEF定義在Ioitemui.li中:tvpedefstmctI
36、oIteniDefStmcharsti64;longn8;IOITEMDEF;這個結構是一個通用結構,由程序員自己賦值,自己解釋.Ioitemui要以DLL形式提供.該DLL必須是MFC擴展DLL.該DLL的缺省文件名稱為IOITEMUI.DLL,該文件必須安裝在目錄FCINSTDIRJOSeiversMOED.下.Ioitemui的工作過程如下:在進行數據連接組態(tài)時,力控的DBMAN管理程序會自動檢查在目錄“FCINSTDIRIOSeiversMOEDV卜是否存在IOITEX1UI.DLL文件.如果存在,則調出數據連接組態(tài)接II界面.下面介紹如何編寫Ioitemui接口程序.Ioitemui
37、.dll主要實現1個輸岀函數:externCAFX_EXT_APIlongDoIteniDlg(constchai*szDeviceName,iiitnType,IOITEMDEF&item,char*szDesc,intnFlag);其參數說明如下:szDeviceName,設備名稱(輸入值).如呆在力控中定義了一個設備Device1,那么在給該設備組點時,傳給DoIteniDlg的szDeviceName值就是字符串Device1.nType,設備子類型(用于一個驅動程序驅動多種類型設備)(輸入值).它的值在IODESC.TXT中指定(參見上一章對LO描述文件的介紹).item,數據連接項
38、結構(返回值).需要注意的是,item除了是輸出值外,也是輸入值,DBMAN管理程序每次調用DoIteniDlgO時,將上一次操作賦給item的值傳遞過來.szDesc,數據連接項描述,用于DBMAN程序顯示的提示信息.iiFlag,1表示增加數據連接項,2表示修改,0表示刪除(輸入值)其返回值0表示操作成功其它,操作失敗.Ioitemui.dll的工作過程如F:當用戶打開數據組點連接對話框時,選中了一個點,并按下增加,修改或刪除鍵,這時就會調用Ioitemui.dll的DoIteniDlg函數.程序員應該在此函數中,彈出一個對話框讓用戶進行選擇,在用戶按下了OK鍵之后,把用戶的選擇保存在it
39、em中,以后編制Ioapi.dll時可以利用這些信息.編程示例我們先結合示例DemoContioiler介紹如何開發(fā)Ioitemui.仿真器SmiControllei-的內部有數字區(qū)(DIO)和模擬區(qū)(AIO).DIO和AIO區(qū)通道范闈為:0255.每個DIO通道的數據的數值范圍為:0或1.每個AIO通道數據的數值范I制為:0M095.所以我們應該在DoIteniDlg函數中彈出一個對話框,用戶可以在此對話框中選擇輸入通道和內存地址輸入通道有兩個選項DIO通道和AIO通道供用戶選擇,內存地址可以讓用戶輸入0255之間的數據.11我們介紹一卞如果不使用I/O模板,如何自己生成一個新的Ioitem
40、ui工程:在VC+壞境卞,選擇菜單命令neg選擇新建工程,工程名為Ioitemui,選擇”MFCAppwizaid(dll)”選項,在下一步DLL類型中選擇”MFCExtensionDLL1型撚后按卜”Finish鍵.即可創(chuàng)建一個新的Ioitemui工程.打開Ioitemui.cpp文件,在文件的開頭加入存includeIoitemui.h,把Ioitemui.h拷入本工程,然后在文件的最后鍵入:longDoIteniDlg(constchar*strDataSnType.IOITEMDEF&item,char*szDesc,mtnFlag)這就加入了dll的輸出函數.打開示例D
41、emoContioller的Ioitemui模板程序,它的DoIteniDlgQ函數實現過程如下:longDoIteniDlg(constchar*szDeviceName,mtnTvpeJOITEMDEF&item,chai-*szDliFlag)CLuikDlgdig;dlg.item_nO=item.nO;dlg.item_nl=item.n1;switch(nFlag)case0:/刪除操作return0;增加或修改操作case1:case2:if(dlg.DoModal()=EDOK)item.nO=dlg.item_nO;item.n1=dlg.item_n1;spi
42、intf(szD亡scst(LPCSTR)dlg.m_desc);sprintf(item.str/,%s,l,(LPCSTR)dlg.m_desc);return0;break;return1;在這個模板程序里,還涉及一個對話框類CLuikDlg.這個對話框為用戶進行數據連接組態(tài)時提供一個界面,其形式如下:12CLuikDlg類有2個成員變量:CStrmgm_desc;保存連接項描述mtitem_n2;/item_nO保存數據區(qū)類型,0表示DIO.1表示AIO;/item_nl保存地址在CLuikDlg的WM_INITDIALOG消息函數中進行如下處理:BOOLCLinkDlg:OnInit
43、Dialog()CDialog:OiiInitDialog();/在此處設置值使對話框的顯示和是一次選擇相同,以利于執(zhí)行和上一次相近的操作m_CtrlChamiel.SetCurSel(item_nO);/設置操作選項為上一次的操作m_iiAddi=item_nl;設置地址為上一次的值UpdateData(FALSE);returnTRUE;這些處理為了使對話框的顯示和上一次選擇相同,以利于執(zhí)行和上一次相近的操作.在ONOK消息函數進行如下處理:voidCLuikDlg:OnOK()UpdateData(TRUE);/得到各個選項得值CStimgstrmg;item_n0=m_CtilChai
44、mel.GetCurSeloy/保存操作選項m_CtrlChaimel.GetWindowText(m_desc);item_nl=m_iiAddi;/保存輸入的地址m_desc+=”起始地址:”;stiing.Fonnat(M%d,m_.iiAddr);m_desc+=suing;CDialog:OnOKQ;在這個函數里,把用戶組態(tài)的內容(數據區(qū)的選擇,地址的指定)保存在item_n,并根據這些內容生成連接項描述.5.6.6掃描程序IOSCANIOSCAN是FIOS的一個主要程序模塊.它負貴完成對IOAPI部分的DLL代碼進行周期性地掃描同時完成與I/O設備的底層通信(串II通信,網絡通信等
45、),以及設備超時處理,設備故障診斷等.IOSCAN還負責與數據庫DB之間的通信與協(xié)作.它把從I/O設備采集到的數據經IOAPI解析轉換后提交給DB,或將DB卜置給LO設備的數據經IOAPI解析轉換后寫入FO設備.IOSCAN是FIOSSDK提供的一個標準軟件工具供程序員在調試和運行時直接使用.13FIOS開發(fā)工具包里提供了debug和release版本的IOSCAN程序,在目錄”FCINSTDIRFiossdkUtility”卜可以找到它們.Debug版本的IOSCAN程序主要供程序員在調試時使用,它能提供更為豐富的調試信息.在使用時,需要把IOSCAN.EXE以及配套的幾個DLL文件(即目錄
46、FCINSTDIRFiossdkUtilityDebugF的DLL文件)拷貝到生成的debug版本的IOAPI.DLL文件的同一目錄下(注意:debug版本的IOAPI.DLL文件必須配合debug版本的IOSCAN程序,release版本的IOAPI.DLL文件必須配合release版本的IOSCAN程序).同時不要忘記將IOSCAN.EXE的文件名更改為要開發(fā)的LO驅動的IOED名稱.debug版本的IOSCAN需要程序員手工啟動或用VC+調試啟動.5.6.7編程接IIIOAPI.DLLIOAPI是FIOS提供的最主要的一個編程接II.程序員的主要工作就是開發(fā)IOAPI部分的程序代碼.IO
47、API提供了一組API函數和一些C卄類庫.這組API函數規(guī)定了名稱,參數及返回值,函數內容由程序員根據具備的I/O設備編程實現.C卄類庫則為程序員提供各種獲取力控IO組態(tài)信息,參數設置信息,與數據庫DB進行數據交換等數據處理的方法.我們把這組API函數稱為掃描函數,把這些C卄類庫稱為IOC,IOC是InputOutputClass(輸入輸出類庫)的縮寫.程序員編寫的Ioapi最后要形成MFC的擴展動態(tài)鏈接庫(MFCExtensionDLL),掃描函數是這個DLL的輸出函數.當力控系統(tǒng)運行時,力控FIOS的掃描程序Ioscan對Ioapi中掃描函數部分的dll代碼進行周期性地掃描,它把從PO設備
48、采集到的數據經掃描函數解析轉換后提交給DB,或將DB卞置給I/O設備的數據經掃描函數解析轉換后寫入I/O設備.歸結起來,開發(fā)Ioapi的主要內容就是用IOC編寫掃描函數.IOC中的所有類庫全部以純虛類的形式提供,并且只有成員函數,沒有成員變量.目前IOC中主要包括4個類:CItem,CPacket,CDevice,CManager.CItem,數據項類.CPacket,數據包類.CDevice,設備類.CManager,管理器類.一個FIOS實例創(chuàng)建一個CManager實例.用戶在組態(tài)時每定義一個設備,則創(chuàng)建一個CDevice實例.CManager對所有的CDevice進行管理.一個CDevi
49、ce實例,由一個或多個CPacket實例組成,而每個CPacket實例又由一個或多個CItem實例組成.每個CItem實例,對應數據庫DB中的一個點參數,也就是對應I/O設備的一個”點”(如:設備的一個通道,一個參數等).IOC提供的這4個類庫,實際上就是對以上所述的這幾種數據對彖提供了一組操作方法,以供程序員更加靈活的控制程序.Citem類CItem類提供了對數據項對彖的一組操作方法.一個數據項對象包含的是數據庫DB中的一個點參數與I/O設備中一個物理通道的映射關系.Citem使用的基本數據結構是IOITEMDEF.一個Citem實例保存一個IOITEMDEF實例.IOITEMDEF的定義如
50、下:tvpedefstmctIoIteniDefStmcharstr64;longn8;JIOITEMDEF;14Citem類的定義如下:classCitem:publicCObjectpublic:vutualIOITEMDEF*GetltemStm(尸0;/取得數據連接項結構指針設置連接項的可寫屬性,缺省時可寫的,bAEbute為TRUE設置為不可寫.viitualvoidSetReadOiily(BOOLbAttiibute=TRUE)=0;設置連接項的可讀屬性,缺省時可讀的,bAEbute為TRUE設置為不可讀.viitualvoidSetWnteOiily(BOOLbAttiibut
51、e=TRUE)=0;viitualvoidSetData(shoitsData)=O;/按短整型格式設置采集數據virtualvoidSetData(longlData)=0;按長整型格式設置采集數據virtualvoidSetData(doublefData)=O;/按浮點型格式設置采集數據viitualvoidSetData(char*szData)=0;按字符串格式設置采集數據/按字符串格式取得上一次用SetDataQ設置的采集數據viitualvoidGetData(chai*szData)=0;設置私有數據,oFset范圍:03viitualvoidSetPiivateData(un
52、signedshoiloffset,longlPrivateData)=O;viituallongGetPrivateData(unsignedshortoffset尸0;/取得私有數據,offset范圉:03viitualCPacket*GetPacket()=0;取得本連接項類所歸屬的數據包指針viitualCDevice*GetDeviceQ=0;取得本連接項所歸屬的設備指針viitualCMaiiager*GetManager()=0;取得IoScan管理器指針/按浮點型格式設置歷史數據viitualvoidSetHisData(HisInsDatStm*pHisIiisDatSti-
53、u,iiitnCount)=0;;各個函數的解釋如下:IOITEMDEF*GetItemStru()功能:取得數據連接項結構指針.參數:無.返回值:數據項結構指針.舉例:IOITEMDEF*pltemStm=pItem-GetItemStm();longliCmdType=pItemSti-u-n3;voidSetReadOnly(BOOLbAttribute=TRUE)功能:設置連接項的寫屬性,缺省時連接項是可寫的.參數:TRUE:設置為不可寫;FALSE:設置為可寫.返回值:無.舉例:for(mti=0;iGetltemCountO;i+)CItem*pltem=pPacket-GetIt
54、em(i);pItem-SetReadOiily();voidSetWiiteOnly(BOOLbAttiibute=TRUE)功能:設置連接項的讀屬性,缺省時連接項是可讀的.15參數:TRUE:設置為不可讀;FALSE:設置為可讀.返回值:無.舉例:for(mti=0;iGetltemCountQ;i+)CItem*pltem=pPacket-GetItem(i);pItem-SetWnteOiilyQ;voidSetData(shortsData)功能:按短整型格式設置采集數據.參數:短整形數據值.返回值:無.voidSetData(longIData)功能:按長整型格式設置采集數據.參數
55、:長整型數據值.返回值:無.voidSetData(doublefData)功能:按浮點格式設置采集數據.參數:浮點數據值.返回值:無.voidSetData(char*szData)功能:按字符串格式設置采集數據.參數:字符串數據值.返回值:無.voidGetData(char*szData)功能:按字符串格式取得上一次用SetDataQ設置的采集數據.參數:存放最近一次設置的采集數據(字符串型數值)的字符串指針緩沖區(qū)長度應不小于32.返回值:無.舉例:charszData32;pItem-GetData(szData);voidSetPiivateData(unsignedshoitoffset,longlPnvateData);功能:設置私有數據.參數:offset,私有數據的偏置,Q-3;lPnvateData,整型私有數據.返回值:無.備注loscan自動為每個CItem實例分配了一塊由4個整型數(32位)組成的程序員私有數據空間供程序員使用程序員除了用這部分私有數據區(qū)保存數值外,也可以分配新的內存空間,然后將內存指針保存在私有數據區(qū)內,但不要忘記,在程序退出前,正確
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧師范高等??茖W?!督Y晶化學》2023-2024學年第二學期期末試卷
- 工程項目投資監(jiān)理的合理化意見
- 耐火澆注料施工方案
- 廣東省廣州市2024-2025學年高二(上)期末生物試卷(含解析)
- 掛梯施工方案
- consul 節(jié)點查詢、服務提出和節(jié)點驅逐的命令
- chatbi落地應用實例
- can電路的寄生電容
- ards肺保護通氣策略講課后點評
- 架空光纜 施工方案
- 2025年常州機電職業(yè)技術學院單招職業(yè)傾向性測試題庫參考答案
- 2024年四川大學華西醫(yī)院招聘考試真題
- 2025年安徽衛(wèi)生健康職業(yè)學院單招職業(yè)技能測試題庫及參考答案1套
- 2025年寧夏工商職業(yè)技術學院單招職業(yè)適應性測試題庫必考題
- 智慧礦山無人機自動巡檢解決方案
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 氣體充裝安全培訓課件
- 2025年度國家鐵路局安全技術中心面向社會公開招聘工作人員5人高頻重點提升(共500題)附帶答案詳解
- 大學生就業(yè)21問知到智慧樹章節(jié)測試課后答案2024年秋西華大學
- DB3410T 47-2024 綠色金融和普惠金融服務鄉(xiāng)村振興評價體系
- 高二走讀生家長會課件
評論
0/150
提交評論