Vai al contenuto
PLC Forum


S7-300 E Modbus


Riccardo

Messaggi consigliati


Gabriele Corrieri

Ciao

ovviamente è da aspettarsi che Siemens mai e poi mai metterà modbus su una sua cpu, nativamente, mentre è ovvio che lo supporterà esternamente, un po' come con Schneider è lecito trovarsi il modbus di serie, ma il profibus presente solo come espansione.

Ciao

Link al commento
Condividi su altri siti

Purtroppo se vuoi usare modbus devi acquistare una CP340 (circa 500€ listino) + il driver modbus master (1184€ listino). Se hai un pannello operatore ti conviene usarlo come "ponte".

Link al commento
Condividi su altri siti

nel senso che per comunicare in modbus RTU, siemens fornisce il driver HW da istallare sul retro della scheda CP, rilascia inoltre il CD contenenti gli FB di comunicazione da lanciare all'interno di un codice FC denominati FB7 e FB8

come già chiarito da qualche altro membro del Forum (cerca Modbus RTU) si rendono necessari per completare il progetto della comunicazione modbus master quanto segue:

- N° 2 DB di istanza per gli FB7 e 8

- N°2 DB di invio e ricezione dati

in testa al DB di ricezione dati inserire il calcolo CRC effettuato con una routine di calcolo separata.

in rete si trovano numerosi esempi di procedure di calcolo che naturalmente possono essere convertite in S7

buon lavoro

Link al commento
Condividi su altri siti

La comunicazione modbus avviene nei sistemi S7300 esclusivamente con CP341 in configurazione RS232 RS 422 RS485

e' necessario dotarsi inoltre del drive (CD + Dongle HW da inserire sul retroscheda)

La configurazione puo' essere del tipo master o slave e in base a queste necessità si utilizzano FB7 , FB8 (master) o FB80 in dotazione (SLAVE)

NON E' MAI NECESSARIO CALCOLARE A PARTE I VALORI DI CRC !!!!

questi vengono verificati in ricezione e costruiti in trasmissione in modo automatatico dal firmware di protocollo residente nella CP341

Consiglio :

a livello di comunicazione modbus esistono piccole , pratice , economiche schede da intallare su Et200s o sulle IM151Cpu che senza tanti problemi e configurazioni offrono il protocollo MODBUS

Link al commento
Condividi su altri siti

esatto...

il crc non deve essere calcolato se si utilizza il modulo da inserire nel retroscheda......ma:

-se non si utilizza detto modulo

-si possiede una CP34x

-si deve comunicare in modbus master

come fare....?

Il mio post precedente presuppone questa condizione di lavoro.

:huh:

Link al commento
Condividi su altri siti

O disponi delle biblioteche siemens per modbus o ti implementi tutto il protocollo modbus, crc compreso. Le specifiche del protocollo modbus le trovi sul sito modbus.org (cito a memoria, comunque con google lo trovi facilmente).

PS le biblioteche siemens sono a a pagamento, of course

Link al commento
Condividi su altri siti

ci sono due strade per comunicare in modbus con i sistemi simatic

-utilizzare una scheda seriale da inserire nel rack del plc e smazzarsi il protocollo

modbus

-utilizzare una scheda modbus da inserire nel rack del plc e tramite delle funzioni

caricate quando vengono installati i driver , chiamare gli slaves leggendo e scrivendo

Link al commento
Condividi su altri siti

  • 2 weeks later...

Di seguito il codice di programma utilizzato per comunicare in modbus rtu senza l'ausilio del modulo da posizionare nel retroscheda.

Nella cofigurazione HW la la CP deve essere configurata come protocollo ASCII

Naturalmente è necessario aver comprato almeno una volta il pacchetto modbus master ufficiale per poter avere a disposizione gli fb7/8

====================================================
Richiamo di FB7 con relativo db di istanza


      CALL "FB_RXD MODMAST" , DB   100 (
           EN_R                     := TRUE,// abilitazione ricezione dati
           R                        := M     10.0,// reset al primo ciclo macchina
           LADDR                    := 272,// indirizzo cp34x
           DB_NO                    := 12,// db ricezione dati
           DBB_NO                   := 0,// dal byte 0
           NDR                      := M    200.0,// ok dati ricevuti
           ERROR                    := M    200.1,// errore ricezione dati
           LEN                      := MW   300,// lunghezza dati in ricezione
           STATUS                   := MW   302);// codice errore

=====================================================
temporizzazione risposta e attesa dati
    
  U     DB10.DBX    4.1; // ATTESA RISPOSTA SLAVE  
      L     S5T#4S; // TEMPO MAX ATTESA 
      SE    T      1; 
      U     T      1; 
      SPB   E001; 
      SPA   A001; 
E001: CLR ; 
      L     S5T#10MS; // AZZERAMENTO TIMER
      SE    T      1; 
      L     0; // ANNULLAMENTO
      T     DB12.DBB    0; // N STAZIONE SLAVE IN RISPOSTA
      SET ; 
      R     DB10.DBX    4.1; // RESET ATTESA RISPOSTA 
A001: SET ; 
///
      U     M    200.0; // DATI RICEVUTI OK
      R     DB10.DBX    4.1; // RESET ATTESA RISPOSTA       
      SPB   R002; 
      SPA   TRX; 

NETWORK
TITLE =RICEZIONE E DEPOSITO DATI RICEVUTI

R002: SET ; 
      L     DB12.DBB    0; // N STAZIONE SLAVE IN RISPOSTA
      L     1; 
      ==I ; 
      SPB   AD01; 
      SET ; 
      L     DB12.DBB    0; // N STAZIONE SLAVE IN RISPOSTA
      L     2; 
      ==I ; 
      SPB   AD02; 
      SPA   RST; 

AD01: SET ; 
      CALL "BLKMOV" (
           SRCBLK                   := P#DB12.DBX 3.0 BYTE 80,// SORGENTE DATI
           RET_VAL                  := #RET_VALUE,
           DSTBLK                   := P#DB13.DBX 100.0 BYTE 80);// DESTINAZIONE DATI
      SPA   RST; 

AD02: SET ; 
      CALL "BLKMOV" (
           SRCBLK                   := P#DB12.DBX 3.0 BYTE 32,// SORGENTE DATI
           RET_VAL                  := #RET_VALUE,
           DSTBLK                   := P#DB13.DBX 200.0 BYTE 32);// DESTINAZIONE DATI
      SPA   RST; 

      SET ; 
RST:  L     0; // ANNULLAMENTO
      T     DB12.DBB    0; // N STAZIONE SLAVE IN RISPOSTA
      SPA   SND; // FINE
NETWORK
TITLE =PASSI RICHIESTA LETTURA E SCRITTURE

TRX:  U     DB10.DBX    4.1; // ATTESA RISPOSTA SLAVE  
      SPB   SND; 
///
      SET ; 
      L     DB10.DBW    0; // NUMERO DI SEQUENZA 
      SPL   OVER; 
      SPA   PA00; // PASSO INIZIO
      SPA   PA01; // PRIMO SLAVE IN RICEZIONE 
      SPA   PA02; // SECONDO SLAVE IN RICEZIONE
      SPA   PA03; // 
OVER: BEA ; 
PA00: SET ; 
      L     1; 
      SPA   OUT; 
NETWORK
TITLE =RICHIESTA DATI A SLAVE 2  
//VARIABILI DA ADDRESS 7001 A 7020 IN REAL 
//
//DEPOSITATI DAL  DB13.DBD 100 IN POI
PA01: SET ; 
      L     2; 
      T     DB11.DBB    0; // NUMERO SLAVE
      L     3; // FUNZIONE MODBUS 3
      T     DB11.DBB    1; 
      L     7001; // REGISTRO INIZIALE IN LETTURA 
      T     DB11.DBW    2; 
      L     20; // NUMERO REGISTRI DA LEGGERE (REAL)
      T     DB11.DBW    4; 
      SET ; 
      L     8; // LUNGHEZZA PACCHETTO DATI INCLUSO CRC
      T     DB10.DBW    2; // LUNGHEZZA BYTE TRASMESSI  FC SEND
      SET ; 
//================================================================================
      CALL "CR_C" (
           N_BYTE                   := 6,// NUMERO BYTE DI CUI FARE IL CALCOLO
           calc_CRC                 := DB11.DBW    6);// EXIT CALCOLO
//================================================================================
      SET ; 
      S     DB10.DBX    4.0; // START RICHIESTA SEND
      SET ; 
      SPB   NEX1; 
NEX1: L     2; 
      SPA   OUT; 
NETWORK
TITLE =RICHIESTA DATI A SLAVE 3  
//VARIABILI DA ADDRESS 7001 A 7008 IN REAL FORMAT
//
//DEPOSITATI DAL  DB13.DBD 200 IN POI
PA02: SET ; 
      L     3; 
      T     DB11.DBB    0; // NUMERO SLAVE
      L     3; // FUNZIONE MODBUS 3
      T     DB11.DBB    1; 
      L     7001; // REGISTRO INIZIALE IN LETTURA 
      T     DB11.DBW    2; 
      L     8; // NUMERO REGISTRI DA LEGGERE (REAL)
      T     DB11.DBW    4; 
////
      L     8; // LUNGHEZZA PACCHETTO (INCLUSO CRC)
      T     DB10.DBW    2; // LUNGHEZZA BYTE TRASMESSI  FC SEND
      CALL "CR_C" (
           N_BYTE                   := 6,// NUMERO BYTE DI CUI FARE IL CALCOLO
           calc_CRC                 := DB11.DBW    6);// EXIT CALCOLO
///
      SET ; 
      S     DB10.DBX    4.0; // START RICHIESTA SEND
////
      SET ; 
      SPB   NEX2; 
      BEA ; 
NEX2: L     0; 
      SPA   OUT; 
NETWORK
TITLE =PASSO SPARE

PA03: SET ; 
      SPB   NEX3; 
      BEA ; 
NEX3: L     0; // RESTART PASSI
      SPA   OUT; 
NETWORK
TITLE =CARICA IL PASSO DI SEQUENZA 

OUT:  T     DB10.DBW    0; 

NETWORK
TITLE =TRASMISSIONE MODBUS MASTER

SND:  SET ; 
      U     DB10.DBX    4.0; 
      S     DB10.DBX    4.1; // RESET ATTESA RISPOSTA
///================================================================================
==================
      SET ; 
      CALL "TRX MODMAST" , DB   101 (
           SF                       := 'S',
           REQ                      := DB10.DBX    4.0,// RICHIESTA TRASMISSIONE 
           R                        := M    201.0,// PRIMO CICLO MACCHINA 
           LADDR                    := 272,
           DB_NO                    := 11,// DB TRASMISSIONE
           DBB_NO                   := 0,// BYTE INIZIO DATI TRASMESSI
           LEN                      := DB10.DBW    2,// LUNGHEZZA BYTE TRASMESSI 
           DONE                     := M    202.0,// DATI TRASMESSI OK
           ERROR                    := M    202.1,
           STATUS                   := MW   304);// ERRORE TRASMISSIONE TRX
//================================================================================
==================
      SET ; // RESET 
      R     DB10.DBX    4.0; // RICHIESTA DI TRASMISSIONE
//================================================================================
==================
      SET ; 
      U     M    201.0; 
      L     S5T#2S; // TIMER RESET CP 
      SE    T      3; 
      U     T      3; 
      R     M    201.0; 
      BEA ; 
END_FUNCTION
================================================================

Non so se risulta chiaro :unsure:

Modificato: da Gabriele Corrieri
Link al commento
Condividi su altri siti

Ho fatto comunicare un s7 300 con cp340 con un dispositivo abb in modbus su rs485. Non esiste niente di peggio a livello mondiale.......a livello di universo!!! La siemens non si poteva inventare davvero niente di peggio.

Uso siemens da 10 anni ma in questo devo dire che gli ingegneri tedeschi si sono superati.

Con un'altro plc, di cui non cito la marca, occorrono solo 15 minuti!!!!

saluti

Link al commento
Condividi su altri siti

Anche nella serie ET200S+ CPU IM151Cpu si può utilizzare dei moduli per comunicazione ModBus,

come dice giustamente anche Kenn.

suibaf non ha tutti i torti, si può utilizzare altri PLC, che per la comunicazione ModBus sono

economicamente più appropriati.

Usare la CP340 mi sembra un costo un pò elevato (CPU 300+ CP340).

Io ad esempio utilizzo

MicroLogix 1200 serie C (580.00€ ModBus RTU Master/Slave +Logica) oppure

MicroLogix 1500 LRP (2Potre COM) (600.00€ ModBus Master/Slave+Logica) per eseguire PassThru con PC di Processo.

Oppure si può utilizzare i Piccoli PLC della Schneider.

Pultroppo la Siemens ( Re ProfiBus ) Punta tutto sul ProfiBus tralasciando altri tipi di reti e Protocolli.

Dopo sono Tedeschi (Testa che non la mangia nianche un m.... ).

Attenzione sono solo battute, non prenderesela a male.

Ogni persona ha la sua visione, pultroppo la Siemens la conosco da anni, però non sono mai

stato capace di digerirla. Tuttavia con tanta buona volonta non va cosi male.

Link al commento
Condividi su altri siti

  • 5 weeks later...

Andrea,

sei sicuro che quel "M 200.0 ok dati ricevuti" sia indice del fatto che lo slave abbia risposto alla chiamata del Master?. Ti faccio questa domanda per 2 ragioni:

1) gli fb di send e receive altro non fanno che dialogare con la CPU (un 315 2 DP nel mio caso)

2) quel bit a me non si muove neanche se stacco il connettore seriale dalla CP.

In realtà stavo studiando il tuo codice perchè non capisco come dare una segnalazione di allarme quando mi cade la comunicazione tra Master e Slave!!!

Dimenticavo di dire che io ho utilizzato il driver hardaware inserito nella CP.

Saluti

Fabio

Modificato: da suibaf
Link al commento
Condividi su altri siti

Fabio,

M200.0 rimane a 1 perchè viene aggiornato al prossimo richiamo del FB7

l'errore sulla comunicazione devi verificarlo testando rispettivamente Status di Fb7 e Fb8 :huh:

riguardo al driver HW non cambia la struttura del codice dove tuttavia non deve essere inserito il calcolo crc separato

Per completezza di informazione Ti invito a dare uno sguardo al manuale Modbus master fornito unitamente al programma nel capitolo 8 "esempi"

buon lavoro

Andrea_s

Link al commento
Condividi su altri siti

Ciao Andrea, grazie per la tua risposta.

L'applicazione che ho fatto funziona alla perfezione ormai da mesi. L'unico neo è che per fare un check della comunicazione ho dovuto fare qualcosa di poco bello ed elegante, quindi mi sono incuriosito andando a vedere il tuo precedente post.

FB 7 ed FB8 io li richiamo ciclicamente. Lo stato del M200.0 a me non cambia neanche dopo ore e neanche la parola status.....rimane tutto invariato!!!!

Ciao

Fabio

NB ho chiamato la hot line siemens ieri e mi hanno richiamato oggi. Se non lo avessero fatto avrebbero fatto + bella figura!!!! <_<

Modificato: da suibaf
Link al commento
Condividi su altri siti

Fabio,

mi dispiace non poterTi aiutare in q.to momento... non ho disponibile le schede per effettuare un test, tuttavia appena rientro dalle vacanze verificherò con apparecchiature alla mano quanto sopra.....

Ti saluto

Link al commento
Condividi su altri siti

per controllare la comunicazione puo usare un registro per ogni device .

Lo incrementi e lo spedisci , chi riceve lo incrementa ancora e lo rispedisce al master

Il master prima di incrementarlo ancora lo controlla con un registro immagine del valore prima di spedirlo la prima volta , e se dopo 100 ms e' uguale vuol dire che lo slave non ha ricevuto in tempo oppure

non ha ricevuto per niente .

E' abbastanza semplice ma lo uso spesso , sia in ethernet che profibus o altro

ciao

walter

Link al commento
Condividi su altri siti

magari lo prevede e lo usa ma senza renderlo visibile .

Strano che comunque non ti dia un bit cumulativo di comunicazione fault o time out

:(

Il time out e' implementato in ogni master di sicuro , e viene usato anche in fase di

inizializzazione automatica nella ricerca della rete e dei suoi componenti .

Strano , comumque secondo me , ancora oggi , la comunicazione ha dei buchi neri nella sua esistenza e

bisogna sempre attangiarsi per avere a portata di mano il bit di fault .

Praticamente anche in sistemi solo siemens che siano ethernet o profibus non si ha ancora

in mano la padronanza , ovvero una scheda o un processore di comunicazione che setti un bit

per dire che c'e' qualche problema

Incredibile

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