Newer
Older
/*
# C.E.A. IRFU/SIS/LDISC
#
*/
program checkMTRBrake
%%#include <stdio.h>
%%#include <string.h>
%%#include <stdlib.h>
/**** MTR PV *******/
short ErrorBrakeMtrGet;
assign ErrorBrakeMtrGet to "{PREFIX}:PBI-EM:CURRENT_ERR_GET";
monitor ErrorBrakeMtrGet;
evflag ErrorBrakeMtrEvent;
sync ErrorBrakeMtrGet ErrorBrakeMtrEvent;
short statusMTRMov;
assign statusMTRMov to "{PMACPREFIX}:{MOTOR_NAME}.MOVN";
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
monitor statusMTRMov;
short ErrorBrakeMtrSet;
assign ErrorBrakeMtrSet to "{PREFIX}:PBI-EM:CURRENT_ERR_SET";
monitor ErrorBrakeMtrSet;
short brakeMtrCMD;
assign brakeMtrCMD to "{PREFIX}:PBI-EM:VER-BRAKE_SET";
monitor brakeMtrCMD;
short brakeMtrGET;
assign brakeMtrGET to "{PREFIX}:PBI-EM:VER-BRAKE_GET";
monitor brakeMtrGET;
evflag brakeMtrGETEvent;
sync brakeMtrGET brakeMtrGETEvent;
short AbortscanMtrCMD;
assign AbortscanMtrCMD to "{DEVICE}:MTR-ABORT.PROC";
monitor AbortscanMtrCMD;
short countErrors=0;
ss ss1
{
state init {
when (delay(1.0) && (pvConnectCount() == pvChannelCount()))
{
printf("\nWAIT\n");
ErrorBrakeMtrSet=0;
pvPut(ErrorBrakeMtrSet);
} state waiting
}
state waiting
{
when(efTestAndClear(ErrorBrakeMtrEvent)&&(ErrorBrakeMtrGet==1)&&(delay(0.1)))
{
printf("\nERRROR CURRENT : BRAKE OFF \n");
brakeMtrCMD=1;
pvPut(brakeMtrCMD);
delay(1);
ErrorBrakeMtrSet=0;
pvPut(ErrorBrakeMtrSet);
}state count
}
state count
{
when(countErrors>3)
{
printf("\nERRROR CURRENT : STOP MEASURE \n");
}state stopMeasure
when((delay(1.0)) && (statusMTRMov==1))
{
printf("\nERRROR CURRENT : PROBLEM SOLVED \n");
countErrors=0;
}state waiting
when((delay(1.0)) && (statusMTRMov==0))
{
countErrors=countErrors+1;
}state waiting
}
state stopMeasure
{
when(delay(1.0)){
printf("\n ABORT\n");
AbortscanMtrCMD=1;
pvPut(AbortscanMtrCMD);
countErrors=0;
}state waiting
}
}