Zählervergleichsausgang setzen (schneller Zähler)
Wenn der Istwert den Sollwert diTargetValue des durch iChannel festgelegten schnellen Zählerkanals erreicht, wird der durch pYOutput festgelegte Ausgang sofort auf TRUE gesetzt.
Eingang
FPS: 0, 2
FP-X R: 0, 1
FP-X 16K C14T: 0, 1, 2
FP-X 32K C30T, C60T: 0, 1, 2, 3
FP0R: 0, 1, 2, 3
FP0: 0, 1
FP-e: 0, 1
Geben Sie für den Sollwert einen 32-Bit-Datenwert innerhalb des folgenden Bereichs ein:
FP0, FP-e: -838808–+8388607
FPS, FP-X, FP0R: -2147483467–+2147483648
Ausgang
Channel%d
und pYOuput.iOffset
nicht mit einer gültigen Kombination von Kanalnummer und Ausgang übereinstimmt, wie sie von der globalen Variablen vorgegeben wird.Dieser Nicht-Inline-Befehl ist Teil der Tool-Befehle für die schnellen Zähler. Eine ausführliche Beschreibung der intern verwendeten Befehle finden Sie in der : F167_HighSpeedCounter_Reset F166_HighSpeedCounter_Set
Um die Kombination von Kanal und Y-Ausgang zu prüfen, benötigt der Compiler das folgende Benennungsmuster für globale Variablen:%sHsc_TargetValueMatch_Channel%d_Y%d_%s
Verwenden Sie für globale Variablen in Zählervergleichsfunktionen grundsätzlich dieses Muster.
Channel%d
muss ein schneller Zählerkanal sein, der in den Systemregistern aktiviert ist.
Y%d
muss eine explizite, von der SPS unterstützte Ausgangsadresse sein
FP-S, FP0, FP-e: |
Y0–Y7 |
FP-S (V3.1 oder eine neuere Version), FP0R |
Y0–Y1F |
FP-X: |
Y0–Y29F |
%s
ist ein optionaler Deskriptor am Musteranfang
%s
ist ein optionaler Deskriptor am Musterende
Optional | Vorgegebenes Muster | Optional |
g_b |
Hsc_TargetValueMatch_ChannelA_Y11F |
_MotorOn |
In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
VAR
bExecute: BOOL:=0;
iChannel1: INT:=1;
diTargetValue0: DINT:=15000;
bIsActive: BOOL:=FALSE;
diElapsedValue: DINT:=0;
bSet: BOOL:=FALSE;
bErrorSet: BOOL:=FALSE;
END_VAR
Verwenden Sie HscInfo_IsActive, um den durch iChannel1 festgelegten Kanal auszuwerten. Wenn eine steigende Flanke bei bSet erkannt wird, und wenn bIsActive nicht TRUE ist, wird der Befehl ausgeführt. Die Kombination aus Kanalnummer und Ausgangskontakt wird in der globalen Variablen g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On überprüft. Wenn der schnelle Zähler an Kanal 1 den Sollwert diTargetValue0 erreicht, wird der Ausgang Y1 auf TRUE gesetzt.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_F,HscInfo_IsActive!,,9,0,18,3,,?DiChannel?C);
B(B_VARIN,,iChannel1,7,1,9,3,);
B(B_VAROUT,,bIsActive,18,1,20,3,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VAROUT,,bErrorSet,46,1,48,3,);
B(B_CONTACT,,bSet,2,1,4,3,R);
B(B_CONTACT,,bIsActive,6,1,8,3,N);
B(B_VARIN,,iChannel1,31,2,33,4,);
B(B_VARIN,,diTargetValue0,31,4,33,6,);
B(B_F,GetPointer!,,26,3,33,5,,?D?C);
B(B_VARIN,,g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On,24,3,26,5,);
B(B_F,Hsc_TargetValueMatch_Set!,,33,0,46,6,,?DbExecute?DiChannel?DpYOutput?DdiTargetValue?CbError);
L(1,2,2,2);
L(4,2,6,2);
L(8,2,33,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bIsActive:=HscInfo_IsActive(iChannel1);
Hsc_TargetValueMatch_Set(bExecute := DF(bSet) AND NOT bIsActive,
iChannel := iChannel1,
pYOutput := GetPointer(g_bHsc_TargetValueMatch_Channel1_Y1_RedLamp_On),
diTargetValue := diTargetValue0,
bError => bErrorSet);