fabolo Inserita: 1 aprile 2008 Segnala Inserita: 1 aprile 2008 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 grazie, se svilupperò qualcosa di decente, vi farò sapere!
Bruno Inserita: 2 aprile 2008 Segnala Inserita: 2 aprile 2008 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 windowsPossibilità di visualizzare i messaggi su finestraPossibilità 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.ciaoP.S.Palettizzatori...... interessante, a me capita tutti i giorni
fabolo Inserita: 7 aprile 2008 Segnala Inserita: 7 aprile 2008 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 . Credo che dovrò fare una cosa simile a quello che hai descritto...ciao
cdc Inserita: 21 maggio 2008 Segnala Inserita: 21 maggio 2008 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
borinid Inserita: 27 maggio 2008 Segnala Inserita: 27 maggio 2008 ciao a tutti,esiste la possibilità di collegarsi ad un S7-300 via CP5611?grazie 1000,D.
Bruno Inserita: 13 giugno 2008 Segnala Inserita: 13 giugno 2008 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 tuttiBR1
cdc Inserita: 16 giugno 2008 Segnala Inserita: 16 giugno 2008 Uso connessione Ethernet.Provo a scaricare il tuo esempio e a fare qualche prova.Grazie
mirko.boggian Inserita: 6 ottobre 2008 Segnala Inserita: 6 ottobre 2008 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..
mirko.boggian Inserita: 6 ottobre 2008 Segnala Inserita: 6 ottobre 2008 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 SubGrazie... 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...
mirko.boggian Inserita: 6 ottobre 2008 Segnala Inserita: 6 ottobre 2008 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! se avete comunque informzioni su libnodave server mi ffro per aiutarvi nello sviluppo debug...grazie
yeskme Inserita: 3 agosto 2009 Segnala Inserita: 3 agosto 2009 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 siain ethernet e in mpi.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora