Vai al contenuto
PLC Forum


PLC si blocca ad una data precisa: Bot a tempo?


Messaggi consigliati

Inserito:

Ad un cliente si è improvvisamente bloccato il PLC (autosettato in STOP), senza apparente ragione. Dopo un pò di tentativi e suggerimenti via telefono, l'impiantista elettrico ha resettato per caso la data (in maniera fortunosa, quindi), ed il PLC si è rimesso a funzionare.

In sintesi il PLC funziona fino ad una particolare data, oltre la quale va in STOP.

 

Il Software non è stato fornito dalla mia Azienda, e (rammento che sono Programmatore di sistemi embedded in C e C++, poco avvezzo con i PLC...) nel mio ambito è prassi non troppo infrequente inserire un bot a tempo, quando non addirittura un blocco completo del programma, per cautelarsi da clienti - diciamo - cattivi pagatori. 

 

Il sospetto, viste le premesse è forte, e volevo chiedere ai luminari della materia se è possibile operare tali pratiche anche in ambito PLC (immagino fortemente di si), ed eventualmente in che direzione indagare.

 

Purtroppo il softwarista PLC titolare è ammalato, per cui mi lo devo sorbire questa situazione anomala... 

 

Thanks!


Inserita:
Quote

volevo chiedere ai luminari della materia se è possibile operare tali pratiche anche in ambito PLC

Certo che è possibile. Non è, purtroppo, legale, ma è possibile.

Ci possono però essere molti altri motivi: errori di programmazione, problemi hardware e altro. Devi collegarti al plc ed analizzare il buffer di diagnostica.

Inserita:

Ok, grazie per la solerte risposta.

 

Ho il buffer di diagnostica, ma immagino che nel caso di un software "fraudolento" si cerchi anche di sviare le indagini del malcapitato (softwarista postumo).

 

Nello specifico ho un richiamo all'OB86, ed altre informazioni abbastanza generiche.

 

Qualche direzione di investigazione, o meglio, esiste qualche OB nel quale il PLC gestisce la data (presumo presa da rete oppure da RTTC interno) ed al quale il softwarista-assassino abbia potuto agganciare il suo codice malizioso?

Inserita:

OB86 è un ob che indica un guasto.

Dal manuale in linea di Step7:

Quote

Descrizione

Il sistema operativo della CPU richiama l'OB 86 nei seguenti casi:

·    Riconoscimento di un guasto (sia con evento entrante che uscente) in un'apparecchiatura di ampliamento centrale (non nell'S7 300).

·    Riconoscimento di un guasto in un sistema master DP (sia con evento entrante che uscente).

·    Riconoscimento di un guasto in una stazione della periferia decentrata (PROFIBUS DP o PROFINET IO; sia con evento entrante che uscente).

·    Disattivazione di una stazione della periferia decentrata (PROFIBUS DP o PROFINET IO) da parte dell'utente con l'SFC 12 "D_ACT_DP" tramite MODE=4.

·    Attivazione di una stazione della periferia decentrata (PROFIBUS DP o PROFINET IO) da parte dell'utente con l'SFC 12 "D_ACT_DP" tramite MODE=3.

·    Guasto di un sistema PROFINET IO, di una stazione PROFINET IO o di una parte dei sotto-moduli di un PROFINET I Device.

Se l'OB 86 non è stato programmato e se si verifica uno di questi errori, la CPU passa nello stato di funzionamento STOP.
L'OB 86 può essere disabilitato o ritardato e abilitato di nuovo con l'aiuto delle SFC da 39 a 42.

 

Inserita:

Ok. Questo era assodato.

 

Il punto è che inserendo una data pregressa, tutto funziona. Dopo quella data, ecco spuntare l'errore,  che quindi non è veritiero.

Inserita:
Quote

Il punto è che inserendo una data pregressa, tutto funziona. Dopo quella data, ecco spuntare l'errore,  che quindi non è veritiero.

Ho capito. Ma senza analizzare il buffer di diagnostica ed il codice, come si può individuare la causa?

 

Ma l'OB86 è presente oppure no?

Per esempio, nel codice potrebbe essere programmata l'attivazione o la disattivazione di un nodo Profibus. Questo richiamerebbe OB86. Se OB86 non esiste, la CPU va in stop.

Inserita:

L'intuizione è stata corretta. Nonostante le mie carenze ho identificato uno scheduler che ogni quid di tempo lancia un task, il quale confronta la data attuale - convertita in HEX - con un valore anch'esso esadecimale, allocato in una DB. Il sistema è complesso in quanto si annida anche nell'OB100 per ricaricarsi nel caso si siano cancellate delle parti.

 

Al match tra le due date, viene lanciata la SFC46, la quale manda in STOP la CPU.

 

Grazie comunque dei suggerimenti.

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...