Skip to content

Commit

Permalink
Add limits for all signals
Browse files Browse the repository at this point in the history
  • Loading branch information
DiamondJoseph committed Mar 8, 2024
1 parent 1757bd0 commit 1920904
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 20 deletions.
98 changes: 97 additions & 1 deletion tests/epics/test_records.db
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
record(bo, "$(P)bool") {
field(HOPR, "1")
field(HIHI, "1")
field(HIGH, "1")
field(DRVH, "1")
field(DRVL, "0")
field(LOW, "0")
field(LOLO, "0")
field(LOPR, "0")
field(ZNAM, "No")
field(ONAM, "Yes")
field(VAL, "1")
Expand All @@ -8,7 +16,7 @@ record(bo, "$(P)bool") {
record(longout, "$(P)int") {
field(HOPR, "100")
field(HIHI, "98")
field(HIGH, "96")
field(HIGH, "95")
field(DRVH, "90")
field(DRVL, "10")
field(LOW, "5")
Expand All @@ -19,6 +27,14 @@ record(longout, "$(P)int") {
}

record(ao, "$(P)float") {
field(HOPR, "100")
field(HIHI, "98")
field(HIGH, "95")
field(DRVH, "90")
field(DRVL, "10")
field(LOW, "5")
field(LOLO, "2")
field(LOPR, "0")
field(PREC, "1")
field(EGU, "mm")
field(VAL, "3.141")
Expand Down Expand Up @@ -50,48 +66,104 @@ record(mbbo, "$(P)enum2") {
}

record(waveform, "$(P)int8a") {
field(HOPR, "127")
field(HIHI, "125")
field(HIGH, "122")
field(DRVH, "112")
field(DRVL, "-113")
field(LOW, "-123")
field(LOLO, "-126")
field(LOPR, "-128")
field(NELM, "3")
field(FTVL, "CHAR")
field(INP, {const:[-128, 127]})
field(PINI, "YES")
}

record(waveform, "$(P)uint8a") {
field(HOPR, "255")
field(HIHI, "253")
field(HIGH, "250")
field(DRVH, "245")
field(DRVL, "10")
field(LOW, "5")
field(LOLO, "2")
field(LOPR, "0")
field(NELM, "3")
field(FTVL, "UCHAR")
field(INP, {const:[0, 255]})
field(PINI, "YES")
}

record(waveform, "$(P)int16a") {
field(HOPR, "32767")
field(HIHI, "32765")
field(HIGH, "32762")
field(DRVH, "32757")
field(DRVL, "-32758")
field(LOW, "-32763")
field(LOLO, "-32766")
field(LOPR, "-32768")
field(NELM, "3")
field(FTVL, "SHORT")
field(INP, {const:[-32768, 32767]})
field(PINI, "YES")
}

record(waveform, "$(P)uint16a") {
field(HOPR, "65535")
field(HIHI, "65533")
field(HIGH, "65530")
field(DRVH, "65525")
field(DRVL, "10")
field(LOW, "5")
field(LOLO, "2")
field(LOPR, "0")
field(NELM, "3")
field(FTVL, "USHORT")
field(INP, {const:[0, 65535]})
field(PINI, "YES")
}

record(waveform, "$(P)int32a") {
field(HOPR, "2147483647")
field(HIHI, "2147483645")
field(HIGH, "2147483642")
field(DRVH, "2147483637")
field(DRVL, "-2147483638")
field(LOW, "-2147483643")
field(LOLO, "-2147483646")
field(LOPR, "-2147483648")
field(NELM, "3")
field(FTVL, "LONG")
field(INP, {const:[-2147483648, 2147483647]})
field(PINI, "YES")
}

record(waveform, "$(P)uint32a") {
field(HOPR, "4294967295")
field(HIHI, "4294967293")
field(HIGH, "4294967290")
field(DRVH, "4294967285")
field(DRVL, "10")
field(LOW, "5")
field(LOLO, "2")
field(LOPR, "0")
field(NELM, "3")
field(FTVL, "ULONG")
field(INP, {const:[0, 4294967295]})
field(PINI, "YES")
}

record(waveform, "$(P)int64a") {
field(HOPR, "2147483648")
field(HIHI, "2147483646")
field(HIGH, "2147483643")
field(DRVH, "2147483638")
field(DRVL, "-2147483639")
field(LOW, "-2147483644")
field(LOLO, "-2147483647")
field(LOPR, "-2147483649")
field(NELM, "3")
field(FTVL, "INT64")
# Can't do 64-bit int with JSON numbers in a const link...
Expand All @@ -100,20 +172,44 @@ record(waveform, "$(P)int64a") {
}

record(waveform, "$(P)uint64a") {
field(HOPR, "4294967297")
field(HIHI, "4294967295")
field(HIGH, "4294967292")
field(DRVH, "4294967287")
field(DRVL, "10")
field(LOW, "5")
field(LOLO, "2")
field(LOPR, "0")
field(NELM, "3")
field(FTVL, "UINT64")
field(INP, {const:[0, 4294967297]})
field(PINI, "YES")
}

record(waveform, "$(P)float32a") {
field(HOPR, "0.000002")
field(HIHI, "-1.999998")
field(HIGH, "-4.999998")
field(DRVH, "-9.999998")
field(DRVL, "-113.123")
field(LOW, "-118.123")
field(LOLO, "-121.123")
field(LOPR, "-123.123")
field(NELM, "3")
field(FTVL, "FLOAT")
field(INP, {const:[0.000002, -123.123]})
field(PINI, "YES")
}

record(waveform, "$(P)float64a") {
field(HOPR, "0.1")
field(HIHI, "-1.9")
field(HIGH, "-4.9")
field(DRVH, "-9.9")
field(DRVL, "-12345668.1231")
field(LOW, "-12345673.123")
field(LOLO, "-12345676.123")
field(LOPR, "-12345678.123")
field(NELM, "3")
field(FTVL, "DOUBLE")
field(INP, {const:[0.1, -12345678.123]})
Expand Down
66 changes: 47 additions & 19 deletions tests/epics/test_signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,34 +146,62 @@ class MyEnum(str, Enum):
c = "Ccc"


def _top_to_limits(val) -> dict[str, Any]:
return {
"lower_alarm_limit": val,
"lower_ctrl_limit": val - 2,
"lower_disp_limit": val - 5,
"lower_warning_limit": val - 10,
}


def _bottom_to_limits(val) -> dict[str, Any]:
return {
"upper_alarm_limit": val,
"upper_ctrl_limit": val + 2,
"upper_disp_limit": val + 5,
"upper_warning_limit": val + 10,
}


def suffix_to_limits(bottom: Any, top: Any) -> Dict[str, Any]:
return {"units": "", **_bottom_to_limits(bottom), **_top_to_limits(top)}


ca_metadata = {
"integer": {
"bool": {
"lower_alarm_limit": 0,
"lower_ctrl_limit": 10,
"lower_ctrl_limit": 0,
"lower_disp_limit": 0,
"lower_warning_limit": 0,
"units": "",
"upper_alarm_limit": 0,
"upper_ctrl_limit": 90,
"upper_disp_limit": 100,
"upper_warning_limit": 0,
},
"number": {
"lower_ctrl_limit": 0.0,
"lower_disp_limit": 0.0,
"precision": 1,
"units": "mm",
"upper_ctrl_limit": 0.0,
"upper_disp_limit": 0.0,
"upper_alarm_limit": 1,
"upper_ctrl_limit": 1,
"upper_disp_limit": 1,
"upper_warning_limit": 1,
},
"string": {"timestamp": ANY},
"int": suffix_to_limits(0, 100),
"float": suffix_to_limits(0, 100),
"int8a": suffix_to_limits(-128, 127),
"uint8a": suffix_to_limits(0, 255),
"int16a": suffix_to_limits(-32768, 32767),
"uint16a": suffix_to_limits(0, 65535),
"int32a": suffix_to_limits(-2147483648, 2147483647),
"uint32a": suffix_to_limits(0, 4294967295),
"int64a": suffix_to_limits(-2147483649, 2147483648),
"uint64a": suffix_to_limits(0, 4294967297),
"float32a":suffix_to_limits(-123.123, 0.000002),
"float64a": suffix_to_limits(-12345678.123, 0.1)



}


def suffix_to_dtype(suffix: str):
if "float" in suffix:
return "number"
if "int" in suffix:
if "int" in suffix or "bool" in suffix:
return "integer"
return "string"

Expand All @@ -183,10 +211,10 @@ def descriptor(protocol: str, suffix: str, value: Any):
dtype = suffix_to_dtype(suffix)
d = {
"dtype": "array" if is_array else dtype,
"shape": [len(value)] if isinstance(value, List) else [],
"shape": [len(value)] if is_array else [],
}
if protocol == "ca":
d.update(ca_metadata.get(dtype, {}))
d.update(ca_metadata.get(suffix, {}))
return d


Expand All @@ -203,7 +231,7 @@ def descriptor(protocol: str, suffix: str, value: Any):


@pytest.mark.parametrize(
"datatype, suffix, initial_value, put_value, descriptor",
"datatype, suffix, initial_value, put_value",
[
(int, "int", 42, 43),
(float, "float", 3.141, 43.5),
Expand Down

0 comments on commit 1920904

Please sign in to comment.