Vai al contenuto
PLC Forum


Libnodave - Protocollo SIMATIC 155


EFFETTOMAURO

Messaggi consigliati

Salva a tutti, sono un nuovo iscritto e trovo questo sito molto interessante, ho pensato di esporre un quesito che mi assilla da molti giorni e non vi nascondo anche con qualche notte insonne per risolvere il seguente problema:

Utilizzo come molti di voi la libreria free LIBNODAVE per collegarmi con un PC e VB ad un qualsiasi PLC della serie SIEMENS sia S5 che S7, bene ora ho la necessità di collegarmi ad un PLC SIMATIC 155U per leggere e scrivere delle DB ma il collegamento non funziona sfornando continui errori -14, ho provato e riprovato ma nulla di fatto, utilizzo i seguenti parametri di conessione:

RS232 TTY AS511, Porta Comx, 9600 Baud, Parita E. Funziona con tutti i PLC della serie S5 meno che con questo Perchè?

Chiedo a tutti di aiutarmi per risolvere questo dilemma.

Link al commento
Condividi su altri siti


Ciao

Post molto interessante, io pensavo che il protocollo del 155 fosse uguale agli altri (anche se la gestione dei dati su DB è leggermente diversa).

Premetto che non ho un 155 per fare delle prove, ma ti chiedo lo stesso un paio di precisazioni:

1) errore -14 ? Fai riferimento agli errori della libreria ? Non ho trovato tale errore in LibNoDave....

2) L'esempio per S5 presente nella libreria (testAS511) dove va in errore ? che messaggi ti da ?

3) Quale è il punto in cui va in errore ? (daveNewInterface, daveInitAdapter, daveNewConnection, daveConnectPLC o operazioni di lettura/scrittura) ?

un altro consiglio: contatta l'autore (Thomas) attraverso il forum su sourceforge, è una persona molto disponibile e chiaramente preparata sul prodotto.

(ogni tanto legge anche questo forum).

Quando scopri faccelo sapere !

Interessa molto (almeno a me interessa molto).

Ciao

BR1

Link al commento
Condividi su altri siti

RS232 TTY AS511, Porta Comx, 9600 Baud, Parita E. Funziona con tutti i PLC della serie S5 meno che con questo Perchè?
Dunque, mi ricordo di avere avuto dei problemi simili, lavorando coll' AS511 (non Libnodave) direttamente.. su qualcuna CPU appartire della 944..

Infatti, le CPU 945/946/ 948 forse presentano delle propieta' un po particolari con respetto alle altre.. non mi ricordo se si trattava di un discorso di piedinatura HW o se era qualcosa nella parametrizzazione della COM oppure nella intestazione dei telegrammi di communicazione.

Link al commento
Condividi su altri siti

Dal momento che qualcuno mi abbia risposto già mi riempie di immensa speranza !.

Spesso parlando con altre persone si mettono insieme esperienze che spesso

portano alla soluzione.....

Avrò la possibilità di eseguire ulteriori test fra un paio di giorni cerchero di eseguire un debug punto

per punto per vedere su quale routine si genera l'errore, sarò qui con le dovute risposte prestissimo.

Per il momento grazie dell'interessamento.

Link al commento
Condividi su altri siti

Salve, eccomi qui a far luce su questo problemone "ancora non risolto" .

Ho avuto modo di realizzare due test :

1) utilizzando la libreria LIBNODAVE con un programma che ho scritto io in visual basic .

2) un test con l'esempio scritto sempre in vb scaricato nella sessione Download di questo sito.

Il risultato del primo:

Parametri utilizzati S5 TTY 9600 Baud Parita E

Debug routine per routine:

PH = SetPort(Port,baud$..........

PH = 424

DI = davenewinterface(Ph,.....

DI = 24643288

RES = Daveinitadapter(DI)

RES = 0

DC = Davenewconnection(di.......

DC = 24649792

RES = DaveConnectplc(Dc)

RES = -14 < Errore

Il risultato del secondo:

Parametri utilizzati S5 TTY 9600 Baud Parita E

Debug routine per routine:

-> Connessione al plc attraverso il pulsante "connetti"

Genera: OK

-> Read DB ->

Genera allarme: Lettura DB int Errore -64

-> Read M ->

Genera allarme: Lettura merker int Errore -14

-> Lettura SZL

Genera allarme: Provoca errore irreversibile ed esce dall'applicazione

L'errore si genera all'interno del programma sulla routine

-> function readdb_plc(............

-> PLC.RETVAL = DavereadByte(plc........

Comunque il problema risiede sull'indirizzamento che risulta essere al contrario rispetto al

resto della serie S5.

Ho raccolto anche il vostro consiglio nell'esporre la problematica a Thomas, ma per ora

non ho avuto risposta.

Spero di aver chiarito la situazione "che è tragica!", vi ringrazio ancora se se vogliamo

ancora eseguire delle prove e fugare dubbi fatemi sapere, vi ringrazio fin d'ora.

Link al commento
Condividi su altri siti

Init:

9600   EVEN    stop(2)  Word size(8)
-------------------------------------
111     11        1          11

-> Read DB ->

Genera allarme: Lettura DB int Errore -64

Prima del AG_Read, bisogna ricavare l'indirizzo del DB con AG_Info .. <_<
Comunque il problema risiede sull'indirizzamento che risulta essere al contrario rispetto al

resto della serie S5.

:unsure: Modificato: da Savino
Link al commento
Condividi su altri siti

Aluni punti:

1) Io per esperienza quando utilizzo le connessioni seriali con LibNoDave dopo il DaveNewInterface() e prima del DaveInitAdapter()

setto un timeout maggiore (come letto nelle note di Thomas) con Call daveSetTimeout(PLC.dInterf, 500000)...

2) Quanti byte leggi ? Oltre 240 ? (ti prego rispondi di si che è un errore)

3) Hai provato l'esempio presente nella libreria (testAS511.exe) ? Visualizza un sacco di debug e ti potrebbe aiutare.

Purtroppo non ho un PLC per provare...

BR1

Link al commento
Condividi su altri siti

Per rispondere a Dago:

Penso che un computer lento o veloce rispetti comunque le velocità del protocollo seriale e quindi non credo che sia li il punto, comunque utilizzo computer adatti allo scopo, Pentium 4 con XP, ripeto comunque che riesco tranquillamente a collegarmi sulla porta di tutta la serie di plc sia S5 che S7 anche con protocolli diversi dalla seriale, il problema risiede solo sul SIMATIC 155.

Per rispondere a Bruno:

1) Si effettivamente solo collegandomi sulla serie S5 è stato necessario attivare il timeout cosi come consigliato nel driver (libnodave) riga

che normalmente è remmata.

2) Per numero di byte (DW) ho provato chiaramente a leggere da una sola DW a tutto il " cucuzzaro -) " ma l'errore è sempre li in guardia !

3) L'esempio testas511.exe risponde sempre con il solito errore.

Oggi ho avuto modo di contattare una software house di mia conoscenza dove ho esposto il mio problema, disposto anche ad acquistare presso di loro e un driver funzionante questa è stata la risposta:

Si noi abbiamo creato il software di connessione per il 155 ma con 1000 problemi perchè l'indirizzamento delle delle tabelle/merker è diversa rispetto alla serie dei fratelli S5 (AL CONTRARIO!)

La siemens poi è molto restia a dare suggerimenti quindi abbiamo raggiunto il risultato con molto fatica, ora il problema è questo stiamo parlando di un driver costruito nel 1995 !, le persone che lo hanno realizzato non lavorano più con noi e anche trovandolo non abbiamo un PLc di questa serie per eseguire delle prove di funzionalità per garantire il prodotto.

Quindi non è per noi un prodotto fornibile.

Questa è stata la risposta della software house che però mi ha proposto un'alternativa, dal momento che il problema è di leggere e scrivere delle DB e non ho la necessità di indirizzarmi sulle porte di ingresso e uscita, possono fornirmi un collegamento sempre in seriale ma sulla porta 524 (seriale) dell'Ag.

In questo caso la cosa è fattibile dal momento che il protocollo è ancora "vivo" anzi adirittura esistono dei convertitori software per adattarlo alla serie S7.

Penso di aver fatto chiarezza sul perchè non si riesce a collegarsi attraverso la libreria LIBNODAVE al 155.

Quindi ora i casi sono due, esiste una parametrizzazione della libnodave che prevede il protocollo 155 ? Qui magari ci può rispondere il Sig Thomas ? Oppure uno di voi che ha avuto esperienza ?

O ancora come suggerisce la software house andare sulla 524 (seriale) e comunque va scritto un po di software sia sull'ag che sul PC !

Ma anche qui chi ha esperienza in questo ?

Voi che cosa ne pensate ? Mi devo buttare al fiume ? -)

MM

Link al commento
Condividi su altri siti

La libreria LibNoDave per il collegamento seriale diretto sulla CPU della serie S5 si basa sul protocollo AS511,

questo protocollo non è molto difficile e in rete si riesce a trovare qualcosina.

Se ben ricordo Dago aveva messo a disposizione un esempio in VB6 proprio su PLC Forum.

Io in passato l'avevo usato (prima di conoscere le DLL di libnodave), se ti interessa questo è il mio modulo modProtocol_S5, per

quanto riguarda il codice è stato testato su S5-115 e S5-95.

A questo punto probabilmente non funziona su S5-155, ma con un poco di debug magari trovi le differenze e risolvi il tuo problema

immediato (così non devi inserire codice su PLC e nemmeno schede).

Ultimo passo una volta fatto tutto ci illumini anche noi ! :D

BR1

Istruzioni per utilizzo modulo, per richiamare le funzioni questo può essere un esempio:

Global BufferRead(0 To 1025) As Integer

Dim Start As Integer
Dim AreaSize As Integer
Dim AreaNum As Long
Dim Result As Long
Dim iMyLow As Integer
Dim iMyhigh As Integer


    ' Inizializzzo la porta seriale verso il PLC S5
    res = modProtocol_S5.ApriPorta(frmMain.PlcPort)    ' frmMain.PlcPort è un oggetto ComPort
    If (res = 0) Then
		' Porta seriale aperta OK
        ' Controllo collegamento con il PLC
        res = modProtocol_S5.check_ag(frmMain.PlcPort)
        If (res = 0) Then
            ' Connessione avvenuta ok
        Else
            ' Connessione Fallita
        End If
    Else
        ' Apertura seriale fallita
    End If


    ' Leggo DB1 da Word 0 per 10 word
    AreaNum = 1
    Result = modProtocol_S5.ag_block_info(frmMain.PlcPort, AreaNum, iMyLow, iMyhigh)
    If Result = 0 Then
        ' Leggo area sul PLC
        AreaSize = 10
        Start = 0
        Result = modProtocol_S5.ag_read(frmMain.PlcPort, BufferRead(), iMyLow, iMyhigh, AreaSize, Start)
        If Result = 0 Then
			' Puoi leggere i dati
		End If
	End If

Link al commento
Condividi su altri siti

Penso che un computer lento o veloce rispetti comunque le velocità del protocollo seriale e quindi non credo che sia li il punto,
beh, non sarei cosi sicuro..

La sincronizzazione del pooling che e' fondamentale, sovratutto coll'AS511 , la stabilisci te, a secondo l'HW a disposizione e il tool di programmazione utilizzato.

Secondo il mio modesto punto di vista ed esperienza con AS511, provarei con un MSDOS o Win95/98 e un C++ e ASM...

Allora si farai un bel debug, e magari capirai dove si blocca il telegramma, andando passo a passo, monitorando il registro di stato della linea. Ricordati che l'AS511 e' una interfaccia super sincronizzata, quindi basta niente per andare in errore.

Link al commento
Condividi su altri siti

Confermo quello detto da Savino sulle problematiche delle tempistiche,

aggiungo anche (mi ero dimenticato prima) che nel modulo che ho postato è impostata una variabile

chiamata gnRitFinePacchetto (normalmente impostata tra 30 e 40) rappresenta i millisecondi per definire

la fine del pacchetto in ricezione.

Tornando a libnodave, considera che è nato per linux e il porting su windows in caso ethernet è abbastanza trasparente mentre

per il caso seriale vi sono alcune differenze.... quanda caso proprio nell'apertura della com.

Ti consiglio di fare una provettina scrivendo il codice e debuggandolo (voce del verbo debuggare :D ) guardando quello che ricevi sulla seriale,

non ti preoccupare che ci riesci !

Ciao

BR1

Link al commento
Condividi su altri siti

La siemens poi è molto restia a dare suggerimenti..
Non penso la Siemens darebbe informazione riguardo all' AS511( nonostante la fuga d'info allora avuta) o altra interfaccia simile tipo MPI/Profibus.. personalmente Io non avrei ne anche chiesto..
Quindi ora i casi sono due, esiste una parametrizzazione della libnodave che prevede il protocollo 155
Scusa, quale e' la CPU in questione ?
Tornando a libnodave, considera che è nato per linux e il porting su windows in caso ethernet è abbastanza trasparente mentre

per il caso seriale vi sono alcune differenze.... quanda caso proprio nell'apertura della com

Sono d'accordo..
guardando quello che ricevi sulla seriale,..
Infatti... controllando il registro dello stato della linea, e analizzando il codice del byte arrivato nel registro di ricezione del UART, quindi filtrando gli eventuali errori di linea (sovrascrittura, time out, etc) di quelli del protocollo stesso ( STX, DLE, ACK, NAK..etc)..ma ripeto, fai attenzione alla tempistica dei telegrammi. Modificato: da Savino
Link al commento
Condividi su altri siti

Salve,eccomi qui ho letto tutti i vostri consigli, quindi procedo con il debbugare, ho scaricato il file di dago, nel frattempo sono riuscito a scaricare anche un bel programmino per il protocollo AS511 da "tiscali !" è scritto totalmente in vb e devo dire anche molto bene, con una dovizia di commenti straordinaria, scrive e legge dw dl dr ingressi e uscite anche con una buona velocità, ma indovinate ? Appena lo collego al 155(cpu 948) và in errore ! L'errore in questo caso si verifica alla richieste info della cpu.

Il problema ora è questo che non ho la possibilità di collegarmi al plc "quando voglio" perchè il rischio di mandarlo in stop incasinando qualche vettore è alto ed il PLC è in piena produzione, ecco perchè tra un test e l'altro devo aspettare il momento propizio. Comunque dei casi lavorando lavorando spulciando spulciando ho trovato :

1) il protocollo per as511 originale della simens "che però non fa riferimento a sto 155 ! "

2) Un programma scritto in vbdos in chiaro, non molto commentato che legge solamente le DB del 155 !!!!!!!! Quindi scritto solamente per 155

sono uscite le routine open.com.155 read.155 !!!!! è indovinate ? Funziona benissimo, problema risolto ? Noooooooooooooo Perchè

può soltanto leggere e non scrivere.

Pero !!! Ora possiamo iniziare a debbugare almeno in lettura quello funzionante per 155 e quello non funzionante per AS511 vedere dove sono le

differenze e capire dove agire per modificare quello per as511 in scrittura, quello che mi "frena" per ora è il tempo che ho a disposizione come

dicevo prima per eseguire le prove, vado avanti, vi farò sapere qui è una questione che lo vogliamo far funzionare "sto coso !" ,a presto.

Link al commento
Condividi su altri siti

Scusa, Dago il download del file modProtocol_S5.zip non va bene il file è corrotto e non si apre, per favore controllalo e caso mai riproviamo il download.

bye bye.

Link al commento
Condividi su altri siti

No, non ancora (ci manca poco) ma sto morendo dalla mancanza del letto!.

Il drive mi occorre e quindi ci sto lavorando sodo! Mi sembra che la cosa si

possa risolvere solo rimboccandomi le maniche e lavorarci io.

Quindi sto traducendo il file che ho trovato funzionante (solo lettura) per vbdos in vb6

anche qui le cose non sono andate subito per verso giusto dal momento che occorrono le

routine std cvi e mkr che sono integrate in vbdos e non implementate in vb6.

Quindi ho trovato una soluzione con una libreria della microsoft che le implementa anche

per vb6. E' chiaro che per ottenere i risultati occorrono ore ed ore di lavoro e dubug......

Appena ho dei risultati sarà mi cura comunicarveli, intanto se trovate qualche dritta anche

voi fatemi sapere. La Siemens non fornisce più il vecchio driver ProDave pe S5, quindi

NEMMENO A PAGALLO ! Si riesce a trare un rimmedio !

Link al commento
Condividi su altri siti

E' chiaro che per ottenere i risultati occorrono ore ed ore di lavoro e dubug......
Si' ma dovresti utilizzare un linguaggio a basso livello piuttosto e come ti avevo gia' accennato prima, un MSDOS oppure un Win95/98.. dopo la inizializzazione, se lo stato della linea e' OK, inviare un STX (0x02) e aspettare per un DLE (0x10) e ACK (0x06)... se questo avviene , gia sarebbe un grande passo... poi vai incrementando il codice passo a passo inviando i codici giusti e predisponendo la recezione per i caratteri, a secondo il telegramma.. non ti dimenticare che l'AG, un byte di data col valore 0x10 te lo inviara 2 volte..e viceverza, se invii un 0x10 di dati, dovresti inviarlo 2 volte, altrimenti lei pensa che le stai inviando un DLE.

Con dei linguaggi ad alto livello rischi di non capire dove sarebbe l'inghippo...dovresti seguire il telegramma AS511 alla lettera e capire dove sarebbe questa differenza per questa CPU, quale sarebbe il codice inviato che lei non riconoscerebbe oppure quale sarebbe l'inaspettato codice arrivato.

Modificato: da Savino
Link al commento
Condividi su altri siti

Sicuro che con il 135 e 150 funziona ?

Che convertitore utilizzi ?

Per le serie 135,150 e 155 a differenza delle altre minori, è necessario un convertitore di tipo attivo.

Forse ti manca un po' di corrente ?

Link al commento
Condividi su altri siti

  • 3 weeks later...

Salve, utilizzo il convertitore orignale della Siemens, cioè quello che mi collega normalmente tra pc e porta AG.

Comunque non sono morto..... Ho seguito anche il consiglio di savino lavorando a basso livello e sto avendo dei

risultati, ma sempre moderati dal fatto che ho poco tempo a disposizione per le prove, 3/4 ore il Sabato ad impianto

fermo, e voi sapete che non sono cosette da nulla, spesso quando ci rimetto le mani devo capire dove ero arrivato

l'ultima volta. Ma comunque non i è mai successo che non sono riuscito a fare qualcosa ! Prima o poi il risultato deve

uscire fuori è solo questione di tempo, ho trovato anche il manuale del 155 cpu giusta con il protocollo originale

della siemens, certo non ècosa semplice.......

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