-> Hier kostenlos registrieren
Hallo zusammen,
ich muss in meinem TwinCat Projekt zur Laufzeit (änderung über HMI) die Profibus Slave Adresse meiner EL6731-0010 ändern können. Dazu habe ich folgende Code geschrieben:
Ich kann feststellen, dass im CoE Interface die neue Slave Adresse angezeigt wird und auch so übernommen ist. Allerdings bekomme ich einen TimeOut von dem ADS Write Baustein.
Mache ich da in der Reihenfolge beim schreiben noch etwas falsch?
Danke für Eure Hilfe.
gruss
martin
ich muss in meinem TwinCat Projekt zur Laufzeit (änderung über HMI) die Profibus Slave Adresse meiner EL6731-0010 ändern können. Dazu habe ich folgende Code geschrieben:
Code:
// I----------------------------------------------------------------------------
// I Schreiben der Profibus Slave Adresse
// I----------------------------------------------------------------------------
_WriteSlaveAdr := FALSE;
_ExecuteEc := FALSE;
IF (stPERS.SET_FIELDBUS.PbSlaveAdr <> _PbSlaveAdr) THEN
_WriteSlaveAdr := FALSE; // TRUE;
_PbSlaveAdr := stPERS.SET_FIELDBUS.PbSlaveAdr;
_State := 10;
END_IF
CASE _State OF
0: ;
10:
_WriteSlaveAdr := TRUE;
_NextState := 20;
20:
_WriteSlaveAdr := FALSE;
_NextState := 30;
30:
_ExecuteEc := TRUE;
_StateEc := EC_DEVICE_STATE_INIT;
_WriteSlaveAdr := FALSE;
_NextState := 40;
40:
_ExecuteEc := FALSE;
IF (_BusyEc) THEN
_NextState := 40;
ELSE
_NextState := 50;
END_IF
50:
_ExecuteEc := TRUE;
_StateEc := EC_DEVICE_STATE_OP;
_NextState := 60;
60:
_ExecuteEc := FALSE;
IF (_BusyEc) THEN
_NextState := 60;
ELSE
_NextState := 0;
END_IF
ELSE
_NextState := 0;
END_CASE
_fbEcSetSlaveState (sNetId := EcMaster_AdsAdres.sNetId,
nSlaveAddr := EL6731_0010.SlaveAddr.port,
bExecute := _ExecuteEc,
tTimeOut := T#10S,
reqState := _StateEc,
bBusy => _BusyEc,
bError => _ErrorEc,
nErrId => _ErrorIdEc,
currState => );
_DataPbAdressWrite[2] := stPERS.SET_FIELDBUS.PbSlaveAdr;
// ADSWRITE mit NETID=NetId der EL6731-0010, PPORT=200, IDXGRP=16#F480, IDXOFFS=0, LEN=4,DATA[0]=16#45,DATA[1]=16#23,DATA[2]=Stationsadresse,DATA[3]=0, wird von der aktuellen Version V00.75 unterstützt
_fbPbAdressWrite( NETID := EL6731_0010_AdsAdres.sNetId,
PORT := 200,
IDXGRP := 16#F480,
IDXOFFS := 0,
LEN := SIZEOF(_DataPbAdressWrite),
SRCADDR := ADR(_DataPbAdressWrite),
WRITE := _WriteSlaveAdr,
TMOUT := T#20S,
ERR => _ErrorWriteSlaveAdr,
ERRID => _ErrorIdWriteSlaveAdr);
_State := _NextState;
Ich kann feststellen, dass im CoE Interface die neue Slave Adresse angezeigt wird und auch so übernommen ist. Allerdings bekomme ich einen TimeOut von dem ADS Write Baustein.
Mache ich da in der Reihenfolge beim schreiben noch etwas falsch?
Danke für Eure Hilfe.
gruss
martin