kiestumpe
Level-1
- Beiträge
- 726
- Reaktionspunkte
- 84
-> Hier kostenlos registrieren
Type und Struct
Hallo Larry und Kandis,
ich glaub, da liegt ein Verständnisproblem zwischen den beiden Begriffen vor.
Ein Type bzw. ein user-defined-type setzt sich aus einem struct oder einem nativen Datentyp zusammen. Der Vorteil des UDT's besteht jedoch darin, dass man Variablen dieser Struktur im ganzen Projekt wieder anlegen kann.
Macht man das, wie oben jedoch explizit in der Variablendeklaration, so hat man nur eine Variable mit genau dieser Struktur definiert - und müsste dann per copy-paste das anderweitig mitziehen - kein guter Stil.
Was ich mit ausserhalb meinte sieht so aus:
(Das Symbol muss man in der Tat in der Symboltabelle anlegen, will Step7 im SCL-Editor nicht)
(Die beiden Typen haben was mit dem ppo3-Protokoll von Umrichtern zu tun-daher auch die Definition mit UDT1300 anstatt dem Symbol)
TYPE UDT1300
STRUCT
// Typbeschreibung
// High-Byte Bit 8-15
Jog1_Ein :BOOL; // Festdrehzahlen-Par1
Jog2_Ein : BOOL; // Festdrehzahlen-Par2
Daten_Ok : BOOL; // 0 = Daten ungültig
Freq_Korr_auf : BOOL;
Freq_Korr_ab : BOOL;
Param_lsb : BOOL;
Param_msb: BOOL;
Reversierung : BOOL;
// Low-Byte Bit 0-7
EIN1: BOOL;// 0 = Rampenstopp
EIN2: BOOL;// 0 = Motorfreilaufstopp
EIN3: BOOL; // 0= Schnellstop mit Rampenzeit
kein_Freilauf : BOOL; // 0 = Freilauf
Rampe : BOOL; // 0 = Schnellstop
Rampe_benutzen : BOOL; // 0 = Frequenz speichern (freeze)
Start : BOOL; // 0 = Rampenstopp
Reset : BOOL;
END_STRUCT
END_TYPE
TYPE UDT1302
STRUCT
// Typbeschreibung
// High-Byte Bit 8-15
Drehzahl_eq : BOOL;
Bus :BOOL;
FrequenzLim_Ok : BOOL;
Betrieb : BOOL;
gestoppt : BOOL;
Spannung_nok : BOOL;
Moment_nok: BOOL;
Timer_nok : BOOL;
// Low-Byte Bit 0-7
CNTRL_OK: BOOL;
FU_OK: BOOL;
Aktiv: BOOL;
Abschalten: BOOL;
EIN_2 : BOOL;
EIN_3 : BOOL;
Start_NOK : BOOL;
Warnung : BOOL;
END_STRUCT
END_TYPE
FUNCTION_BLOCK FB1202
....
VAR_INPUT
// Eingangsparameter
STW : WORD ; // Steuerword
ppo3_STW AT STW: UDT1300 ; //
....
Hallo Larry und Kandis,
ich glaub, da liegt ein Verständnisproblem zwischen den beiden Begriffen vor.
Ein Type bzw. ein user-defined-type setzt sich aus einem struct oder einem nativen Datentyp zusammen. Der Vorteil des UDT's besteht jedoch darin, dass man Variablen dieser Struktur im ganzen Projekt wieder anlegen kann.
Macht man das, wie oben jedoch explizit in der Variablendeklaration, so hat man nur eine Variable mit genau dieser Struktur definiert - und müsste dann per copy-paste das anderweitig mitziehen - kein guter Stil.
Was ich mit ausserhalb meinte sieht so aus:
(Das Symbol muss man in der Tat in der Symboltabelle anlegen, will Step7 im SCL-Editor nicht)
(Die beiden Typen haben was mit dem ppo3-Protokoll von Umrichtern zu tun-daher auch die Definition mit UDT1300 anstatt dem Symbol)
TYPE UDT1300
STRUCT
// Typbeschreibung
// High-Byte Bit 8-15
Jog1_Ein :BOOL; // Festdrehzahlen-Par1
Jog2_Ein : BOOL; // Festdrehzahlen-Par2
Daten_Ok : BOOL; // 0 = Daten ungültig
Freq_Korr_auf : BOOL;
Freq_Korr_ab : BOOL;
Param_lsb : BOOL;
Param_msb: BOOL;
Reversierung : BOOL;
// Low-Byte Bit 0-7
EIN1: BOOL;// 0 = Rampenstopp
EIN2: BOOL;// 0 = Motorfreilaufstopp
EIN3: BOOL; // 0= Schnellstop mit Rampenzeit
kein_Freilauf : BOOL; // 0 = Freilauf
Rampe : BOOL; // 0 = Schnellstop
Rampe_benutzen : BOOL; // 0 = Frequenz speichern (freeze)
Start : BOOL; // 0 = Rampenstopp
Reset : BOOL;
END_STRUCT
END_TYPE
TYPE UDT1302
STRUCT
// Typbeschreibung
// High-Byte Bit 8-15
Drehzahl_eq : BOOL;
Bus :BOOL;
FrequenzLim_Ok : BOOL;
Betrieb : BOOL;
gestoppt : BOOL;
Spannung_nok : BOOL;
Moment_nok: BOOL;
Timer_nok : BOOL;
// Low-Byte Bit 0-7
CNTRL_OK: BOOL;
FU_OK: BOOL;
Aktiv: BOOL;
Abschalten: BOOL;
EIN_2 : BOOL;
EIN_3 : BOOL;
Start_NOK : BOOL;
Warnung : BOOL;
END_STRUCT
END_TYPE
FUNCTION_BLOCK FB1202
....
VAR_INPUT
// Eingangsparameter
STW : WORD ; // Steuerword
ppo3_STW AT STW: UDT1300 ; //
....