zak69pinz Inserita: 1 luglio 2004 Autore Segnala Share Inserita: 1 luglio 2004 quanti moduli di espansione I/O (num. max) posso collegare ad una CPU224 siemens?esistono moduli misti analogico digitale?ringrazio anticipatamente chi mi può dare una rispostagrazie mille. Link al commento Condividi su altri siti More sharing options...
zak69pinz Inserito: 1 luglio 2004 Segnala Share Inserito: 1 luglio 2004 quanti moduli di espansione I/O (num. max) posso collegare ad una CPU224 siemens?esistono moduli misti analogico digitale?ringrazio anticipatamente chi mi può dare una rispostagrazie mille. Link al commento Condividi su altri siti More sharing options...
paulus Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 Si possono mettere al max 7 moduli aggiuntivi su una CPU 224. Bisogna pero' tener conto della capacita' di indirizzamento (256 pti I/O digitali, 32 AI e 32 AO) e della corrente a 5V erogata per alimentare i moduli di ampliamento che e' di 660 mA (bisogns calcolare la corrente assorbita dai vari moduli).Non esistono moduli misti con digitali e analogiche.CiaoPaulus Link al commento Condividi su altri siti More sharing options...
paulus Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 Si possono mettere al max 7 moduli aggiuntivi su una CPU 224. Bisogna pero' tener conto della capacita' di indirizzamento (256 pti I/O digitali, 32 AI e 32 AO) e della corrente a 5V erogata per alimentare i moduli di ampliamento che e' di 660 mA (bisogns calcolare la corrente assorbita dai vari moduli).Non esistono moduli misti con digitali e analogiche.CiaoPaulus Link al commento Condividi su altri siti More sharing options...
SILVIETTO Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 ciao zak69pinz.con la cpu 224 siemens è possibile collegare 7 moduli massimo di ampliamento digitale o analogicoesistono moduli di ampliamento digtale misti em223 4di+4do, 8di+8do, 16di+16do ,esiste un modulo ampliamento analogico misto em235 4ai+1a0, però moduli misti digitali+analocici da "catalogo" non mi risultaspero di esserti stato utileciao da silvietto Link al commento Condividi su altri siti More sharing options...
SILVIETTO Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 ciao zak69pinz.con la cpu 224 siemens è possibile collegare 7 moduli massimo di ampliamento digitale o analogicoesistono moduli di ampliamento digtale misti em223 4di+4do, 8di+8do, 16di+16do ,esiste un modulo ampliamento analogico misto em235 4ai+1a0, però moduli misti digitali+analocici da "catalogo" non mi risultaspero di esserti stato utileciao da silvietto Link al commento Condividi su altri siti More sharing options...
zak69pinz Inserita: 1 luglio 2004 Autore Segnala Share Inserita: 1 luglio 2004 Ringrazio per il vostro prezioso aiutograzie mille Link al commento Condividi su altri siti More sharing options...
zak69pinz Inserita: 1 luglio 2004 Autore Segnala Share Inserita: 1 luglio 2004 Ringrazio per il vostro prezioso aiutograzie mille Link al commento Condividi su altri siti More sharing options...
MaXy Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 sul sito siemens ci sono tutti i device che cerchi.ciao Link al commento Condividi su altri siti More sharing options...
MaXy Inserita: 1 luglio 2004 Segnala Share Inserita: 1 luglio 2004 sul sito siemens ci sono tutti i device che cerchi.ciao Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Ciao a tutti, cerco un pò di aiuto in un thread ormai consumato per capire se l'utilizzo che faccio della Libnodave è corretto.Premessa:- ho scaricato lo starter kit di Br1 (ancora grazie!).Ho costruito due semplici servizi Windows (C#) che iterano su un numero finito di PLC Siemens S7300.Le operazioni, in Ethernet, che vengono eseguite sono le seguenti:- connessione al Plc;- inizializzo un bit di una DB prestabilita che utilizzo come semaforo di passaggio;- leggo i dati;- scrivo in un database i dati raccolti;- riscrivo nuovamente il bit del primo punto.- disconnesione dal Plc.I due servizi lavorano a intervalli di 5 minuti uno e 20 secondi l'altro.Le applicazioni funzionano correttamente ma ho l'impressione che non riesco a trasformare in certezza perchè fattori esterni al software mi impediscono di fare un'analisi definitiva che ad un certo punto la raccolta dati vada in "sofferenza" magari dovuta ad una saturazione della rete.Qualcuno avrebbe voglia di guardare, anche pubblicamente, senza ridere qualche decina di righe di codice per capire se l'utilizzo che faccio della Libnodave è scorretto o varace nei confronti delle risorse?Grazie,Francesco Aperti Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Ciao a tutti, cerco un pò di aiuto in un thread ormai consumato per capire se l'utilizzo che faccio della Libnodave è corretto.Premessa:- ho scaricato lo starter kit di Br1 (ancora grazie!).Ho costruito due semplici servizi Windows (C#) che iterano su un numero finito di PLC Siemens S7300.Le operazioni, in Ethernet, che vengono eseguite sono le seguenti:- connessione al Plc;- inizializzo un bit di una DB prestabilita che utilizzo come semaforo di passaggio;- leggo i dati;- scrivo in un database i dati raccolti;- riscrivo nuovamente il bit del primo punto.- disconnesione dal Plc.I due servizi lavorano a intervalli di 5 minuti uno e 20 secondi l'altro.Le applicazioni funzionano correttamente ma ho l'impressione che non riesco a trasformare in certezza perchè fattori esterni al software mi impediscono di fare un'analisi definitiva che ad un certo punto la raccolta dati vada in "sofferenza" magari dovuta ad una saturazione della rete.Qualcuno avrebbe voglia di guardare, anche pubblicamente, senza ridere qualche decina di righe di codice per capire se l'utilizzo che faccio della Libnodave è scorretto o varace nei confronti delle risorse?Grazie,Francesco Aperti Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Io sinceramente non ho molto capito quello che hai fatto se puoi spiegare meglio grazie Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Io sinceramente non ho molto capito quello che hai fatto se puoi spiegare meglio grazie Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Ciao Gianmario, volevo sapere se qualcuno ha voglia di dare un'occhiata a qualche riga di codice C# dove ciclicamente scrivo e leggo da alcuni PLC.Cosa che funziona apparentemente senza problemi nel breve intervallo mentre sembra diventare piuttosto pesante nell'arco di alcune giornate.Il codice non l'ho messo perchè non volevo sembrare troppo noioso e invadente, ovviamente è sempre disponibile.Grazie,Francesco Aperti Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 5 novembre 2008 Segnala Share Inserita: 5 novembre 2008 Ciao Gianmario, volevo sapere se qualcuno ha voglia di dare un'occhiata a qualche riga di codice C# dove ciclicamente scrivo e leggo da alcuni PLC.Cosa che funziona apparentemente senza problemi nel breve intervallo mentre sembra diventare piuttosto pesante nell'arco di alcune giornate.Il codice non l'ho messo perchè non volevo sembrare troppo noioso e invadente, ovviamente è sempre disponibile.Grazie,Francesco Aperti Link al commento Condividi su altri siti More sharing options...
varg Inserita: 10 novembre 2008 Segnala Share Inserita: 10 novembre 2008 prova a postare che ci diamo un occhio... Link al commento Condividi su altri siti More sharing options...
varg Inserita: 10 novembre 2008 Segnala Share Inserita: 10 novembre 2008 prova a postare che ci diamo un occhio... Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Grazie varg, ecco qua. Mi raccomando gli insulti in privato! Saluti,Francesco Aperti private void TimerHandler ( object sender, System.Timers.ElapsedEventArgs e ) { DCTemperature db = new DCTemperature (); var dispositivi = from d in db.DBDispositivis where d.temperature == true select d; foreach ( DBDispositivi dispositivo in dispositivi ) { ProgrammaImpostato = SetPoint = Temperatura = 0; ZoneTemperature = dispositivo.zone_temperature; MainConn daveconn = new MainConn (); daveconn.sPLC_IP = dispositivo.ip_address; daveconn.iProtoNum = EmpTypeProto.daveProtoISOTCP; daveconn.iMPI = 10; daveconn.iRack = 0; daveconn.iSlot = 2; try { mLibNoDaveServer = new LibNoDaveServer( daveconn ); if ( mLibNoDaveServer.bConnectionOK ) { mLibNoDaveServer.NumPLC = 1; #region inizializzo a 0 bit di semaforo byte[] byte_sem_zero = new byte[4] { 0 , 0 , 0 , 0 }; Byte[] myValuesSem = new Byte[16]; myValuesSem[0] = System.Convert.ToByte( 1 ); myValuesSem[1] = System.Convert.ToByte( 'W' ); myValuesSem[2] = System.Convert.ToByte( 1 ); myValuesSem[3] = System.Convert.ToByte( 1 ); myValuesSem[4] = System.Convert.ToByte( 'D' ); myValuesSem[5] = System.Convert.ToByte( 1 ); myValuesSem[6] = System.Convert.ToByte( 18 / 256 ); myValuesSem[7] = System.Convert.ToByte( 18 % 256 ); myValuesSem[8] = System.Convert.ToByte( 0 / 256 ); myValuesSem[9] = System.Convert.ToByte( 0 % 256 ); myValuesSem[10] = System.Convert.ToByte( 4 / 256 ); myValuesSem[11] = System.Convert.ToByte( 4 % 256 ); for ( int i = 0 ; i < byte_sem_zero.Length ; i++ ) myValuesSem[12 + i] = System.Convert.ToByte( byte_sem_zero[i] ); try { byte[] myResultOffSem = RichiestePLC.ProcessMessage( myValuesSem , mLibNoDaveServer ); } catch ( Exception err ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion // resto fermo per mezzo secondo prima di leggere le zone di temperatura Thread.Sleep( 500 ); #region Converto in array di byte la stringa Byte[] request = new Byte[12]; request[0] = System.Convert.ToByte( 1 ); request[1] = System.Convert.ToByte( 'R' ); request[2] = System.Convert.ToByte( 1 ); request[3] = System.Convert.ToByte( 1 ); request[4] = System.Convert.ToByte( 'D' ); request[5] = System.Convert.ToByte( 1 ); request[6] = System.Convert.ToByte( 18 / 256 ); //elencoDB request[7] = System.Convert.ToByte( 18 % 256 ); //elencoDB request[8] = System.Convert.ToByte( 0 / 256 ); //areaDataStart request[9] = System.Convert.ToByte( 0 % 256 ); //areaDataStart request[10] = System.Convert.ToByte( 160 / 256 ); //areaDataLen request[11] = System.Convert.ToByte( 160 % 256 ); //areaDataLen #endregion #region Processo messaggio byte[] response = null; try { response = RichiestePLC.ProcessMessage( request , mLibNoDaveServer ); } catch ( Exception err ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion #region Parsing della risposta byte[] tempValue = new byte[4]; byte[] myReturn = new byte[response.Length - 14]; Array.Copy( response , 14 , myReturn , 0 , myReturn.Length ); Array.Copy( myReturn , 8 , tempValue , 0 , tempValue.Length ); // inserisco i dati in un database - ometto questo codice #endregion #region inizializzo a 1 bit di semaforo try { byte_sem_zero = new byte[4] { 1 , 0 , 0 , 0 }; for ( int i = 0 ; i < byte_sem_zero.Length ; i++ ) myValuesSem[12 + i] = System.Convert.ToByte( byte_sem_zero[i] ); byte[] myResultOnSem = RichiestePLC.ProcessMessage( myValuesSem , mLibNoDaveServer ); } catch ( Exception ex ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion } } catch ( Exception ex ) { } finally { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer.bConnectionOK = false; mLibNoDaveServer = null; } } if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer.bConnectionOK = false; mLibNoDaveServer = null; } } Link al commento Condividi su altri siti More sharing options...
faperti Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Grazie varg, ecco qua. Mi raccomando gli insulti in privato! Saluti,Francesco Aperti private void TimerHandler ( object sender, System.Timers.ElapsedEventArgs e ) { DCTemperature db = new DCTemperature (); var dispositivi = from d in db.DBDispositivis where d.temperature == true select d; foreach ( DBDispositivi dispositivo in dispositivi ) { ProgrammaImpostato = SetPoint = Temperatura = 0; ZoneTemperature = dispositivo.zone_temperature; MainConn daveconn = new MainConn (); daveconn.sPLC_IP = dispositivo.ip_address; daveconn.iProtoNum = EmpTypeProto.daveProtoISOTCP; daveconn.iMPI = 10; daveconn.iRack = 0; daveconn.iSlot = 2; try { mLibNoDaveServer = new LibNoDaveServer( daveconn ); if ( mLibNoDaveServer.bConnectionOK ) { mLibNoDaveServer.NumPLC = 1; #region inizializzo a 0 bit di semaforo byte[] byte_sem_zero = new byte[4] { 0 , 0 , 0 , 0 }; Byte[] myValuesSem = new Byte[16]; myValuesSem[0] = System.Convert.ToByte( 1 ); myValuesSem[1] = System.Convert.ToByte( 'W' ); myValuesSem[2] = System.Convert.ToByte( 1 ); myValuesSem[3] = System.Convert.ToByte( 1 ); myValuesSem[4] = System.Convert.ToByte( 'D' ); myValuesSem[5] = System.Convert.ToByte( 1 ); myValuesSem[6] = System.Convert.ToByte( 18 / 256 ); myValuesSem[7] = System.Convert.ToByte( 18 % 256 ); myValuesSem[8] = System.Convert.ToByte( 0 / 256 ); myValuesSem[9] = System.Convert.ToByte( 0 % 256 ); myValuesSem[10] = System.Convert.ToByte( 4 / 256 ); myValuesSem[11] = System.Convert.ToByte( 4 % 256 ); for ( int i = 0 ; i < byte_sem_zero.Length ; i++ ) myValuesSem[12 + i] = System.Convert.ToByte( byte_sem_zero[i] ); try { byte[] myResultOffSem = RichiestePLC.ProcessMessage( myValuesSem , mLibNoDaveServer ); } catch ( Exception err ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion // resto fermo per mezzo secondo prima di leggere le zone di temperatura Thread.Sleep( 500 ); #region Converto in array di byte la stringa Byte[] request = new Byte[12]; request[0] = System.Convert.ToByte( 1 ); request[1] = System.Convert.ToByte( 'R' ); request[2] = System.Convert.ToByte( 1 ); request[3] = System.Convert.ToByte( 1 ); request[4] = System.Convert.ToByte( 'D' ); request[5] = System.Convert.ToByte( 1 ); request[6] = System.Convert.ToByte( 18 / 256 ); //elencoDB request[7] = System.Convert.ToByte( 18 % 256 ); //elencoDB request[8] = System.Convert.ToByte( 0 / 256 ); //areaDataStart request[9] = System.Convert.ToByte( 0 % 256 ); //areaDataStart request[10] = System.Convert.ToByte( 160 / 256 ); //areaDataLen request[11] = System.Convert.ToByte( 160 % 256 ); //areaDataLen #endregion #region Processo messaggio byte[] response = null; try { response = RichiestePLC.ProcessMessage( request , mLibNoDaveServer ); } catch ( Exception err ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion #region Parsing della risposta byte[] tempValue = new byte[4]; byte[] myReturn = new byte[response.Length - 14]; Array.Copy( response , 14 , myReturn , 0 , myReturn.Length ); Array.Copy( myReturn , 8 , tempValue , 0 , tempValue.Length ); // inserisco i dati in un database - ometto questo codice #endregion #region inizializzo a 1 bit di semaforo try { byte_sem_zero = new byte[4] { 1 , 0 , 0 , 0 }; for ( int i = 0 ; i < byte_sem_zero.Length ; i++ ) myValuesSem[12 + i] = System.Convert.ToByte( byte_sem_zero[i] ); byte[] myResultOnSem = RichiestePLC.ProcessMessage( myValuesSem , mLibNoDaveServer ); } catch ( Exception ex ) { if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer = null; } continue; } #endregion } } catch ( Exception ex ) { } finally { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer.bConnectionOK = false; mLibNoDaveServer = null; } } if ( mLibNoDaveServer != null ) { mLibNoDaveServer.ClosePlcConn(); LibNoDaveServer.CloseHardware( EmpTypeProto.daveProtoISOTCP ); mLibNoDaveServer.bConnectionOK = false; mLibNoDaveServer = null; } } Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Avevo letto che c'erano dei problei sulla chiusura della connessione, in pratica non si chiudeva realmente il task di comunicazione.. hai provato a lasciare sempre attiva la conesione, e fare le richieste a tempo?? Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Avevo letto che c'erano dei problei sulla chiusura della connessione, in pratica non si chiudeva realmente il task di comunicazione.. hai provato a lasciare sempre attiva la conesione, e fare le richieste a tempo?? Link al commento Condividi su altri siti More sharing options...
Bruno Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Confermo quello detto da Gianmario, in più vedo un paio di cose strane nel codice che hai postato: se è un timer (funzione richiamata ciclicamento), mi vengono dubbi sulla gestione degli oggetti. (specie in chiusura)In più mi sembra che ci sia una gestione messaggi che non capisco nel costesto ....hai la mia mail, riesci a postarmi il codice intero che provo a darci una occhiata.... indica anche la configurazione hardware (numero PLC e indirizzi IP) che provo a simulare.Ciao e scusa gli insulti che erriveranno BR1 Link al commento Condividi su altri siti More sharing options...
Bruno Inserita: 11 novembre 2008 Segnala Share Inserita: 11 novembre 2008 Confermo quello detto da Gianmario, in più vedo un paio di cose strane nel codice che hai postato: se è un timer (funzione richiamata ciclicamento), mi vengono dubbi sulla gestione degli oggetti. (specie in chiusura)In più mi sembra che ci sia una gestione messaggi che non capisco nel costesto ....hai la mia mail, riesci a postarmi il codice intero che provo a darci una occhiata.... indica anche la configurazione hardware (numero PLC e indirizzi IP) che provo a simulare.Ciao e scusa gli insulti che erriveranno BR1 Link al commento Condividi su altri siti More sharing options...
varg Inserita: 12 novembre 2008 Segnala Share Inserita: 12 novembre 2008 Ciao ad occhio e croce sai cosa puo succedere ? mi sembra che te ad ogni colpo di timer apri una connessione, fai quello che devi fare e poi la chiudi.Se è cosi puo verificarsi un problema, perche il windows anche se fai richiesta di chiusura, la connessione te la mette in Time_Wait mi sembra, e viene chiusa fisicamente dopo un certo timeout, quindi aprendo e chiudendo in realtà aumenti le connessioni teoricamente aperte sulla macchina, per verificare questo, basta che mentre esegui il tutto, apri il prompt e digiti un bel netstat -nVedrai in indirizzo esterno l'indirizzo del tuo ip e in stato lo stato della tua connessione.Se per caso succede questo, man mano hai delle connessioni zombi che ti saturano la rete.Prova a darci un occhio Link al commento Condividi su altri siti More sharing options...
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