DCS數(shù)據(jù)采集技術(shù)_第1頁(yè)
DCS數(shù)據(jù)采集技術(shù)_第2頁(yè)
DCS數(shù)據(jù)采集技術(shù)_第3頁(yè)
DCS數(shù)據(jù)采集技術(shù)_第4頁(yè)
DCS數(shù)據(jù)采集技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、第五章DCS數(shù)據(jù)采集技術(shù)10頁(yè)萬(wàn)字目前各種I/O設(shè)備提供的對(duì)外數(shù)據(jù)接口可分為以下幾類1,數(shù)字通訊接口,包括串口類,以太網(wǎng)(TCP/IP協(xié)議)類,現(xiàn)場(chǎng)總線類,儀器總線類通訊接口(如GPIB等).2,模擬量通道輸出,設(shè)備直接提供4-20mA,1-5V或繼電器接點(diǎn)信號(hào)等.力控 具有世界上大部分主流設(shè)備的I/O接口程序,對(duì)GPIB總線以及Honeywell,Yokogawa,Foxboro,Fisher-Rosemount 等廠家的 DCS 也能夠支持.除通常意義上的數(shù)據(jù)采集外,力控可以利用采集到的實(shí)時(shí)數(shù)據(jù)對(duì)裝置進(jìn)行實(shí)時(shí)建模 插入力控自己的先進(jìn)控制控件,實(shí)施先進(jìn)控制.對(duì)一個(gè)設(shè)備上的數(shù)據(jù)定義不同的采集周

2、期如果一臺(tái)設(shè)備上有1000個(gè)實(shí)時(shí)數(shù)據(jù)需要采集,而在這1000個(gè)數(shù)據(jù)中只有10個(gè)是經(jīng)常刷新且需要密切監(jiān)視的,其余990個(gè)全部是輔助數(shù)據(jù),但是也需要時(shí)常查看.如果把這1000個(gè)數(shù)據(jù)同等地對(duì)待,采用統(tǒng)一的掃描周期進(jìn)行采集,就會(huì)嚴(yán)重影響10個(gè)重要數(shù)據(jù)的刷新速集速度呢有兩種,如圖5-1所示.因?yàn)榱氐腎/O,僅當(dāng)畫面中顯示這個(gè),使用完畢馬上關(guān)閉度.怎樣既保證1000個(gè)數(shù)據(jù)都能夠采集,又確保這10個(gè)重要數(shù)據(jù)的采 辦法:辦法1:為一個(gè)設(shè)備定義兩個(gè)邏輯設(shè)備 ,使其具有不同的采集周期但是這種方法定義的最長(zhǎng)掃描周期為10分鐘.辦法2:不用上面的辦法,一臺(tái)設(shè)備只定義一個(gè)設(shè)備名稱也可以達(dá)到要求 驅(qū)動(dòng)對(duì)畫面中不顯示而且

3、沒(méi)有組態(tài)歷史趨勢(shì)和報(bào)警的數(shù)據(jù)是不采集的 數(shù)據(jù)時(shí)才進(jìn)行采集.因此將不常用的數(shù)據(jù)單獨(dú)組態(tài)在一個(gè)或幾個(gè)畫面中 就不會(huì)影響整個(gè)采集速度.這種方法適用于存在有大量不需要快速更新的數(shù)據(jù)的情況 圖5-1合理設(shè)置才3描周期,避免引起設(shè)備死機(jī)有些I/O設(shè)備內(nèi)部只有一個(gè) CPU,同時(shí)負(fù)責(zé)數(shù)據(jù)通訊和計(jì)算,如果在力控上設(shè)置的數(shù)據(jù)掃描周期太快容易使設(shè)備死機(jī),因此在設(shè)置這一參數(shù)時(shí)應(yīng)該慎重,最好通過(guò)多次試驗(yàn)確定 一個(gè)合適的掃描周期.一般的串口設(shè)備的掃描周期可設(shè)在10-100毫秒之間.通過(guò)撥號(hào)方式與I/O設(shè)備通訊力控的所有串口 I/O驅(qū)動(dòng)程序都支持通過(guò) MODEM以撥號(hào)方式與設(shè)備通訊.只要正確設(shè) 置電話號(hào)碼即可,如圖5-2所

4、示.1通訊狀態(tài)監(jiān)視,設(shè)備狀態(tài)數(shù)據(jù)的讀取 力控 為每一個(gè)I/O設(shè)備自動(dòng)定義了一個(gè)系統(tǒng)變 量,假如系統(tǒng)中有一個(gè)設(shè)備PLC1,則每當(dāng)PLC1不能與力控正常通訊時(shí),系統(tǒng)變量$IO PLC1的值就會(huì)被 置為O設(shè)備故障屬于系統(tǒng)報(bào)警.計(jì)算機(jī)通訊口 故障,電纜,PLC端通訊口的故障,PLC通訊口與計(jì) 算機(jī)通訊口的參數(shù)設(shè)置不一致都會(huì)造成這種結(jié)果.還有一種可能,就是數(shù)據(jù)連接項(xiàng)錯(cuò)誤,如果計(jì)算機(jī)的命 令發(fā)給PLC的只讀參數(shù),PLC是不會(huì)予以理睬的.怎樣用I/O驅(qū)動(dòng)程序調(diào)試I/O設(shè)備 力控的I/O驅(qū)動(dòng)程序有數(shù)百個(gè),針對(duì)每 一種設(shè)備都有一個(gè)獨(dú)立的程序.當(dāng)力控實(shí)時(shí) 數(shù)據(jù)庫(kù)DB沒(méi)有啟動(dòng)時(shí),單獨(dú)啟動(dòng)I/O驅(qū)動(dòng)可 以作為本地I/

5、O設(shè)備調(diào)試工具使用.此時(shí)可以 測(cè)試計(jì)算機(jī)與I/O設(shè)備的通訊情況,摸索最佳的掃描周期 .菜單設(shè)置S/參數(shù)用來(lái)規(guī)定I/O通訊過(guò)程中是否顯示計(jì)算機(jī)發(fā)出和設(shè)備響應(yīng)的通訊信息 .如圖 5-3 所示 .菜單 工具 T/ 工具 用來(lái)在不啟動(dòng)實(shí)時(shí) TOC o 1-5 h z 數(shù)據(jù)庫(kù)及其數(shù)據(jù)連接項(xiàng)的情況下執(zhí)行與I/O設(shè)備的通訊.彈出對(duì)話框如圖 5-5 上部所示.此時(shí)可以按參數(shù)設(shè)置按鈕設(shè)置通訊參數(shù),如圖 5-6 和 5-7 所示,主要是設(shè)置串口的DCB 參數(shù),IP地址等.圖 5-2圖 5-3 圖 5-4 TOC o 1-5 h z 正確設(shè)置參數(shù)后,按連接設(shè)備按鈕,如果成功的話,連接設(shè)備按鈕的標(biāo)題變成 斷開(kāi)連接,

6、表示可以收發(fā)數(shù)據(jù)了 .如果在 參數(shù)設(shè)置 中設(shè)置周期性發(fā)送周期 不為0,則在連接設(shè)備后會(huì)出現(xiàn)周期發(fā)送按鈕,否則出現(xiàn)手動(dòng)發(fā)送按鈕 .使用 周期發(fā)送或手動(dòng)發(fā)送按鈕,可以周期性或一次性地發(fā)送編輯框中的數(shù)據(jù)了.編輯框中數(shù)據(jù)的格式缺省是混合方式的 ,如果你想發(fā)送編輯框中的數(shù)據(jù) ,這也是唯一的數(shù)據(jù)類型,它的形成規(guī)則如下:任何ASCII 碼(除)可以直接輸入 ,可以使用 來(lái)輸入 ; 內(nèi)是由 (空格 )分隔的轉(zhuǎn)意字符,它們的意義為圖 5-5: 用來(lái)輸入 ;2*:在發(fā)送數(shù)據(jù)是表示延時(shí)1 毫秒圖 5-6#:在發(fā)送數(shù)據(jù)是表示延時(shí)10 毫秒$:在發(fā)送數(shù)據(jù)是表示延時(shí)100 毫秒!:在發(fā)送數(shù)據(jù)是表示延時(shí)1000 毫秒: 表

7、示它后面的數(shù)據(jù)是十進(jìn)制的(缺省是16 進(jìn)制) (空格 ): 作為分隔符,任何未定義的字符都可以作為分隔符,最好使用空格 .09: 可以用來(lái)輸入 10 進(jìn)制或 16 進(jìn)制數(shù)據(jù) .AF/af: 可以用來(lái)輸入 16 進(jìn)制數(shù)據(jù) .例子 : abcv 30 *#$! 345 對(duì)應(yīng)的 16 進(jìn)制數(shù)據(jù)串為 :61H,62H,63H,76H,5BH,30H,33H,34H,35H; 而且在 30H 之后有 1111 毫秒的延時(shí).當(dāng)用在其它情況(不是用來(lái)發(fā)送數(shù)據(jù))時(shí), 唯一的差別是沒(méi)有了延時(shí)的概念.其它工具 : 校驗(yàn)使用混合格式的數(shù)據(jù),計(jì)算常用的校驗(yàn)碼,ASCII 碼表顯示使用 16進(jìn)制和10進(jìn)制顯示的 ASC

8、II 碼表 ,各種數(shù)據(jù)轉(zhuǎn)換把混合格式,16/32 位整數(shù) ,32位浮點(diǎn)數(shù)等轉(zhuǎn)換位十幾種常用數(shù)據(jù)格式,除混合格式外,其它數(shù)據(jù)格式為直接用空格分隔的數(shù)據(jù)串圖 5-7如何開(kāi)發(fā) I/O 設(shè)備驅(qū)動(dòng)程序在力控 中有一個(gè) SDK 工具包,叫做FIOS SDK, 可以開(kāi)發(fā)硬件設(shè)備與計(jì)算機(jī)的通訊接口程序 .最簡(jiǎn)單的只需要編寫幾個(gè)函數(shù)就可以可以做自己的 I/O 驅(qū)動(dòng) ,現(xiàn)在支持的硬件類型有串口 (RS485/232/422), 網(wǎng)絡(luò) ,板卡 ,硬件廠家提供DLL 等多種方式的通訊類型.在該 SDK中開(kāi)發(fā)自己的通訊接口,不需要關(guān)心硬件和計(jì)算機(jī)通訊的細(xì)節(jié),只需要了解通訊協(xié)議就可以了.如果通訊協(xié)議很復(fù)雜,該 SDK 中

9、提供了足夠靈活的手段滿足不同層次的需要.例如:在設(shè)備初始化時(shí)發(fā)什么命令或做其他處理,動(dòng)態(tài)改變硬件通訊參數(shù)等等.5.6.1 FIOS 開(kāi)發(fā)包簡(jiǎn)介FIOS 負(fù)責(zé)完成與各種I/O 設(shè)備進(jìn)行數(shù)據(jù)交換 .一方面,它把從I/O 設(shè)備采集到的實(shí)時(shí)過(guò)程數(shù)據(jù)發(fā)送給數(shù)據(jù)庫(kù)DB, 另一方面 ,從 DB 發(fā)出的下置數(shù)據(jù)也通過(guò) FIOS 發(fā)送給 I/O 設(shè)備 .根據(jù)監(jiān)控 PC 與 I/O 設(shè)備之間通信機(jī)制的不同 ,FIOS 主要支持兩種工作方式: 同步方式與異步方式.異步方式適用以下一類I/O 設(shè)備:這類I/O 設(shè)備一般可以獨(dú)立運(yùn)行,與監(jiān)控計(jì)算機(jī)之間通過(guò)串口,網(wǎng)絡(luò)或MODEM 連接 .與監(jiān)控計(jì)算機(jī)之間通過(guò)明確的消息傳送

10、(文本或二進(jìn)制消息 )完成數(shù)據(jù)交換.數(shù)據(jù)交換過(guò)程為異步方式.同步方式適用以下一類I/O設(shè)備:這類I/O設(shè)備或者依賴PC運(yùn)行(如:插在PC插槽內(nèi) ), 或者獨(dú)立運(yùn)行.但與監(jiān)控計(jì)算機(jī)之間主要通過(guò)直接訪問(wèn)方式進(jìn)行數(shù)據(jù)交換,具體形式包括 :寄存器直接訪問(wèn)(如 :板卡 ),API 函數(shù)調(diào)用 ,ActiveX 控件訪問(wèn)等.數(shù)據(jù)交換過(guò)程為同步方式 .下面列舉了 FIOS 可實(shí)現(xiàn)的一些基本功能:底層通信功能:1), 串口通信,包括:RS232/422/,TCP/IP 網(wǎng)絡(luò)通信 .3),MODEM3通信 ,通過(guò)模擬MODEM 在電話網(wǎng)上通信 .4),寄存器訪問(wèn),如 :各種 DAS 板卡 .5),其它.鏈路控制功

11、能:用M代表Master,即上位機(jī)(監(jiān)控PC工作站);S代表Slaver,即下位機(jī) (各種I/O 設(shè)備 ).對(duì)于異步方式,FIOS 支持多種鏈路控制方式.鏈路控制方式支持以下幾種方式:1),M請(qǐng)求,S應(yīng)答方式.2),M請(qǐng)求,S無(wú)應(yīng)答方式.3),S主動(dòng)發(fā)送,M被動(dòng)等待.另外 ,對(duì)一次完整數(shù)據(jù)處理(讀或?qū)?過(guò)程,支持以下方式:1),1 次請(qǐng)求 ,0次應(yīng)答方式.2),1 次請(qǐng)求 ,1 次應(yīng)答方式.3),1 次請(qǐng)求,多次應(yīng)答方式.4),0次請(qǐng)求 ,1次應(yīng)答方式.5),多次請(qǐng)求,多次應(yīng)答方式.冗余功能 :FIOS 支持的冗余方式包括:1),單監(jiān)控站 ,雙 I/O 冗余 .2),雙監(jiān)控站 ,單I/O冗余.

12、3),雙監(jiān)控站,雙I/O冗余.4),對(duì)于總線型設(shè)備(如RS485),提供總線監(jiān)測(cè)功 能,可實(shí)現(xiàn)對(duì)冗余通信網(wǎng)絡(luò)的保護(hù)和監(jiān)測(cè) .前端機(jī)功能:DB 與 IO Server 不在同一工作站上,IO Server 運(yùn)行在前端機(jī)上,前端機(jī)與操作站之間通過(guò)串口 ,TCP/IP 網(wǎng)絡(luò)或 MODEM 進(jìn)行通信 .硬件測(cè)試與遠(yuǎn)程調(diào)試功能:使用 FIOS 可完成對(duì) I/O 設(shè)備的簡(jiǎn)單測(cè)試功能.另外可實(shí)現(xiàn) TOC o 1-5 h z 遠(yuǎn)程調(diào)試 . 故障診斷與恢復(fù)功能:FIOS 提供診斷機(jī)制,在較短的采集周期內(nèi)報(bào)告故障的發(fā)生,診斷出下位機(jī)故障情況.當(dāng)下位機(jī)更換或恢復(fù)后,不需要對(duì)FIOS 及相關(guān)程序進(jìn)行任何人工干預(yù),而在

13、較短時(shí)間自動(dòng)恢復(fù)通信. 當(dāng)某一臺(tái),幾臺(tái)或部分通道發(fā)生故障,FIOS 要自動(dòng)優(yōu)化通信鏈,使其與其他下位機(jī)或通道之間的通信不受影響,保證通信效率.界面顯示功能: 為測(cè)試,調(diào)試 ,運(yùn)行維護(hù)方便,FIOS 提供顯示界面,可顯示包括:發(fā)送,應(yīng)答,狀態(tài)信息,啟動(dòng)時(shí)間,分包數(shù),分包信息,成功通信次數(shù)(發(fā)送次數(shù),成功應(yīng)答次), 故障次數(shù)等信息.歷史數(shù)據(jù)處理功能:對(duì)于某些能保存歷史數(shù)據(jù)的設(shè)備(如 :無(wú)紙記錄儀等),FIOS 能將采集到的歷史數(shù)據(jù)恢復(fù)到數(shù)據(jù)庫(kù)DB 中 .FIOS SDK 編程方式FIOS SDK 提供了一種簡(jiǎn)潔的,面向?qū)ο蟮木幊谭绞揭钥s短開(kāi)發(fā)時(shí)間,降低開(kāi)發(fā)難度.FIOS SDK 提供標(biāo)準(zhǔn)的開(kāi)發(fā)接口

14、和程序模板,程序員僅需要根據(jù)I/O 設(shè)備的具體通信協(xié)議或驅(qū)動(dòng)接口說(shuō)明,填寫幾個(gè)掃描函數(shù)的實(shí)現(xiàn)代碼,進(jìn)行必要的調(diào)試與測(cè)試, 即可完成一種FIOS 的開(kāi)發(fā) . FIOS 提供的開(kāi)發(fā)工具封裝了大部分程序員不必關(guān)心的技術(shù)環(huán)節(jié),如:底層通信功能(串口通信,網(wǎng)絡(luò)通信等),設(shè)備超時(shí)處理,設(shè)備故障診斷等.同時(shí) FIOS 提供各種調(diào)試工具,方便程序員進(jìn)行系統(tǒng)測(cè)試.FIOS 開(kāi)發(fā)環(huán)境完全基于 32位 Windows 平臺(tái) .它使用動(dòng)態(tài)鏈接庫(kù)(DLL) 技術(shù)將程序員開(kāi)發(fā)的代碼整合到力控系統(tǒng)中.FIOS提供給程序員的開(kāi)發(fā)接口為API函數(shù)和C+類庫(kù).FIOS SDK 組件及示例程序FIOS SDK 主要由 4 部分組成

15、:設(shè)備組態(tài)接口(Iodevui), 數(shù)據(jù)連接組態(tài)接口 (Ioitemui),編程接口 Ioapi 和描掃程序:負(fù)責(zé)管理設(shè)備組態(tài)過(guò)程.Ioitemui: 負(fù)責(zé)管理數(shù)據(jù)連接組態(tài)過(guò)程.Ioapi: 負(fù)責(zé)完成與I/O 設(shè)備間的數(shù)據(jù)交換 ,包括:對(duì)通信協(xié)議的解析,數(shù)據(jù)格式的車t換等.loscan:主要完成對(duì)10api部分的dll代碼進(jìn)行周期性地掃描.同時(shí)完成與I/O 設(shè)備的底層通信(串口通信, 網(wǎng)絡(luò)通信等), 以及設(shè)備超時(shí)處理,設(shè)備故障診斷等.Ioscan還負(fù)責(zé)與數(shù)據(jù)庫(kù)DB 之間的通信與協(xié)作.它把從 I/O 設(shè)備采集到的數(shù)據(jù)經(jīng) Ioapi 解析轉(zhuǎn)換后提交給 DB, 或?qū)?DB 下置給 I/O 設(shè)備的數(shù)據(jù)

16、經(jīng)Ioapi 解析轉(zhuǎn)換后寫入 I/O 設(shè)備 .Ioscan 是 FIOSSDK 提供的一個(gè)標(biāo)準(zhǔn)軟件工具. 程序員僅需要開(kāi)發(fā)Iodevui,Ioitemui,Ioapi 三部分的代碼.示例程序4FIOS SDK 提供了兩個(gè)示例 :DemoController 與 DemoModbus.DemoController 是一個(gè)初級(jí)編程示例,它能引導(dǎo)初學(xué)者快速掌握開(kāi)發(fā)FIOS 的基本概念和方法 .DemoModbus 是一個(gè)實(shí)用編程示例,它采用標(biāo)準(zhǔn)MODBUS 通信協(xié)議,通過(guò)該示例,可以掌握在力控平臺(tái)上開(kāi)發(fā)標(biāo)準(zhǔn)MODBUS 設(shè)備 I/O 驅(qū)動(dòng)程序的方法.FIOS SDK 的全部?jī)?nèi)容都是在安裝在力控 自動(dòng)

17、安裝的,在力控目錄下的子目錄Fiossdk中.FIOS SDK主要包含以下幾部分內(nèi)容 :Examples,程序示例,仿真程序.Include,頭文 件 .Manual, 文檔說(shuō)明 .Utility, 調(diào)試工具 .這 2 個(gè)示例具有一定的代表性,它們體現(xiàn)了FIOS SDK 的主要功能.FIOS SDK 提供了這2個(gè)示例的全部源代碼,在它們的基礎(chǔ)上,稍做改動(dòng),就可以開(kāi)發(fā)出新的 FIOS.我們把象這 2 個(gè)示例源程序一樣具有模板作用的程序稱為 I/O 模板程序.為了提高開(kāi)發(fā)效率,我們建議盡量使用 I/O 模板程序,這在一定程度上,也減少 ,降低了編程錯(cuò)誤的發(fā)生.常用術(shù)語(yǔ)我們把 FIO SDK 中經(jīng)常

18、涉及的一些概念給出定義,有些術(shù)語(yǔ)雖然是通用名詞,但在FIOSDK 中有特定含義.這些術(shù)語(yǔ)有一些在前文給出了解釋,有一些會(huì)在后文中陸續(xù)給出解釋. FIOS ForceControl I/O Server, 即力控 I/O 驅(qū)動(dòng)程序 FIOS SDK FIOS 軟件開(kāi)發(fā)工具包 FCINSTDIR 力控 軟件系統(tǒng)的安裝目錄 FCAPPINSTDIR 用力控 創(chuàng)建的工程應(yīng)用的目錄 IOID 唯一區(qū)別各個(gè)I/O 驅(qū)動(dòng)程序的 I/O 標(biāo)志Iodevui 設(shè)備組態(tài)接口 Ioitemui 數(shù)據(jù)連接組態(tài)接口 Ioapi 編程接口 Ioscan 掃描程序 I/O 模板程序FIOS 工 SDK 附帶示例的源程序I/

19、O 配置文件設(shè)備組態(tài)時(shí)的缺省參數(shù)設(shè)置保存文件連接項(xiàng)結(jié)構(gòu)保存數(shù)據(jù)連接信息的數(shù)據(jù)結(jié)構(gòu)IOITEMDEFI/O 描述文件 定義設(shè)備的類別 ,廠商 ,型號(hào) ,通信方式等參數(shù)的文本文件 程序員 在本文檔范圍內(nèi)專指用 FIOS SDK 進(jìn)行開(kāi)發(fā)的技術(shù)人員 掃描函數(shù) 包含在 Ioapi 中的 API 函數(shù) ,它們由掃描程序周期掃描.掃描函數(shù)完成 TOC o 1-5 h z 對(duì)設(shè)備數(shù)據(jù)解析及格式轉(zhuǎn)換 IOC Input Output Class( 輸入輸出類庫(kù))的縮寫.設(shè)備組態(tài)接口I/O 描述文件在使用力控進(jìn)行組態(tài)時(shí),一般均涉及定義I/O 設(shè)備的過(guò)程.在定義設(shè)備時(shí),要選擇設(shè)備的類別 (PLC, 智能儀表等),

20、廠商 ,設(shè)備型號(hào)或通信協(xié)議,然后根據(jù)設(shè)備通信方式(串口方式,網(wǎng)絡(luò)方式,其它方式等)設(shè)置參數(shù).以上關(guān)于一種設(shè)備的信息(類別 ,廠商 ,型號(hào) ,通信方式等)完全是由I/O 描述文件決定的 .I/O 描述文件是一個(gè)標(biāo)準(zhǔn)文本文件,根據(jù)其規(guī)定的填寫格式,由程序員根據(jù)具體設(shè)備自行填寫.下面介紹I/O 描述文件的填寫格式.I/O 描述文件的文件名為 ,安裝目錄為:FCINSTDIRIO ServersIOID.IO 文件說(shuō)明格式為 : 類別 ;廠商或 IO 程序描述 ;執(zhí)行文件名稱 5 子類型1;類型號(hào);資源標(biāo)志;提供設(shè)備地址子類型2;類型號(hào);資源標(biāo)志;提供設(shè)備地址注意 ,子類型號(hào)不能重復(fù).表示回車換行.最

21、上面一行是驅(qū)動(dòng)程序的總體描述,包括三項(xiàng).各項(xiàng)之間必須以分號(hào);分隔 .各項(xiàng)內(nèi)容不能含有分號(hào) ;.各項(xiàng)含義如下:類別,驅(qū)動(dòng)程序所屬類別,現(xiàn)分為以下幾類:PLC,智能儀表,智能模塊,變頻器.程序員也可以自行擴(kuò)展.廠商或 IO 程序描述 ,I/O 設(shè)備生產(chǎn)廠商名稱,協(xié)議名稱 ,如西門子.執(zhí)行文件名稱,I/O 驅(qū)動(dòng)程序 (運(yùn)行程序 )的名稱,如接下來(lái)幾行為驅(qū)動(dòng)程序所包含的設(shè)備類型的描述,如西門子包括S5,S7等,每一子類別一行,每行包括三項(xiàng),各項(xiàng)之間必須以分號(hào);分隔.各項(xiàng)內(nèi)容不能含有分號(hào);.各項(xiàng)含義如下:子類型,設(shè)備類型描述.如S5.類型號(hào),設(shè)備類型編號(hào),類型號(hào)不能重復(fù).合法的值為0,1,2,3等.使用

22、計(jì)算機(jī)資源,使用計(jì)算機(jī)何種通信資源通信,合法的值為 0,1,2等.含義如下 :0,同步通信方式;1,串口通信方式;2,TCP/IP 網(wǎng)絡(luò)通信方式; 3,MODEM通信方式;4,板卡方式;5,并口通信方式.提供設(shè)備地址:1 表示需要指定設(shè)備地址,否則表示不需要設(shè)備地址.管理程序會(huì)自動(dòng)將相同廠商或IO 程序描述相同的驅(qū)動(dòng)程序歸為同一樹(shù)下 .開(kāi)發(fā) Iodevui力控 組態(tài)環(huán)境 DRAW 中的設(shè)備管理功能提供了一個(gè)根據(jù)I/O 描述文件可靈活配置的標(biāo)準(zhǔn)設(shè)備組態(tài)接口 .這個(gè)組態(tài)接口提供了一些對(duì)常用設(shè)備參數(shù)進(jìn)行設(shè)置的方法 .如:設(shè)備名稱 ,設(shè)備地址,通信端口,端口參數(shù)等.如下圖所示:對(duì)于很多設(shè)備,如果標(biāo)準(zhǔn)設(shè)

23、備組態(tài)接口能夠滿足要求,就不再需要自己編寫Iodevui 接口程序了.比如示例DemoController 采用的就是標(biāo)準(zhǔn)設(shè)備組態(tài)接口 .而示例 DemoModbus因?yàn)樯婕耙恍┨厥獾膮?shù)設(shè)置,就需要自己編寫Iodevui 接口程序了 .因此 ,Iodevui 接口程序?qū)嶋H上就是對(duì)標(biāo)準(zhǔn)設(shè)備組態(tài)接口的一個(gè)補(bǔ)充和擴(kuò)展,并可由程序員靈活控制 .Iodevui 要以 DLL 形式提供 .該 DLL 必須是 MFC 擴(kuò)展 DLL. 該 DLL 的缺省文件名稱為,該文件必須安裝在目錄FCINSTDIRIO ServersIOID 下 .在進(jìn)行設(shè)備組態(tài)時(shí),力控的 I/O 設(shè)備管理程序會(huì)自動(dòng)檢查在目錄 FCI

24、NSTDIRIO TOC o 1-5 h z ServersIOID 下是否存在文件.如果存在,則首先根據(jù)I/O 描述文件的格式,調(diào)出標(biāo)準(zhǔn)設(shè)備組態(tài)接口界面,當(dāng)用戶確認(rèn)后,再調(diào)出 Iodevui 組態(tài)接口界面;若不存在該文件,則只調(diào)出標(biāo)準(zhǔn)設(shè)備組態(tài)接口界面.示例 DemoModbus 的 Iodevui 接口程序可以做為開(kāi)發(fā) Iodevui 的模板程序.我們結(jié)合示例 DemoModbus 的 Iodevui 模板程序具體解釋實(shí)現(xiàn)過(guò)程.查看頭文件可以發(fā)現(xiàn),主要實(shí)現(xiàn) 3 個(gè)輸出函數(shù):6extern C AFX_EXT_API long AddIoDev(const char* szDeviceName

25、, int nType);extern C AFX_EXT_API long ModIoDev(const char* szDeviceName);extern C AFX_EXT_API long DelIoDev (const char* szDeviceName);在進(jìn)行設(shè)備組態(tài)時(shí),當(dāng)增加一個(gè)設(shè)備時(shí),力控設(shè)備管理程序會(huì)自動(dòng)調(diào)用 AddIoDev() 函數(shù);當(dāng)修改一個(gè)已創(chuàng)建設(shè)備時(shí)會(huì)調(diào)用ModIoDev() 函數(shù) ; 當(dāng)刪除一個(gè)設(shè)備時(shí)會(huì)調(diào)用 DelIoDev ()函數(shù) .其中 ,參數(shù)szDeviceName 為 I/O 設(shè)備名稱 (輸入值 ,組態(tài)時(shí)由用戶指定 ).nType 為設(shè)備子類型號(hào),

26、由程序員在 I/O 描述文件中指定.返回值為0 表示操作成功 ;其它表示操作失敗.為了較好地實(shí)現(xiàn)程序結(jié)構(gòu)化,本模板程序提供了一個(gè)CDevMan 類對(duì)設(shè)備及組態(tài)操作過(guò)程進(jìn)行管理.的 3 個(gè)輸出函數(shù) AddIoDev(),ModIoDev()DelIoDev () 的具體實(shí)現(xiàn)過(guò)程是在 CDevMan 的三個(gè)成員函數(shù) Add(),Mod() 和 Del() 中實(shí)現(xiàn)的 .首先看一下Add() 的實(shí)現(xiàn)代碼:外兩個(gè)函數(shù)和它類似.Store()函數(shù)如下:void CDevMan:Store()CFile file;7if(const char*)(),CFile:modeReadWrite|CFile:mo

27、deCreate) CArchive ar(&file, CArchive:store);Serialize(ar);();(); 該函數(shù)它先打開(kāi)文件,如果不存在,就建立此文件.然后調(diào)用序列化函數(shù)對(duì)它進(jìn)行保存,最后關(guān)閉此文件.再看一看序列化函數(shù):void CDevMan:Serialize(CArchive &ar) TRYCObject:Serialize(ar);(ar);CATCH(CFileException,e) AfxMessageBox( 文件版本不匹配!);END_CATCH該函數(shù)對(duì) m_list( 由 CDevice 類實(shí)例組成)進(jìn)行序列化.在調(diào)用各個(gè)CDevice 類實(shí)例的

28、 TOC o 1-5 h z 序列化函數(shù)時(shí),如果是讀取操作 ,會(huì)依次創(chuàng)建CDevice 實(shí)例 ,并調(diào)用CDevice 的序列化函數(shù),隨后把 CDevice 實(shí)例加入 m_list 鏈表.具體保存和讀取的變量數(shù)據(jù)在CDevice 類中控制,也就是說(shuō)程序員針對(duì)不同的設(shè)備可以改寫 CDevice 類 ,定義不同的成員變量,記錄設(shè)備的不同的屬性 ,對(duì) CDevice 類重載 Serialize 即可實(shí)現(xiàn)設(shè)備的保存,加載 ,增加 ,刪除和修改等功能.我們?cè)倏匆幌翪Device 類序列化的實(shí)現(xiàn)過(guò)程:void CDevice:Serialize(CArchive& ar) if () ar temp;int

29、 nDevCnt = pManager-GetDeviceCount(); for (int i = 0; i GetDevice(i);arstrtemp; TOC o 1-5 h z 注意序列化的內(nèi)容和順序必須和一致,否則會(huì)導(dǎo)致程序運(yùn)行時(shí)產(chǎn)生錯(cuò)誤.Ioitemui 介紹及編程示例在用力控 進(jìn)行組態(tài)時(shí),把數(shù)據(jù)庫(kù) DB 中的點(diǎn)參數(shù)與某種設(shè)備的具體通道建立連接的過(guò)10程被為數(shù)據(jù)連接過(guò)程.在進(jìn)行數(shù)據(jù)連接時(shí),一般還要指定數(shù)據(jù)轉(zhuǎn)換格式,數(shù)據(jù)長(zhǎng)度等參數(shù).數(shù)據(jù)連接過(guò)程對(duì)于不同的 I/O 設(shè)備 ,其形式和內(nèi)容可能完全不同. 因此必須針對(duì)不同的I/O 設(shè)備 ,設(shè)計(jì)相應(yīng)的數(shù)據(jù)連接形式,保存各種參數(shù)信息.Ioit

30、emui 接口主要完成的兩部分功能,一是為用戶進(jìn)行數(shù)據(jù)連接組態(tài)時(shí)提供一個(gè)界面;另外就是將用戶組態(tài)的設(shè)備參數(shù)信息用某種格式保存起來(lái),以便在開(kāi)發(fā)編程接口 Ioapi 時(shí)使用 .我們定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)保存設(shè)備參數(shù)信息,這就是數(shù)據(jù)連接項(xiàng)結(jié)構(gòu)(下面簡(jiǎn)稱連接項(xiàng)結(jié)構(gòu) )IOITEMDEF.IOITEMDEF 定義在中 :typedef struct IoItemDefStruchar str64;long n8;IOITEMDEF;這個(gè)結(jié)構(gòu)是一個(gè)通用結(jié)構(gòu),由程序員自己賦值, 自己解釋 .Ioitemui 要以 DLL 形式提供 .該 DLL 必須是 MFC 擴(kuò)展 DLL. 該 DLL 的缺省文件名稱為,該

31、文件必須安裝在目錄 FCINSTDIRIO ServersIOID 下 . TOC o 1-5 h z Ioitemui 的工作過(guò)程如下:在進(jìn)行數(shù)據(jù)連接組態(tài)時(shí),力控的 DBMAN 管理程序會(huì)自動(dòng)檢查在目錄 FCINSTDIRIOServersIOID 下是否存在文件.如果存在,則調(diào)出數(shù)據(jù)連接組態(tài)接口界面.下面介紹如何編寫 Ioitemui 接口程序 .主要實(shí)現(xiàn) 1 個(gè)輸出函數(shù):extern C AFX_EXT_API long DoItemDlg(const char* szDeviceName, int nType, IOITEMDEF &item, char * szDesc, int n

32、Flag);其參數(shù)說(shuō)明如下:szDeviceName,設(shè)備名稱(輸入值).如果在力控 中定義了一個(gè)設(shè)備Devicel,那么在給該設(shè)備組點(diǎn)時(shí),傳給DoItemDlg 的 szDeviceName 值就是字符串 Device1.nType, 設(shè)備子類型(用于一個(gè)驅(qū)動(dòng)程序驅(qū)動(dòng)多種類型設(shè)備)(輸入值).它的值在中指定 (參見(jiàn)上一章對(duì)I/O 描述文件的介紹 ).item, 數(shù)據(jù)連接項(xiàng)結(jié)構(gòu)(返回值).需要注意的是,item 除了是輸出值外,也是輸入值 ,DBMAN 管理程序每次調(diào)用 DoItemDlg() 時(shí),將上一次操作賦給item 的值傳遞過(guò)來(lái).szDesc, 數(shù)據(jù)連接項(xiàng)描述 ,用于 DBMAN 程序

33、顯示的提示信息 .nFlag, 1 表示增加數(shù)據(jù)連接項(xiàng) ,2 表示修改 ,0 表示刪除(輸入值).其返回值 0 表示操作成功.其它 , 操作失敗 .的工作過(guò)程如下:當(dāng)用戶打開(kāi)數(shù)據(jù)組點(diǎn)連接對(duì)話框時(shí),選中了一個(gè)點(diǎn),并按下增加,修改或刪除鍵,這時(shí)就會(huì)調(diào)用的DoItemDlg 函數(shù) .程序員應(yīng)該在此函數(shù)中 ,彈出一個(gè)對(duì)話框讓用戶進(jìn)行選擇,在用戶按下了OK 鍵之后 ,把用戶的選擇保存在 item 中,以后編制時(shí)可以利用這些信息 .編程示例我們先結(jié)合示例 DemoController 介紹如何開(kāi)發(fā)Ioitemui.仿真器 SimController 的內(nèi)部有數(shù)字區(qū) (DIO) 和模擬區(qū) (AIO).DIO

34、 和 AIO 區(qū)通道范圍為 : 0255.每個(gè) DIO 通道的數(shù)據(jù)的數(shù)值范圍為 :0 或 1.每個(gè)AIO 通道數(shù)據(jù)的數(shù)值范圍為 :04095.所以我們應(yīng)該在DoItemDlg 函數(shù)中彈出一個(gè)對(duì)話框,用戶可以在此對(duì)話框中選擇輸入通道和內(nèi)存地址.輸入通道有兩個(gè)選項(xiàng)DIO 通道和 AIO 通道供用戶選擇, 內(nèi)存地址可以讓用戶輸入 0255 之間的數(shù)據(jù).11我們介紹一下如果不使用 I/O 模板 ,如何自己生成一個(gè)新的Ioitemui 工程 :在VC+環(huán)境下,選擇菜單命令 new,選擇新建工程,工程名為loitemui,選擇MFCAppwizard (dll) 選項(xiàng) ,在下一步DLL 類型中選擇 MFC

35、 Extension DLL 型 ,然后按下 Finish鍵 . 即可創(chuàng)建一個(gè)新的Ioitemui 工程 .打開(kāi)文件,在文件的開(kāi)頭加入#include , 把拷入本工程,然后在文件的最后鍵入:long DoItemDlg(const char * strDataSour,int nType,IOITEMDEF &item,char * szDesc,int nFlag)這就加入了 dll 的輸出函數(shù) .打開(kāi)示例 DemoController 的 Ioitemui 模板程序 ,它的 DoItemDlg() 函數(shù)實(shí)現(xiàn)過(guò)程如下 :long DoItemDlg(const char * szDevic

36、eName,int nType,IOITEMDEF &item,char * szDesc,int nFlag) CLinkDlg dlg;0 = 0;1 = 1; switch(nFlag)case 0:個(gè)對(duì)話框?yàn)橛脩暨M(jìn)行數(shù)據(jù)連接 TOC o 1-5 h z 組態(tài)時(shí)提供一個(gè)界面,其形式如下:12CLinkDlg 類有 2 個(gè)成員變量:CString m_desc;ONOK 消息函數(shù)進(jìn)行如下處理:void CLinkDlg:OnOK() UpdateData(TRUE); 掃描程序 IOSCANIOSCAN 是 FIOS 的一個(gè)主要程序模塊.它負(fù)責(zé)完成對(duì)IOAPI 部分的 DLL 代碼進(jìn)行周期

37、性地掃描.同時(shí)完成與 I/O 設(shè)備的底層通信(串口通信,網(wǎng)絡(luò)通信等), 以及設(shè)備超時(shí)處理,設(shè)備故障診斷等.IOSCAN 還負(fù)責(zé)與數(shù)據(jù)庫(kù)DB 之間的通信與協(xié)作.它把從I/O 設(shè)備采集到的數(shù)據(jù)經(jīng) IOAPI 解析轉(zhuǎn)換后提交給DB, 或?qū)?DB 下置給 I/O 設(shè)備的數(shù)據(jù)經(jīng) IOAPI 解析轉(zhuǎn)換后寫入 I/O 設(shè)備 .IOSCAN 是 FIOS SDK 提供的一個(gè)標(biāo)準(zhǔn)軟件工具供程序員在調(diào)試和運(yùn)行時(shí)直接使用 .13FIOS開(kāi)發(fā)工具包里提供了debug和release版本的IOSCAN程序,在目錄FCINSTDIRFiossdkUtility 下可以找到它們.Debug 版本的 IOSCAN 程序主要供

38、程序員在調(diào)試時(shí)使用,它能提供更為豐富的調(diào)試信息.在使用時(shí) ,需要把以及配套的幾個(gè) DLL 文件 (即目錄FCINSTDIRFiossdkUtilityDebug 下的 DLL 文件 )拷貝到生成的debug 版本的文件的同一目錄下(注意 :debug 版本的文件必須配合debug版本的IOSCAN程序,release版本的文件必須配合 release版本的 IOSCAN 程序 ). 同時(shí)不要忘記將的文件名更改為要開(kāi)發(fā)的 I/O 驅(qū)動(dòng)的 IOID 名稱.debug版本的IOSCAN需要程序員手工啟動(dòng)或用VC+調(diào)試啟動(dòng).編程接口IOAPI 是 FIOS 提供的最主要的一個(gè)編程接口 .程序員的主要工

39、作就是開(kāi)發(fā) IOAPI 部分 的程序代碼.IOAPI提供了一組 API函數(shù)和一些C+類庫(kù).這組API函數(shù)規(guī)定了名稱,參數(shù)及返回 值,函數(shù)內(nèi)容由程序員根據(jù)具備的I/O設(shè)備編程實(shí)現(xiàn).C+類庫(kù)則為程序員提供各種獲取力控 I/O 組態(tài)信息 ,參數(shù)設(shè)置信息,與數(shù)據(jù)庫(kù)DB 進(jìn)行數(shù)據(jù)交換等數(shù)據(jù)處理的方法.我們把這組API函數(shù)稱為掃描函數(shù),把這些C+類庫(kù)稱為IOC,IOC是Input Output Class(輸入輸出 類庫(kù) )的縮寫 . 程序員編寫的 Ioapi 最后要形成MFC 的擴(kuò)展動(dòng)態(tài)鏈接庫(kù)(MFC Extension DLL), 掃描函數(shù)是這個(gè)DLL 的輸出函數(shù).當(dāng)力控 系統(tǒng)運(yùn)行時(shí),力控FIOS 的

40、掃描程序Ioscan 對(duì) Ioapi中掃描函數(shù)部分的 dll 代碼進(jìn)行周期性地掃描 ,它把從 I/O 設(shè)備采集到的數(shù)據(jù)經(jīng)掃描函數(shù)解 析轉(zhuǎn)換后提交給DB, 或?qū)?DB 下置給 I/O 設(shè)備的數(shù)據(jù)經(jīng)掃描函數(shù)解析轉(zhuǎn)換后寫入 I/O 設(shè)備 .歸結(jié)起來(lái),開(kāi)發(fā)Ioapi 的主要內(nèi)容就是用 IOC 編寫掃描函數(shù) .IOC 中的所有類庫(kù)全部以純虛類的形式提供,并且只有成員函數(shù),沒(méi)有成員變量. 目前 IOC 中主要包括4 個(gè)類 :CItem ,CPacket,CDevice,CManager.CItem,數(shù)據(jù)項(xiàng)類. CPacket,數(shù)據(jù)包類. CDevice, 設(shè)備類 . CManager,管理器類. 一個(gè) F

41、IOS 實(shí)例創(chuàng)建一個(gè)CManager 實(shí)例.用戶在組態(tài)時(shí)每定義一個(gè)設(shè)備,則創(chuàng)建一個(gè)CDevice 實(shí)例 .CManager 對(duì)所有的 CDevice 進(jìn)行管理 .一個(gè) CDevice 實(shí)例,由一個(gè)或多個(gè)CPacket實(shí)例組成,而每個(gè)CPacket實(shí)例又由一個(gè)或多個(gè)CItem實(shí)例組成.每個(gè)CItem實(shí)例, TOC o 1-5 h z 對(duì)應(yīng)數(shù)據(jù)庫(kù)DB 中的一個(gè)點(diǎn)參數(shù),也就是對(duì)應(yīng)I/O 設(shè)備的一個(gè)點(diǎn)(如:設(shè)備的一個(gè)通道,一個(gè)參數(shù)等).IOC 提供的這 4 個(gè)類庫(kù),實(shí)際上就是對(duì)以上所述的這幾種數(shù)據(jù)對(duì)象提供了一組操作方法, 以供程序員更加靈活的控制程序.Citem 類 CItem 類提供了對(duì)數(shù)據(jù)項(xiàng)對(duì)象的

42、一組操作方法.一個(gè)數(shù)據(jù)項(xiàng)對(duì)象包含的是數(shù)據(jù)庫(kù)DB 中的一個(gè)點(diǎn)參數(shù)與I/O 設(shè)備中一個(gè)物理通道的映射關(guān)系 .CItem 使用的基本數(shù)據(jù)結(jié)構(gòu)是IOITEMDEF. 一個(gè) CItem 實(shí)例保存一個(gè)IOITEMDEF 實(shí)例 .IOITEMDEF 的定義如下:typedef struct IoItemDefStru char str64; long n8; IOITEMDEF;14CItem 類的定義如下:class CItem : public CObjectpublic:virtual IOITEMDEF* GetItemStru()=0;virtual void SetReadOnly(BOOL b

43、Attribute = TRUE)=0;virtual void SetWriteOnly(BOOL bAttribute = TRUE)=0;virtual void SetData(short sData)=0; IOITEMDEF* GetItemStru() 功能 :取得數(shù)據(jù)連接項(xiàng)結(jié)構(gòu)指針 .參數(shù) :無(wú).返回值:數(shù)據(jù)項(xiàng)結(jié)構(gòu)指針.舉例 :IOITEMDEF* pItemStru = pItem-GetItemStru();long nCmdType = pItemStru-n3;void SetReadOnly(BOOL bAttribute = TRUE)功能 :設(shè)置連接項(xiàng)的寫屬性,缺

44、省時(shí)連接項(xiàng)是可寫的 .參數(shù) :TRUE: 設(shè)置為不可寫 ;FALSE: 設(shè)置為可寫 .返回值:無(wú) .舉例 :for (int i = 0; i GetItemCount(); i+) CItem* pItem = pPacket-GetItem(i);pItem-SetReadOnly();void SetWriteOnly(BOOL bAttribute = TRUE)功能 :設(shè)置連接項(xiàng)的讀屬性,缺省時(shí)連接項(xiàng)是可讀的 .15參數(shù) :TRUE: 設(shè)置為不可讀;FALSE: 設(shè)置為可讀.返回值:無(wú) .舉例 :for (int i = 0; i GetItemCount(); i+)CItem*

45、pItem = pPacket-GetItem(i);pItem-SetWriteOnly();void SetData(short sData)功能 :按短整型格式設(shè)置采集數(shù)據(jù) .參數(shù) :短整形數(shù)據(jù)值 .返回值:無(wú) .void SetData(long lData)功能 :按長(zhǎng)整型格式設(shè)置采集數(shù)據(jù) .參數(shù) :長(zhǎng)整型數(shù)據(jù)值 .返回值:無(wú) .void SetData(double fData)功能 :按浮點(diǎn)格式設(shè)置采集數(shù)據(jù) .參數(shù) :浮點(diǎn)數(shù)據(jù)值 .返回值 :無(wú) .void SetData(char* szData)功能 :按字符串格式設(shè)置采集數(shù)據(jù) .參數(shù) :字符串?dāng)?shù)據(jù)值 .返回值 :無(wú) .voi

46、d GetData(char* szData)功能:按字符串格式取得上一次用SetData()設(shè)置的采集數(shù)據(jù).參數(shù) :存放最近一次設(shè)置的采集數(shù)據(jù)(字符串型數(shù)值)的字符串指針.緩沖區(qū)長(zhǎng)度應(yīng)不小于 32.返回值 :無(wú) .舉例 :char szData32;pItem-GetData(szData);void SetPrivateData(unsigned short offset, long lPrivateData);功能 :設(shè)置私有數(shù)據(jù) .參數(shù):ofset,私有數(shù)據(jù)的偏置,03;lPrivateData,長(zhǎng)整型私有數(shù)據(jù).返回值 :無(wú) .備注 :Ioscan 自動(dòng)為每個(gè)CItem 實(shí)例分配了一塊

47、由 4個(gè)整型數(shù) (32 位)組成的程序員私有數(shù)據(jù)空間供程序員使用.程序員除了用這部分私有數(shù)據(jù)區(qū)保存數(shù)值外,也可以分配新的內(nèi)存空間,然后將內(nèi)存指針保存在私有數(shù)據(jù)區(qū)內(nèi),但不要忘記,在程序退出前,正確釋放新分配的內(nèi)存空間 .舉例 :char* pBuf = new charMAXCMDLEN;pItem-SetPrivateData(3, (long)pBuf);long GetPrivateData(unsigned short offset)16功能 :取得私有數(shù)據(jù) .參數(shù):ofset,私有數(shù)據(jù)的偏置,03;lPrivateData,長(zhǎng)整型私有數(shù)據(jù).返回值 :整型私有數(shù)據(jù).備注 :Ioscan

48、自動(dòng)為每個(gè)CItem 實(shí)例分配了一塊由 4 個(gè)整型數(shù)(32 位 )組成的程序員私有數(shù)據(jù)空間供程序員使用 .程序員除了用這部分私有數(shù)據(jù)區(qū)保存數(shù)值外,也可以分配新的內(nèi)存空間,然后將內(nèi)存指針保存在私有數(shù)據(jù)區(qū)內(nèi),但不要忘記 ,在程序退出前,正確釋放新分配的內(nèi)存空間.CPacket* GetPacket()功能 :取得本連接項(xiàng)類所歸屬的數(shù)據(jù)包指針 .參數(shù) :無(wú)返回值 :本數(shù)據(jù)項(xiàng)所歸屬的數(shù)據(jù)包指針.舉例 :CPacket* pPacket = pItem-GetPacket();CDevice* GetDevice()功能 :取得本連接項(xiàng)所歸屬的設(shè)備指針 .參數(shù) :無(wú)返回值:本連接項(xiàng)所歸屬的設(shè)備指針.CM

49、anager* GetManager()功能 :取得Ioscan 管理器指針 .參數(shù) :無(wú)返回值 :Ioscan 管理器指針.void SetHisData(HisInsDatStru* pHisInsDatStru,int nCount)功能 :按浮點(diǎn)型格式設(shè)置歷史數(shù)據(jù)參數(shù) :無(wú)返回值 :無(wú)Cpacket 類CPacket 類提供了對(duì)數(shù)據(jù)包對(duì)象的一組操作方法.一個(gè)數(shù)據(jù)包對(duì)象包含一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)對(duì)象 .CPacket 類的聲明如下:class CPacket : public CObjectpublic:virtual int GetItemCount()=0;virtual void Set

50、ReadOnly(BOOL bAttribute = TRUE)=0;virtual void SetWriteOnly(BOOL bAttribute = TRUE)=0;int GetItemCount() TOC o 1-5 h z 功能 :取得本數(shù)據(jù)包內(nèi)數(shù)據(jù)項(xiàng)的個(gè)數(shù).參數(shù) :無(wú).返回值:本數(shù)據(jù)包內(nèi)數(shù)據(jù)項(xiàng)的個(gè)數(shù).舉例 :int nItemCnt = pPacket-GetItemCount();int AddItem(CItem* pItem);功能 :按先后順序加入數(shù)據(jù)連接項(xiàng).參數(shù) :加入數(shù)據(jù)包的數(shù)據(jù)項(xiàng)指針.返回值:本數(shù)據(jù)包內(nèi)數(shù)據(jù)項(xiàng)的個(gè)數(shù).舉例 :if (pPacket-GetItem

51、Count() = 0) pPacket-AddItem(pItem);void InsertItem(CItem* pItem, unsigned short nIndex) TOC o 1-5 h z 功能 :按指定位置加入數(shù)據(jù)連接項(xiàng).參數(shù):pItem,加入數(shù)據(jù)包的數(shù)據(jù)項(xiàng)指針.nIndex,加入的數(shù)據(jù)項(xiàng)在數(shù)據(jù)包內(nèi)的序號(hào)(從0 開(kāi)始 ).返回值:本數(shù)據(jù)包內(nèi)數(shù)據(jù)項(xiàng)的個(gè)數(shù).CItem* GetItem(int nIndex);功能 :按序號(hào)取得數(shù)據(jù)連接項(xiàng).參數(shù):nIndex,數(shù)據(jù)項(xiàng)在數(shù)據(jù)包內(nèi)的序號(hào)(從0開(kāi)始).返回值:數(shù)據(jù)項(xiàng)指針.舉例 :for (int i = 0; i GetItemCoun

52、t(); i+) CItem* pItem = pPacket-GetItem(i);. void SetReadOnly(BOOL bAttribute = TRUE)功能 :設(shè)置數(shù)據(jù)包的寫屬性,缺省時(shí)數(shù)據(jù)包是可寫的.參數(shù) :TRUE: 設(shè)置為不可寫 ;FALSE: 設(shè)置為可寫 .返回值 :無(wú) .舉例 :int nPacketCnt = 0;nPacketCnt = pDevice-GetPacketCount();for (int i = 0; i GetPacket(i);pPacket-SetReadOnly();void SetWriteOnly(BOOL bAttribute =

53、TRUE) TOC o 1-5 h z 功能 :設(shè)置數(shù)據(jù)包的讀屬性,缺省時(shí)數(shù)據(jù)包是可讀的.參數(shù) :TRUE: 設(shè)置為不可讀;FALSE: 設(shè)置為可讀.返回值 :無(wú) .void SetPrivateData(unsigned short offset, long lPrivateData)18功能 :設(shè)置私有數(shù)據(jù).參數(shù):ofset,私有數(shù)據(jù)的偏置,015;lPrivateData,長(zhǎng)整型私有數(shù)據(jù).返回值 :無(wú) .備注:Ioscan自動(dòng)為每個(gè)CPacket實(shí)例分配了一塊由16個(gè)整型數(shù)(32位)組成的程序員私有數(shù)據(jù)空間供程序員使用.程序員除了用這部分私有數(shù)據(jù)區(qū)保存數(shù)值外,也可以分配新的內(nèi)存空間,然后

54、將內(nèi)存指針保存在私有數(shù)據(jù)區(qū)內(nèi),但不要忘記,在程序退出前,正確釋放新分配的內(nèi)存空間 .舉例 :char* pBuf = new charMAXCMDLEN;pPacket-SetPrivateData(3, (long)pBuf);long GetPrivateData(unsigned short offset) TOC o 1-5 h z 功能 :取得私有數(shù)據(jù).參數(shù):ofset,私有數(shù)據(jù)的偏置,015;lPrivateData,長(zhǎng)整型私有數(shù)據(jù).返回值 :整型私有數(shù)據(jù).備注:Ioscan自動(dòng)為每個(gè)CPacket實(shí)例分配了一塊由16個(gè)整型數(shù)(32位)組成的程序員私有數(shù)據(jù)空間供程序員使用.程序員除

55、了用這部分私有數(shù)據(jù)區(qū)保存數(shù)值外,也可以分配新的內(nèi)存空間,然后將內(nèi)存指針保存在私有數(shù)據(jù)區(qū)內(nèi),但不要忘記,在程序退出前,正確釋放新分配的內(nèi)存空間 .void RepeatScan()功能 :重復(fù)掃描當(dāng)前數(shù)據(jù)包.參數(shù) :無(wú)返回值 :無(wú)備注 :對(duì)于異步工作方式,在采集數(shù)據(jù)時(shí),一個(gè)數(shù)據(jù)包的采集數(shù)據(jù)可能需要多幀傳送,或者一次采集過(guò)程需要多次請(qǐng)求棗應(yīng)答過(guò)程.在這種情況下,在解析數(shù)據(jù)時(shí),執(zhí)行該函數(shù) ,Ioscan 將重復(fù)掃描當(dāng)前數(shù)據(jù)包.CDevice* GetDevice();功能 :取得本數(shù)據(jù)包所歸屬的設(shè)備指針.參數(shù) :無(wú)返回值 :本數(shù)據(jù)包所歸屬的設(shè)備指針.舉例 :CDevice* pDevice = pP

56、acket-GetDevice();CManager* GetManager()功能 :取得 Ioscan 管理器指針 .參數(shù) :無(wú)返回值 :Ioscan 管理器指針.舉例 :CManager* pManager = pPacket-GetManager();Cdevice 類CDevice 類提供了對(duì)設(shè)備對(duì)象進(jìn)行操作的一組方法.一個(gè)設(shè)備包對(duì)象包含一個(gè)或多個(gè)數(shù)據(jù)包對(duì)象.下面是CDevice 的定義 :class CDevice : public CObjectpublic:CString GetName()功能 :取得設(shè)備的名稱.參數(shù) :無(wú).返回值 :設(shè)備的名稱.備注 :設(shè)備名即在 I/O 設(shè)

57、備定義 對(duì)話框 設(shè)備名稱 編輯框中輸入的字符串 .舉例 :CString csDeviceName = pDevice-GetName(););int GetType();功能 :取得設(shè)備類型(如 : 串口類,網(wǎng)絡(luò)類等).參數(shù) :無(wú).返回值 :設(shè)備類型 .目前該函數(shù)返回值及含義包括如下幾種 :_SYNCH, 同步通信類型設(shè)備_SERIAL_PORT , 串口通信類型設(shè)備_NET,TCP/IP 網(wǎng)絡(luò)通信類型設(shè)備_MODEM,MODEM 通信類型設(shè)備_BOARD, 板卡類型設(shè)備_PARELLEL, 并口通信類型設(shè)備對(duì)于同步通信類型設(shè)備,板卡類型設(shè)備,Ioscan為同步工作方式.對(duì)于串口通信類型設(shè)備

58、, 網(wǎng)絡(luò)通信類型設(shè)備,MODEM 通信類型設(shè)備,并口通信類型設(shè)備,掃描程序Ioscan為異步工作方式.舉例 :int nDeviceType = pDevice- GetType();int GetModel()功能 :取得設(shè)備型號(hào) .參數(shù) :無(wú).返回值 :設(shè)備型號(hào) .備注 :設(shè)備型號(hào)在文件中指定 .舉例 :int nDeviceModel = pDevice-GetModel();CString GetAddr()功能 :取得設(shè)備地址 .參數(shù) :無(wú).返回值 :設(shè)備地址 .備注 :設(shè)備地址指在I/O 設(shè)備定義 對(duì)話框中的 設(shè)備地址編輯框中輸入的內(nèi)容,并不一定與物理設(shè)備地址相同 .舉例 :int

59、 nDeviceAddr = pDevice-GetAddr();CString GetNetAddr() TOC o 1-5 h z 功能 :取得TCP/IP 網(wǎng)絡(luò)結(jié)點(diǎn)的地址 (IP 地址或主機(jī)名稱).參數(shù) :無(wú).返回值 :TCP/IP 網(wǎng)絡(luò)結(jié)點(diǎn)的地址(IP 地址或主機(jī)名稱).備注 :TCP/IP 網(wǎng)絡(luò)結(jié)點(diǎn)的地址在設(shè)備組態(tài)時(shí)指定 .舉例 :CString csNetAddr = pDevice-GetNetAddr();CString GetPhoneNumber()功能 :取得電話號(hào)碼.參數(shù) :無(wú).返回值 :電話號(hào)碼 .21備注 :設(shè)備的電話號(hào)碼在設(shè)備組態(tài)時(shí)指定.舉例 :CString c

60、sPhoneNumber = pDevice-GetPhoneNumber();int GetPort()功能 :取得串口設(shè)備端口號(hào)或網(wǎng)絡(luò)設(shè)備端口.參數(shù) :無(wú).返回值 :如果是串口類設(shè)備,該函數(shù)返回串口的端口號(hào)(1,2,3.);如果是TCP/IP網(wǎng)絡(luò)設(shè)備,則返回的是網(wǎng)絡(luò)端口號(hào).備注 :設(shè)備的串口端口號(hào)或TCP/IP 網(wǎng)絡(luò)端口號(hào)在設(shè)備組態(tài)時(shí)指定 .舉例 :int nPort = pDevice-GetPort();int GetUpdateCycle()功能 :取得數(shù)據(jù)更新周期(毫秒 ).參數(shù) :無(wú).返回值 :數(shù)據(jù)更新周期(毫秒 ).備注 :數(shù)據(jù)更新周期在設(shè)備組態(tài)時(shí)指定.舉例 :int nUpd

溫馨提示

  • 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)論