Vai al contenuto
PLC Forum


Dialogo PLC st-1500 con gestionale (ERP)


enzomantovani

Messaggi consigliati

Buongiorno, mi trovo in difficoltà con lo scambio dati tra PLC-S71500 e il gestionale (ERP). Per ottenere la qualifica del 4.0, mi è stato chiesto di scambiare un paio di stringhe con il gestionale. Siccome io, le poche volte che lo ho fatto ho usato le istruzioni "TSEND-C" e "TRCV-C" e dall'altra parte non hanno mai avuto problemi, mi trovo in difficoltà ad ottemperare le loro richieste che sono: leggere un file CSV tipo:

image.png.82342dbf36ba9c770ce25b9f4ecda7e5.png

 

e in risposta devo scrivere sempre un file CSV tipo:

image.png.5773fb9dd3a977d6796a27b2460abfae.png

Dispongo di un PC con installato WINCC-RT, sul quale dovrei gestire detti file. Da quello che ho capito, dovrei usare degli SCRIPT, a me completamente sconosciuti.

Gli allarmi sono già presenti sul disco come "ARCHIVIO ALLARMI", (del quale è già stata pagata la licenza).

Qualche buon cuore, mi può dare una mano?

Sig! sono disperato!

Link al commento
Condividi su altri siti


Mi pare che a questi qui piacciano le cose "comode".
Creare il file .csv non è difficile (vedi funzioni datalog).
Per la lettura dei dati dal file .csv, potresti guardare l'istruzione "RecipeImport", ma non l'ho mai usata e non ti so dare indicazione in merito. Credo comunque sia difficile da adattare al tuo caso, sia perché dovresti gestire i dati come "Set di dati" di una ricetta, sia perché il file dovrebbe essere formattato secondo le tue specifiche esigenze, e non secondo il loro piacere.
Sinceramente, non ho mai provato a leggere file con il PLC, e non so se ci siano funzioni adatte allo scopo. Forse, in qualche libreria Siemens, tipo LGF Library o simili.
Nel tuo caso, il lavoro sarebbe da fare, come tu stesso dici, con script in Wincc, ma c'è un po' di lavoro da fare

 

Detto questo, ritengo, come Yiogo, che la soluzione ottimale, oggi, sia l'utilizzo di OPC UA.
è facile da configurare, e metti a disposizione i dati che ti servono, sia il lettura che in scrittura, belli ordinati in uno o più DB che dedicherai allo scambio dati con ERP.
Ci sono in rete anche programmi freeware OPCUA, sia server che client, che ti permettono di testare il tutto anche senza connessione con il gestionale.

Link al commento
Condividi su altri siti

Dovrebbero essere loro ad avere dei driver su server che puntano te.

Ad esempio Kepware, wonderware ecc. 

Tu gli prepari l'area dati per lo scambio e poi ci pensa il server a leggere e scrivere. 

Nel tuo caso con S7-1500 il driver userà OPCUa o S7 comunication. 

 

È impensabile che sia tu a leggere il file csv... roba da matti! 

 

Link al commento
Condividi su altri siti

 

Vi ringrazio tutti. E' come pensavo, ma siccome al giorno d'oggi l'ufficio tecnico è considerato come il 2 di picche, un banalissimo neo ragioniere crede di essere il verbo. Farò come mi avete suggerito.

20 ore fa, batta ha scritto:

Mi pare che a questi qui piacciano le cose "comode".
Creare il file .csv non è difficile (vedi funzioni datalog).
Per la lettura dei dati dal file .csv, potresti guardare l'istruzione "RecipeImport", ma non l'ho mai usata e non ti so dare indicazione in merito. Credo comunque sia difficile da adattare al tuo caso, sia perché dovresti gestire i dati come "Set di dati" di una ricetta, sia perché il file dovrebbe essere formattato secondo le tue specifiche esigenze, e non secondo il loro piacere.
Sinceramente, non ho mai provato a leggere file con il PLC, e non so se ci siano funzioni adatte allo scopo. Forse, in qualche libreria Siemens, tipo LGF Library o simili.
Nel tuo caso, il lavoro sarebbe da fare, come tu stesso dici, con script in Wincc, ma c'è un po' di lavoro da fare

 

Detto questo, ritengo, come Yiogo, che la soluzione ottimale, oggi, sia l'utilizzo di OPC UA.
è facile da configurare, e metti a disposizione i dati che ti servono, sia il lettura che in scrittura, belli ordinati in uno o più DB che dedicherai allo scambio dati con ERP.
Ci sono in rete anche programmi freeware OPCUA, sia server che client, che ti permettono di testare il tutto anche senza connessione con il gestionale.

Ti ringrazio, è come pensavo, il neo ragioniere di turno è considerato il verbo, solo perchè usa sti cazzi di inglesismi come ERP, FILES DI FRONTIERA, SCHEDULAZIONE....ecc...ecc... In realtà non ne capisce assolutamente nulla!

Grazie a tutti. Farò come mi avete suggerito!

Link al commento
Condividi su altri siti

38 minuti fa, Yiogo ha scritto:

OPCua per il livello di comunicazione verso gestionali, come modbus per la comunicazioone di campo, sono protocolli standard ed universali

Condivido.
 

Enzo, se il neo ragioniere non sa cosa sia OPCUA, digli che si aggiorni.
Ma poi, nulla contro i ragionieri, ma perché mai dovrebbe essere un ragioniere a gestire questa cosa?

Link al commento
Condividi su altri siti

9 ore fa, batta ha scritto:

ma perché mai dovrebbe essere un ragioniere a gestire questa cosa?

 

Perchè, purtroppo, spesso le decisioni sono esclusivamente economiche

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ho risolto quasi ,tutto scopiazzando i vari VBScript del forum. Mi è rimasto solo un problema, nel leggere il CSV che mi dà l'ordine di lavoro, dovrei leggere 3 record, invece mi restituisce solo l'ultimo record. Dove sbaglio?1175199700_VBScriptlettura.thumb.png.fafe54900b7b9d9ee5f36953bc8bbebc.png

Quote

 

 

Link al commento
Condividi su altri siti

Il ReadLine ti legge una riga alla volta, quindi l'estrazione dei vari Field la devi mettere nel ciclo While. Non fuori pensando di estrarre tutti i Field  da una stringa che a While terminato ti restituisce solo l'ultima riga del CSV.

Ciao

Link al commento
Condividi su altri siti

18 ore fa, drn5 ha scritto:

Il ReadLine ti legge una riga alla volta, quindi l'estrazione dei vari Field la devi mettere nel ciclo While. Non fuori pensando di estrarre tutti i Field  da una stringa che a While terminato ti restituisce solo l'ultima riga del CSV.

Ciao

Devi perdonare la mia ignoranza! Mi rendo conto che dopo 40 anni di programmazione AWL, ancora sono più le cose che non so di quelle assimilate, figuriamoci VBScript!

Questa è una realizzazione nella quale sono caduto come un baccalà! La mia conoscenza di VBS è praticamente 0! Ho scaricato il manuale e non ho, alla mia età, nessuna voglia di studiarmi le oltre 400 pagine. Cercavo un cuore gentile che mi riscrivesse il ciclo "While" in modo da scrivere i 3 record composti da 4 colonne ciascuno, all'interno di un file csv condiviso e scritto da ERP sui 3 gruppi di variabili indicati nello script. Sarebbe il più bel regalo di Natale che qualcuno possa farmi!

In ogni caso, grazie mille per l'interessamento.

Enzo

Link al commento
Condividi su altri siti

Scusami la franchezza, che non vuole essere una critica, ho sessantaquattro anni e so cosa significa mettersi a studiare qualcosa di nuovo, però tirarsi indietro così mi sembra darsi per sconfitti troppo facilmente.

Vediamo se qualcun altro ha voglia di scriverti il codice finito.

Bisognerebbe anche prevedere l'evento di lettura mentre il file viene scritto, prevedendone quindi la gestione degli errori oltre alla eventualità che le righe scritte non siano per forza 3, ma di meno o di più.

Ciao.

Modificato: da drn5
Link al commento
Condividi su altri siti

4 ore fa, drn5 ha scritto:

Scusami la franchezza, che non vuole essere una critica, ho sessantaquattro anni e so cosa significa mettersi a studiare qualcosa di nuovo, però tirarsi indietro così mi sembra darsi per sconfitti troppo facilmente.

Vediamo se qualcun altro ha voglia di scriverti il codice finito.

Bisognerebbe anche prevedere l'evento di lettura mentre il file viene scritto, prevedendone quindi la gestione degli errori oltre alla eventualità che le righe scritte non siano per forza 3, ma di meno o di più.

Ciao.

Io ne ho 66 ed ero felicemente in pensione, solo che il mio sostituto ha combinato così tanti casini (è poi scappato in Marocco da dove veniva, senza più tornare indietro) lasciando la mia ex azienda in braghe ti tela. Siccome non sono abituato a sputare nel piatto che mi ha dato da mangiare, sono rientrato part-time. Purtroppo questi tipi di contratti erano già stati firmati ed ho dovuto adeguarmi. La curiosità e la voglia di fare non mi mancano certo, ma preferisco investirli nel perfezionare quello che era ed è il mio lavoro: TIA PORTAL! Gli script li ho dovuti adottare per causa di forza maggiore, convinto che in INTERNET avrei trovato le soluzioni e, devo dire che il 90% è stato fatto. L'unica cosa che, stranamente, non riesco a trovare è la soluzione del problema in oggetto. Se avessi ancora 30 anni mi ci butterei a capofitto, ma ora, sinceramente, non ne ho voglia. Quello che mi manca è proprio il pezzetto che hai menzionato, il resto è stato tutto testato e funziona. Leggere 3 righe di csv non dovrebbe essere così emblematico, ma non riesco a trovare un esempio calzante.

Forza e coraggio: siamo rimasti gli ultimi della CLASSE DI FERRO!

Saluti e BUONE FESTE!

Il 25/12/2021 alle 15:52 , drn5 ha scritto:

Il ReadLine ti legge una riga alla volta, quindi l'estrazione dei vari Field la devi mettere nel ciclo While. Non fuori pensando di estrarre tutti i Field  da una stringa che a While terminato ti restituisce solo l'ultima riga del CSV.

Ciao

Devi perdonare la mia ignoranza! Mi rendo conto che dopo 40 anni di programmazione AWL, ancora sono più le cose che non so di quelle assimilate, figuriamoci VBScript!

Questa è una realizzazione nella quale sono caduto come un baccalà! La mia conoscenza di VBS è praticamente 0! Ho scaricato il manuale e non ho, alla mia età, nessuna voglia di studiarmi le oltre 400 pagine. Cercavo un cuore gentile che mi riscrivesse il ciclo "While" in modo da scrivere i 3 record composti da 4 colonne ciascuno, all'interno di un file csv condiviso e scritto da ERP sui 3 gruppi di variabili indicati nello script. Sarebbe il più bel regalo di Natale che qualcuno possa farmi!

In ogni caso, grazie mille per l'interessamento.

Enzo

Link al commento
Condividi su altri siti

 

Dim Riga


Riga=1

Do While Not f.AtEndOfStream
    
    MyZf = f.ReadLine
    
    field =Split(MyZf,";")
    
    If Riga = 1 Then
        ordineIn1 = field(1)
        dataIn1 = field(2)
        minutiIn1 = field(3)
        kgIn1 = field(4)
    End If
    
    If Riga = 2 Then
        ordineIn2 = field(1)
        dataIn2 = field(2)
        minutiIn2 = field(3)
        kgIn2 = field(4)
    End If
    
    If Riga = 3 Then
        ordineIn3 = field(1)
        dataIn3 = field(2)

        minutiIn3 = field(3)
        kgIn3 = field(4)
    End If
    
    Riga=Riga+1

Loop

 

 

E' brutto lo so (roba da spaghetti code). 

Ma l'ho fatto così per non stravolgerti quello che hai già fatto.

 

Introduci quindi nel tuo Dim la variabile Riga che vai ad incrementare ogni volta che carichi una riga dal file. In base a l numero della riga che hai appena caricato sposti poi i vari campi nelle variabili che hai già definito.

In grassetto quello che devi fare/modificare.

 

Resta sempre aperto quello che dicevo per cui se il file ha più di 3 righe tu ne leggi solo 3, se ne ha meno leggi quelle che ci sono. Se poi mentre leggi cercano di scriverne delle altre o di riscrivere il file ex-novo potrebbero avere dei problemi. Il tuo codice no perchè ho ci hai messo un Error Resume Next...

 

Ciao

 

Modificato: da drn5
Link al commento
Condividi su altri siti

3 ore fa, drn5 ha scritto:

 

Dim Riga


Riga=1

Do While Not f.AtEndOfStream
    
    MyZf = f.ReadLine
    
    field =Split(MyZf,";")
    
    If Riga = 1 Then
        ordineIn1 = field(1)
        dataIn1 = field(2)
        minutiIn1 = field(3)
        kgIn1 = field(4)
    End If
    
    If Riga = 2 Then
        ordineIn2 = field(1)
        dataIn2 = field(2)
        minutiIn2 = field(3)
        kgIn2 = field(4)
    End If
    
    If Riga = 3 Then
        ordineIn3 = field(1)
        dataIn3 = field(2)

        minutiIn3 = field(3)
        kgIn3 = field(4)
    End If
    
    Riga=Riga+1

Loop

 

 

E' brutto lo so (roba da spaghetti code). 

Ma l'ho fatto così per non stravolgerti quello che hai già fatto.

 

Introduci quindi nel tuo Dim la variabile Riga che vai ad incrementare ogni volta che carichi una riga dal file. In base a l numero della riga che hai appena caricato sposti poi i vari campi nelle variabili che hai già definito.

In grassetto quello che devi fare/modificare.

 

Resta sempre aperto quello che dicevo per cui se il file ha più di 3 righe tu ne leggi solo 3, se ne ha meno leggi quelle che ci sono. Se poi mentre leggi cercano di scriverne delle altre o di riscrivere il file ex-novo potrebbero avere dei problemi. Il tuo codice no perchè ho ci hai messo un Error Resume Next...

 

Ciao

 

Grazie mille BABBO NATALE!

Link al commento
Condividi su altri siti

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...