【正文】
等封裝命令,發(fā)送 CIP 消息即可:Service:Get_Attribute_Single(0x0E)Path:Identity Object(class 0x01,instance 1),Product Name()作為回復(fù),接口送回如下信息:Service:Get_Attribute_SingleReply(0x8E)Response:length=12, “1756ENET/A”CIP 對象模型同樣包括“模擬輸入點(diǎn)”(0x0A)和“離散輸入組”(0x1D)對象,但是到目前為止,我們一切試圖使用它們來訪問 ControlLogix 模擬或數(shù)字輸入模塊的行為都失敗了。原因是沒有一個標(biāo)準(zhǔn)的 CIP 對象可以用來訪問 PLC 的標(biāo)簽名稱。與此同時,AB 公司針對 ControlLogix 推出了新的 CIP 服務(wù)編碼,包括使用 CIP 路徑來命名梯形圖邏輯標(biāo)簽、單獨(dú)使用讀寫的服務(wù)代碼以及結(jié)合了傳輸二進(jìn)制數(shù)據(jù)格式而使用的一些傳輸協(xié)議。使用 SendRRData 封裝命令來發(fā)送 CIP 數(shù)據(jù)到 PLC,必須通過連接管理器對象 1756ENET 模塊來尋址,見下例:Service:CM_Unconnected_Send(0x52)Path:Connection Manager(class 0x06,instance 1)encoded timeout,embedded messagePath:Port1(back plane),Link (slot of PLC)。這則消息是讀取一個標(biāo)簽‘TEST’:Service:CIP_Read_Data(0x4C)Path:‘TEST’(ANSI extended symbol segment)Elements:UINT1當(dāng)從 PLC 的回復(fù)顯示端口連接成功則連接管理器開始傳輸:Service:CIP_Read_DataReply(0xCC)Response:CA 00 00 80 38 3B=REAL CIP_Write_Data 服務(wù)(0x53) 允許在 PLC 上通過相似嵌入修改標(biāo)簽。與其它通信協(xié)議相比,它對梯形邏輯圖的要求并沒有改變!CIP 讀寫服務(wù)能夠訪問所有控制器標(biāo)簽而不需要預(yù)先在 PLC 編程的軟件標(biāo)記他們?yōu)椤吧a(chǎn)”或“消費(fèi)”類型,這包括對 I/O 模塊的接入:模擬輸入模塊可利用在槽 1 上的第一通道,即“Local:1:”。這種類型的傳輸稱為明確無關(guān)聯(lián)傳輸,因?yàn)闃?biāo)簽名被明確地提出,各個協(xié)議包是單獨(dú)尋址。對于連接信息, 在 PLC 上的消息路由器被要求打開連接:Service:CM_Forward_Open(0x54)Path:Connection Manager(class 0x06,instance 1)timeout,connection ID,update interval,…Connection Path: Port1,Link0(back plane,PLC slot), Message Router(class 0x02,instance 1)回復(fù)信息中提供一個號碼。CIP_Read_Data 請求能夠按照 SendUnitData 封裝命令的連接消息立即發(fā)送, 同時在信息前加上一個順序編號,發(fā)送 CM_Unconnected_Send 消息則并不需要嵌入這些。4 設(shè)計(jì)的方案因?yàn)?ControlNet 連接信息的優(yōu)勢不能在 EtherNet/IP 上體現(xiàn),這時就可以使用無關(guān)聯(lián)信息:以太網(wǎng)不預(yù)留帶寬;通過 TCP 協(xié)議來保證傳輸。對于 CIP_Read_Data 請求,比起關(guān)聯(lián)信息,無關(guān)聯(lián)信息有效地壓縮了信息,并且在傳輸中提高了 3%的速率。而缺點(diǎn)是,客戶端應(yīng)用程序必須在建立更新連接時發(fā)送請求,或者更快。以太網(wǎng)的延遲將導(dǎo)致 PLC斷開連接。ControlLogix 多請求服務(wù)(0x0A)是用作合并 CIP_Read/Write_Data 請求,即當(dāng)總請求或期望的請求值的大小到達(dá) PLC 的緩沖極限(大約 500 字節(jié))的時候使用。5 EPICS 技術(shù)支持的實(shí)施根據(jù)請求的更新率,vxWorks 驅(qū)動代碼針對各個 PLC 在掃瞄列表中都安排了標(biāo)簽名。一周期內(nèi)每個 PLC 將處理所有讀寫請求。EPICS 設(shè)備的輸入和輸出驅(qū)動支持:模擬量、二進(jìn)制數(shù)和多位記錄類型。當(dāng)使用單個數(shù)組元素或結(jié)構(gòu)體元素,以及并非數(shù)組或結(jié)構(gòu)體的全部時,標(biāo)簽名就必須使用標(biāo)量值??梢蕴幚淼?PLC 數(shù)據(jù)類型包括 BOOL、SINT、INT、DINT 和 REAL。也可以在運(yùn)行時改變記錄的配置,這些是不需要重新起動輸入輸出控制器(IOC)的,即所涉及的標(biāo)簽名記錄能實(shí)時替換。當(dāng)發(fā)生通信錯誤或超時,驅(qū)動將默認(rèn)斷開 PLC 連接并嘗試再連接。數(shù)組元素進(jìn)入數(shù)組時,驅(qū)動默認(rèn)要求傳輸順序是從第一個元素到請求最高的元素。這樣就決定了傳送時間會大量減少,但可能會產(chǎn)生其他作用:每當(dāng)輸出改變的記錄超過一個元素時,輸入輸出控制器(IOC)總將重寫整個數(shù)組。因?yàn)槌掷m(xù)傳輸,同樣的 PLC 數(shù)組被其它數(shù)據(jù)來源也修改了(由 PanelView 顯示),輸入輸出控制器(IOC)對這些變動忽略而重寫他們。數(shù)組傳輸同樣是受到上述 PLC 緩沖極限和大小限制的。針對這些情況,記錄配置允許個別的數(shù)組元素傳輸?shù)焦ぷ鲄^(qū)。對于輸出記錄, 每當(dāng)記錄被處理時,驅(qū)動都將發(fā)送一個 CIP_Write_Data 消息。否則它將周期性地從 PLC 上讀取標(biāo)簽,并且當(dāng)記錄內(nèi)容不同時,在 PLC 上將不斷更新輸出記錄值。驅(qū)動為各掃瞄列表保留統(tǒng)計(jì)信息(錯誤計(jì)數(shù),最新/最小/最大傳送時間)。模擬輸入記錄能夠得到這些值。這樣會出現(xiàn)一個問題,以 BOOL 數(shù)組為例,他們會被作為 DINT 值傳輸。對于一個模擬值記錄,標(biāo)簽“TEST[5]”會被作為第 5 個元素標(biāo)記“TEST” 。同樣地當(dāng)在 BOOL 數(shù)組中,結(jié)果會是標(biāo)記第 5 個 DINT,160191 位。所以對于二進(jìn)制記錄,所有數(shù)組被作為BOOL 數(shù)組進(jìn)行連通,并且“TEST[5]”會在對 DINT[0](第 5 位)請求時傳輸。以上情況在 PPC 和奔騰輸入輸出控制器(IOC)68K 上都作了測試。更底層的驅(qū)動層會依次處理其他的字節(jié)。另外,一條簡單的命令行編程是可以在 Unix 和 Win32 上使用的,它允許作為一種對 PLC 標(biāo)簽讀寫的調(diào)試工具。6 成果請看下面,使用 MVME2100 CPU 與 100baseT 網(wǎng)絡(luò)接口通過一個雙倍速集線器連接到一個 10baseT PLC。其它辦公室個人計(jì)算機(jī)和 Linux 文件服務(wù)器連接到同樣的集線器上。網(wǎng)絡(luò)使用率一般在 2%以下。若是傳輸標(biāo)量 REAL、BOOL 或 DINT,以及一組 15 個 REAL 或352 個 BOOL 值,速度是平均 11 毫秒傳輸一個單個的標(biāo)簽。從 EPICS 驅(qū)動合并多個請求是由 PLC 決定并受緩沖極限限制的,大約 15 個標(biāo)簽,每個以 15 個字符命名,當(dāng)單獨(dú)的傳輸要求超過 160ms 時,合并后可能只需大約 20ms。而當(dāng)使用普通設(shè)置時,輸入輸出控制器(IOC)配置了 352 個二進(jìn)制的輸入記錄,以10Hz 掃描一個 BOOL 數(shù)組的元素。而 120 個模擬輸入記錄,以 2Hz 掃描的三個元素為 40個 REAL 的數(shù)組。因?yàn)橐蕴W(wǎng)的不確定性,由于網(wǎng)絡(luò)擁擠這些傳輸?shù)谋壤龝S時間而變化,造成的傳送時間如下面直方圖。圖 1:3 天內(nèi)的傳送時間。整個 BOOL 數(shù)組傳輸時間平均是在 15ms 內(nèi),所有 REAL 的數(shù)組傳輸了 25ms,以便于記錄能更容易地在選定的掃瞄速率上更新。對于這些測量值,PLC 的“系統(tǒng)上限的時間”設(shè)置到了 10%。在增加到 50%以后同時連接 CPU 和 PLC 到網(wǎng)絡(luò)交換器,單個標(biāo)簽的平均時間減少到了 7ms。7 結(jié)論在使用開放的 AB 公司產(chǎn)品進(jìn)行讀寫標(biāo)簽等操作時,遵循 EtherNet/IP 協(xié)議是十分重要的。EPICS 使用起來很方便。在系統(tǒng)運(yùn)行時也可以隨意改變記錄配置;傳輸中由 PLC 緩沖極限的限制從而自動地決定是否合并。對比其它協(xié)議,沒有必要定義標(biāo)簽名為“生產(chǎn)者”或“消費(fèi)者” ,亦不要求為 ControlNet 傳輸預(yù)定一個網(wǎng)絡(luò)帶寬值。根據(jù)以太網(wǎng)的本身特性,傳送速率會隨時間自動變化。交換網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)也使網(wǎng)絡(luò)的不確定性減到了最小。為了達(dá)到所需的輸出值,也可以將值放在數(shù)組里。這樣保證了梯形邏輯圖的可讀性,傳輸數(shù)組元素時,標(biāo)簽名字盡量使用可理解的而非無意義的名稱。CIP 服務(wù)代碼不允許讀取 PLC 標(biāo)簽名字及類型等信息,但它可以使用更為友好的EPICS 驅(qū)動。各明確信息的標(biāo)簽傳輸信息是雙向的請求。測試的 1756ENET 模塊版本不支持隱性信息。理想的輸入輸出控制器(IOC)能讀取標(biāo)簽并且能接受隨時變動的異步通知或周期性更新,沒有不確定性。對于目前的實(shí)施水平,已經(jīng)可以在 EPICS 環(huán)境下成功的使用 ControlLogix 綜合系統(tǒng)。附錄 2INTERFACING THE CONTROLLOGIX PLC OVER ETHERNET/IP. Kasemir, . Dalesio, LANL, Los Alamos, NM 87545, USAAbstract The AllenBradley ControlLogix [1] line of programmable logic controllers (PLCs) offers several interfaces: Ether, ControlNet, DeviceNet, RS232 and others. The ControlLogix Ether interface module 1756ENET uses EtherNet/IP, the ControlNet protocol [2], encapsulated in Ether packages, with specific service codes [3]. A driver for the Experimental Physics and Industrial Control System (EPICS) has been developed that utilizes this EtherNet/IP protocol for controllers running the vxWorks RTOS as well as a Win32 and Unix/Linux test program. Features, performance and limitations of this interface are presented. 1 INTRODUCTION Several subsystems of the Spallation Neutron Source project (SNS) employ AllenBradley ControlLogix PLCs [4]. To integrate these into the EPICSbased accelerator control system, the EPICS input/output controllers (IOCs) need read and write access to the PLC data. Since the IOCs, their Unix or Win32 boot hosts as well as almost every PC which is used to program the PLC is already equipped with an Ether interface, it is desirable to use the same technology for transferring the PLC data. Existing support and knowledge for cabling, work hardware, configuration and maintenance can thus be utilized. 2 ETHERNET/IP ControlNet is a deterministic serial munication system, its specification extends from the physical to the application layer of the seven layer ISO OSI model[5]. ControlNet Release [2] introduced the TCP/IP encapsulation of data packages, replacing the Physical and Data Link layer with Ether respectively IP/UDP/TCP. The result was known as “ControlNet over Ether” and is now called EtherNet/IP [6]. After connecting to an EtherNet/IP target, by default on TCP/IP port 0xAF12, and establishing a session ID via the encapsulation protocol, messages can be exchanged. They are defined in the object oriented Control and Information Protocol (CIP), part of the ControlN