Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Versione Snap7 Sharp7


Messaggi consigliati

Paolo GUerrieri
Inserito:

Buongiorno a tutti, sto usando in un progetto con 3 connessioni di comunicazione verso lo stesso plc.

per una di queste connessioni, ho provato ad usare la nuova libreria sharp7, ma ho delle difficolta a mantenere la comunicazione con il plc.

Mentre le comunicazioni attraveso la libreria snap7.dll vengono mantenute, quella fatta attraverso sharp7, una volta caduta non riesco più ad attivarla...

mi restituisce sempre l'errore in connessione N°5.

Il motivo per cui ho usato tale libreria, sta nel fatto che il comando di reset di un singolo bit funziona molto bene, mentre lo stesso della libreria snap7.dll non riesco a farlo funzionare.

Sharp7:

client2.WriteArea(S7Consts.S7AreaDB, 108, 0, 0, S7Consts.S7WLBit, rset); dove rset è un array di byte[1]

 

 

Chiedo cortesemente come mai lo stesso comando della libreria snap7.dll non funziona...(forse sbaglio io ...) e come fare per risolvere il problema dell apertura della comunicazione attraverso sharp7 (errore 5)

 

L'ambiente è dot net c# con WPF

 

Grazie in anticipo

Guerrieri P.


Inserita:

Ciao,

Il comando usando snap7.dll non ti funziona perchè sbagli la chiamata : gli stai passando 0 come Amount, dovrebbe essere 1.

Così funziona:

 

client2.WriteArea(S7Client.S7AreaDB, 108, 0, 1, S7Client.S7WLBit, rset);

 

Il motivo per cui in Sharp7 funziona deriva da una scelta di "sopravvivenza" :)

Il protocollo Siemens è abbastanza cervellotico per il data typing : se usi S7AreaCT devi usare S7WLCounter come WordLength, se leggi/scrivi un bit devi usare 1 come Amount e via dicendo.

Dato che Sharp7 verrà usato anche da programmatori VB.NET e sono stato letteralmente massacrato di email da gente che buttava dentro codice random senza leggere i manuali e testare gli errori di ritorno (:thumbdown: ogni riferimento è puramente casuale) , ho deciso di verificare/aggiustare i parametri in ingresso ove possibile.

Nel tuo caso, dovendo accedere ad un bit, l'unico Amount permesso è 1 e Sharp7 lo mette di default.

 

Per ciò che riguarda le connessioni mi sembra strano il comportamento differente, verificherò.

Nel frattempo controlla, cosa hai come risorse di comunicazione nelle proprietà della CPU ?

 

Paolo GUerrieri
Inserita:

:worthy: si in effetti sbagliavo io nel passaggio di parametri per il set/rset del bit....

 

Attualmente la cpu è una VIPA 315 SB e dovrebbe supportare 8 connessioni, tant'è vero che con la dll mantengo aperte 3 connessioni contemporaneamente senza problemi.

 

Saluti

Paolo

 

Inserita:
        public Form1()
        {
            InitializeComponent();
            for (int c=0; c<MaxItems; c++)
            {
                Clients[c] = new S7Client();
                Clients[c].SetConnectionType(S7Client.CONNTYPE_OP);
            }
        }

        private void ConnectBtn_Click(object sender, EventArgs e)
        {
            int Rack = System.Convert.ToInt32(TxtRack.Text);
            int Slot = System.Convert.ToInt32(TxtSlot.Text);
            int Result;

            NC = System.Convert.ToInt32(TxtConn.Text);
            for (int c = 0; c<NC; c++)
            {
                Result = Clients[c].ConnectTo(TxtIP.Text, Rack, Slot);
                ShowResult(c, Result);
                System.Threading.Thread.Sleep(10);             
            }
            timer1.Enabled = true;
            DisconnectBtn.Enabled = true;
            ConnectBtn.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int Result;
            for (int c = 0; c < NC; c++)
            {
                Result = Clients[c].DBRead(1, 0, 16, Buffer);
                if (Result==0)
                    label5.Text = cnt++.ToString();
                else
                    ShowResult(c, Result);
            }            
        }

 

Sono arrivato a circa 50000 pacchetti trasferiti in 10 connessioni contemporanee con questo codice su una 315 2PN/DP a zero errori.

Sei completamente certo di usare client separati ?

 

 

Paolo GUerrieri
Inserita:

Direi di si....comunque per sicurezza riverifico il tutto....

Intanto grazie per la disponibilità

 

Saluti

Paolo

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