Vai al contenuto
PLC Forum


Driver Script Vijeo Designer - realizzazione driver per lettura dati via rs485


pidds

Messaggi consigliati

Buonasera amici,

qualcuno di voi ha mai utilizzato un driver script in viejeo designer?

Io ho la versione 5.0 e dovrei leggere dei dati da un'apparecchiatura Aeroel per misurazione diametro.

il mio plc è un premium della schneider ma non ha porte seriali libere per cui volevo provare a comunicare dal pannello direttamente con il misuratore di diametro.

il protocollo è semplice bastano pochi messaggi...

qualcuno ha provato?

o magari qualcuno ha un esempietto da cui prendere spunto?

ciao e grazie

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ciao

se guardi nel manuale in linea sotto "serial printing" gia trovi esempi ... il principio e' che l'apparecchiatura la devi trattare come una stampante ...

quindo lanci una "stampa" con il codice di richiesta e poi ti metti in attesa ....

io ho fatto :

//richiesta -> 00xx,100,60,101

byte sendToDisplay[]; // byte array for write op.

int numOfChar = 17; // string length

int i=0;

// 2. Azzero la stringa

sendToDisplay = new byte[numOfChar];

for (i = 0; i < numOfChar; i++)

{

sendToDisplay = 0x20;

}

//taglio con arreramento

sendToDisplay[0] = (byte)0x30; //0

sendToDisplay[1] = (byte)0x30; //0

sendToDisplay[2] = (byte)0x57; //x

sendToDisplay[3] = (byte)0x4e; //x

sendToDisplay[4] = (byte)0x2c; //,

sendToDisplay[5] = (byte)0x31; //1

sendToDisplay[6] = (byte)0x30; //0

sendToDisplay[7] = (byte)0x30; //0

sendToDisplay[8] = (byte)0x2c; //,

sendToDisplay[9] = (byte)0x36; //6

sendToDisplay[10] = (byte)0x30; //0

sendToDisplay[11] = (byte)0x2c; //,

sendToDisplay[12] = (byte)0x31; //1

sendToDisplay[13] = (byte)0x30; //0

sendToDisplay[14] = (byte)0x31; //1

sendToDisplay[15] = (byte)0x0d; //cr

sendToDisplay[16] = (byte)0x0a; //lf

// 4. Send message

ScriptDriver01.write(true, numOfChar, sendToDisplay);

poi verifica i caratteri di fine trasmissione cr/lf

e mettiti in attesa di risposta !

// 5. Attesa risposta

byte RecvPacket[]; // byte array for read op.

int ReadChar = 20;

int j=0;

// 2. Inizializzo la stringa

RecvPacket = new byte[ReadChar];

for (j = 0; j < ReadChar; j++)

{

RecvPacket[j] = 0x20;

}

ScriptDriver01.read(100, 20, RecvPacket); //100ms Timeout

String text = new String(RecvPacket); // Convert received data to String

bye

Link al commento
Condividi su altri siti

Ciao prog_jlaw,

ora la comunicazione funziona ma questo java lo trovo ostico.

comunico ma siccome il lavoro lo sto ancora finendo e nel frattempo ne faccio altri 10.... non ho ancora capito come fare a scindere la stringa che mi arriva:

tipo:

CARATTERE STRANO ( FACCINA)

M02=2.3456

M03=2.3560

M80=0

M90=0

CARATTERE STRANO (CUORICINO)

....

m02 e 3 sono le misure

m80 e m90 sono una codifica di letture e codici di allarme.

ho un array di byte dove sono presenti questi codici e valori...

solo che non capisco come si estrapolano i dati in questo cavolo di codice java.

proprio i comandi da usare...

tu per caso mi sai indicare un manuale di programmazione di questo linguaggio?

l'. on line aiuta ma non è certo il massimo della chiarezza e in schneider pronto contatto non danno assistenza sul java... :blink:

( che con quello che compro ogni anno mi pare una presa per i fondelli......)

ciao e grazie

Link al commento
Condividi su altri siti

Ciao, ora ho fatto questo:

int result;

byte readArray[] = new byte [100];

// 2. Lettura di dati dalla porta seriale

result = Driverscript.read(0, 100, readArray);

if (result <= 0) // Verificare eventuali errori

ReadText.write("ERRORE"); // Scrivi alla variabile

else

{

// Converti array byte in Stringa

String temp = new String(readArray);

String strM02;

String strM03;

String strM80;

String strM90;

int OffM02;

int OffM03;

int OffM80;

int OffM90;

int MaxLength;

float DiaM02;

float DiaM03;

OffM02=(temp.indexOf("M02="));

byte0[13].write(OffM02);

OffM03=(temp.indexOf("M03="));

byte0[14].write(OffM03);

OffM80=(temp.indexOf("M80="));

byte0[15].write(OffM80);

OffM90=(temp.indexOf("M90="));

byte0[16].write(OffM90);

MaxLength=(temp.length());

strM02=(temp.substring((OffM02+4),OffM03));

byte0[1].write(strM02);

strM03=(temp.substring((OffM03+4),OffM80));

byte0[2].write(strM03);

strM80=(temp.substring((OffM80+4),OffM90));

byte0[3].write(strM80);

strM90=(temp.substring((OffM90+4),MaxLength));

byte0[4].write(strM90);

}

PER CUI NELLE STRINGHE

strM02 e strM03 ho le letture ma sono in formato stringa, vorrei convertirle in Float ma non esiste il comando!?!?!?!?

come fare??

ciao e grazie

Link al commento
Condividi su altri siti

vorrei convertirle in Float

:unsure: ho paura di no !

....

potresti fare le comparazioni dei singoli caratteri e costruirti il numero , unita/decine/centinaia ......

se per caso sviluppi qualcosa ... postala potrebbe servire a qualcun altro !

bye

Link al commento
Condividi su altri siti

Sono indeciso ma credo che farò la conversione col caro vecchio testo strutturato di Unity nel premium

tempo di rilevamento permettendo

visto che dopo avrò 2 seriali in cascata...

ciao

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