Stefano Sormanni Inserito: 23 febbraio 2003 Segnala Inserito: 23 febbraio 2003 Devo gestire una lettura scrittura su una periferica Modbus RTU (Altivar28) su un PLC Micro Modicon, il mio problema sta nella gestione della scrittura e lettura in quanto ho notato che se l'inverter mi va in Fault, la comunicazione mi salta ed inoltre si pianta anche la comunicazione Unitelway (devo fare il riavvio a freddo).Molto probabilmente mi si satura il buffer della comunicazione, e poi non si sblocca più.Io ho fatto questo tipo di soluzione:LD TRUE[%MW10:4:=0][%MW12:=50]LDN %MW10:X0[READ_VAR(ADR#0.0.3,.......................,%MW10:4)]LDF %MW10:X0S %M2R %M1LD TRUE[%MW20:4:=0][%MW22:=50]LD %M2LDN %MW20:X0[WRITE_VAR(ADR#0.0.3,.....................,%MW20:4)]LDF %MW20:X0S %M1R %M2Non so se questa soluzione è fattibile e propio per questo motivo chiedo consiglio...grazie
Claudio Monti Inserita: 24 febbraio 2003 Segnala Inserita: 24 febbraio 2003 Ho fatto qualcosa di simile, appena ho un po' di tempo ti mando un esempio
walterword Inserita: 24 febbraio 2003 Segnala Inserita: 24 febbraio 2003 oltre all'azzeramento delle word di comunicazione avevo anche preposto dei timer .se ho il .done e sono bloccato , azzero le wordti mando una routoine che avevo fatto ,c'e' anche la gestione del plc hot back -up , vedi un po cosa ti possa servireciao!(*------CHECK COMMUNICATION ETHERNET ------*)%T10.P:=10;%T11.P:=3;%T12.P:=3;%T13.P:=3;%T14.P:=3;%T15.P:=3;IF %MW2100:X0 THEN START %T10;ELSE STOP %T10;PRESET %T10;END_IF;IF %MW2125:X0 THEN START %T11;ELSE STOP %T11;PRESET %T11;END_IF;IF %MW2106:X0 THEN START %T12;ELSE STOP %T12;PRESET %T12;END_IF;IF %MW2129:X0 THEN START %T13;ELSE STOP %T13;PRESET %T13;END_IF;IF %MW2400:X0 THEN START %T14;ELSE STOP %T14;PRESET %T14;END_IF;IF %MW2220:X0 THEN START %T15;ELSE STOP %T15;PRESET %T15;END_IF;IF %T10.D THEN %MW2100:4:=0;END_IF;IF %T11.D THEN %MW2125:4:=0;END_IF;IF %T12.D THEN %MW2106:4:=0;END_IF;IF %T13.D THEN %MW2129:4:=0;END_IF;IF %T14.D THEN %MW2400:4:=0;END_IF;IF %T15.D THEN %MW2220:4:=0;END_IF;!(*------CHECK COMMUNICATION FIPWAY ------*)%T6.P:=3; (*PRESET TIMER*)IF %MW2110:X0 OR %MW3000:X0 (*COMMUNICATION TIMER*) THEN START %T6; (*START TIMER*) ELSE STOP %T6; (*STOP TIMER*) PRESET %T6; (*RETURN PRESET TIMER*)END_IF;IF %T6.D (*TIME DONE =COMMUNICATION TIMER*) THEN %MW2110:4:=0; (*STOP COMMUNICATION*) %MW3000:4:=0; END_IF;!(* POINTER CONTROL*)IF %MW2105<0 OR %MW2105>20 THEN %MW2105:=0;END_IF;IF %MW2104<0 OR %MW2104>3 THEN %MW2104:=0;END_IF;!IF %M1999 THEN JUMP %L500;END_IF;!(* When STAND-BY jump to the Stand-by management *)IF NOT %MW1001:X1 THEN JUMP %L300;END_IF;!(*CHECK OF SELF-TEST CARD,IF NOT READY JUMP*)IF %MW3.MOD.2:X3 THEN JUMP %L100;END_IF;!IF NOT %MW2100:X0 AND NOT %MW2125:X0 THEN %MW2422:=%MW2101+%MW2126; %MW2100:4:=0; %MW2125:4:=0; %MW2102:=5; %MW2127:=5;END_IF;!(*SEND DATA TABEL TO SPV*)IF NOT %MW2100:X0 AND NOT %MW2125:X0 THEN IF %MW2105=0 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1000,64,%MW10100:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1000,64,%MW10100:64,%MW2125:4);%MW2105:=1;JUMP %L100;END_IF; IF %MW2105=1 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1064,64,%MW10164:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1064,64,%MW10164:64,%MW2125:4);%MW2105:=2;JUMP %L100;END_IF; IF %MW2105=2 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1128,64,%MW10228:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1128,64,%MW10228:64,%MW2125:4);%MW2105:=3;JUMP %L100;END_IF; IF %MW2105=3 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1192,64,%MW10292:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1192,64,%MW10292:64,%MW2125:4);%MW2105:=4;JUMP %L100;END_IF; IF %MW2105=4 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1256,64,%MW10356:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1256,64,%MW10356:64,%MW2125:4);%MW2105:=5;JUMP %L100;END_IF; IF %MW2105=5 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1320,64,%MW10420:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1320,64,%MW10420:64,%MW2125:4);%MW2105:=6;JUMP %L100;END_IF; IF %MW2105=6 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1384,64,%MW10484:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1384,64,%MW10484:64,%MW2125:4);%MW2105:=7;JUMP %L100;END_IF; IF %MW2105=7 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1448,64,%MW10548:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1448,64,%MW10548:64,%MW2125:4);%MW2105:=8;JUMP %L100;END_IF; IF %MW2105=8 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1512,64,%MW10612:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1512,64,%MW10612:64,%MW2125:4);%MW2105:=9;JUMP %L100;END_IF; IF %MW2105=9 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1576,64,%MW10676:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1576,64,%MW10676:64,%MW2125:4);%MW2105:=10;JUMP %L100;END_IF; IF %MW2105=10 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1640,64,%MW10740:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1640,64,%MW10740:64,%MW2125:4);%MW2105:=11;JUMP %L100;END_IF; IF %MW2105=11 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1704,64,%MW10804:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1704,64,%MW10804:64,%MW2125:4);%MW2105:=12;JUMP %L100;END_IF; IF %MW2105=12 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1768,64,%MW10868:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1768,64,%MW10868:64,%MW2125:4);%MW2105:=13;JUMP %L100;END_IF; IF %MW2105=13 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1832,64,%MW10932:64,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1832,64,%MW10932:64,%MW2125:4);%MW2105:=14;JUMP %L100;END_IF; IF %MW2105=14 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1896,54,%MW10996:54,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1896,54,%MW10996:54,%MW2125:4);%MW2105:=15;JUMP %L100;END_IF; IF %MW2105=15 THEN WRITE_VAR(ADR#{4.1}SYS,'%M',10000,896,%MW11200:56,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%M',10000,896,%MW11200:56,%MW2125:4);%MW2105:=16;JUMP %L100;END_IF; IF %MW2105=16 THEN WRITE_VAR(ADR#{4.1}SYS,'%M',10896,64,%MW11256:4,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%M',10896,64,%MW11256:4,%MW2125:4);%MW2105:=17;JUMP %L100;END_IF; IF %MW2105=17 THEN WRITE_VAR(ADR#{4.1}SYS,'%M',10960,160,%MW11260:10,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%M',10960,160,%MW11260:10,%MW2125:4);%MW2105:=18;JUMP %L100;END_IF; IF %MW2105=18 THEN WRITE_VAR(ADR#{4.1}SYS,'%MD',4000,12,%MW16054:24,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MD',4000,12,%MW16054:24,%MW2125:4);%MW2105:=19;JUMP %L100;END_IF; IF %MW2105=19 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1960,15,%MW14000:15,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1960,15,%MW14000:15,%MW2125:4);%MW2105:=20;JUMP %L100;END_IF; IF %MW2105=20 THEN WRITE_VAR(ADR#{4.1}SYS,'%MW',1950,1,%MW11050:1,%MW2100:4); WRITE_VAR(ADR#{4.2}SYS,'%MW',1950,1,%MW11050:1,%MW2125:4);%MW2105:=0;JUMP %L100;END_IF;END_IF;!%L100:!IF NOT %MW2106:X0 AND NOT %MW2129:X0 THEN %MW2106:4:=0; %MW2129:4:=0; %MW2108:=5; %MW2131:=5;END_IF;!IF NOT %MW2106:X0 AND NOT %MW2129:X0 THEN IF %MW2104=0 THEN WRITE_VAR(ADR#{4.30}SYS,'%MW',10000,10,%MW13000:10,%MW2106:4); WRITE_VAR(ADR#{4.31}SYS,'%MW',10000,10,%MW13000:10,%MW2129:4);%MW2104:=1;JUMP %L101;END_IF; IF %MW2104=1 THEN WRITE_VAR(ADR#{4.50}SYS,'%M',4000,960,%MW11200:60,%MW2106:4); WRITE_VAR(ADR#{4.51}SYS,'%M',4000,960,%MW11200:60,%MW2129:4);%MW2104:=2;JUMP %L101;END_IF; IF %MW2104=2 THEN WRITE_VAR(ADR#{4.50}SYS,'%M',4960,160,%MW11260:10,%MW2106:4); WRITE_VAR(ADR#{4.51}SYS,'%M',4960,160,%MW11260:10,%MW2129:4);%MW2104:=3;JUMP %L101;END_IF; IF %MW2104=3 THEN WRITE_VAR(ADR#{4.50}SYS,'%MW',3401,8,%MW15000:8,%MW2106:4); WRITE_VAR(ADR#{4.51}SYS,'%MW',3401,8,%MW15000:8,%MW2129:4);%MW2104:=0;JUMP %L101;END_IF;END_IF;!%L101:!(* ##################### COMMUNICATION WITH AU121...125 ################### *)
Gabriele Riva Inserita: 24 febbraio 2003 Segnala Inserita: 24 febbraio 2003 Suggerimento:per inserire i codici sorgenti, utilizzate il tasto "Code", eviterete tagli di codice dell'interprete htmlesempio:LD TRUE[%MW10:4:=0][%MW12:=50]LDN %MW10:X0[READ_VAR(ADR#0.0.3,.......................,%MW10:4)]LDF %MW10:X0S %M2R %M1LD TRUE[%MW20:4:=0][%MW22:=50]LD %M2LDN %MW20:X0[WRITE_VAR(ADR#0.0.3,.....................,%MW20:4)]LDF %MW20:X0S %M1R %M2[/code]forse con Telemecanique non succede nulla, ma con Siemens qualcuno ha gia' avuto problemi.
Gabriele Corrieri Inserita: 24 febbraio 2003 Segnala Inserita: 24 febbraio 2003 Ciao Walter,non ci capisco molto (non ho mai usato PL7) ... comunque sei proprio forte in programmazione!!! Ciao
fourniermarcello Inserita: 8 febbraio 2013 Segnala Inserita: 8 febbraio 2013 Salve sono un programmatore novello (più novello che programmatore) io ho un problema . LA Schneider mi ha lasciato un progetto in PL7 Pro dove avviene lo scambio di valori fra PLC attraverso una READ_VAR(...) . Da questa conversazione noto che dall'altra parte ci dovrebbe essere un WRITE_VAR ? Fino ad oggi ho sempre resettato la %MW di diagnostica nel READ_VAR per sbloccare lo scambio . Ma ora , credo , come dite nel topic , si sia saturato il buffer di comunicazione . Mi avvalgo della vs esperienza per risolvere tale problema o comunque delucidarmi sullo scambio di dati fra PLC. Grazie
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