diff --git a/bob/bpm/bpm_embed.bob b/bob/bpm/bpm_embed.bob
index a9bbaed..a3a0aec 100644
--- a/bob/bpm/bpm_embed.bob
+++ b/bob/bpm/bpm_embed.bob
@@ -54,7 +54,7 @@
Readback PV_2
- $(bpm):YPOS
+ $(P):YPOS
30
70
80
@@ -75,7 +75,7 @@
Readback PV_1
- $(bpm):XPOS
+ $(P):XPOS
30
40
80
@@ -96,7 +96,7 @@
Readback PV
- $(bpm):INTEN
+ $(P):INTEN
30
10
80
@@ -122,7 +122,7 @@
Open Display
bpm_setup.bob
- $(bpm)
+ $(P)
tab
@@ -200,8 +200,8 @@
- $(bpm):XPOS
- $(bpm):YPOS
+ $(P):XPOS
+ $(P):YPOS
0
0
diff --git a/bob/bpm/bpm_setup.bob b/bob/bpm/bpm_setup.bob
index d93e09f..d432167 100644
--- a/bob/bpm/bpm_setup.bob
+++ b/bob/bpm/bpm_setup.bob
@@ -32,7 +32,7 @@
Readback PV
- $(bpm):BPMI1
+ $(P):BPMI1
140
80
@@ -52,7 +52,7 @@
Readback PV_1
- $(bpm):BPMI2
+ $(P):BPMI2
140
25
80
@@ -73,7 +73,7 @@
Readback PV_2
- $(bpm):BPMI3
+ $(P):BPMI3
140
50
80
@@ -94,7 +94,7 @@
Readback PV_3
- $(bpm):BPMI4
+ $(P):BPMI4
140
75
80
@@ -338,27 +338,27 @@
Text Entry
- $(bpm):DA
+ $(P):DA
20
80
Text Entry_1
- $(bpm):DA
+ $(P):DA
20
25
80
Text Entry_2
- $(bpm):DA
+ $(P):DA
20
50
80
Text Entry_3
- $(bpm):DA
+ $(P):DA
20
75
80
@@ -373,7 +373,7 @@
Text Entry_4
- $(bpm):KX
+ $(P):KX
135
80
@@ -388,7 +388,7 @@
Text Entry_5
- $(bpm):KY
+ $(P):KY
135
25
80
@@ -404,7 +404,7 @@
Combo Box
- $(bpm):POSSCAN.SCAN
+ $(P):POSSCAN.SCAN
115
75
20
@@ -446,7 +446,7 @@
X = KX*((A-DA)-(B-DB)-(C-DC)+(D-DD))/I =
- $(bpm):ORIENT
+ $(P):ORIENT
@@ -462,7 +462,7 @@
Y = KY*((A-DA)+(B-DB)-(C-DC)-(D-DD))/I =
- $(bpm):ORIENT
+ $(P):ORIENT
@@ -476,7 +476,7 @@
Readback PV_8
- $(bpm):INTEN
+ $(P):INTEN
300
80
@@ -496,7 +496,7 @@
Readback PV_9
- $(bpm):XPOS
+ $(P):XPOS
300
25
80
@@ -517,7 +517,7 @@
Readback PV_10
- $(bpm):YPOS
+ $(P):YPOS
300
50
80
@@ -538,7 +538,7 @@
Readback PV_11
- $(bpm):Q
+ $(P):Q
300
75
80
diff --git a/bob/positioner/TESTING_positioner_embed_state.bob b/bob/positioner/TESTING_positioner_embed_state.bob
new file mode 100644
index 0000000..ff27f81
--- /dev/null
+++ b/bob/positioner/TESTING_positioner_embed_state.bob
@@ -0,0 +1,249 @@
+
+
+
+ TESTING_positioner_embed_state
+ 220
+ 200
+
+
+
+
+
+
+
+
+ 5
+ 5
+
+ 220
+ 155
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label
+ State
+ 20
+ 35
+ 25
+
+
+
+
+ 1
+ 1
+
+
+ LED (Multi State)
+ 35
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ loc://test_mp:DMOV
+ loc://test_mp:ERROR.K
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ Choice Button
+ loc://test_mp:DMOV(0)
+ 65
+ 15
+ 75
+ 15
+
+ - 0
+ - 1
+
+
+
+ Choice Button_1
+ loc://test_mp:ERROR.K(0)
+ 65
+ 50
+ 75
+ 15
+
+ - 0
+ - 1
+ - 2
+ - 3
+
+
+
+ Label_1
+ DMOV Value
+ 75
+ 65
+
+
+
+
+ 1
+ 1
+
+
+ Label_2
+ ERROR.K Value
+ 65
+ 35
+ 80
+
+
+
+
+ 1
+ 1
+
+
+ Label_3
+ ERROR.K << 1
+ 70
+ 70
+ 70
+ 15
+
+
+
+
+ 1
+ 1
+
+
+ Label_4
+
+ 140
+ 70
+ 25
+ 15
+
+
+
+ pvInt0<<1
+
+ loc://test_mp:ERROR.K
+
+
+ 1
+
+
+ Text Update_1
+ loc://test_mp:ERROR.K
+ 140
+ 50
+ 25
+ 15
+ 1
+
+
+ Text Update_2
+ loc://test_mp:DMOV
+ 140
+ 15
+ 25
+ 15
+ 1
+
+
+ Label_6
+ DMOV + (ERROR.K << 1)
+ 25
+ 90
+ 115
+ 15
+
+
+
+
+ 1
+ 1
+
+
+ Label_7
+
+ 140
+ 90
+ 25
+ 15
+
+
+
+ pv0 + (pvInt1<<1)
+
+ loc://test_mp:DMOV
+ loc://test_mp:ERROR.K
+
+
+ 1
+
+
+ Polyline
+ 15
+ 60
+ 15
+ 25
+
+
+
+
+
+
+ 2
+ 10
+
+
+
diff --git a/bob/positioner/positioner.bob b/bob/positioner/positioner.bob
new file mode 100644
index 0000000..60f41b4
--- /dev/null
+++ b/bob/positioner/positioner.bob
@@ -0,0 +1,1799 @@
+
+
+
+ Positioner Values
+ 230
+ 585
+
+
+
+
+
+
+
+
+ 5
+ 5
+
+ $(label)
+ 370
+ 685
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label_19
+ Setup Position Values
+ 50
+ 615
+ 150
+ 25
+ 1
+ 1
+
+
+ Positioner Current Values
+ 241
+ 91
+ true
+
+ DMOV_LED
+ $(P)$(MP):DMOV
+ 175
+ 35
+
+
+ SFail_Text
+ SFail
+ 175
+ 35
+ 30
+
+
+
+
+
+
+
+
+ false
+ 1
+ 1
+
+
+
+ true
+
+
+ false
+
+ $(motor):ELOSS
+
+
+
+
+ ALoss_Text
+ ALoss
+ 175
+ 35
+ 30
+
+
+
+
+
+
+
+
+ false
+ 1
+ 1
+
+
+
+ true
+
+
+ false
+
+ $(motor):ELOSS
+
+
+
+
+ Label_20
+ Demand:
+ 70
+ 25
+ 1
+ 1
+
+
+ Label_21
+ Readback:
+ 30
+ 70
+ 25
+ 1
+ 1
+
+
+ Text Entry_17
+ $(P)$(MP):SETVALUE2.VAL
+ 70
+ 25
+
+
+ Text Update
+ $(P)$(MP):UPD.D
+ 70
+ 30
+ 25
+ 1
+
+
+ Action Button
+ ❏
+ 175
+ 25
+ 25
+
+
+ Action Button_1
+
+
+ Write PV
+ $(motor):ELOSSRC.A
+ 0
+
+
+ ELoss
+ 175
+ 35
+ 30
+ 20
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+ $(motor):ELOSS
+
+
+
+
+
+ Status
+ 242
+ 86
+ 91
+ true
+
+ LED (Multi State)_1
+ 30
+ 31
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(P)$(MP):DMOV
+ $(P)$(MP):ERROR.K
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ Label_22
+ State:
+ 31
+ 30
+
+
+
+
+ 1
+ 1
+
+
+ Label_23
+ InPos:
+ 5
+ 30
+
+
+
+
+ 1
+ 1
+
+
+ LED_1
+ $(P)$(MP):INPOS
+ 30
+ 5
+
+
+
+ Group
+ 10
+ 100
+ 308
+ 500
+
+ true
+
+ Group_12
+ 150
+ 350
+ 120
+ 30
+
+ true
+
+ Rectangle_28
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_12
+ $(P)$(PS):VALL
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_13
+ 150
+ 380
+ 120
+ 30
+
+ true
+
+ Rectangle_29
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_13
+ $(P)$(PS):VALM
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_14
+ 150
+ 410
+ 120
+ 30
+
+ true
+
+ Rectangle_30
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_14
+ $(P)$(PS):VALN
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_15
+ 150
+ 440
+ 120
+ 30
+
+ true
+
+ Rectangle_31
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_15
+ $(P)$(PS):VALO
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_16
+ 150
+ 470
+ 120
+ 30
+
+ true
+
+ Rectangle_32
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_16
+ $(P)$(PS):VALP
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Text Update_1
+ $(P)$(MP):SELECT.ZRST
+ 30
+ 20
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_2
+ $(P)$(MP):SELECT.ONST
+ 30
+ 50
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_3
+ $(P)$(MP):SELECT.TWST
+ 30
+ 80
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_4
+ $(P)$(MP):SELECT.THST
+ 30
+ 110
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_5
+ $(P)$(MP):SELECT.FRST
+ 30
+ 140
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_6
+ $(P)$(MP):SELECT.FVST
+ 30
+ 170
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_7
+ $(P)$(MP):SELECT.SXST
+ 30
+ 200
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_8
+ $(P)$(MP):SELECT.SVST
+ 30
+ 230
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_9
+ $(P)$(MP):SELECT.EIST
+ 30
+ 260
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_10
+ $(P)$(MP):SELECT.NIST
+ 30
+ 290
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_11
+ $(P)$(MP):SELECT.TEST
+ 30
+ 320
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_12
+ $(P)$(MP):SELECT.ELST
+ 30
+ 350
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_13
+ $(P)$(MP):SELECT.TVST
+ 30
+ 380
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_14
+ $(P)$(MP):SELECT.TTST
+ 30
+ 410
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_15
+ $(P)$(MP):SELECT.FTST
+ 30
+ 440
+ 120
+ 30
+ 1
+ 1
+ 1
+
+
+ Text Update_16
+ $(P)$(MP):SELECT.FFST
+ 30
+ 470
+ 120
+ 29
+ 1
+ 1
+ 1
+
+
+ Label_26
+ Name
+ 30
+ 120
+ 19
+ 1
+ 1
+ 1
+
+
+ Group
+ 270
+ 20
+ 38
+ 30
+
+ true
+
+ Rectangle_33
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_2
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETA.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_17
+ 270
+ 50
+ 38
+ 30
+
+ true
+
+ Rectangle_34
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_3
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETB.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_18
+ 270
+ 80
+ 38
+ 30
+
+ true
+
+ Rectangle_35
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_4
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETC.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_19
+ 270
+ 110
+ 38
+ 30
+
+ true
+
+ Rectangle_36
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_5
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETD.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_20
+ 270
+ 140
+ 38
+ 30
+
+ true
+
+ Rectangle_37
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_6
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETE.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_21
+ 270
+ 170
+ 38
+ 30
+
+ true
+
+ Rectangle_38
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_7
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETF.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_22
+ 270
+ 200
+ 38
+ 30
+
+ true
+
+ Rectangle_39
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_8
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETG.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_23
+ 270
+ 230
+ 38
+ 30
+
+ true
+
+ Rectangle_40
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_9
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETH.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_24
+ 270
+ 260
+ 38
+ 30
+
+ true
+
+ Rectangle_41
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_10
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETI.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_25
+ 270
+ 290
+ 38
+ 30
+
+ true
+
+ Rectangle_42
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_11
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETJ.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_26
+ 270
+ 320
+ 38
+ 30
+
+ true
+
+ Rectangle_43
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_12
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETK.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_27
+ 270
+ 350
+ 38
+ 30
+
+ true
+
+ Rectangle_44
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_13
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETL.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_28
+ 270
+ 380
+ 38
+ 30
+
+ true
+
+ Rectangle_45
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_14
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETM.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_29
+ 270
+ 410
+ 38
+ 30
+
+ true
+
+ Rectangle_46
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_15
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETN.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_30
+ 270
+ 440
+ 38
+ 30
+
+ true
+
+ Rectangle_47
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_16
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETO.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Group_31
+ 270
+ 470
+ 38
+ 30
+
+ true
+
+ Rectangle_48
+ 38
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Action Button_17
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SETP.PROC
+ Set
+ 4
+ 3
+ 30
+ 24
+
+
+
+ Label_27
+ Set From RBV
+ 270
+ 38
+ 19
+ 1
+ 1
+ 1
+
+
+ Label
+ Pos
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_1
+ Value
+ 151
+ 119
+ 19
+ 1
+ 1
+ 1
+
+
+ Label_2
+ 1
+ 20
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_3
+ 2
+ 50
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_4
+ 3
+ 80
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_5
+ 4
+ 110
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_6
+ 5
+ 140
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_7
+ 6
+ 170
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_8
+ 7
+ 200
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_9
+ 8
+ 230
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_10
+ 9
+ 260
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_11
+ 10
+ 290
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_12
+ 11
+ 320
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_13
+ 12
+ 350
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_14
+ 13
+ 380
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_15
+ 14
+ 410
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_16
+ 15
+ 440
+ 30
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_17
+ 16
+ 470
+ 30
+ 29
+ 1
+ 1
+ 1
+
+
+ Group
+ 150
+ 20
+ 120
+ 30
+
+ true
+
+ Rectangle
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry
+ $(P)$(PS):VALA
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_1
+ 150
+ 50
+ 120
+ 30
+
+ true
+
+ Rectangle_17
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_1
+ $(P)$(PS):VALB
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_2
+ 150
+ 80
+ 120
+ 30
+
+ true
+
+ Rectangle_18
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_2
+ $(P)$(PS):VALC
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_4
+ 150
+ 110
+ 120
+ 30
+
+ true
+
+ Rectangle_20
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_4
+ $(P)$(PS):VALD
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_5
+ 150
+ 140
+ 120
+ 30
+
+ true
+
+ Rectangle_21
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_5
+ $(P)$(PS):VALE
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_6
+ 150
+ 170
+ 120
+ 30
+
+ true
+
+ Rectangle_22
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_6
+ $(P)$(PS):VALF
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_7
+ 150
+ 200
+ 120
+ 30
+
+ true
+
+ Rectangle_23
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_7
+ $(P)$(PS):VALG
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_8
+ 150
+ 230
+ 120
+ 30
+
+ true
+
+ Rectangle_24
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_8
+ $(P)$(PS):VALH
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_9
+ 150
+ 260
+ 120
+ 30
+
+ true
+
+ Rectangle_25
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_9
+ $(P)$(PS):VALI
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_10
+ 150
+ 290
+ 120
+ 30
+
+ true
+
+ Rectangle_26
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_10
+ $(P)$(PS):VALJ
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_11
+ 150
+ 320
+ 120
+ 30
+
+ true
+
+ Rectangle_27
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_11
+ $(P)$(PS):VALK
+ 5
+ 3
+ 110
+ 24
+
+
+
+
+ Action Button_18
+
+
+ Write PV
+ $(pv_name)
+ 1
+
+
+ $(P)$(PS):SEL.PROC
+ Move
+ 210
+ 615
+ 65
+ 24
+
+
+
diff --git a/bob/positioner/positioner_embed.bob b/bob/positioner/positioner_embed.bob
new file mode 100644
index 0000000..e8f3b72
--- /dev/null
+++ b/bob/positioner/positioner_embed.bob
@@ -0,0 +1,245 @@
+
+
+
+ positioner_embed
+ 220
+ 120
+
+
+
+
+
+
+
+
+ 5
+ 5
+
+ $(label)
+ 220
+ 120
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Open PVI
+
+
+ Open Display
+ positioner_names.bob
+
+ $(P)
+ $(MP)
+
+ tab
+
+
+ Names
+ 60
+ 50
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+ $(actions)
+
+
+ STOP
+ DEFAULT_PV
+
+
+ $(name)
+ $(pv_name)
+ 1
+
+
+ $(P)$(MP):STOP.PROC
+ STOP
+ 130
+ 60
+ 50
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+ $(tooltip)
+
+
+ Readback PV
+ $(P)$(P1):UPD.D
+ 45
+ 35
+ 90
+
+
+
+
+
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ Combo Box
+ $(P)$(MP):SELECT
+ 5
+ 170
+ 25
+
+
+ Open PVI_1
+
+
+ Open Display
+ positioner.bob
+
+ $(P)
+ $(P1)
+ $(MP)
+ $(filename)
+
+ tab
+
+
+ Values
+ 65
+ 60
+ 50
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+ $(actions)
+
+
+ Label
+ State
+ 20
+ 35
+ 25
+
+
+
+
+ 1
+ 1
+
+
+ Label_1
+ InPos
+ 135
+ 35
+ 25
+
+
+
+
+ 1
+ 1
+
+
+ LED_1
+ $(P)$(MP):INPOS
+ 160
+ 35
+
+
+ LED (Multi State)_1
+ 35
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(P)$(MP):DMOV
+ $(P)$(MP):ERROR.K
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
diff --git a/bob/positioner/positioner_names.bob b/bob/positioner/positioner_names.bob
new file mode 100644
index 0000000..f7865b8
--- /dev/null
+++ b/bob/positioner/positioner_names.bob
@@ -0,0 +1,753 @@
+
+
+
+ Positioner Names
+ 230
+ 585
+
+
+
+
+
+
+
+
+ 5
+ 5
+
+ $(label)
+ 230
+ 580
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Label
+ Pos
+ 5
+ 5
+ 60
+ 1
+ 1
+ 1
+
+
+ Label_1
+ Name
+ 65
+ 5
+ 119
+ 19
+ 1
+ 1
+ 1
+
+
+ Label_2
+ 1
+ 5
+ 25
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_3
+ 2
+ 5
+ 55
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_4
+ 3
+ 5
+ 85
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_5
+ 4
+ 5
+ 115
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_6
+ 5
+ 5
+ 145
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_7
+ 6
+ 5
+ 175
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_8
+ 7
+ 5
+ 205
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_9
+ 8
+ 5
+ 235
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_10
+ 9
+ 5
+ 265
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_11
+ 10
+ 5
+ 295
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_12
+ 11
+ 5
+ 325
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_13
+ 12
+ 5
+ 355
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_14
+ 13
+ 5
+ 385
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_15
+ 14
+ 5
+ 415
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_16
+ 15
+ 5
+ 445
+ 60
+ 30
+ 1
+ 1
+ 1
+
+
+ Label_17
+ 16
+ 5
+ 475
+ 60
+ 29
+ 1
+ 1
+ 1
+
+
+ Group
+ 65
+ 25
+ 120
+ 30
+
+ true
+
+ Rectangle
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry
+ $(P)$(MP):SELECT.ZRST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_1
+ 65
+ 55
+ 120
+ 30
+
+ true
+
+ Rectangle_17
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_1
+ $(P)$(MP):SELECT.ONST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_2
+ 65
+ 85
+ 120
+ 30
+
+ true
+
+ Rectangle_18
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_2
+ $(P)$(MP):SELECT.TWST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_4
+ 65
+ 115
+ 120
+ 30
+
+ true
+
+ Rectangle_20
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_4
+ $(P)$(MP):SELECT.THST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_5
+ 65
+ 145
+ 120
+ 30
+
+ true
+
+ Rectangle_21
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_5
+ $(P)$(MP):SELECT.FRST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_6
+ 65
+ 175
+ 120
+ 30
+
+ true
+
+ Rectangle_22
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_6
+ $(P)$(MP):SELECT.FVST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_7
+ 65
+ 205
+ 120
+ 30
+
+ true
+
+ Rectangle_23
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_7
+ $(P)$(MP):SELECT.SXST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_8
+ 65
+ 235
+ 120
+ 30
+
+ true
+
+ Rectangle_24
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_8
+ $(P)$(MP):SELECT.SVST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_9
+ 65
+ 265
+ 120
+ 30
+
+ true
+
+ Rectangle_25
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_9
+ $(P)$(MP):SELECT.EIST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_10
+ 65
+ 295
+ 120
+ 30
+
+ true
+
+ Rectangle_26
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_10
+ $(P)$(MP):SELECT.NIST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_11
+ 65
+ 325
+ 120
+ 30
+
+ true
+
+ Rectangle_27
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_11
+ $(P)$(MP):SELECT.TEST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_12
+ 65
+ 355
+ 120
+ 30
+
+ true
+
+ Rectangle_28
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_12
+ $(P)$(MP):SELECT.ELST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_13
+ 65
+ 385
+ 120
+ 30
+
+ true
+
+ Rectangle_29
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_13
+ $(P)$(MP):SELECT.TVST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_14
+ 65
+ 415
+ 120
+ 30
+
+ true
+
+ Rectangle_30
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_14
+ $(P)$(MP):SELECT.TTST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_15
+ 65
+ 445
+ 120
+ 30
+
+ true
+
+ Rectangle_31
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_15
+ $(P)$(MP):SELECT.FTST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Group_16
+ 65
+ 475
+ 120
+ 30
+
+ true
+
+ Rectangle_32
+ 120
+ 30
+ 1
+
+
+
+
+
+
+
+
+
+
+ Text Entry_16
+ $(P)$(MP):SELECT.FFST
+ 5
+ 3
+ 110
+ 24
+
+
+
+ Text Symbol
+ $(P)$(MP):UPDATE
+
+ ⟳
+
+ 155
+ 515
+ 25
+ 25
+
+
+
+
+ false
+
+
+ Label_19
+ Setup Position Names
+ 5
+ 515
+ 150
+ 25
+ 1
+ 1
+
+
+
diff --git a/techui-support.yaml b/techui-support.yaml
index 237c919..b0ad54e 100644
--- a/techui-support.yaml
+++ b/techui-support.yaml
@@ -109,6 +109,25 @@ support_modules:
type: "related"
#TODO: Legacy support
+ # Diagnostics
+
+ generic.generic_BPM_diag:
+ prefix: "{{ P }}"
+ macros:
+ - P
+ screens:
+ - file: bpm/bpm_embed.bob
+ type: embedded
+
+ positioner.multipositioner:
+ prefix: "{{ P }}"
+ macros:
+ - P
+ - MP
+ screens:
+ - file: positioner/positioner_embed.bob
+ type: embedded
+
# Motion Controllers
pmac.dls_pmac_asyn_motor: