Herunterladen Inhalt Inhalt Diese Seite drucken

ABB DC541-CM Betriebsanleitung Seite 14

Interrupt- und zählmodul
Vorschau ausblenden Andere Handbücher für DC541-CM:
Inhaltsverzeichnis

Werbung

Der Deklarationsteil für das Programm sieht wie folgt aus:
PROGRAM DC541_Interrupt_Ext1
VAR
dwIntCount
dwIntCountOld
tActual
tStart
dwUsedTime
dwFrequenz
DC541_IntSource
DC541_Ios
dwCount_InX
dwCount_InXOld
dwIntHisto
wIndex
byInd
END_VAR
VAR CONSTANT
cbyDC541_SLOT
cbyDC541_MaxHist
cbyDC541_IntInp
END_VAR
Der Anweisungsteil sieht wie folgt aus:
Am Anfang werden alle Interrupts gezählt in dwIntCount. Nach jeweils 1000 Interrupts wird die Frequenz
berechnet und die Zähler für Interrupts pro Eingang gespeichert.
dwIntCount := dwIntCount + 1;
IF dwIntCount - dwIntCountOld >= 1000 THEN
dwIntCountOld := dwIntCount;
tActual := TIME();
dwUsedTime := TIME_TO_DWORD(tActual - tStart);
dwFrequenz := 1000000 / dwUsedTime;
tStart := tActual;
dwIntHisto[0,wIndex] := dwCount_InX[0] - dwCount_InXOld[0];
dwCount_InXOld[0] :=dwCount_InX[0];
dwIntHisto[1,wIndex] := dwCount_InX[1] - dwCount_InXOld[1];
dwCount_InXOld[1] :=dwCount_InX[1];
dwIntHisto[2,wIndex] := dwCount_InX[2] - dwCount_InXOld[2];
dwCount_InXOld[2] :=dwCount_InX[2];
dwIntHisto[3,wIndex] := dwCount_InX[3] - dwCount_InXOld[3];
dwCount_InXOld[3] :=dwCount_InX[3];
wIndex := wIndex + 1;
IF wIndex > cbyDC541_MaxHist THEN wIndex := 0; END_IF;
END_IF; (* 1000 Interrupts *)
____________________________________________________________________________________________________________
G7
AC500-Systemtechnik E/A-Module
: DWORD;
: DWORD;
: TIME;
: TIME;
: DWORD;
: DWORD;
: DC541_INT_IN;
: DC541_IO;
: ARRAY[0..cbyDC541_IntInp] OF
DWORD;
: ARRAY[0..cbyDC541_IntInp] OF
DWORD;
: ARRAY[0..cbyDC541_IntInp,
0..cbyDC541_MaxHist] OF DWORD;
: WORD;
: BYTE;
: BYTE := 1;
: BYTE := 9;
: BYTE := 4;
(* count all interrupts *)
(* start value for next measure *)
(* systemtick in ms *)
(* start value of systemtick for next
calculation *)
(* time for 1000 interrupts in ms *)
(* interrupt frequency in [Int / sec] *)
(* instance FB: read interrupt source *)
(* instance FB: read/write inputs/outputs *)
(* count interrupts of In0..In3 *)
(* start value for next 1000 interrupts *)
(* histo data C0...C3 *)
(* index for histo data *)
(* loop index *)
(* SLOT number of DC541 *)
(* max number of histo entries *)
(* number of interrupt inputs -1 *)
(* count all interrupts *)
(* after 1000 interrupts -> calculate frequency *)
(* save dwIntCount for next call *)
(* duration in ms for 1000 interrupts *)
(* [Interrupt / sec] 1000 Int * 1000 ms/sec *)
(* for next measure *)
(* IN0 interrupts of last 1000 *)
(* start value for next measure *)
(* IN1 interrupts of last 1000 *)
(* start value for next measure *)
(* IN2 interrupts of last 1000 *)
(* start value for next measure *)
(* IN3 interrupts of last 1000 *)
(* start value for next measure *)
(* increase index *)
(* reset index, if >1000 *)
14
DC541
AC500 / Stand: 08.2006

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis