-> Hier kostenlos registrieren
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Au ja, lass mal sehen, was die Dok der Kamera dazu sagt! (Schnittstelle!)wie ist in der kamera dieses wort definiert?
der gedanke von heinilein kann auch nicht sein das das ascii-zeichen sind.
Für IntegerZahlen von 0 bis 255:
IZ: INT
C1: INT
C2: INT
C: WORD
C1 := IZ / 16 + 48 ;
IF C1 > 57 THEN C1 := C1 + 7 ; END-IF ; // alternativ +39 statt +7 für KleinBuchstaben
C2 := IZ MOD 16 + 48 ;
IF C2 > 57 THEN C2 := C2 + 7 ; END-IF ; // alternativ +39 statt +7 für KleinBuchstaben
C := INT_TO_WORD(256 * C1 + C2) ;
FUNCTION_BLOCK "FB011 VS SWITCH JOB"
//AUTHOR : DV
//FAMILY : BAUMER
//VERSION : 1.0
VAR_INPUT
START : Bool;
NEW_JOBNUMBER : Int;
END_VAR
VAR_OUTPUT
STATUS : "udtStatusKamera";
FINISHED : Bool;
END_VAR
VAR_IN_OUT
SendReceiveTelegramm : "udtSendReceiveTelegramm";
END_VAR
VAR
FHM_Flanke : Bool;
END_VAR
VAR_TEMP
t_1000er : Int;
t_100er : Int;
t_10er : Int;
t_1er : Int;
tmp_Laenge_Endezeichen : Int;
RET_VAL_WORD : Word;
tmp_Zaehler : Int;
tmp_WORD : WORD;
tmp_WORD_BOOL AT tmp_WORD : ARRAY[0..15] OF BOOL;
tmp_DATEN : BYTE;
END_VAR
BEGIN
//----------------------------------------------------
// PROTOKOLL Versionen
//
// | PROTOKOLL | VERSION |
// |-----------|-------------------------------------|
// | 10 | ETHERNET: Without end identifier |
// | 11 | ETHERNET: End identifier <CR> |
// | 12 | ETHERNET: End identifier <LF> |
// | 13 | ETHERNET: End identifier <CR><LF> |
// | | |
//
//----------------------------------------------------
//
// HINWEIS:
//
//----------------------------------------------------
// (c) 2015 Baumer Optronic GmbH
IF NOT START THEN
FINISHED := FALSE;
FHM_Flanke := FALSE;
END_IF;
// ***************************************************
// ***** Telegramm zusammenbauen *****
// ***************************************************
// Befehl SJ für Programmumschaltung
SendReceiveTelegramm.SEND.Zeichen[1] := 'S';
SendReceiveTelegramm.SEND.Zeichen[2] := 'J';
// Programmnummer von DEZ in ASCII wandeln
t_1000er := NEW_JOBNUMBER / 1000;
SendReceiveTelegramm.SEND.Zeichen[3] := INT_TO_CHAR(t_1000er+48);
t_100er := (NEW_JOBNUMBER - (t_1000er*1000)) / 100 ;
SendReceiveTelegramm.SEND.Zeichen[4] := INT_TO_CHAR(t_100er+48);
t_10er := (NEW_JOBNUMBER - (t_1000er * 1000)- (t_100er * 100)) / 10;
SendReceiveTelegramm.SEND.Zeichen[5] := INT_TO_CHAR(t_10er + 48);
t_1er := (NEW_JOBNUMBER - (t_1000er * 1000) - (t_100er * 100) - (t_10er * 10));
SendReceiveTelegramm.SEND.Zeichen[6] := INT_TO_CHAR(t_1er + 48);
// Protokoll / Endezeichen
IF SendReceiveTelegramm.PROTOKOLL = 11 THEN
SendReceiveTelegramm.SEND.Zeichen[7] := BYTE_TO_CHAR(b#16#D);
SendReceiveTelegramm.SEND.Zeichen[8] := BYTE_TO_CHAR(b#16#0);
SendReceiveTelegramm.SEND.Laenge := 7;
tmp_Laenge_Endezeichen := 1;
ELSIF SendReceiveTelegramm.PROTOKOLL = 12 THEN
SendReceiveTelegramm.SEND.Zeichen[7] := BYTE_TO_CHAR(b#16#A);
SendReceiveTelegramm.SEND.Zeichen[8] := BYTE_TO_CHAR(b#16#0);
SendReceiveTelegramm.SEND.Laenge := 7;
tmp_Laenge_Endezeichen := 1;
ELSIF SendReceiveTelegramm.PROTOKOLL = 13 THEN
SendReceiveTelegramm.SEND.Zeichen[7] := BYTE_TO_CHAR(b#16#D);
SendReceiveTelegramm.SEND.Zeichen[8] := BYTE_TO_CHAR(b#16#A);
SendReceiveTelegramm.SEND.Laenge := 8;
tmp_Laenge_Endezeichen := 2;
ELSE
SendReceiveTelegramm.SEND.Zeichen[7] := BYTE_TO_CHAR(b#16#0);
SendReceiveTelegramm.SEND.Zeichen[8] := BYTE_TO_CHAR(b#16#0);
SendReceiveTelegramm.SEND.Laenge := 6;
tmp_Laenge_Endezeichen := 0;
END_IF;
// ***************************************************
// ***** Telegramm senden *****
// ***************************************************
SendReceiveTelegramm.SEND.Start := START;
IF START AND NOT FHM_Flanke THEN
FOR tmp_Zaehler := 1 TO 254 DO
// Daten ablöschen
STATUS.AKTIVER_JOB := 0;
STATUS.JOB_UPDATE_aktiv := FALSE;
STATUS.JOB_UPDATE_Fehler := FALSE;
STATUS.JOB_UPDATE_OK := FALSE;
STATUS.AUFNAHME_Trig_moeglich := FALSE;
STATUS.BACKUP_aktiv := FALSE;
STATUS.BACKUP_Fehler := FALSE;
STATUS.BACKUP_OK := FALSE;
STATUS.INTERNER_FEHLER := FALSE;
STATUS.PROTOKOLL_Polling_Mode := FALSE;
STATUS.PROTOKOLL_Continous_Mode := FALSE;
STATUS.AUFNAHME_externer_Trig := FALSE;
STATUS.AUFNAHME_fortwaehrend := FALSE;
STATUS.MODE_Wiederherstellung := FALSE;
STATUS.MODE_Setup := FALSE;
STATUS.MODE_Testmode := FALSE;
STATUS.MODE_RUN_mode := FALSE;
FHM_Flanke := TRUE;
END_FOR;
END_IF;
// ***************************************************
// ***** Telegramm empfangen *****
// ***************************************************
IF (SendReceiveTelegramm.SEND.Start AND
SendReceiveTelegramm.SEND.Gesendet AND
SendReceiveTelegramm.RECEIVE.NDR AND
SendReceiveTelegramm.RECEIVE.Laenge = (10 + tmp_Laenge_Endezeichen) AND
SendReceiveTelegramm.RECEIVE.Zeichen[1] = 'R' AND
SendReceiveTelegramm.RECEIVE.Zeichen[2] = 'S') THEN
FOR tmp_Zaehler := 1 TO 4 DO
// Daten von ASCII Zeichen in Hexadezimal umwandeln und kopieren
tmp_WORD := SHL(IN:= tmp_WORD, N := 4);
tmp_DATEN := CHAR_TO_BYTE(SendReceiveTelegramm.RECEIVE.Zeichen[tmp_Zaehler + 2]);
tmp_DATEN := INT_TO_BYTE(BYTE_TO_INT(tmp_DATEN) - 48);
IF BYTE_TO_INT(tmp_DATEN) >= 10 THEN
tmp_DATEN := INT_TO_BYTE(BYTE_TO_INT(tmp_DATEN) - 7);
IF BYTE_TO_INT(tmp_DATEN) >= 6 THEN
tmp_DATEN := INT_TO_BYTE(BYTE_TO_INT(tmp_DATEN) - 32);
END_IF;
END_IF;
tmp_WORD := tmp_WORD OR BYTE_TO_WORD(tmp_DATEN);
END_FOR;
STATUS.JOB_UPDATE_aktiv := tmp_WORD_BOOL[0];
STATUS.JOB_UPDATE_Fehler := tmp_WORD_BOOL[1];
STATUS.JOB_UPDATE_OK := tmp_WORD_BOOL[2];
STATUS.AUFNAHME_Trig_moeglich := tmp_WORD_BOOL[3];
STATUS.BACKUP_aktiv := tmp_WORD_BOOL[4];
STATUS.BACKUP_Fehler := tmp_WORD_BOOL[5];
STATUS.BACKUP_OK := tmp_WORD_BOOL[6];
STATUS.INTERNER_FEHLER := tmp_WORD_BOOL[7];
STATUS.PROTOKOLL_Polling_Mode := tmp_WORD_BOOL[8];
STATUS.PROTOKOLL_Continous_Mode := tmp_WORD_BOOL[9];
STATUS.AUFNAHME_externer_Trig := tmp_WORD_BOOL[10];
STATUS.AUFNAHME_fortwaehrend := tmp_WORD_BOOL[11];
STATUS.MODE_Wiederherstellung := tmp_WORD_BOOL[12];
STATUS.MODE_Setup := tmp_WORD_BOOL[13];
STATUS.MODE_Testmode := tmp_WORD_BOOL[14];
STATUS.MODE_RUN_mode := tmp_WORD_BOOL[15];
STATUS.AKTIVER_JOB := ((CHAR_TO_INT(SendReceiveTelegramm.RECEIVE.Zeichen[7]) - 48) * 1000) +
((CHAR_TO_INT(SendReceiveTelegramm.RECEIVE.Zeichen[8]) - 48) * 100) +
((CHAR_TO_INT(SendReceiveTelegramm.RECEIVE.Zeichen[9]) - 48) * 10) +
((CHAR_TO_INT(SendReceiveTelegramm.RECEIVE.Zeichen[10]) - 48));
FINISHED := TRUE;
END_IF;
SendReceiveTelegramm.RECEIVE.NDR := FALSE;
END_FUNCTION_BLOCK
Ja
Gruß
Erich
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen