So che si tratta di un argomento già discusso nel Web, ma ho la necessità di leggere tre numeri interi ( da 0 a 255) su un PLC 1200 1212, ma mi ritorna sempre il messaggio : CLI : function refused by CPU (Unknown error)
Ho provaro a cambiare firmware alla CPU pensado che fosse vecchio, ma nulla, ho preso una CPU più recente ma torna sempre lo stesso errore.
La DB non è ottimizzata, è una DB Globale e ha le prorpietà di Protezione e Security con permesso di lettura e scrittura.
ALLEGO CODICE CHE UTILIZZO
procedure TForm1.LeggeClick(Sender: TObject);
var
DatiPLCINT: packed array[0..5] of Smallint;
begin
ValoriLETTURA := strtoint(VAL_LETTI.Text);
N_BYTE := ValoriLETTURA * sizeof(single);
ValoriLETTURA := ValoriLETTURA-1; // Per il calcolo for / next parto da 0
if not Plc1.Connected then // se il PLC non risponde esco
begin
showmessage('PLC NON RISPONDE VERIFICARE INDIRIZZO TCP-IP E CHE IL PLC SIA ACCESO')
end;
BYTE_START := strtoint (DBD.Text);
if Errore <> 0 then
begin
Log1.Lines.Add(Trim(CliErrorText(Errore))); // Scrive un eventuale errore
Exit;
end;
Log1.Lines.add('Valori della DB letta:');
for I := 0 to ValoriLETTURA do
begin
MyInteger:= S7.ValInt[@DatiPLCINT[I]];
Log1.Lines.add('[DB1.DBW' + inttostr (BYTE_START)+' ]: ' + intttostr(MyInteger));
BYTE_START := BYTE_START +4;
end;
end;
////////////////////////////////////////////////////////////////////////////////////
Grazie per eventuali suggerimenti
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Per esperienza di altri con lo stesso problema, ricarica la DB nella CPU, non basta togliere la spunta al progetto.
Poi che parametri di connessione usi ?
Last edit: Davide Nardella 2020-09-28
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Il progetto lo faccio dalla partenza con DB Globale, DB non ottimizzata e pernmesso sia in lettura che in scrittura, comunque la DB ho provato anche a ricaricata, ho anche rifatto un nuovo progetto dopo gli aggiornamenti del firmware, ho fatto un nuovo progetto anche solo per testare un Boolean (i booleani so che vanno perchè su una CPU 1500 spazzolo 2 DB contenenti tutti gli allarmi di un grosso progetto ) ma anche li dopo aver interrogato la DB mi arriva il messaggio "CLI : function refused by CPU (Unknown error)"
Mi connetto puntando all'indirizzo TCP IP 192.168.0.1,0,1, ma la connessione con il PLC è aperta perchè non mi ritorna l'avviso del contollo :
if not Plc1.Connected then // se il PLC non risponde esco
begin
showmessage('PLC NON RISPONDE VERIFICARE INDIRIZZO TCP-IP E CHE IL PLC SIA ACCESO')
end;
Se ci sono altri suggerimenti ringrazio in anticipo
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Chiedo umilemnte scusa, a volte ed essere troppo sicuri di se stessi in un argomento porta a fare degli errori che nemmeno un ragazzino alle prime armi con il PLC commetterebbe, non avevo applicato la spunta nei meccanismi di collegamento
Ora funziona tutto perfettamente. Sig.Nardella grazie per la disponibilità
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
So che si tratta di un argomento già discusso nel Web, ma ho la necessità di leggere tre numeri interi ( da 0 a 255) su un PLC 1200 1212, ma mi ritorna sempre il messaggio : CLI : function refused by CPU (Unknown error)
Ho provaro a cambiare firmware alla CPU pensado che fosse vecchio, ma nulla, ho preso una CPU più recente ma torna sempre lo stesso errore.
La DB non è ottimizzata, è una DB Globale e ha le prorpietà di Protezione e Security con permesso di lettura e scrittura.
ALLEGO CODICE CHE UTILIZZO
procedure TForm1.LeggeClick(Sender: TObject);
var
DatiPLCINT: packed array[0..5] of Smallint;
I: Integer;
Errore: Integer;
MyInteger : Smallint;
N_BYTE: Integer;
BYTE_START : Integer;
ValoriLETTURA : Integer;
begin
ValoriLETTURA := strtoint(VAL_LETTI.Text);
N_BYTE := ValoriLETTURA * sizeof(single);
ValoriLETTURA := ValoriLETTURA-1; // Per il calcolo for / next parto da 0
if not Plc1.Connected then // se il PLC non risponde esco
begin
showmessage('PLC NON RISPONDE VERIFICARE INDIRIZZO TCP-IP E CHE IL PLC SIA ACCESO')
end;
BYTE_START := strtoint (DBD.Text);
if Errore <> 0 then
begin
Log1.Lines.Add(Trim(CliErrorText(Errore))); // Scrive un eventuale errore
Exit;
end;
Log1.Lines.add('Valori della DB letta:');
for I := 0 to ValoriLETTURA do
begin
MyInteger:= S7.ValInt[@DatiPLCINT[I]];
Log1.Lines.add('[DB1.DBW' + inttostr (BYTE_START)+' ]: ' + intttostr(MyInteger));
BYTE_START := BYTE_START +4;
end;
end;
////////////////////////////////////////////////////////////////////////////////////
Grazie per eventuali suggerimenti
Per esperienza di altri con lo stesso problema, ricarica la DB nella CPU, non basta togliere la spunta al progetto.
Poi che parametri di connessione usi ?
Last edit: Davide Nardella 2020-09-28
Il progetto lo faccio dalla partenza con DB Globale, DB non ottimizzata e pernmesso sia in lettura che in scrittura, comunque la DB ho provato anche a ricaricata, ho anche rifatto un nuovo progetto dopo gli aggiornamenti del firmware, ho fatto un nuovo progetto anche solo per testare un Boolean (i booleani so che vanno perchè su una CPU 1500 spazzolo 2 DB contenenti tutti gli allarmi di un grosso progetto ) ma anche li dopo aver interrogato la DB mi arriva il messaggio "CLI : function refused by CPU (Unknown error)"
Mi connetto puntando all'indirizzo TCP IP 192.168.0.1,0,1, ma la connessione con il PLC è aperta perchè non mi ritorna l'avviso del contollo :
if not Plc1.Connected then // se il PLC non risponde esco
begin
showmessage('PLC NON RISPONDE VERIFICARE INDIRIZZO TCP-IP E CHE IL PLC SIA ACCESO')
end;
Se ci sono altri suggerimenti ringrazio in anticipo
Chiedo umilemnte scusa, a volte ed essere troppo sicuri di se stessi in un argomento porta a fare degli errori che nemmeno un ragazzino alle prime armi con il PLC commetterebbe, non avevo applicato la spunta nei meccanismi di collegamento
Ora funziona tutto perfettamente.
Sig.Nardella grazie per la disponibilità
figurati, capita a tutti ;)