Vai al contenuto
PLC Forum


Versione Snap7 Sharp7


Messaggi consigliati

Paolo GUerrieri

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.

Link al commento
Condividi su altri siti


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 ?

 

Link al commento
Condividi su altri siti

Paolo GUerrieri

: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

 

Link al commento
Condividi su altri siti

        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 ?

 

 

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