Stefano Sormanni Inserito: 23 febbraio 2003 Segnala Share 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 Link al commento Condividi su altri siti More sharing options...
Claudio Monti Inserita: 24 febbraio 2003 Segnala Share Inserita: 24 febbraio 2003 Ho fatto qualcosa di simile, appena ho un po' di tempo ti mando un esempio Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 24 febbraio 2003 Segnala Share 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 ################### *) Link al commento Condividi su altri siti More sharing options...
Gabriele Riva Inserita: 24 febbraio 2003 Segnala Share 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. Link al commento Condividi su altri siti More sharing options...
Gabriele Corrieri Inserita: 24 febbraio 2003 Segnala Share Inserita: 24 febbraio 2003 Ciao Walter,non ci capisco molto (non ho mai usato PL7) ... comunque sei proprio forte in programmazione!!! Ciao Link al commento Condividi su altri siti More sharing options...
fourniermarcello Inserita: 8 febbraio 2013 Segnala Share 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 Link al commento Condividi su altri siti More sharing options...
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