EPICS數據庫記錄概念

參考文獻

EPICS Record Reference Manual(3.14版)鏈接:https://wiki-ext.aps.anl.gov/epics/index.php/RRM_3-14_Concepts#Database_Concepts

 

本文介紹了所有數據庫記錄中的常規功能。涵蓋的主題包括I / O掃描,I / O地址規範,數據轉換,報警,數據庫監控和連續控制:
   Scanning Specification 描述了處理記錄的各種條件。
   Address Specification 解釋了輸入的來源和輸出的目的地。
    Conversion Specification 涵蓋從傳感器接口到工程單位的數據轉換。
    Alarm Specification 提供了數據庫中可用的許多報警檢測機制。
    Monitor Specification 詳細說明了通知操作員數據庫值變化的機制。
    Control Specification 說明了可用於在數據庫中實現連續控制的功能。

這些概念對於瞭解數據庫如何與進程進行交互至關重要。

可以使用可視化工具(VDCT,CapFast)或手動創建數據庫“myDatabase.db”文本文件來創建EPICS數據庫。 Visual Database Configuration Tool(VDCT)是Cosylab的一個Java應用程序,是一個在Linux,Windows和Sun上運行的更現代的數據庫創建/編輯工具。

掃描規範(說明)

掃描確定何時處理記錄。在處理數據並執行與該數據相關的任何操作時處理記錄。例如,處理輸出記錄時,它會獲取要輸出的值,轉換該值,然後將該值寫入指定的位置。每條記錄必須指定確定何時處理的掃描方法。數據庫記錄有三種掃描方法:(1) periodic, (2) event, and (3) passive。
    1. 定期掃描(Periodic scanning)在設定的時間間隔內發生。
    2. 事件掃描(Event scanning)發生在I / O中斷事件或用戶定義的事件上。
    3. 被動掃描(Passive scanning):當掃描鏈接到被動記錄的記錄時,或者通過數據庫訪問例程將值“放入”被動記錄時,會發生被動掃描。

對於定期或事件掃描,用戶還可以使用PHASE機制控制處理一組記錄的順序。對於事件掃描,用戶可以控制記錄處理的優先級。除了掃描機制和PHASE機制之外,還有數據鏈接和前向處理鏈接,可用於在其他記錄中進行處理。本節介紹這些概念。

週期掃描
週期掃描任務儘可能接近指定的頻率運行。 當每個週期掃描任務啓動時,它會調用gettime例程,然後處理此期間的所有記錄。 在處理之後,再次調用gettime;而且,從該線程的掃描週期到將處理記錄的那個時刻期間,該線程將休眠。 如果1秒掃描記錄需要100毫秒來處理,則1秒掃描週期將在完成後900毫秒再次開始。 雖然可以將EPICS配置爲識別更多掃描週期,但可以使用以下掃描數據庫記錄的時間段:

  • 10 second
  • 5 second
  • 2 second
  • 1 second
  • .5 second
  • .2 second
  • .1 second

應指定最適合信號性質的週期。五秒鐘的間隔對於大量水的溫度是足夠的,因爲它不會快速變化。但是,某些功率級別可能會非常快速地變化,因此需要每0.5秒掃描一次。在連續控制迴路的情況下,受控制的過程變量可以快速變化,0.1秒間隔可能是最佳選擇。

要定期掃描記錄,必須在其SCAN字段中輸入有效選項。實際上,可用的選項取決於menuScan.dbd文件的配置。與包含選項菜單的大多數其他字段一樣,可以通過編輯相應的.dbd(數據庫定義)文件來更改SCAN字段可用的選項。 dbd文件是ASCII文件,用於生成頭文件,而頭文件又用於編譯數據庫代碼。除了菜單字段的選擇之外,許多dbd文件還可用於配置其他內容。

以下是menuScan.dbd文件的示例,該文件具有上面列出的所有期間的默認菜單選項以及事件掃描,被動掃描和I / O中斷掃描的選項:

menu(menuScan) {
	choice(menuScanPassive,"Passive")
	choice(menuScanEvent,"Event")
	choice(menuScanI_O_Intr,"I/O Intr")
	choice(menuScan10_second,"10 second")
	choice(menuScan5_second,"5 second")
	choice(menuScan2_second,"2 second")
	choice(menuScan1_second,"1 second")
	choice(menuScan_5_second,".5 second")
	choice(menuScan_2_second,".2 second")
	choice(menuScan_1_second,".1 second")
}

前三個選項必須首先出現,並按所示順序顯示。 其餘的定義是針對週期性掃描速率,它必須以最慢到最快的順序出現(順序直接控制分配給特定掃描速率的線程優先級,並且應該爲更高的掃描速率分配更高的線程優先級)。 在IOC初始化時,在掃描初始化時讀取菜單選擇字符串。 從菜單選擇字符串確定週期掃描速率的數量和每個速率的週期。 因此,可以通過更改menuScan.dbd並通過dbLoadDatabase加載此版本來更改定期掃描速率。 唯一的要求是每個週期性選擇字符串必須以以秒爲單位指定的數值開始。例如,要添加0.015秒的選項,請在0.1秒選擇後添加以下行:

choice(menuScan_015_second, " .015 second")

掃描週期的值範圍可以是一個時鐘週期。 (vxWorks開箱即用支持0.015秒或最長60 Hz),達到系統可用的最大滴答數。 但請注意,選擇的順序至關重要。 前三個選項必須按上述順序出現。 然後剩下的選擇應該按降序排列,最大的時間段是第一個,最小的是最後一個。

事件掃描
輸入/輸出控制器(IOC)數據庫中支持兩種類型的事件,即I / O中斷事件和用戶定義的事件。 對於每種類型的事件,用戶可以使用PRIO或優先級字段指定事件的調度優先級。 調度優先級是指事件相對於其他正在運行的任務在堆棧上的優先級。 有三種可能的選擇:LOW,MEDIUM或HIGH。 低優先級事件的優先級略高於通道訪問權限。 中優先級事件的優先級大約等於週期性掃描任務的中值。 高優先級事件的優先級等於事件掃描任務。

I / O中斷事件
掃描I / O中斷會導致在驅動程序發佈I / O事件時處理記錄。在許多情況下,這些事件會在中斷服務程序中發佈。例如,如果模擬輸入記錄從Xycom 566差分鎖存卡中獲取其值並且它將I / O中斷指定爲其掃描例程,則每次卡產生中斷時都會處理該記錄(不是所有類型的I / O卡可以產生中斷)。請注意,即使某些卡實際上無法生成中斷,某些驅動程序支持模塊也可以模擬中斷。爲了使記錄掃描I / O中斷,其SCAN字段必須指定I / O Intr。

用戶定義的事件
用戶定義的事件機制處理僅在特定情況下有意義的記錄。用戶定義的事件可以由post_event()數據庫訪問例程生成。兩條記錄,即事件記錄和計時器記錄,也用於發佈事件。例如,存在定時輸出,當過程處於可以安全地改變控制的狀態時生成。定時輸出通過定時器記錄控制,定時器記錄能夠產生中斷。考慮在I / O中斷上掃描定時器記錄並且定時器記錄的事件字段(EVNT)包含事件編號的情況。掃描記錄時,將發佈用戶定義的事件。發佈事件時,將處理其SCAN字段指定事件且其事件編號與生成的事件相同的所有記錄。用戶定義的事件也可以通過軟件生成。事件編號是可配置的,應通過項目工程師進行控制。它們每個IOC只需要是唯一的,因爲它們只觸發同一IOC中記錄的處理。

使用用戶定義事件機制的所有記錄必須在其SCAN字段中指定Event,並在其EVNT字段中指定事件編號。

被動掃描

當被動記錄通過其鏈接字段被其他記錄引用時或者對它們進行通道訪問時,將處理被動記錄。

通道訪問對被動掃描記錄的Put操作
在對記錄進行通道訪問的Put操作情況下,正在寫入的字段具有確定該Put操作是否使記錄處理事件的屬性。在所有記錄的情況下,放入VAL字段會導致記錄處理。考慮具有被動掃描的二進制輸出。如果操作員顯示在VAL字段上有一個按鈕,則每次按下該按鈕時,都會將一個通道訪問權限發送到該記錄。寫入VAL字段時,將處理被動掃描記錄;並調用指定的設備支持,以通過DTYP指定的設備支持將新轉換的RVAL寫入OUT字段中指定的設備。確定要更改記錄行爲方式的字段,通常會導致記錄處理。另一個導致二進制輸出處理的字段是ZSV;如果二進制輸出記錄處於零(0)狀態,則爲警報嚴重性。如果記錄處於狀態0並且處於該狀態的嚴重性從No Alarm更改爲Minor Alarm,則在掃描被動記錄上捕獲此值的唯一方法是處理它。字段配置爲使二進制輸出記錄在bo.dbd文件中處理。 ZSV嚴重性配置如下:

field(ZSV,DBF_MENU) {

    prompt("Zero Error Severity")

    promptgroup(GUI_ALARMS)

    pp(TRUE)

    interest(1)

    menu(menuAlarmSevr)

}

其中的“pp(TRUE)”行表示在完成頻道訪問時處理該記錄。

數據庫鏈接到被動記錄
流程數據庫中的記錄使用鏈接字段來配置數據傳遞和調度(或處理)。 這些字段是INLINK,OUTLINK或FWDLINK字段。

前向鏈接

數據庫鏈接文件中這些域是這樣定義的:

field(FLNK,DBF_FWDLINK) {

    prompt("Forward Process Link")

    promptgroup(GUI_LINKS)

    interest(1)

}

圖1. FLNK前向鏈接示意圖

 如果FLNK字段引用的記錄具有被動掃描的SCAN字段,則在具有FLNK的記錄之後處理該記錄。 FLNK字段僅導致記錄處理,不傳遞任何數據。 在(圖1)中,顯示了三個記錄。 ai記錄“Input_2”是週期處理記錄。 在每個間隔,處理Input_2。 在Input_2讀取新輸入後,將其轉換爲工程單位,檢查報警條件,並將監視器發佈到Channel Access,然後處理計算記錄“Calculation_2”。 Calculation_2讀取輸入,執行計算,檢查警報條件,並將監視器發佈到Channel Access,然後處理ao記錄“Output_2”。 Output_2讀取所需的輸出,速率限制它,鉗位範圍,調用設備支持OUT字段,檢查警報,發佈監視器然後完成。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章