![OPC說明書-中文版_第1頁](http://file4.renrendoc.com/view/6909a18c8da3c56ef69f7bae6a50325a/6909a18c8da3c56ef69f7bae6a50325a1.gif)
![OPC說明書-中文版_第2頁](http://file4.renrendoc.com/view/6909a18c8da3c56ef69f7bae6a50325a/6909a18c8da3c56ef69f7bae6a50325a2.gif)
![OPC說明書-中文版_第3頁](http://file4.renrendoc.com/view/6909a18c8da3c56ef69f7bae6a50325a/6909a18c8da3c56ef69f7bae6a50325a3.gif)
![OPC說明書-中文版_第4頁](http://file4.renrendoc.com/view/6909a18c8da3c56ef69f7bae6a50325a/6909a18c8da3c56ef69f7bae6a50325a4.gif)
![OPC說明書-中文版_第5頁](http://file4.renrendoc.com/view/6909a18c8da3c56ef69f7bae6a50325a/6909a18c8da3c56ef69f7bae6a50325a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
OPC說明書--中文版OPC說明書--中文版OPC說明書--中文版OPC說明書--中文版編制僅供參考審核批準生效日期地址:電話:傳真:郵編:<<DataAccessCustomInterfaceStandardVersion>>題目:Opc數(shù)據(jù)存取接口定義標準版本日期2002628規(guī)范類型:工業(yè)標準規(guī)范題目:OPC數(shù)據(jù)存取接口定義規(guī)范作者:OPC基金會日期2002628版本:軟件:MS_Word資源:opcda205a_cust狀態(tài):發(fā)布大綱這個規(guī)范是為OPC客戶端和服務(wù)器端開發(fā)者作的接口規(guī)范.這個規(guī)范是在為能產(chǎn)生一個能夠讓不同的賣主的客戶和服務(wù)器能一起無縫交互的分析和設(shè)計過程中誕生的.[/color]商標:[/color]多數(shù)計算機和軟件都有商標或者已經(jīng)注冊商標,在這里不單獨列出商標.]需要運行環(huán)境這個標準需要Windows95WindowsNT或者更晚版本.公開的授權(quán)協(xié)議書
opc基金會,一個非贏利的公司(“opc基金會“),已經(jīng)建立了一系列為增強過程控制工業(yè)里的自動控制應(yīng)用程序,現(xiàn)場系統(tǒng)/設(shè)備和商業(yè)/辦公應(yīng)用程序協(xié)作能力已經(jīng)建立了一系列標準的ole/com接口協(xié)議當前的opc規(guī)范,原理性樣例和相關(guān)的文檔(統(tǒng)稱”opc?資料“),形成了一系列建立在微軟的ole/com技術(shù)的功能需要的基礎(chǔ)上的的標準的ole/com接口協(xié)議。這些技術(shù)為服務(wù)器適時信息定義了一些標準的對象,方法和屬性,象分散過程控制系統(tǒng),可編程邏輯控制器,精巧的現(xiàn)場設(shè)備和為傳輸信息的分析系統(tǒng)這些服務(wù)器適合所有符合標準的ole/com技術(shù)的設(shè)備(例如,服務(wù)器,應(yīng)用程序等)。opc基金會同意你(用戶)無論是個人還是法人單位,具有授權(quán)和為用戶提供一個當前的opc資料的一個拷貝,只要用戶接受包含在這個非專有的授權(quán)協(xié)議書里的條款。opc資料如果無用,所有資料的拷貝(所有形式的),用戶的個人財產(chǎn)必須被銷毀和歸還opc基金會。使用opc資料的用戶(包括任何雇員和用戶代理)必須接受這個協(xié)議書了的約束。授權(quán)的承認:這份協(xié)議的期限和條件,OPC基金會承認不獨占,免費出售的用戶,禁止使用,拷貝,展示,分發(fā)OPC資料為制造,使用,銷售或分發(fā)其他的任何產(chǎn)品和或者符合OPC資料的標準產(chǎn)品文獻。所有的用戶制作的或分發(fā)的OPC資料的拷貝必須把opc資料里包含的版權(quán)和其他的所有權(quán)聲明包含進來。OPC基金會保留所有在OPC資料里的權(quán)利,標題和利益,標注的協(xié)議里禁止的用戶的授權(quán)。不承擔的責任和義務(wù)用戶接受OPC基金會提供的OPC資料是出于為了幫助用戶理解微軟的OLE/COM技術(shù)的信息。OPC資料是作為沒有任何類型的明確的和含糊的包含的授權(quán),但是沒有任何的限制,性能的保證,銷售商,適合特殊的目的和無傷害的。用戶承擔所有的與性能,設(shè)計,使用和OPC資料性能有關(guān)的風險。OPC基金會及其會員不能承擔OPC資料在他們的設(shè)計或他們的使用會遇到用戶不斷的需求,操作和大量的錯誤的責任。這份協(xié)議或任何OPC資料的使用的結(jié)果使OPC基金會,及其會員們或第三方組織不承擔任何通過用戶或任何第三方的使用導致事件的資費,開支,損失,損害,或人身傷害一般規(guī)定:這個OPC材料約定和用戶授權(quán)應(yīng)當被終止(a)在用戶停止所有OPC材料的使用。(b)在用戶獲得了更高版本的材料來替代它,或者(c)OPC基金會有選擇終止,當用戶不正當?shù)?,超出協(xié)議使用這是資料。依據(jù)以上的終止協(xié)議,用戶應(yīng)該立即停止使用所用的OPC材料,銷毀所有的相關(guān)資料的拷貝然后是自己制作的相關(guān)資料和其他發(fā)生的相關(guān)行為,作為OPC基金會要求確保沒有任何在此協(xié)議之下的資料授權(quán)的拷貝在個人的財產(chǎn)上。用戶不應(yīng)該出口,和二次出口opc材料,在美國的出口控制法和出口規(guī)則沒有授權(quán)接收它們的任何個人或目的地的任何的產(chǎn)品不得直接的使用相關(guān)資料這些軟件和文檔是有限制的提供的。使用,復(fù)制或者紕漏都美國政府依據(jù)以下的限制(a)這個協(xié)議要依據(jù)DFARS227,7202-3規(guī)定(b)小段(c)(1)(i)中的技術(shù)數(shù)據(jù)和計算機軟件的權(quán)利要依據(jù)DFARS252227-7013的規(guī)定(c)商業(yè)計算機軟件的限制權(quán)依據(jù)FAR子條(c)(1)和(2)的規(guī)定使用。訂約/制造:OPC基金會,郵箱:140524,德州奧斯丁,78714-0524如果任何的這個協(xié)議中提供的被置空,殘缺,沒有強制的能力或不能在法庭上使用,其他相關(guān)的條款不受到影響。這個協(xié)議受到明尼蘇達州的法律的強制和解釋執(zhí)行,依據(jù)法律選擇執(zhí)行。這個協(xié)議收錄了當事人的期望和推遲執(zhí)行任何的解釋和協(xié)議(口頭的和書面的)相關(guān)的opc資料的全部解釋新增功能3.0版本摘要這個版本包含了對A版的DataAccessCustomInterface辦更,再晚些時候會決定是否會提供一個單獨的文檔(TheOPCDataAccessAutomationSpecification)用來描述適用于VBDelphi和其他一些有自動化功能的產(chǎn)品與OPC服務(wù)器的接口。以下的功能是已經(jīng)加入到這個版本的規(guī)范中了加入的新接口IOPCBrowseIOPCItemDeadbandMgtIOPCItemSamplingMgtIOPCitemIOIOPCSyncIO2IOPCAsyncIO3IOPCGroupStateMgt2闡明了啟動的問題和加入了WAITING_FOR_INITIAL_DATA質(zhì)量狀態(tài)掩飾加入了EUTYPE#7#8條目屬性闡明SetActimState用來表明一個條目從非激活到激活的變換中產(chǎn)生的質(zhì)量結(jié)果,和控制回調(diào)函數(shù)。加入了新服務(wù)器狀態(tài)列舉變量(OPC_STATUS_COMM_FAULT)在頭標簽里加入了便于進入訪問目錄表的方法在這給規(guī)范中刪除了以下接口IOPCServerPublicGroupsIOPCBrowseServerAddressSpaceIOPCPublicGroupStateMgtIOPCAsyncIOIOPCItemProperties另外加入拼寫,語法,格式和最小的凈化代碼用來提高規(guī)范的質(zhì)量。加入了條目屬性的章節(jié)。闡明了RemoveGroup在idl中加入了CATIDs提供了讀寫質(zhì)量和時間戳的功能使回調(diào)函數(shù)連接更健康加入了保持活動生命期機制2.05A版本摘要這個版本在的注釋(5)中闡述關(guān)于怎樣把浮點數(shù)和雙精度數(shù)轉(zhuǎn)換成整數(shù),也糾正了附錄D中(200-207用1關(guān)閉)屬性的定義2.05版本摘要這個版本包含了在小節(jié)中列舉并闡述了關(guān)于在Native和請求數(shù)據(jù)類型之間的轉(zhuǎn)換2.04版本摘要這個版本包含對某幾個在相互協(xié)作的會話和服從測試中出現(xiàn)的不明確地方的另了的精簡。還有一些章節(jié):時間偏倚和死區(qū)在GroupObject中討論,通用屬性()。SetState的LocaleID(為了使他更清楚這個行為是可選擇的)。添加和闡明了GetItemProperties,LookupItemIDs,AddItems,ValidateItemsRemoveItems,SetActiveState,SetClientHandles,SetDataTypes,bothSyncIOandAsyncIOReadandWrite返回的錯誤E_INVALIDARG和S_FALSE“部分成功“改為“一個或多個錯誤完成“,這就清晰的預(yù)示著輸出的方法(特別是PPErrors的返回值)定義為這種情況,其他的對返回錯誤文本的調(diào)整又通過交叉函數(shù)組成。闡述GetItemID行為。在Refresh2和IOPCDateCallback::OnDataChange傳送參數(shù)的ID被闡述。特別的0是被允許的值。也可以見到對OPCAsyncIO的描述(),增加了小節(jié)對客戶和服務(wù)器中關(guān)于LocaleID職責的討論。2.03版本摘要這個版本包括了對死區(qū)的簡要闡述()也闡述了列舉的清空行為。對IOPCServer::CreateGroupEnumerator和IOPCBrowseServerAddressSpace::BrowseAccessPaths的描述已經(jīng)被澄清和描述,他們現(xiàn)在由已經(jīng)存在的IOPCBrowseServerAddressSpace::BrowseOPCItemIDS的描述組成2.02版本摘要這個版本包括了對OPCItemProperties接口討論()GroupStateMgt::SetState()和1。0版中對流聚合的討論()的簡要闡述2.01版本摘要這個版本闡述了IOPCBrowseServerAddressSpace中的dwAccessRightsFilter和討論了一般的數(shù)據(jù)入口(節(jié))2.0版本摘要這個版本包含了對版本的增強。通篇中也作了更改。下面的方面或許特別重要:這個被稱為OPCDataAccessSpecificatong的東西是從其他的OPC起步努力中得來的自動化接口規(guī)范被分在另外一個獨立的文檔中所有的前一版本的定義接口被保留并做了簡單的闡述?;谶B接的異步和異常用IDataObject要比使用連接點更好一點。IOPCAsyncIO,IDataObject和客戶端的IAdviseSink接口支持老板本(1。0)的連接。新的接口IOPCAsyncIO2,IConnectionPiontContainer和客戶端的IOPCDataCallback接口支持新詩的2。0版的連接定義了新的舒服的接口,IOPCItemProperties允許輕松訪問一般的和開發(fā)者的特殊屬性或條目及變量的屬性一個關(guān)閉請求功能特性的加入,通過服務(wù)器組件連接點和客戶端IOPCShutdown接口允許服務(wù)器請求關(guān)閉所有客戶端同服務(wù)器的連接。這個接口將被其他的OPC服務(wù)器使用服務(wù)器中加入了一個IOPCCommon接口,這個接口提供了一些公共的LocaleID相關(guān)的功能。這個接口將被其他的OPC服務(wù)器使用BrowseServerAddressSpace中加入了OPC_BROWSE_TO的能力目錄表1介紹。。。。。。。。。。。。。。。。。。。。。。。11.1讀者。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11.2提供的內(nèi)容。。。。。。。。。。。。。。。。。。。。。。。。。。12OPC數(shù)據(jù)訪問的基本原理。。。。。。。。。。。。。。。。。。。22.1OPC總覽。。。。。。。。。。。。。。。。。。。。。。。。。。。。。22.2哪些地方適合使用OPC。。。。。。。。。。。。。。。。。32.3通常的OPC的機構(gòu)和組成。。。。。。。。。。。。。。。42.4OPC數(shù)據(jù)訪問結(jié)構(gòu)詳述。。。。。。。。。。。。。。。。。。52.5對象和接口總覽。。。。。。。。。。。。。。。。。。。。。。。。62.6服務(wù)器的地址空間和配置。。。。。。。。。。。。。。。。。72.7服務(wù)器和網(wǎng)絡(luò)節(jié)點應(yīng)用水平的選擇。。。。。。。。。82.8同步和串行傳輸?shù)膯栴}。。。。。。。。。。。。。。。。。。。82.9持久存儲的事例。。。。。。。。。。。。。。。。。。。。。。。。。93OPC數(shù)據(jù)訪問的快速參考。。。。。。。。。。。。。。。。。。。。。。103.1自定義接口。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。104OPC自定義接口。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。114.1瀏覽OPC自定義接口。。。。。。。。。。。。。。。。。。。。。114.2綜合資料。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。124.2.2內(nèi)存所有權(quán)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。134.2.3標準的接口。。。。。。。。。。。。。。。。。。。。。。。。。。。。144.2.4空字符串和空指針。。。。。。。。。。。。。。。。。。。。。。144.2.5返回陣列。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。144.2.6高速緩存數(shù)據(jù),設(shè)備數(shù)據(jù)和時間戳。。。。。。。。。。154.2.7時間系列的值。。。。。。。。。。。。。。。。。。。。。。。。。。。154.2.8異步和同步的對比。。。。。。。。。。。。。。。。。。。。。。。154.2.9激活標志,死區(qū)和更新率。。。。。。。。。。。。。。。。。154.2.10錯誤和返回代碼。。。。。。。。。。。。。。。。。。。。。。。。154.2.11啟動問題。。。。。。。。。。。。。。。。。。。。。。。。。。。。。154.2.12VARIANT數(shù)據(jù)類型和互用性。。。。。。。。。。。。164.2.13定位和LocaleID。。。。。。。。。。。。。。。。。。。。。。。194.2.14條目屬性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。194.2.15IOPCSyncIO。。。。。。。。。。。。。。。。。。。。。。。。。。。254.2.16IOCASyncIO2。。。。。。。。。。。。。。。。。。。。。。。。。。264.2.17通過IOPCDataCallback的定制。。。。。。。。。。274.3OPCServer對象。。。。。。。。。。。。。。。。。。。。。。。。。。284.3.1概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。284.3.2IUnknown。。。。。。。。。。。。。。。。。。。。。。。。。。。。。294.3.3IOPCCommon。。。。。。。。。。。。。。。。。。。。。。。。。294.3.4IOPCServer。。。。。。。。。。。。。。。。。。。。。。。。。。。。304.3.4.1IOPCServer::AddGroup。。。。。。。。。。。。。。304.3.4.2IOPCServer::GetErrorString。。。。。。。。。。。。。334.3.4.3IOPCServer::GetGroupByName。。。。。。。。。。344.3.4.4IOPCServer::GetStatus。。。。。。。。。。。。。。。。354.3.4.5IOPCServer::RemoveGroup。。。。。刪除組。。。。。。。。。。。。。。。364.3.4.6IOPCServer::CreateGroupEnumerator。。。。。創(chuàng)建組列舉。。。。。。。。384.3.5IConnectionPointContainer(OnOPCServer)。。。。。。連接電容器。。。。。。。。404.3.5.1IConnectionPointContainer::EnumConnectionPoints。連接點列舉。414.3.5.2IConnectionPointContainer::FindConnectionPoint。。。查詢連接接點。。424.3.6IOPCBrowse。。。。。。。。。。。。。。。。。。。OPC瀏覽。。。。。。。。。。。。。。。。。。。。。。43IOPCBrowse::Browse...瀏覽..................................43IOPCBrowse::GetProperties......獲得屬性.........................46IOPCItemIO...................條目.........................48IOPCItemIO::Read........讀取...............................48IOPCItemIO::WriteVQT...................................51OPCGROUPOBJECT.............組對象..............................53GeneralProperties......一般屬性............................54Name..............名字.....................................54Cacheddata..........緩存數(shù)據(jù)..................................54Active................激活................................54UpdateRate...............更新率..............................55TimeZone(TimeBias).........時區(qū)(時間偏倚)............................55PercentDeadband...........死區(qū)百分比.............................56ClientHandle..............客戶端句柄..............................56ReadingandWritingData.........讀寫數(shù)據(jù)......................56IOPCItemMgt........................................58IOPCItemMgt::AddItems.......加入條目..........................58IOPCItemMgt::ValidateItems...條目生效........................60IOPCItemMgt::RemoveItems......刈除條目.....................62IOPCItemMgt::SetActiveState....設(shè)置為活動狀態(tài).....................63IOPCItemMgt::SetClientHandles....設(shè)置客戶端句柄....................64IOPCItemMgt::SetDatatypes........設(shè)定數(shù)據(jù)類型....................65IOPCItemMgt::CreateEnumerator.....創(chuàng)建枚舉器.....................66IOPCGroupStateMgt..................................67IOPCGroupStateMgt::GetState.....獲取狀態(tài).......................67IOPCGroupStateMgt::SetState.......設(shè)置狀態(tài)......................69IOPCGroupStateMgt::SetName.......設(shè)置名稱......................71IOPCGroupStateMgt::CloneGroup.....關(guān)閉組......................72IOPCGroupStateMgt2................................74IOPCGroupStateMgt2::SetKeepAlive....設(shè)置生命期..................74IOPCGroupStateMgt2::GetKeepAlive......獲得生命期...............76IOPCSyncIO.....................同步IO....................77IOPCSyncIO::Read.............讀取...........................77IOPCSyncIO::Write..............寫入........................80IOPCSyncIO2.........................................82IOPCSyncIO2::ReadMaxAge.....讀取最大生命期...................82IOPCSyncIO2::WriteVQT..............................85IOPCAsyncIO2.............異步IO................87IOPCAsyncIO2::Read..............讀............................88IOPCAsyncIO2::Write..............寫............91IOPCAsyncIO2::Refresh2...........刷新................94IOPCAsyncIO2::Cancel2............取消..................96IOPCAsyncIO2::SetEnable.........使活動..................97IOPCAsyncIO2::GetEnable..........獲得活動...................98IOPCAsyncIO3........................99IOPCAsyncIO3::ReadMaxAge...讀取最大生命期...................99IOPCAsyncIO3::WriteVQT............................102IOPCAsyncIO3::RefreshMaxAge....刷新最大生命期................104IOPCItemDeadbandMgt..........................106IOPCItemDeadbandMgt::SetItemDeadband.....設(shè)置條目死區(qū)...............106IOPCItemDeadbandMgt::GetItemDeadband.....獲得條目死區(qū)........108IOPCItemDeadbandMgt::ClearItemDeadband....清除條目死區(qū)..............110IOPCItemSamplingMgt(optional).........................112IOPCItemSamplingMgt::SetItemSamplingRate....................113IOPCItemSamplingMgt::GetItemSamplingRate...............116IOPCItemSamplingMgt::ClearItemSamplingRate...............118IOPCItemSamplingMgt::SetItemBufferEnable.................119IOPCItemSamplingMgt::GetItemBufferEnable....................121IConnectionPointContainer(onOPCGroup).......連接點容器.....123IConnectionPointContainer::EnumConnectionPoints......列舉連接點.........124IConnectionPointContainer::FindConnectionPoint......查找連接點.......125IEnumOPCItemAttributes..............列舉條目屬性.................126IEnumOPCItemAttributes::Next.........下一個....................126IEnumOPCItemAttributes::Skip.........跳過.................127IEnumOPCItemAttributes::Reset..........復(fù)位...........128IEnumOPCItemAttributes::Clone...........克隆.................129CLIENTSIDEINTERFACES.........客戶端接口........................130IOPCDataCallback............回調(diào)函數(shù)........................130IOPCDataCallback::OnDataChange.....數(shù)據(jù)變更通知.....................131IOPCDataCallback::OnReadComplete......全部讀入.......................134IOPCDataCallback::OnWriteComplete......全部寫入......................136IOPCDataCallback::OnCancelComplete....全部取消.................138IOPCShutdown.............關(guān)閉............................139IOPCShutdown::ShutdownRequest.....關(guān)閉請求............................1395INSTALLATIONISSUES..............安裝問題.......................140COMPONENTCATEGORIES........組建類........................140REGISTRYENTRIESFORCUSTOMINTERFACE.....自定義接口注冊入口.................140REGISTRYENTRIESFORTHEPROXY/STUBDLL.......代理存根dll注冊入口..........1416DESCRIPTIONOFDATATYPES,PARAMETERSANDSTRUCTURES...數(shù)據(jù)類型,參數(shù),結(jié)構(gòu)的描述..142ITEMDEFINITION........條目定義..........................142ACCESSPATH...............訪問路徑..............................143BLOB...............污點.........................144TIMESTAMPS.......時間戳................................144VARIANTDATATYPESFOROPCDATAITEMS......OPC數(shù)據(jù)條目的Variant數(shù)據(jù)類型.......145CONSTANTS...........................................146OPCHANDLE...............................146GroupHandles......組句柄........................146ItemHandles........條目句柄.................................146STRUCTURESANDMASKS..............結(jié)構(gòu)和蒙布........................147OPCITEMSTATE..............條目狀態(tài).......................147OPCITEMDEF.................條目定義.....................148OPCITEMRESULT...............條目結(jié)果.........................150OPCITEMATTRIBUTES............條目特性....................151OPCSERVERSTATUS..............服務(wù)器狀態(tài)......................153AccessRights................存取權(quán)限...................154OPCITEMPROPERTY...............條目特權(quán).....................156OPCITEMPROPERTIES..............條目屬性表....................157OPCBROWSEELEMENT..............瀏覽的組成...............158OPCITEMVQT....................................159OPCQUALITYFLAGS..............OPC性能標志...............1607SUMMARYOFOPCERRORCODES............OPC錯誤代碼摘要........1648APPENDIXA-.............附錄A頭文件.....1679APPENDIXB-DATAACCESSIDLSPECIFICATION.......附錄B數(shù)據(jù)訪問IDL文件規(guī)范..1731介紹在一個單獨的OPC概述文檔()對OPC作了全面的介紹,這個特殊的文檔只是對OPC數(shù)據(jù)訪問接口做詳細的解說1.1讀者這個規(guī)范是特地為做OPC客戶端和服務(wù)器端開發(fā)者作的一個參考手冊。他認為讀者已經(jīng)對MSOLE/COM技術(shù)和工業(yè)過程控制需求非常熟悉。這個規(guī)范是為熟悉并選擇使用C和C++語言來開發(fā)OPC客戶程序提供的資料。所以開發(fā)者要對這些方面的技術(shù)和特別的組件要相當熟悉。1。2可獲得的資料從OPC基金會可獲得的OPC借口訪問相關(guān)的資料包括他OPC規(guī)范本身以外還有OPCIDL文件(在這本文檔的附錄里)和OPC錯誤頭文件(在這個文檔里)。你可以方便地在OPC基金會的網(wǎng)站上可以找到標準的代理存根的DLLS和從OPC接口訪問IDL文件產(chǎn)生的頭文件,會員可以在OPC基金會的網(wǎng)站上下載OPC接口訪問的例子的源代碼。這個OPC數(shù)據(jù)訪問規(guī)范包括以下設(shè)計信息1.OPC數(shù)據(jù)訪問自定義接口—這個文檔描述了OPC組件和對象的接口和方法。2.OPC數(shù)據(jù)訪問自動化接口—晚些時候?qū)峁┮粋€可選擇的單獨文檔(OPC數(shù)據(jù)訪問自動化接口規(guī)范3。0)用來描述OPC自動化接口,這是為使用VBDelphi和其他具備自動化功能產(chǎn)品的軟件來與OPC服務(wù)器對接編成提供的2OPC數(shù)據(jù)訪問基本原理這個小節(jié)介紹OPC數(shù)據(jù)訪問和涵蓋OPC數(shù)據(jù)訪問的主題的細節(jié)。另外的公共話題包括WindowsNT,UNICODE,線程模式,等在OPC概述()的資料里討論。2.1OPC概覽這個規(guī)范描述OPCCOM組件和他們的接口通過OPC服務(wù)器的實現(xiàn)。一個OPC客戶能連接到不同開發(fā)商開發(fā)的一個或多給OPC服務(wù)器上。圖2-1OPC客戶(略)不同的開發(fā)商提供不同的OPC服務(wù)器,開發(fā)商提供的代碼決定了每個服務(wù)器訪問的設(shè)備和數(shù)據(jù),數(shù)據(jù)名稱,和服務(wù)器訪問的物理數(shù)據(jù)的細節(jié)。命名習慣在后來的章節(jié)提供。圖2-2客戶/服務(wù)器關(guān)系(略)水平高一點一個OPC服務(wù)器可以由多個對象組成:服務(wù)器,組,和條目。OPC服務(wù)器對象提供服務(wù)器的信息和作為容器為組對象服務(wù)。OPC組對象提供組的信息和提供了包含和邏輯組織OPC條目的機制。OPC組對象為客戶組織數(shù)據(jù)提供了一個方式。例如組可也用一個特別的操作來展示和報告來表示條目。數(shù)據(jù)能被讀寫。基于連接的異常在客戶與組里的條目之間被創(chuàng)建和根據(jù)需使能或取消使能。OPC客戶端可以配置OPC服務(wù)器為客戶端提供數(shù)據(jù)變化的速率。再每一個組里,客戶端可以定義一個或多個OPC條目。圖2-3組/條目關(guān)系(略)OPC條目表示同服務(wù)器的數(shù)據(jù)源連接。從自定義的接口來看,一個OPC條目不能被OPC客戶端理解為一個對象。因此,沒有為OPC條目定義的接口。所有的對OPC條目的訪問都是通過OPC組對象來實現(xiàn)的,組對象包含了OPC條目,和OPC條目的簡單定義。每一個條目都是由數(shù)值,性質(zhì),和時間戳組成。數(shù)值是VARIANT類型的,性質(zhì)很像Fieldbus里面的定義規(guī)范。標注:條目不是數(shù)據(jù)源,他們僅僅提供連接。例如,一個DCS系統(tǒng)里的變量的存在跟客戶端是否正在訪問他們沒有關(guān)系。OPC條目應(yīng)該被認為一個簡單的數(shù)據(jù)地址的標示,不能認為地址所指實際的物理數(shù)據(jù)源。那里適合OPC雖然OPC首先是為從網(wǎng)絡(luò)服務(wù)器來訪問數(shù)據(jù)而設(shè)計的,可是OPC接口能被應(yīng)用到很多地方。在低端的應(yīng)用水平,他們可也從物理設(shè)備里獲得原始數(shù)據(jù)并寫入SCADA或DCS,或者從SCADA和DCS系統(tǒng)里到應(yīng)用程序里。他的結(jié)構(gòu)和設(shè)計使構(gòu)造一個允許一個客戶端訪問多個不同開發(fā)者開發(fā)的運行在不同節(jié)點的服務(wù)器提供的數(shù)據(jù)的客戶應(yīng)用程序成為可能。圖2-4OPC客戶/服務(wù)器關(guān)系(略)一般的OPC體系結(jié)構(gòu)與組成OPC是兩套接口的規(guī)范:OPC自定義接口和OPC自動化接口,一個修訂的自動化接口隨著3。0版OPC規(guī)范的發(fā)布一起提供。下面是結(jié)構(gòu)圖(略)圖2-5OPC接口OPC說明書指定了COM接口,不是接口的實現(xiàn),他指定了客戶期望接口提供的功能行為。包括架構(gòu)的描述和適合這些架構(gòu)接口,象所有COM的實現(xiàn)一樣,OPC的架構(gòu)是客戶/服務(wù)器模型,OPC服務(wù)器組件為OPC組件提供接口和管理他們。在OPCServer的實現(xiàn)里有幾個綜合的考慮。主要的問題是超越不可分享物理設(shè)備路徑的數(shù)據(jù)傳輸?shù)念l率。因而,我們期望OPCServer是一個本地的或遠程的EXE代碼,能負責有效的物理設(shè)備數(shù)據(jù)的收集.一個OPC客戶程序通過規(guī)范的OPC接口與一個OPCServer進行通信.OPCServer必須實現(xiàn)自定義的接口,可選的自動化接口如果定義了有時也會實現(xiàn).一個OPC句柄會用來聚合接口和提供OPC自動化接口的額外的條目功能.參考下面的圖例:典型的OPC構(gòu)架服務(wù)器被期望鞏固和使所有的客戶的數(shù)據(jù)訪問最優(yōu)化用來提高同物理設(shè)備的通信性能。對輸入,從設(shè)備返回的數(shù)據(jù)會被暫存為了各種OPC客戶的異步分發(fā)和同步采集。對輸出,OPC服務(wù)器會為OPC客戶程序更新物理設(shè)備的數(shù)據(jù)。OPC數(shù)據(jù)訪問架構(gòu)的伴隨規(guī)范OPC數(shù)據(jù)訪問提供基本的功能同過一套標準的的接口來從各種網(wǎng)絡(luò)上的設(shè)備訪問數(shù)據(jù)。這些接口使客戶和服務(wù)器發(fā)現(xiàn)對方和通信容量(功能,命名空間,命名空間條目信息)的相互協(xié)作變得更容易,另外提供了一套完善的接口定義來促進各種裝置根據(jù)客戶應(yīng)用程序的需要來讀寫數(shù)據(jù)條目。OPC數(shù)據(jù)訪問的首要意圖是為支持縱向的構(gòu)架的數(shù)據(jù)服務(wù)提供接口(在高層的計算機上提供從設(shè)備到客戶應(yīng)用程序的服務(wù))OPC基金會朝著擴展OPC數(shù)據(jù)訪問的能力方向努力工作著。伴隨的接口被加進來為提供需要的擴展數(shù)據(jù)訪問功能。這些包括在不同的工業(yè)網(wǎng)絡(luò)分享服務(wù)器數(shù)據(jù)的能力。伴隨的構(gòu)架包括:OPC公共的定義和接口包含公共規(guī)則和設(shè)計標準和公共的數(shù)據(jù)訪問接口的規(guī)范。OPC復(fù)雜的數(shù)據(jù),詳細說明了怎么使用數(shù)據(jù)訪問來交換數(shù)據(jù)結(jié)構(gòu)。他提供了一種機制來象傳送實際值一樣來傳送數(shù)據(jù)的結(jié)構(gòu)。綜合的數(shù)據(jù)沒有集成到OPCDa規(guī)范中OPC數(shù)據(jù)交換,OPCDX已經(jīng)被設(shè)計用來在OPC服務(wù)器間橫向移動設(shè)備層數(shù)據(jù),為了表達這種新的技術(shù),OPCDX能夠?qū)崿F(xiàn)在Ethernet系統(tǒng)包括PLCHMI/SCADA設(shè)備和PC之間的數(shù)據(jù)的互用2.5對象和接口綜述OPC服務(wù)器對象提供了同一系列數(shù)據(jù)源進行通信和數(shù)據(jù)訪問的一種方式,可用的資源的類型是關(guān)于服務(wù)器實現(xiàn)的一個功能。一個OPC客戶程序同一個OPC服務(wù)器連接和通信是通過接口來完成的。OPC服務(wù)器對象為客戶程序提供了創(chuàng)建和操作OPC組對象的功能。這些組對象允許客戶們組織她們想訪問的數(shù)據(jù)。一個組可以是活動的或者非活動的單位,一個組也可以提供一個方式讓客戶用來定制條目列表從了在條目發(fā)生變化時得到通知。注:所有的COM對象都是通過接口訪問的??蛻艨吹降膬H僅是接口。因此,這里描述的對象是邏輯上的表示,沒有對服務(wù)器內(nèi)部作任何的實現(xiàn)。下面的圖是OPC對象的和他們的接口的摘要。注一些接口是可選擇的[]中的。2.6服務(wù)器的地址空間和配置這個版本的OPC說明書設(shè)定服務(wù)器的地址空間的配置是用IPersistfile接口管理和長期存儲的。只有服務(wù)器的特殊的信息會被長期存儲。所用的客戶配置信息(組和條目的定義)必須由用戶程序分別自己永久存儲。所有的系統(tǒng)定義的句柄在客戶和服務(wù)器的會話過程中擁有相同的值。把服務(wù)器空間和他的特殊用途的子空間區(qū)分開來是很重要的(做為服務(wù)器配置)客戶的詳細的組的維護細節(jié)會在這個說明書里討論。組的永久存儲是各個客戶程序的事。服務(wù)器地址空間的定義和配置的細節(jié)特別沒有說明。例如地址空間可能如下。全部固定。(如,對于特別的設(shè)備接口象測量設(shè)備)再OPC環(huán)境以外完全配置。(如,外部存在的DCS系統(tǒng)的接口)一個智能的服務(wù)器能智能在啟動時自動配置,讓服務(wù)器安裝硬件和接口。根據(jù)客戶程序當前的請求的數(shù)據(jù)條目的名稱服務(wù)器自動地配置服務(wù)器的地址空間期望是穩(wěn)定的和能在服務(wù)器內(nèi)進行管理??蛻舫绦驎咝枰粫r地定義和管理被叫做組的相關(guān)的小的條目列表。通過OPCGroups得使用,這里描述的接口給客戶程序提供了定義,管理,重新創(chuàng)建這些需要的列表的能力2.7應(yīng)用級別服務(wù)器和網(wǎng)絡(luò)節(jié)點選擇OPC數(shù)據(jù)訪問支持在服務(wù)器內(nèi)部管理客戶組的請求的概念。這些組能包含僅從從一個特殊的OPC服務(wù)器對象數(shù)據(jù)請求。為了能訪問數(shù)據(jù),一個客戶應(yīng)用程序需要詳細說明下列能容:OPC數(shù)據(jù)訪問服務(wù)器的名稱(CoCreateInstance,CoCreateInstanceEx,使用)OPC數(shù)據(jù)訪問服務(wù)器主機的名稱(CoCreatInstanceEx)開發(fā)商的OPC條目的定義詳細說明(在地址空間里的數(shù)據(jù)條目的名稱)說明書為討論這些架構(gòu)里的具體實現(xiàn)和客戶程序里的接口留一些余地。2.8同步和串行問題在單獨的傳輸里的客戶讀寫數(shù)值和屬性的性能被稱為同步傳輸。例如,很多應(yīng)用想確保特殊的條目的數(shù)值,性能,和時間戳是同步的。還有,一個報告數(shù)據(jù)包被希望能確保一個組的幾個值的讀寫能作為一個綁定的報告捆綁在一起。最后,一個配方的下載包也會被期望組里的所有的值在一起發(fā)送,數(shù)值沒有接收完配方不會被執(zhí)行。僅有一少部分的關(guān)于同步重要性的例子。OPC自身不能夠保證所有的同步任務(wù)被完成只是一少部分結(jié)果。服務(wù)器和客戶程序之間還加入了傳送握手信號和標志來標示準備好和完成狀態(tài)的請求。還有一些東西需要被詳細說明,也就是OPC服務(wù)器的行為要確保這些同步能被完成。以后會看到OPC允許直接讀寫組里的條目和單獨的條目也希望能在連接之上。不用回頭太遠就能夠觀察到這些問題和服務(wù)器的行為。1.一般地,OPC服務(wù)器會嘗試在一個對數(shù)據(jù)條目和屬性的單獨的讀寫操作時保持同步。單獨的條目的讀和單獨的條目的寫操作要求保持同步是沒有必要的。顯然,從不同的物理設(shè)備進行數(shù)據(jù)讀操作是很難保持同步的。2.能被不同線程訪問的數(shù)據(jù)條目的讀與寫必須實現(xiàn)線程的安全,在這個方面這本說明書里對數(shù)據(jù)同步作了詳細的說明。例如重要性包括:在一個服務(wù)器內(nèi)部的邏輯,當另一個線程完成物理傳輸和對一個與第一個線程共享的緩沖區(qū)放進數(shù)據(jù)時一個服務(wù)線程方法被執(zhí)行。另外一個例子可能一個句柄的邏輯或者一個隱藏的OPC線程服務(wù)OnDataChange方法的代理服務(wù)器在對共享緩沖器寫數(shù)據(jù)時一個客戶線程也可能在讀該緩沖器。3.線程問題經(jīng)常是很重要的,尤其在SMP系統(tǒng)更是重要。串行通信我們的意思是在寫操作之行時客戶程序控制順序的功能。1.前列推薦在任何服務(wù)器的實現(xiàn)里對同一個設(shè)備的寫請求安順序控制。例如一用程序會使用配方完成標志,在一個單獨的配方條目發(fā)送以后一個配方下載完成標志被應(yīng)用程序置位。在這種情況下,數(shù)據(jù)會被按照同樣的順序傳輸?shù)轿锢碓O(shè)備,他會保證在所用數(shù)據(jù)傳送完之前完整標志不會被置位。在服務(wù)器緩沖器里輸出數(shù)據(jù)和執(zhí)行單獨的傳送關(guān)系線程來發(fā)送輸出到物理設(shè)備,服務(wù)器的實現(xiàn)必須特別注意來確保輸出的次序的保持。2??蛻舫绦蛟谧x數(shù)值要非常明確同時在接收通過回調(diào)函數(shù)更新時特別注意給出準確地定義回調(diào)函數(shù)發(fā)生和沒有發(fā)生。這些會在以后討論的更多。所有這些問題會在以下的方法的具體實現(xiàn)的細節(jié)里被澄清。2.9永久存儲過程OPC服務(wù)器會實現(xiàn)一個可選擇的接口來使OPC客戶告訴OPC服務(wù)器保存OPC服務(wù)器的配置信息更方便。服務(wù)器信息可能包括同設(shè)備和使數(shù)據(jù)源同OPC服務(wù)器通信變得更方便的必要的數(shù)據(jù)源信息。客戶程序的配置信息包括組,條目被服務(wù)器永久存儲??蛻舫绦?qū)Ρ凰麄冋埱笫褂玫慕M和條目的配置和永久存儲有責任。3OPC數(shù)據(jù)訪問快速參考這一節(jié)包括自定義接口方法的快速參考。在以后的參考章節(jié)定義了詳細的接口行為和參數(shù)。3.1自定義接口注:這個章節(jié)不說明多余的標準的COM接口例如IUnknown,IEnumString和IEnumUnknown這些被OPC數(shù)據(jù)訪問使用的接口。OPCServerIOPCServerIOPCBrowse(newIOPCItemIO(newIConnectionPointContainerIOPCCommonOPCGroupIOPCGroupStateMgtIOPCGroupStateMgt2(newIOPCASyncIO2IOPCAsyncIO3(newIOPCItemMgtIOPCItemDeadbandMgt(newIOPCItemSamplingMgt(new,optional)IConnectionPointContainerIOPCSyncIOIOPCSyncIO2(newEnumOPCItemAttributesIEnumOPCItemAttributes4OPC自定義接口4.1OPC自定義接口總覽OPC自定義接口對象包括以下自定義對象:OPCServerOPCGroup這一章詳細描述了這些對象的接口和行為。OPC服務(wù)器開發(fā)者需要實現(xiàn)這章中定義的OPC對象的功能。這章中也說明和定義了標準的OLE接口的期望行為。OPC服務(wù)器和OPC客戶端需要的接口在OPC應(yīng)用組件編譯時被實現(xiàn)。標準的自定義接口對象Enumerator被創(chuàng)建,這些對象的接口也會被返回。因為他們的行為已經(jīng)被OLE很好的定義了所以一般的列舉對象和接口只做簡短的描述。下面的OPC說明書對象的列舉器被創(chuàng)建和返回方法首選下面的方法而不是通過QueryInterface列舉器如下:組列舉器(看IOPCServer::CreateGroupEnumerator)條目屬性列舉器(看IOPCItemMgt::CreateEnumertor)你也應(yīng)該注意這些情況,有些返回列表是通過列舉器返回的有時作為條目列表返回。我們的選擇依據(jù)期望的條目返回數(shù)據(jù)。大的列表通過列舉器返回小的更容易通過列表返回。4.2一般信息這一節(jié)中提供了有關(guān)OPC接口的綜合的信息,和一些OPC設(shè)計者期望這些接口怎么被實現(xiàn)和使用的背景信息。4.2.1版本的通用數(shù)據(jù)訪問服務(wù)器說明書應(yīng)該使,和30版本的環(huán)境的或其他數(shù)據(jù)訪問說明書版本的相關(guān)組成應(yīng)當兼容。數(shù)據(jù)訪問客戶端也應(yīng)該使,和30版本的環(huán)境的或其他數(shù)據(jù)訪問說明書版本的相關(guān)組成應(yīng)當兼容客戶端和服務(wù)器端的開發(fā)者應(yīng)該根據(jù)他們的特殊應(yīng)用情況使用最好的兼容策略。例如一個開發(fā)者經(jīng)常把自己開發(fā)的客戶端和服務(wù)器端組件作為一個包系統(tǒng)出售,他的OPC表現(xiàn)出的很強的兼容性使他不用需要支持接口的很多版本。作為一個通用的方針強烈推薦已經(jīng)存在的服務(wù)器的開發(fā)者添加版本的支持和繼續(xù)添加對和版本的支持,允許已經(jīng)存在的客戶端移植到他們自己的空間。數(shù)據(jù)訪問服務(wù)器需要的接口OPCServerIUnknown需要需要需要IOPCServer需要需要需要IOPCCommonN/A需要需要IConnectionPointContainerN/A需要需要IOPCItemPropertiesN/A需要N/AIOPCBrowseN/AN/A需要IOPCServerPublicGroups可選擇可選擇N/AIOPCBrowseServerAddressSpace可選擇可選擇N/AIOPCItemION/AN/A需要OPCGroupIUnknown需要需要需要IOPCItemMgt需要需要需要IOPCGroupStateMgt需要需要需要IOPCGroupStateMgt2N/AN/A需要IOPCPublicGroupStateMgt可選擇可選擇N/AIOPCSyncIO需要需要需要IOPCSyncIO2N/AN/A需要IOPCAsyncIO2N/A需要需要IOPCAsyncIO3N/AN/A需要IOPCItemDeadbandMgtN/AN/A需要IOPCItemSamplingMgtN/AN/A可選擇IConnectionPointContainerN/A需要需要IOPCAsyncIO需要可選擇N/AIDataObject需要可選擇N/A4.2.2內(nèi)存的分配每一個COM說明書,客戶程序必須釋放所有同輸出和輸入/輸出參數(shù)有關(guān)的內(nèi)存。這個包括任何結(jié)構(gòu)的成員指向內(nèi)存的指針。客戶端編寫者明白這個是很重要的,否則,很難發(fā)現(xiàn)浪費的大量的內(nèi)存泄漏。從IDL文件里可以看到并確認那些參數(shù)是輸出參數(shù)。強烈推薦一個方法一個客戶端應(yīng)該創(chuàng)建一個子程序用來經(jīng)常施放結(jié)構(gòu)的空間。成功和失敗的無關(guān)性,服務(wù)器必須經(jīng)常為輸出參數(shù)返回健康的定義的數(shù)值。釋放分配的資源是客戶程序的職責。注:如果返回的錯誤結(jié)果是任何的FAILED錯誤象E_OUTOFMEMORY,OPC服務(wù)器應(yīng)該為所有的輸出指針返回NULL(這是標準的COM行為),這個規(guī)則也應(yīng)用于函數(shù)返回的指針組。通常,一個魯棒型的OPC客戶應(yīng)該確認任何一個輸出和輸入/輸出指針并優(yōu)先用NULL來釋放他們。4.2.3標準的接口每個COM說明書,所有的接口需要的方法都必須被實現(xiàn)。每個COM說明書,任何可選擇的支持接口必須存在接口實現(xiàn)的內(nèi)部功能,甚至實現(xiàn)緊緊是一個返回E_NOTIMPL的存根。4.2.4空串和空指針這兩個術(shù)語在以下被使用:他們不是同一個東西。一個NULL指針是一個有錯誤的指針(0),這個指針可能導致使用異常。一個NUL串是一個問題指針,他指向一個是NUL字符的字符數(shù)列。如果NULL串從一個方法里作為輸出參數(shù)被返回的話他必須被釋放。否則的話包含該指針的內(nèi)存就會丟失。還要注意一個NULL指針不能通過一個輸入字符竄參數(shù)傳遞,因為受COM聚合的限制。在這種情況下一個指向NULL的字符串應(yīng)當作為省略的參數(shù)被傳遞。無論如何,NUL串在本說明里被使用.C#沒有NUL指針和NUL串的指針.返回的數(shù)列.你會注意在IDL文件使用的用從指針到指針組成的Size_is(,dwCount)函數(shù)的語法.他表示返回的條目時一個指向一定類型的實際數(shù)組的指針,不是指向一定類型的指針數(shù)組的數(shù)組指針.這個可以使服務(wù)器和客戶使用聚合,創(chuàng)建,和數(shù)據(jù)訪問更簡單.緩沖器數(shù)據(jù),設(shè)備數(shù)據(jù)和時間戳在這個說明書里大部分的術(shù)語CACHE和DEVICE被抽象化了.,那就是緩沖器和設(shè)備數(shù)據(jù)的讀取會完全影響完全方式定義的接口行為的描述。這些功能的具體實現(xiàn)細節(jié)沒有在這個說明書里做詳細的描述。事實上,很多服務(wù)器會把數(shù)據(jù)讀進各種緩沖器里。很多客戶程序也會去通過一些接下來討論的機制來從這些緩沖器里讀數(shù)據(jù)。對設(shè)備的數(shù)據(jù)訪問希望慢一點和首先用作診斷和特殊的關(guān)鍵操作。緩沖器應(yīng)該反映最新的數(shù)據(jù)的值,質(zhì)量和時間戳。時間戳應(yīng)該反映設(shè)備獲得的值和質(zhì)量的時間。或者服務(wù)器更新和使值和質(zhì)量在緩沖器里有效的時間。注意如果設(shè)備每隔10秒檢查數(shù)值的話那么期望的數(shù)值時間戳會每隔10秒鐘更新一次。因此時間戳反映服務(wù)器知道的準確的時間系統(tǒng)接口的物理設(shè)備是否基于例外會真的被忽視。假設(shè)知道(a)一個例外的設(shè)備每隔秒檢查一次,(b)同一個設(shè)備的通信是完好的(c)三分鐘以前設(shè)備更新條目FIC101的值為。在這種情況下從緩沖器里讀到的值將會是和很重要。從這個數(shù)值返回的時間戳將會是當前時間(秒內(nèi))因此知道條目的值事實上是秒前的值。4.2.8異步和同步接口比較架設(shè)很多客戶程序希望訪問暫存器的數(shù)據(jù),會有幾種方法客戶用來訪問服務(wù)器數(shù)據(jù)??梢杂猛椒绞綇木彌_器里讀數(shù)據(jù)。這種方式適合很簡單的一些客戶程序,只讀一些相當小數(shù)量的數(shù)據(jù)和最大效率不予考慮。這種方式操作的客戶程序本質(zhì)上是對服務(wù)器上已經(jīng)存在的掃描的一種復(fù)制??梢杂肐OPCDataCallback預(yù)訂緩沖器里的數(shù)據(jù),這個是客戶程序被推薦使用的一種方式,因為它會消耗CPU和網(wǎng)絡(luò)資源最少。4.2.9活動標志,死區(qū),和更新速率這些組和條目的屬性用來降低客戶和服務(wù)器的消耗的資源。在稍后的GROUPS里會做詳細的討論。一般的,他們會影響緩沖區(qū)數(shù)據(jù)和質(zhì)量信息的更新頻率和客戶程序IOPCDataCallback的訪問頻率。4.2.10錯誤和返回代碼OPC說明書描述了OPC服務(wù)器實現(xiàn)的和OPC客戶應(yīng)用程序依靠的接口和相應(yīng)的行為。在這個說明書的OPC錯誤代碼摘要一章中包含了一個OPC詳細的錯誤列表和返回代碼。在每個被描述的方法后面都有一個所有可能出現(xiàn)的OPC錯誤代碼也包括最平常的OLE錯誤代碼??蛻舫绦蛴锌赡苡龅筋~外的錯誤代碼象RPC和實際的安全代碼,他們應(yīng)該做好預(yù)處理這些代碼的工作。在兩種情況下(讀/寫)允許服務(wù)器返回開發(fā)商特殊的錯誤代碼。這些代碼被傳遞給GetErrorString方法。以后會詳細討論這個。所有的情況下E錯誤代碼表示FAILED類型的錯誤和S錯誤代碼表示有局部成功。啟動問題當條目被加到組里面以后,OPC服務(wù)器會花費一些時間為這些條目獲得一些實時的值。在這些情況下,客戶端就會完成一次讀緩存,或者建立一個AdviseSink或者基于預(yù)約好的連接點,和在這些建立在預(yù)約上的值可用之前對他們進行一次刷新。你會在后邊對預(yù)約的討論中你會看到,在一個組中會期望有一個包含所有數(shù)值刷新的回調(diào)函數(shù)。當條目被加到組中的同時,在這種條件下期望的行為就會被概括描寫。這些條目的初始狀態(tài)會設(shè)為被OPC_QUALITY_WAITING_FOR_INITAL_DATA(20)屏蔽的OPC_QUALITY_BAD。任何客戶端對這個組的操作會被表現(xiàn)為好和壞的質(zhì)量評估。如果服務(wù)器在添加條目時不能迅速判斷數(shù)據(jù)類型,它就會返回VT_EMPTY的規(guī)范數(shù)據(jù)類型。注意在同步讀和異步2操作時,服務(wù)器可能返回開發(fā)者定義的特殊的錯誤信息來提示開發(fā)者的一個特殊的錯誤例如“服務(wù)器初始化錯誤”。VARIANT數(shù)據(jù)類型和通用性為了增強通用性,推出了下邊的規(guī)則和建議。一般的建議:RARIANT類的VT_I2,I4,R4,R8,CY,DATE,BSTR,BOOL,UI1還有這些類型的單數(shù)組類希望能被經(jīng)常作為通用類型使用。(部分地因為它們是VB里的合法類型)。推薦無論什么情況下客戶端請求的數(shù)據(jù)為這些數(shù)據(jù)類型,服務(wù)器也同樣返回的是這些數(shù)據(jù)類型的數(shù)據(jù)。如果想對一些擴展的數(shù)據(jù)類型進行使用在服務(wù)器和客戶端都是同一個開發(fā)者開發(fā)的軟件中進行不可移動的數(shù)據(jù)返回到客戶端,為了通用性這些東西盡量少用。在實際用于中法相一些服務(wù)器在條目加入和刪除的時候不能斷定不活動的數(shù)據(jù)類型(例如那些遠程和本地的連接)。作為不活動的數(shù)據(jù)類型返回的VT_EMPTY類型在這些服務(wù)器中已經(jīng)得到了實踐。當數(shù)據(jù)可用和他們的實際數(shù)據(jù)類型可以斷定的時候,這些服務(wù)器會保持請求的數(shù)據(jù)類型和將以請求的數(shù)據(jù)類型返回數(shù)據(jù),推薦客戶端處理AddItems和ValidateItems返回的初始的VT_EMPTY。通用規(guī)則:在推薦的數(shù)據(jù)類型之上服務(wù)器被允許維護和返回任何合法的通用數(shù)據(jù)類型(任何的對VT_flags的合法更換)客戶端被允許請求在推薦的數(shù)據(jù)類型之上的Variant數(shù)據(jù)類型服務(wù)器應(yīng)該準備以極好的方法來處理那些不能被轉(zhuǎn)化為他們被請求類型的數(shù)據(jù)。那就是,他們不應(yīng)該失效,或返回錯誤的結(jié)果,或丟失內(nèi)存,就像提到的,任何地方它們都可能返回各種錯誤包括微軟VariantChangeType.返回的錯誤類型??蛻舳藨?yīng)該隨時準備處理那些不能處理請求數(shù)據(jù)類型的服務(wù)器。也就是,當錯誤被返回時它們不應(yīng)該失效和丟失內(nèi)存。請求VT_EMPTY(習慣被表示返回他自己的通用類型)的客戶端應(yīng)該同樣準備處理任何被返回的類型。也就是,即使發(fā)現(xiàn)他們不能用或不能顯示返回的數(shù)據(jù)。他們應(yīng)該正確釋放數(shù)據(jù)。和正確地給用戶提示一個不能被客戶程序識別的數(shù)據(jù)類型被返回了。Variant的實數(shù)值(VT_R4,VT_R8)將包含IEEE浮點數(shù)。標注,IEEE標準浮點數(shù)包含無數(shù)值的值(NAN)以這種格式存儲。即使這些值相當少用,它們也是允許使用的。如果這些值被返回,就需要QUALITY標志位被設(shè)置為OPC_QUALITY_BAD。雖然IEEE標準允許NAN被存儲到VT_R4和VT_R8格式,這些值僅可用目標條目的額外的固定格式來進行讀寫。他們不能與其他類型進行相互轉(zhuǎn)換。當這些數(shù)值被讀時QUALITY標志為必須被服務(wù)器返回OPC_QUALITY_BAD。如果這些值被寫時QUALITY標志必須被客戶提供位OPC_QUALITY_BAD,一些特殊的服務(wù)器是否返回和接受這些值就看服務(wù)器這方面是否特殊說明了。數(shù)據(jù)轉(zhuǎn)換的公認額外規(guī)則OPC服務(wù)器必須支持至少是下面的在規(guī)范的和請求的數(shù)據(jù)類型之間的轉(zhuǎn)換。讀和寫必須同步。注意早期的版本實現(xiàn)這個功能是同溝在COM庫中的VariantChangeEx()來提供的。在下面的表中,標志為OK的時可用的,其他的能與不能與數(shù)據(jù)源的特殊性有關(guān)。象在這個規(guī)范的其他地方注釋的一樣,客戶程序都會明確一個localID來使用。服務(wù)起會把他傳遞給VariantChangeTypeEx()在所有的會話中使用。注意有喜惡客戶會通過控制面板的區(qū)域設(shè)置覆蓋默認的區(qū)域設(shè)定。例如,英文的設(shè)置可能是MM/DD/YY或YY/MM/DD也有其他的格式。顯然03/02/01在這種情況下是含糊不清的。終端用戶應(yīng)該確保對給定的localID在網(wǎng)路上不同的機子上是兼容的。標注::1轉(zhuǎn)換的“死亡“,例如,從I4到I2或者從R8到R4是允許的,即使溢出了也是可能的。如果溢出出現(xiàn)了,一個溢出錯誤值就會被返回,這種情況下讀的質(zhì)量被設(shè)定為BAD,這種情況下寫的目標值不會改變。2注意內(nèi)部的存儲類型VT_BOOL是短整數(shù),必須得值為VARIANT_TRUE(0xFFFF-例如‘-1’被保存為短整數(shù)類型)和VARIANT_FALSE(0)。當轉(zhuǎn)換成布爾型時任何非零值被轉(zhuǎn)換為VARIANT_TRUE,布爾型向其他有符號類型轉(zhuǎn)換,VARIANT_TRUE轉(zhuǎn)換為-1,或者無符號類型的話是轉(zhuǎn)換為最大值。提醒,OPC標準的轉(zhuǎn)換是從布爾到BSTR不是真和假分別是0和-1,入宮服務(wù)器選擇轉(zhuǎn)換為真和假必須告訴本地機器原因。同樣應(yīng)該注意標準的C++關(guān)鍵字true當轉(zhuǎn)換為其他類型的值時總是被轉(zhuǎn)換為1。因此當設(shè)定真到boolVal時,總是被設(shè)定為VARIANT_FALSE或VARIANT_TRUE。3,注意日期類型是作為雙精度數(shù)存儲的,整數(shù)部分是日,小數(shù)部分是時間,對日期來說是1899年12月30,(例如,1900年1月1日是和2001年12月4日是)對時間來說,小數(shù)部分是從午夜0點開始計算來表示的,(例如表示上午6:00,表示上午9:36:00)這個小數(shù)是不會受到日期的符號影響的,無論是正值和負值都是從午夜0點算起的。例如是1899年12月29日上午9:36:00這些轉(zhuǎn)換是VariantChangeTypeEx()支持的。一般當轉(zhuǎn)換到UI1,I1,UI2或者I2時總會發(fā)生溢出錯誤。當日期轉(zhuǎn)換到整數(shù)時作為時間的小數(shù)部分會丟失。4串無意轉(zhuǎn)換到目標類型時BSTR轉(zhuǎn)換會給出DISP_E_TYPE錯誤。例如1234轉(zhuǎn)換為日和數(shù)字類型(例如UI1會產(chǎn)生溢出)“12/04/2001”轉(zhuǎn)換到DATE(依據(jù)地區(qū))不會轉(zhuǎn)換為任何數(shù)字類型,ABCD不轉(zhuǎn)換為任何其他類型。5從非整數(shù)到整數(shù)的變化必須考慮小數(shù)第一位大于的進位。例如要進位到2,要進位到-2。除此之外,一般是期望小數(shù)大于或等于。然而,客戶端和服務(wù)器端的開發(fā)者要注意VariantChange函數(shù)是不支持等于進位規(guī)律的。實際應(yīng)用的經(jīng)驗是浮點數(shù)和雙精度數(shù)可以等于進位的其他的會丟棄。等于時為了一致無論進位和丟棄都要接受。6要記住,貨幣類型時作為擴展的8字節(jié)整數(shù)形式存儲的。小數(shù)點后為四位的精度。例如¥保存為123400。7在有符號和無符號整數(shù)之間轉(zhuǎn)換的是時候,如果要求的類型不能對存放數(shù)值一個溢出就會產(chǎn)生。(例如:I1=-1轉(zhuǎn)換為UI1時就會溢出,UI1類型的255轉(zhuǎn)換為I1時就會溢出)。然而,一些通過ChangeVariantType進行的類似的轉(zhuǎn)換是不正確的。特別是轉(zhuǎn)換相同位的數(shù)據(jù),是不不會檢測溢出的。例如一個I1類型的-1轉(zhuǎn)換為UI1是255,相似地一個UI1類型的254轉(zhuǎn)換為I1類型為-2。對I2和I4也是一樣的。通過這個函數(shù)這樣的行為是不正確的。客戶端的程序員和用戶應(yīng)該特別注意很多服務(wù)器是使用這個函數(shù)的,會出現(xiàn)這種現(xiàn)象的。推薦糾正這些但是不時需要OPC都一樣。對不同位數(shù)的類型的轉(zhuǎn)換這個函數(shù)是正確的8各種類型之間的轉(zhuǎn)換可能失去精度,(例如從R8到R4,從R4到I4或I2)但是不會有溢出,和返回的質(zhì)量是GOOD注意ChangeVariantTypeEx不能應(yīng)用于數(shù)組,支持數(shù)組的服務(wù)器必須有另外的代碼來實現(xiàn)邏輯轉(zhuǎn)換。對數(shù)組說當任何元素出現(xiàn)了轉(zhuǎn)換錯誤,第一錯誤檢測就會返回(DISP_E_OVER或DISP_E_TYPE),如果讀質(zhì)量被置為BAD,一個空的變量就會返回。對寫,如果任何一個元素出現(xiàn)了錯誤那么沒有一個元素會被更改,第一錯誤產(chǎn)生就會返回位置區(qū)域和區(qū)域ID就像這個文檔中提到的一樣,服務(wù)器的對位置區(qū)域的適應(yīng)對開發(fā)者不是是什么難度。然而這些問題需要討論一下。位置區(qū)域不僅地字符串錯誤和信息重要。他對值作為字符串讀寫同樣重要。數(shù)字,日期,貨幣等都的格式都依靠位置。一般會期望客戶端會查詢服務(wù)器對位置區(qū)域的支持然會使用SetlocalID()或者相似的函數(shù)來選擇一個。注意:注意:在有些DataAcess的使用狀況里,組的LocaleID會根據(jù)服務(wù)器的需要,通過IOPCCommon::SetLocaleID().能被設(shè)定的與默認的LocaleID不一樣客戶端會希望服務(wù)器返回已經(jīng)根據(jù)LocaleID轉(zhuǎn)換和格式過的字符串,為了使這些數(shù)據(jù)對組的影響最小。這些字符串包括那些因為是VARIANT類型要轉(zhuǎn)化為需要的數(shù)據(jù)類型的。服務(wù)器會用函數(shù)VariantChangertypeEx()很輕易的完成這些變換。同樣地任何OPC服務(wù)器對象會希望客戶端會傳遞一些根據(jù)客戶端已經(jīng)告訴服務(wù)器要對對象使用的LocaleID而被轉(zhuǎn)換和格式過的字符串。這些包括BSTRs變成服務(wù)器需要轉(zhuǎn)換的活動的數(shù)據(jù)類型VARIANT。同樣服務(wù)器能用VariantChangertypeEx()來實現(xiàn)這個功能。例如如果客戶端告訴服務(wù)器當從一個特殊的對象讀數(shù)據(jù)時要返回德語格式的字符串。那么自然服務(wù)器希望當客戶端向服務(wù)器端的對象寫數(shù)據(jù)時要傳送德語格式的字符串。條目的屬性概覽這些屬性能被合法的IOPCItemProperties接口和被方法IOPCBrowse::GetProperties訪問,這些接口被客戶用來瀏覽與ITEMID有關(guān)的可用屬性和讀這些屬性的當前數(shù)值。有有些方面與EnumItemAttributes和SyncIORead函數(shù)提供的功能相似。這些接口有兩個重要的區(qū)別a)要求很容易使用。b)不可用作大量的數(shù)據(jù)訪問。既使期望允許程序用來很容易地瀏覽和讀取特殊條目的額外詳細的信息。這個接口的設(shè)計是基于如多條目是由表示相關(guān)的值類似工程單位區(qū)間,描述,報警狀態(tài)得條目組成的假設(shè)而設(shè)計的。比如系統(tǒng)會自己創(chuàng)建一個對當前復(fù)雜對象(PID控制器,計時器,計數(shù)器等)的一個記錄,這些記錄條目會有些屬性。(當前值,上限,下限,描述等)。結(jié)果,這些方法允許靈活的,方便得方式去瀏覽,定位和讀取相關(guān)的信息,而不用在底層做任何特殊的結(jié)構(gòu)設(shè)計。不用創(chuàng)建和管理任何OPCGroups,這些信息同樣允許被讀寫。屬性怎樣與ItemIDs關(guān)聯(lián)的如多情況下希望能這些屬性通過ItemIDs被訪問例如,,,等這些相關(guān)的ITEMIDs可能在一個OPCGroup.里被使用。這個方法提供一個方式來決定是否這個可選擇的訪問方法用來訪問屬性,如果要訪問大量的信息被有效的獲取的話。象上面所述的一個系統(tǒng)(例如,一個有內(nèi)部的記錄組成的系統(tǒng))有可能也會暴漏一個高等級的地址空間以作為分支的A100和作為子項的,,,,的形式給OPC。也就是說,一個條目的被記錄的屬性通常會被映射進一個較低及的ITEMIDS.另外一種被認為是這樣的方法是象A100,有一些屬性做為分支的的節(jié)點會在OPC瀏覽器里被顯示,和一些屬性作為子節(jié)點在OPC瀏覽器里被顯示。注:A100條目可能實際上被嵌入一個高層次的級別,然而這時我們不考慮,這個文章中沒有涉及這些。這個方法的目的是通過以下功能:1.被給出一個任何一個與屬性相關(guān)的數(shù)字的ITEMID(象或或甚至A100),返回一個其他相關(guān)屬性的清單。2.給一個條目屬性的ID清單,返回一個當前數(shù)據(jù)值的清單。3.給一個條目屬性ID的清單,返回一個可以在調(diào)用AddGroup里使用的條目清單。需要注意的是前面的8個屬性(OPC的特殊被設(shè)定為1的屬性)是特例的如果這些條目被加的一個OPC組里他們表示數(shù)據(jù)會存在OPCServer里或者不能表示在一個底層系統(tǒng)實際的變量記錄被命名的屬性。在這個設(shè)定里的一些屬性與OPCITEMATTRIBUTES結(jié)構(gòu)的子項保持一致。這些包括CanonicalDataType
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 主播保底合同范本
- 視頻會議工具促進團隊協(xié)作
- 醫(yī)藥居間合同范例
- 三產(chǎn)合同范例
- 農(nóng)村勞務(wù)用工合同范本
- 農(nóng)村建祠堂合同范例
- 東莞買房合同范例
- 個人購買股合同范例
- 劇場運營租賃合同范例
- 農(nóng)田出租正規(guī)合同范例
- 中考記敘文閱讀
- 《計算機應(yīng)用基礎(chǔ)》-Excel-考試復(fù)習題庫(含答案)
- 產(chǎn)科溝通模板
- 2023-2024學年四川省成都市小學數(shù)學一年級下冊期末提升試題
- GB/T 7462-1994表面活性劑發(fā)泡力的測定改進Ross-Miles法
- GB/T 2934-2007聯(lián)運通用平托盤主要尺寸及公差
- GB/T 21709.13-2013針灸技術(shù)操作規(guī)范第13部分:芒針
- 2022年青島職業(yè)技術(shù)學院單招語文考試試題及答案解析
- 急診科進修匯報課件
- 一年級家訪記錄表(常用)
- 信息技術(shù)基礎(chǔ)ppt課件(完整版)
評論
0/150
提交評論