FUNCTION "m7a_CreateANY" : VOID
TITLE =CreateANY: erzeugt ANY aus Einzelbestandteilen
//Codierung Datentyp:
//00h : NIL : Nullpointer
//01h : BOOL : Bits
//02h : BYTE
//03h : CHAR
//04h : WORD
//05h : INT
//06h : DWORD
//07h : DINT
//08h : REAL
//09h : DATE
//0Ah : Time_OF_DAY (TOD)
//0Bh : TIME
//0Ch : S5Time
//0Dh : nicht definiert
//0Eh : DATE_AND_TIME (DT)
//13h : STRING
//
//Codierung Speicherbereich:
//80h : P : Peripherie
//81h : E : Eingänge
//82h : A : Ausgänge
//83h : M : Merker
//84h : DB: Datenbaustein
//85h : DI: Instanzdatenbaustein
//86h : L : Lokaldaten (L-Stack)
//87h : V : voriger Lokaldatenstack
//
//AUTOR: Stefan Maag
//DATUM: 10/2007
//
//AENDERUNGSVERMERKE:
//--------------------------------------------------------------------------------
//DATUM NAME AENDERUNG
//--------------------------------------------------------------------------------
//04.11.2011 S.Maag Fehler Speicherbereichsverarbeitung mit UD statt OD
// behoben
//--------------------------------------------------------------------------------
//
//HINWEISE:
AUTHOR : 'S.Maag'
FAMILY : Maagic7
VERSION : 0.1
VAR_INPUT
B1_DataType : BYTE ; //1=Bool 2=Byte 3=Char 4=Word 5=INT 6=DW 7=DINT 8=Real 9=Date ...
B23_Wiederholung : INT ; //Wiederholungsfaktor
B45_DB : INT ; //DB-Nummer oder 0
B6_Speicher : BYTE ; //Hex 80=P 81=E 82=A 83=M 84=DB 85=DI 86=L 87=V
ByteAdr : INT ; //ByteAdresse
BitAdr : INT ; //Bitadresse 0..7
END_VAR
VAR_OUTPUT
AnyPointer : ANY ;
END_VAR
VAR_TEMP
pBit : DWORD ;
AR1 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##AnyPointer;
LAR1 ;
// Byte 0 enthält immer 10h für S7
L B#16#10;
T B [AR1,P#0.0];
L #B1_DataType;
T B [AR1,P#1.0]; // Byte 1 = Datentyp
L #B23_Wiederholung;
T W [AR1,P#2.0]; // Byte 2&3 = Wiederholungsfaktor
L #B45_DB;
T W [AR1,P#4.0]; // Byte 4&5 = Datenbaustein-Nr
L #BitAdr;
L B#16#7; // Bitadresse auf 3 Bit Begrenzen 0..7
UW ;
L #ByteAdr; // ByteAdresse um 3 nach links => Pointerformat
SLD 3;
OD ; // ByteAdress und Bitadresse verbinden
T D [AR1,P#6.0];
L #B6_Speicher;
T B [AR1,P#6.0]; // Byte 6 = Speicherbereich
SET ;
SAVE ;
CLR ;
END_FUNCTION
FUNCTION "m7a_SplitAny" : VOID
TITLE =SplitAny : Zerteilt ANY-Pointer in die relevanten Bestandteile
//Codierung Datentyp:
//00h : NIL : Nullpointer
//01h : BOOL : Bits
//02h : BYTE
//03h : CHAR
//04h : WORD
//05h : INT
//06h : DWORD
//07h : DINT
//08h : REAL
//09h : DATE
//0Ah : Time_OF_DAY (TOD)
//0Bh : TIME
//0Ch : S5Time
//0Dh : nicht definiert
//0Eh : DATE_AND_TIME (DT)
//13h : STRING
//
//Codierung Speicherbereich:
//80h : P : Peripherie
//81h : E : Eingänge
//82h : A : Ausgänge
//83h : M : Merker
//84h : DB: Datenbaustein
//85h : DI: Instanzdatenbaustein
//86h : L : Lokaldaten (L-Stack)
//87h : V : voriger Lokaldatenstack
//
//AUTOR: Stefan Maag
//DATUM: 10/2007
//
//AENDERUNGSVERMERKE:
//--------------------------------------------------------------------------------
//DATUM NAME AENDERUNG
//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
//
//HINWEISE:
AUTHOR : 'S.Maag'
FAMILY : Maagic7
VERSION : 0.1
VAR_INPUT
AnyPointer : ANY ;
END_VAR
VAR_OUTPUT
B1_DataType : BYTE ;
B23_Wiederholung : INT ;
B45_DB : INT ;
B6_Speicher : BYTE ;
ByteAdr : INT ;
BitAdr : INT ;
END_VAR
VAR_TEMP
AR1 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
TAR1 #AR1; // Adressregister 1 sichern
L P##AnyPointer;
LAR1 ;
// Byte 0 enthält immer 10h für S7, daher nicht ausgeben
// L B [AR1,P#0.0]
// T #B0_PLC
L B [AR1,P#1.0]; // Byte 1 = Datentyp
T #B1_DataType;
L W [AR1,P#2.0]; // Byte 2&3 = Wiederholungsfaktor
T #B23_Wiederholung;
L W [AR1,P#4.0]; // Byte 4&5 = Datenbaustein-Nr
T #B45_DB;
L B [AR1,P#6.0]; // Byte 6 = Speicherbereich
T #B6_Speicher;
L D [AR1,P#6.0]; // Byte 7&8&9 = BitPointer
SRD 3; // daraus ByteAdresse berechnen
T #ByteAdr;
L B [AR1,P#9.0]; // Byte 9, Bit 0..2 = Bitadresse
L B#16#7;
UW ;
T #BitAdr;
LAR1 #AR1; // ursprüngliches Adressregister 1 herstellen
SET ;
SAVE ;
CLR ;
END_FUNCTION