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字段,检查警报,发布监视器然后完成。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值