Die AT Funktion bei SCL in der S7 wurde eingefügt, weil alle S7 die Motorola Byte Order haben und das Zerlegen einer Struktur damit einfach wird. Fast alle anderen Hardwareplattformen haben sonst die INTEL-Byte Order.
Beispiel eines SCL Codes mit AT
1. Die Variable "_sew_PE_pzd" ist unter VAR als ARRAY[0..5] of WORDs deklariert worden. Diese 6 Wörter werden vom SEW Umrichter MovidriveB als ein Block via PZD-Dienst im Profibus eingelesen.
2. Mit der AT funktion werden die einzelnen BITs und REGISTER in der Struktur "_status" deklariert:
_status AT _sew_PE_pzd :
STRUCT
StateErrNr : BYTE; // State (Bit5=0) or Error Number (Bit5=1)
MotorRun : BOOL; // Bit0 1= Motor lauft, 0=Stopp
DriveRdy : BOOL; // Bit1 1= FU Einschaltbereit, 0=nicht bereit
ReferOK : BOOL; // Bit2 1= Lift refernziert, 0=nicht referenziert
PositionOK : BOOL; // Bit3 1= Position erreicht, 0=nicht ereicht
BrakeOpen : BOOL; // Bit4 1= Bremse OFFEN, 0=geschlossen
ErrorWarn : BOOL; // Bit5 1= Fehler/Warnung steht an, 0=alles OK
LimitTop : BOOL; // Bit6 1= Endlage Oben erreicht, 0=OK
LimitBot : BOOL; // Bit7 1= Endlage Unten erreicht, 0=OK
Position : DWORD; // actual Position (0,1mm)
Speed : WORD; // actual Speed (mm/s)
CurProcent : WORD; // Current Nominal - Unit = %
IxTProcent : WORD; // Geraeteauslastung IxT
END_STRUCT;
3. IM SCL Programm kopiert man son den Errodcode, wenn das Einzelbit ErrorWarn HIGH wird, wie folgt um:
IF (_status.ErrorWarn) THEN
_IO_SEW._SEWstate := 15; // state = error = 15 (display "F")
_IO_SEW._SEWerror := WORD_TO_INT(BYTE_TO_WORD_status.StateErrNr));
_IO_SEW._ErrorCode := _IO_SEW._SEWerror; // ERROR-Out
END_IF;
4. Nun hat man bei einem anstehenden Fehler am SEW unter "_SEWerror" eine INT16 Nummer, die der gleichen Fehlernummer entspricht, die am SEW am Display angezeigt wird.