Vai al contenuto
PLC Forum


Server Libnodave - Client-server dataserver basato su libnodave


leonardi.mair

Messaggi consigliati

Ciao a tutti,

io sto pensando di usare lo starter kit per un progetto reale (un pallettizzatore), cosa intendi, Bruno con:

i problemi che ho trovato erano solo a valle della libreria utilizzandola in windows (l'autore sviluppa in linux) e magari utilizzandola abbinate con le librerie Siemens (attenti alle licenze !!!).

inoltre vorrei sapere se esiste un esempio di logger udp :rolleyes:

grazie, se svilupperò qualcosa di decente, vi farò sapere!

Link al commento
Condividi su altri siti


  • Risposte 85
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Bruno

    28

  • leonardi.mair

    20

  • yahoo52

    19

  • borinid

    7

Io non consiglio di utilizzare il collegamento /S7ONLINE, per quel collegamento devi aver installato librerie Siemens (Devi aver la possibilità di configurare l'interfaccia Siemens) cosa che puoi fare solo se fornisce un software licenziato al cliente finale (utilizzatore).

Io consiglio sempre il collegamento Ethernet, in questo caso ti basta la librerie Libnodave che è rilasciata con licenza LGPL (come i miei esempi che puoi usare liberamente, ti chiedo solo di pubblicare migliorie, documentazione e ti chiedo di impegnarti per un mondo meno inquinato).

Per quanto riguarda il Logger ti server preparare il server, purtroppo quello che uso io è coperto da licenza.... ma ti consiglio questo esempio : http://www.codeproject.com/KB/IP/networkstuff.aspx che inizialmente puoi usare come server.

Quello che ho preparato per i miei clienti è configurato ha le seguenti caratteristiche:

Servizio di windows

Possibilità di visualizzare i messaggi su finestra

Possibilità di memorizzare i messaggi su file di testo (che si cancellano dopo x giorni)

Possibilità di memorizzare messaggi su database (che si cancellano dopo y giorni)

mi spiace, ma non sarebbe corretto pubblicarlo.

ciao

P.S.

Palettizzatori...... interessante, a me capita tutti i giorni ;)

Link al commento
Condividi su altri siti

Grazie per il link,

ho pasticciato un po' per farlo funzionare con il framework 2.0, ma alla fine mi stampa i messaggi nella finestra server e per oggi basta :rolleyes:. Credo che dovrò fare una cosa simile a quello che hai descritto...

ciao ;)

Link al commento
Condividi su altri siti

  • 1 month later...

Ciao a tutti,

ho scaricato ieri l'ultima versione della libreria e ho cominciato a fare un pò di prove.

Io uso VBA di Excel (Office 2003 su Win2000) per scaricare i dati del mio PLC S7-3172DP e sono riuscito a collegarmi al PLC e a leggere sia Merker che byte all'interno delle DB.

Volevo segnalare alcuni problemi:

- Ogni tanto mi capita un errore irreversibile di Excel che mi chiude tutto

- Dopo un po' di tempo che faccio delle prove (diverse connessioni e disconnessioni) non riesco più a collegarmi nemmeno da Step7. L'unico modo è quello di chiudere Excel e di riaprirlo.

Avete avuto anche voi questi problemi?

Esiste della documentazione relativa alle funzioni presenti nella libreria? Ad esempio se voglio sapere la lunghezza o il nome di una DB, esiste una funzione per ottenere queste informazioni? Le funzioni "internalDaveGetBlockInfo" e "daveGetProgramBlock" cosa fanno?

Saluti

Link al commento
Condividi su altri siti

  • 3 weeks later...

Per Cdc:

Che tipo di connessione usi (Seriale, Ethernet, S7ONLINE) ?

Non sono molto pratico sull'utilizzo con il pacchetto office, ti consiglio di scaricare lo starter kit per libnodave che ho messo nella sezione download: troverai alcune differenze nelle funzioni di chiusura connessione.... Bisogna ricordarsi che l'autore della libreria (Thomas) tiene mantenuti i sorgenti della stessa e non è detto che provi tutti gli esempi di utilizzo, considerando anche che sviluppa in linux. Ha fatto un lavoro egregio anche noi dobbiamo adattarci.

Per quanto riguarda la chiusura delle connessioni nell'esempio (anche in VB6 troverai un modulo BAS per interfacciarti alla DLL) troverai alcuni controlli in più e differenze tra le connessioni.

Per Borinid:

Si! ma....

Si la comunicazione funziona, ma con un ma ..... con il sistema operativo windows devi utilizzare la connessione "/S7ONLINE" (daveProtoS7online), quindi come scritto nella documentazione devi avere le librerie Siemens installate (magari funziona sul PC in cui hai S7 manager, ma non su quello della centralinista...).

Quindi massima attenzione alle licenze...

Con il sistema operativo linux non so rispondere, con tale sistema operativo ho usato solamente i collegamenti seriali e ethernet.

Ciao a tutti

BR1

Link al commento
Condividi su altri siti

  • 3 months later...
mirko.boggian

Ciao a tutti.

Da tempo programmo con VB6 e spesso ho avuto la necessità di interfacciarmi con PLC Siemens s7.

Utilizzando le librerie messe a disposizione dalla simens (w95_s7.dll -> prodave) ho creato una dll (eseguibile) che mi permette la lettura ciclica dei dati con una maggiore velocità.

Praticamente dal mio progetto in VB6 creo un oggetto che referenzia all'exe in questione (PLC_s7.exe è il nome che gli ho dato) e questa ogni n ms mi permette d'avere un una matrice i vari valori che mi interessano (praticamente è come se avessi un thread ciclico che legge i valori e che me li metti in una matrice,poi dal mio programma in esecuzione leggo i dati dalla matrice). Ora necessito di una connessione ethernet al PLC e a quanto pare dovrei comprare Softnet dalla Siemens al posto di Prodave in quanto questo non permette connessioni ethernet.

Avendo sentito parlare di libnodave stamattina ho scaricato "libnodave_8_VB.zip di Bruno" e ho pensato di riportarmi nella stessa situazione di avere un "server (dll eseguibile)" che ogni tot tempo mi mettesse i valori letti dal PLC in una matrice.

Creo un nuovo progetto dll/eseguibile in VB6,imposto il progetto per creare il file come server remoto, inserisco il modulo (praticamente copia e incolla del modulo di Bruno), copio libnodave.dll nella directory principale, creo la classe necessaria per l'esecuzione dei metodi dal programma principale:

Option Explicit

Dim node As PLC_AdrType

Public Sub initialize(ByVal ipaddress As String)
    node.sConnessione = "/S7ONLINE"
    node.iRack = 0
    node.iSlot = 2
    node.iConnessione = 122
    node.sPLC_IP = ipaddress
End Sub

Public Function connect() As Integer
On Error GoTo connect_Error
    Dim resInit As Integer
    
    resInit = initHardware(node)
    If (resInit < 0) Then
        connect = resInit
        Exit Function
    End If

    connect = 0
    Exit Function
connect_Error:
    connect = -1
End Function

Public Function disconnect() As Integer
On Error GoTo disconnect_Error
    Dim resClean As Integer
    
    resClean = cleanUp(node)
    If (resClean < 0) Then
        disconnect = resClean
        Exit Function
    End If

    disconnect = 0
    Exit Function
disconnect_Error:
    disconnect = -1
End Function

' Element type
' 1: 8 bit
' 2: 16 bit
' 4: 32 bit
Public Sub readDBInt(dbNumber As Long, dbAddress As Integer, dbElements As Integer)
    Dim aiVettorePLC() As Integer
    ' Leggo da PLC
    ReDim aiVettorePLC(0 To dbElements - 1)
    Call ReadDB_PLC(node, dbNumber, dbAddress, dbElements, 2, aiVettorePLC)
End Sub
Dal programma principale:
Dim s7 As New SiemensS7

Public sub test()
    s7.Initialize ("192.168.2.11")
    ret = s7.Connect
    s7.readDBInt 10, 0, 1
    ret = s7.disconnect
end sub
Così facendo (ovviamente non sono andato avanti, fatto così non mi ritorna nulla nel programma principale,ma mi aspetterei che aiVettorePLC contesse i valori!) mi viene restituito un errore da VB e spulciando il codice con dei log su file nella dll creata mi sono accorto che a non funzionare (o ad essere chiamata in modo erroneo) è la daveReadBytes. Riporto la function ReadDB_PLC di bruno nel punto di mio interesse (e dove avviene l'errore):
            ' Leggo da PLC
            toLog ("Leggo da PLC: ")
            toLog ("PLC.dConn: " & CStr(PLC.dConn))
            toLog ("daveDB: " & CStr(daveDB))
            toLog ("NumDB: " & CStr(NumDB))
            toLog ("StartAdr + iOffset: " & CStr(StartAdr + iOffset))
            toLog ("iByteToRead: " & CStr(iByteToRead))
            
            PLC.retval = daveReadBytes(PLC.dConn, daveDB, NumDB, StartAdr + iOffset, iByteToRead, 0)
            
            toLog ("Qua non ci arriva....")

L'errore di runtime '-2147417851 (80010105): Metodo 'readDBInt' dell'oggetto '_SiemensS7' non riuscito!

Pensavo che tutto fosse dato da problemi nel passare la variabile node come riferimento... ma è anche l'unico modo per passare strutture proprie in VB6.

Spero di essere stato chiaro...

Per curiosità a cosa vi riferite parlando di libnodave server? ad una cosa di questo tipo? c'è qualcosa di scaricabile? grazie..

Link al commento
Condividi su altri siti

mirko.boggian

se può esservi utile nel capire il perchè non funzioni (sono sempre più convinto che sia un mio errore...) vi dico che il codice di Bruno mi funziona alla perfezione me che se creo un progetto exe normale, importo il modulo di bruno, copio e incollo la libnodave.dll nella directory principale e utilizzo una forma con una label e un button per forzare la lettura mi viene visualizzato un errore irreversibile di VB6 e m ichiude tutto... posto il codice, spero voi ci capiate...

Option Explicit

Dim node As PLC_AdrType

Public Sub initialize(ByVal ipaddress As String)
    node.sConnessione = "/S7ONLINE"
    node.iRack = 0
    node.iSlot = 2
    node.iConnessione = 122
    node.sPLC_IP = ipaddress
End Sub

Public Function connect() As Integer
On Error GoTo connect_Error
    Dim resInit As Integer
    
    resInit = initHardware(node)
    If (resInit < 0) Then
        connect = resInit
        Exit Function
    End If

    connect = 0
    Exit Function
connect_Error:
    connect = -1
End Function

Public Function disconnect() As Integer
On Error GoTo disconnect_Error
    Dim resClean As Integer
    
    resClean = cleanUp(node)
    If (resClean < 0) Then
        disconnect = resClean
        Exit Function
    End If

    disconnect = 0
    Exit Function
disconnect_Error:
    disconnect = -1
End Function

' Element type
' 1: 8 bit
' 2: 16 bit
' 4: 32 bit
Public Sub readDBInt(dbNumber As Long, dbAddress As Integer, dbElements As Integer)
    Dim aiVettorePLC() As Integer
    ' Leggo da PLC
    ReDim aiVettorePLC(dbElements)
    Call ReadDB_PLC(node, dbNumber, dbAddress, dbElements, 2, aiVettorePLC)
End Sub

Private Sub Command1_Click()
     Dim aiVettorePLC() As Integer
     Dim lNumDB As Long
     Dim iStartAdr As Integer
     Dim iNumElem As Integer
     Dim i As Integer
     Dim sTmp As String
    
    ' estraggo indirizzo IP da form
    initialize ("192.168.2.11")

    ' Estraggo numero DB
    lNumDB = 10
    iStartAdr = 0
    iNumElem = 1
    
    ' Leggo da PLC
    ReDim aiVettorePLC(0 To iNumElem - 1)
    Call ReadDB_PLC(node, lNumDB, iStartAdr, iNumElem, 2, aiVettorePLC)
    If (node.retval = 0) Then
        For i = 0 To iNumElem - 1
            sTmp = "DB" & lNumDB & ".DW" & iStartAdr + i * 2 & " = " & aiVettorePLC(i)
            Debug.Print sTmp
        Next i
        Label1.Caption = "Lettura DB INT - OK" & " in " & node.lUsedTime & " msec"
    Else
        Label1.Caption = "Lettura DB INT - Errore num " & node.retval & " - " & node.sMessaggio
    End If

End Sub

Private Sub Form_Load()
    initialize ("192.168.2.11")
    Label1.Caption = connect
End Sub

Grazie... c'è sicuro un errore ma non capisco dove... ah si, controllando i vari valori delle variabili prima della chiamata di daveReadBytes nel codice di Bruno ho un valore di PLC_node.dConn=4033696 mentre nel mio è = 0!! ma mi sembra di procere nel modo corretto con le chiamate...

Link al commento
Condividi su altri siti

mirko.boggian

vado avanti con il monologo... ma grazie rileggendo ciò che ho postato ho avuto l'illuminazione... mi sono dimenticato di fare initPlcConn(node).

No comment. Eì lunedì ma sono a pezzi lo stessi! :D

se avete comunque informzioni su libnodave server mi ffro per aiutarvi nello sviluppo debug...

grazie

Link al commento
Condividi su altri siti

  • 9 months later...

Ciao Bruno,

sono ritornato con altro nome (dimentico continuamente la password e il sito non me la spedisce in base al nome),

Yahoo52, Whistle... ora sono yeskme !

Ho visto che hai pubblicato le modifiche, sono curioso di provarle. Hai provato la versione 8.4.5 ?

Ho confrontato il codice con la versione 8.4 ed ho trovate molti aggiustamenti a bachi di accesso sia

in ethernet e in mpi.

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