要概
alarm模块提供一个Alarm对象,来指定一个alarm条件以及当满足那个条件时做什么。
class alarm.Alarm(pvname[,comparison=None[,trip_point=None[,callback=None[, alert_delay=10]]]])
创建一个alarm对象。
参数:
- pvname:EPICS PV名称(字符串)
- comparsion:用于比较PV值跟trip_point的操作。类型比较,字符串或callable。在比较中构建,并且在Table of Alarm Operators中列出。
- trip_point:将触发这个警报的值。
- callback:当PVs值满足警报条件时,要被运行的用户定义的回调函数。类型:callback callable或None。
- alert_delay:在执行另一个警报回调前,要等待的时间(秒)。警报作用通过检查它每次变化的值。如果新的值超出了可接受的范围(超出了最终点),接着运行用户提供的回调函数。可以设置这个回调发送一条消息或者采取某个其它行动方式。
- 提供的比较可以是一个在Table of Alarm Operators中列出的字符串或者一个接收两个值的自定义callable函数(PV.value, trip_point)并且基于那些值返回True/False。
对应Alarms的内建操作符的表格。
operator | Python operator |
---|---|
‘eq’, ‘==’ | __eq__ |
‘ne’, ‘!=’ | __ne__ |
‘le’, ‘<=’ | __le__ |
‘lt’, ‘<’ | __lt__ |
‘ge’, ‘>=’ | __ge__ |
‘gt’, ‘>’ | __gt_ |
alert_delay防止警报回调被多次调用。对于浮点值的PVs,这个值可能绕trip_point点波动一会。如果这个值越过了trip_point,接着暂时回到了一个可接受的值,并且再次回调了一个越界值,可能不想要重复发送,相同消息。要阻止这种情况,当警报条件满足时,警报callback将被调用,并且在由alert_delay指定的时间内不调用这个回调。
Alarm示例
一个EPICS 警报非常容易使用。这是一个警报设置:在一个PV的值达到一个特定值时,打印一条消息。
from epics import Alarm, poll
def alertMe(pvname=None, char_value=None, **kw):
print "Soup's on! %s = %s" % (pvname, char_value)
my_alarm = Alarm(pvname = 'WaterTemperature.VAL',
comparison = '>',
callback = alertMe,
trip_point = 100.0,
alert_delay = 600)
while True:
poll()