EPICS-----模拟输入记录(ai)
最近在使用通过StreamDevice来发送和接受字符串从而实现控制设备,对于里面的参数做一些记录。
这个字段下面有这几个参数:
扫描参数 2.读取并转换参数 3. 操作器显示参数 4.报警参数 5. 监控参数 6. 运行时参数
一、SCAN:扫描决定了记录的处理时间。当记录处理其数据并执行与该数据相关的任何操作时,记录即被处理,每个记录都需要设定这个,它一共有三种方式:1.定期的 2.事件 3.被动的。
1. 定期扫描按照设定的时间间隔进行。
2. 事件扫描发生在 I/O 中断事件或用户定义事件上。
3. 当扫描链接到被动记录的记录时,或者当通过数据库访问例程将值“放入”被动记录中时,就会发生被动扫描。
对于定期或事件扫描,用户还可以使用该PHASE机制控制一组记录的处理顺序。对于事件扫描,用户可以控制记录处理的优先级。除了扫描和阶段机制外,还有数据链接和正向处理链接可用于引起其他记录的处理。
1.1 定期的
按照一定的时间间隔来读取数据,常用的是这么设置 1 second、.1 second等等。
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") }
在.dbd后缀文件里面的menu下面你还可以自己设置其他时间间隔,官网文档里面建议不要删除上面的选项,并且添加时间间隔最好按照顺序添加,比如添加 .11 second最好在 .1 second后面添加。
1.2 事件
分为 I/O Intr和用户定义事件,对于这两种类型事件,用户可以使用 PRIO 或优先级字段指定事件的调度优先级。调度优先级是指事件在堆栈上相对于其他正在运行的任务的优先级。有三种可能的选择:LOW
、MEDIUM
或HIGH
。低优先级事件的优先级略高于通道访问。中等优先级事件的优先级大约等于定期扫描任务的中位数。高优先级事件的优先级等于事件扫描任务。
1.3 被动的
1.4 PHAS
用来给记录排序,从而实现以相同的时间间隔或者优先级定期扫描记录,但是使用这个字段的前提是扫描不能是被动的。
1.5 FLNK
在第一条记录的字段设置第二条记录的地址,就会导致处理完第一条记录后处理第二条记录。
二、扫描字段
SCAN | 扫描字段 | 这可以是周期(.1 second ,.2 second ,.5 second ,1 second ,2 second ,或5 second)、 I/O Intr、 Passive |
PINI | 初始化过程 | 如果字段设置为True,在启动正常扫描任务之前处理一次记录。 |
PHAS | 扫描相位数 | 对记录进行优先级排序,对于scan字段是passive无效,并且官方不推荐使用这个进行排序,更推荐使用flnk字段 |
EVNT | 活动编号 | |
PRIO | 优先级 | 处理I/O事件扫描记录和异步记录完成任务的调度优先级。 |
DISV | 禁用值 | 如果 DISV=DISA,则该记录将被禁用,即 dbProcess 将不会处理该记录。 |
DISA | 扫描禁用输入链接值 | 这是与 DISV 进行比较以确定记录是否被禁用的值。如果 SDIS 是数据库或通道访问链接,则通过 SDIS 获取其值。如果 SDIS 不是数据库或通道访问链接,则可以通过 dbPutField 或 dbPutLink 设置 DISA。 |
SDIS | 扫描禁用输入链接 | 一个输入链接,用于获取 DISA 的值。除非是数据库链接或通道访问链接,否则将忽略此字段。如果是数据库或通道访问链接,dbProcess 会调用 dbGetLink 来获取 DISA 的值,然后再决定调用处理例程。 |
PROC | 流程记录 | 每当 dbPutField 指向该字段时,就会处理一条记录。 |
DISS | 禁用警报严重性 | 当此记录被禁用时,它将进入此严重程度的警报状态,状态为 DISABLE_ALARM。 |
LSET | 锁设置 | 此记录所属的锁集。通过输入、输出或正向数据库链接以任何方式链接的所有记录都属于同一锁集。唯一的例外是非进程被动输入链接不会强制链接的记录位于同一锁集中。锁集在 IOC 初始化时确定。 |
LCNT | 锁计数 | dbProcess 连续发现记录处于活动状态的次数,即 PACT 为 TRUE。如果 dbProcess 连续发现记录处于活动状态 MAX_LOCK(当前设置为 10)次,则会引发 SCAN_ALARM。 |
FLNK | 前向链接 | 如果指定了 FLNK,则处理此记录将强制处理扫描被动前向链接记录。 |
三、读取并转换字段
这些参数决定记录从何处获取输入以及如何将原始信号转换为工程单位。对于从设备获取输入或使用设备 Raw Soft Channel
支持的记录,设备支持例程会将此设备的值返回到 RVAL 字段。除非 LINR 转换字段指定 NO CONVERSION,否则将执行正确的转换算法,并将结果值放置在 VAL 字段中。
VAL | 值字段 | 这是在执行所有必要的转换之后记录的最终值。 |
INP | 输入链接 | 对于从硬件获取其值的模拟记录,I/O 的地址必须出现在 INP 字段中 |
DTYP | 设备类型 | 设备支持模块的名称必须出现在设备类型字段 (DTYP) 中 |
LINR | 转换类型 | 模拟记录是否执行线性转换、断点转换或根本不进行转换取决于记录的 LINR 字段的配置方式。 |
RVAL | 原始值 | 只要有可能,此字段就包含从硬件或相关设备驱动程序获得的原始数据值,并且是在进行任何转换之前。Soft Channel 设备支持模块会直接将值读入 VAL,从而绕过此字段。 |
ROFF | 原始值偏移 | Val= RVAL + ROFF |
EGUF | 单位完整 | EGUF 和 EGUL 字段的值分别对应于传感器的最大值和最小值。因此,这些字段的值取决于设备。例如,如果传感器的范围为 -10 至 +10 伏,则 EGUF 字段应为 10,EGUL 字段应为 -10。 |
EGUL | 单位最低 | EGUF 和 EGUL 字段的值分别对应于传感器的最大值和最小值。因此,这些字段的值取决于设备。例如,如果传感器的范围为 -10 至 +10 伏,则 EGUF 字段应为 10,EGUL 字段应为 -10。 |
AOFF | 调整偏移 | |
ASLO | 调整斜率 | Val = Val * ASLO + AOFF |
SMOO | 平滑因子 | 平滑可用于过滤噪声信号。平滑参数是 0 到 1 之间的常数,在 SMOO 字段中指定 |
ESLO | 线性转换的斜率 |
四、操作器显示参数
这些参数用于向操作员呈现有意义的数据。它们以文本或图形方式显示模拟输入的值和其他参数。
EGU 是一个最多 16 个字符的字符串,描述模拟输入测量的单位。
HOPR 和 LOPR 字段设置 VAL、HIHI、HIGH、LOW 和 LOLO 字段的显示上限和下限
PREC 字段确定显示 VAL 的浮点精度。
五、报警参数
模拟输入的可能报警状态为扫描、读取和极限报警。扫描和读取报警由记录或设备支持程序调用。
HIHI | Hihi 报警限值 |
LOLO | lolo报警限值 |
HIGH | 高报警限值 |
LOW | 低报警限值 |
HHSV | HIHI警报严重程度 |
LLSV | LOLO警报严重程度 |
HSV | 高警报严重程度 |
LSV | 低警报严重程度 |
HYST | 报警死区 |