Vai al contenuto
PLC Forum


CP341 MODBUS MASTER


Messaggi consigliati

Inserito:

Salve a tutti vorrei chiedere un aiuto per l'utilizzo di un CP341 modbus master, dovrei dialogare con uno slave.

Ho letto i manuali è ho eseguito passo passo le istruzioni,la comunicazione TXD e RXD si vede i led lampeggiano,l'idirizzo dello slave e 1 e la funzione e la 3 ma non riesco a capire perchè non leggo i valori dei registri dello slave.

Qualcuno può darmi un suggerimento?

Grazie

Salvo B.


Inserita:

Ho provato con il file di esempio Siemens :

     U     M    120.7                  //Trigger SEND
      UN    DB40.DBX    0.0             //SEND_REQ
      UN    DB40.DBX    0.4             //SEND_DONE
      UN    DB40.DBX    0.5             //SEND_ERROR
      R     M    120.7                  //Reset Trigger BSEND
      S     DB40.DBX    0.0             //Set SEND_REQ

// ------------------------
// Generate edge SEND_REQ
// ------------------------
      U(    
      O     DB40.DBX    0.4             //SEND_DONE
      O     DB40.DBX    0.5             //SEND_ERROR
      )     
      U     DB40.DBX    0.0             //SEND_REQ
      R     DB40.DBX    0.0             //SEND with REQ=0

// ------------------------
// Supply LEN
// ------------------------
      L     W#16#20                     //Length SEND-Data
      T     DB40.DBW   10               //SEND LEN

// ------------------------
// SEND with Instance-DB
// ------------------------
      CALL  "P_SND_RK" , "IDB_P_SND_RK"
       SF      :='S'
       REQ     :=DB40.DBX0.0
       R       :=DB40.DBX0.1
       LADDR   :=272
       DB_NO   :=42
       DBB_NO  :=0
       LEN     :=8
       R_CPU_NO:=
       R_TYP   :='X'
       R_NO    :=
       R_OFFSET:=
       R_CF_BYT:=
       R_CF_BIT:=
       DONE    :=DB40.DBX0.4
       ERROR   :=DB40.DBX0.5
       STATUS  :=DB40.DBW12

// -------------------------------
// Check "Complete without error"
// -------------------------------
      U     DB40.DBX    0.4             //DONE ?
      SPBN  CON1                        //if NO

      L     DB40.DBW    6               //"Complete without Error"
      +     1                           //increment counter
      T     DB40.DBW    6

      NOP   0
      NOP   0                           //further user functions
      NOP   0

      SPA   LEAV


// -------------------------------
// Check "Complete with error"
// -------------------------------
CON1: U     DB40.DBX    0.5             //ERROR ?
      SPBN  CON2                        //if NO

      L     DB40.DBW    8               //"Complete with error"
      +     1                           //increment counter
      T     DB40.DBW    8

      NOP   0
      NOP   0                           //Error-Handling
      NOP   0

      L     0
      L     DB40.DBW   12               //if STATUS <> 0
      ==I   
      SPB   LEAV

      T     DB40.DBW   14               //save STATUS
      SPA   LEAV

// ----------------------------
// Check "Error in STATUS"
// ----------------------------
CON2: L     0
      L     DB40.DBW   12               //if STATUS <> 0
      ==I   
      SPB   LEAV

      T     DB40.DBW   14               //save STATUS

      NOP   0                           //
      NOP   0                           //Error-Handling
      NOP   0


LEAV: CLR

 

 

 

      SET   
      =     DB41.DBX    0.0             //RCV with EN_R=1

// ------------------------
// RCV with Instance-DB
// ------------------------
      CALL  "P_RCV_RK" , "IDB_P_RCV_RK"
       EN_R    :=DB41.DBX0.0
       R       :=
       LADDR   :=DB41.DBW16
       DB_NO   :=43
       DBB_NO  :=0
       L_TYP   :=
       L_NO    :=
       L_OFFSET:=
       L_CF_BYT:=
       L_CF_BIT:=
       NDR     :=DB41.DBX0.4
       ERROR   :=DB41.DBX0.5
       LEN     :=DB41.DBW10
       STATUS  :=DB41.DBW12

// -------------------------------
// Check "Receive without error"
// -------------------------------
      U     DB41.DBX    0.4             //NDR ?
      SPBN  CON1                        //if NO

      L     DB41.DBW    6               //"Receive without error"
      +     1                           //increment counter
      T     DB41.DBW    6

      L     DB41.DBW   10               //save RECEIVE-Length
      T     DB41.DBW    4

      SPA   LEAV

// -------------------------------
// Check "Receive with error"
// -------------------------------
CON1: U     DB41.DBX    0.5             //ERROR ?
      SPBN  CON2                        //if NO

      L     DB41.DBW    8               //"Receive with error"
      +     1                           //increment counter
      T     DB41.DBW    8

      L     0
      L     DB41.DBW   12               //if STATUS <> 0
      ==I   
      SPB   LEAV

      T     DB41.DBW   14               //save STATUS
      SPA   LEAV

// ----------------------------
// Check "Error in STATUS"
// ----------------------------
CON2: L     0
      L     DB41.DBW   12               //if STATUS <> 0
      ==I   
      SPB   LEAV

      T     DB41.DBW   14               //save STATUS

LEAV: CLR   


Non riesco a leggere i valori dei registri:

 

 

Inserita:

Niente da fare avro letto il manuale 20 volte, sembra essere tutto apposto non riesco proprio a capire dove leggere il lavore dei registri dello slave.

:toobad:

Inserita:

Ciao

Scusa una domanda che slave stai usando ? Stai comunicando con un PLC slave ?

dcsautomazione
Inserita:

Ciao no si tratta di un sistema di pesatura a canali vibranti con celle di carico per materiali inerti a granuli e una centralina bilanciai.

 

Salvo B.

Inserita:

I dati te li trovi nel db43 dal byte 0 in poi. Gli fb non ti restituiscono errori? Nel buffer di diagnostica della CPU ci sono errori riguardo a questa comunicazione?

 

Inserita:

Verifica bene il codice dell'esempio: mi ricordo che nel programma Siemens c'è un errore, mi sembra sul puntamento ai merker di appoggio di trasferimento, non ricordo bene dove, ma c'è.

dcsautomazione
Inserita:

Ciao busanella credo che ci sia proprio qualcosa che non va e poi non riesco a leggere tutti i valori in una sola volta esempio se dico leggi dal registro 1 al 150 non legge tutto smette di lampeggiare pure il led rx massimo che posso scrivere e 127.

se scrivo leggi dal 50 al 100 allora li legge ma quelli che stanno dal 1 al 49 e tutto a zero.

Grazie

s.b

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