Vai al contenuto
PLC Forum


Trasmissione Stringhe Pc-plc


Messaggi consigliati

Inserito:

Buonasera,

Sto lavorando ad un nuovo progetto,devo realizzare la comunicazione tra un plc Panasonic FP0 ed un normalissimo PC il tutto tramite 232.

Quello che devo trasferire è un file .txt,dove al suo interno ci sono delle stringhe in formato aschi di circa 4-5 caratteri,ho provato ad eseguire qualcosa ma purtroppo non e andato a buo fine,per cominicare tra pc e plc ho utilizzato un programma Hyper Terminal.

Sembra che questo programma possa fare al caso mio,ho provato ad eseguire la trasmissione tra plc e pc e funziona regolarmente solo che se faccio il contrario dalla parte plc non ricevo nulla.

Sul plc ho utilizzato la funzione F161_MRCV dove sul parametro "s_Port" ho inserito 1 ,su "d1_Start" ho inserito il primo indirizzo dell'Array che mi sono creato e su "d2_end" ho inserito l'ultimo indirizzo dell'Array.

Quello che devo fare per me è un aplicazione un po insolita perche e la prima volta che mi cimentare in queste aplicazioni,inoltre non sono molto pratico di Hyper Terminal.

Qualcuno ha mai provato a ricevere un fomtato .txt da un pc e interpretarlo sul plc,ve ne sarei veramentre grato se qualcuno saprebbe darmi qualche dritta.

Grazie


Inserita:

Ciao.

American Standard Code for Information Interchange (ASCII).

Non conosco a memoria la funzione F161_MRCV ma ciò che vuoi fare è perfettamente ottenibile.

Velocità, baudrate, parità sono Ok ?

F161_MRCV avrà una limitazione ipotesi 256 Word !!!.

ricorda 1 Word = 2 Byte; valore minimo byte=00 valore massimo FF.

Ciao Occupa 4 byte quindi 2 Word del tuo arrray

comunque inizia a mandare il tuo array nelle aree 'D'

poi spedisci un file con scritto questo testo inserendo "abcd" senza virgolette, a questo punto vai sul lato plc e visualizza i primi 2 registri del tuo array dovrai trovare il valore "6162" "6364" oppure "6261" "6463" la dove "a=Hex 61" "b... ecc vedi tabella ascii.

Il fatto che siano inverititi o meno dipende dall'interpretazione della funzione F161_MRCV

Inserita:

Ciao GixRamones

Velocità, baudrate, parità sono Ok ?

Le velocita sono :

Settaggio porta :Programma controllato [General Purpose]

Velocita: 9600

Lunghezza trasmissione:8bit

parita:nessuna

bit di stop :1bit

le velocita penso che siano giuste,perche se provo a spedire una stringa al pc lui riceve correttamente.

Quello che mi ai indicato nel post sono prove che avevo gia fatto,nell'istruzione F161_MRCV il parametro s_port come va impostato,io sto utilizzando un plc FPE e sto facendo le prove dalla porta aggiuntiva.

Per il resto ho seguito l'esempio nella Guida in linea,in HypeTerminalr al difuori delle impostazioni della porta di comunicazione ci sono qualche altre impostazioni che potrebbero dare problemi nell'invio di dati?.

L'operazione che ho fatto per inviare un file è:

ho creato un file di testo.TXT con al suo interno un astringa "ABCD" poi ho aperto il programma Hyper Terminal e ho settatto la porta di comunicazione su COM1 e ho inserito i valori citati prima,poi ho abilitato l'istruzione F161_MRCV con l'ingresso EN.

Successivamente sono andato su HypeTerminalr su Trasferimento>Invia File di testo e ho selezionato il file che mi avevo creato,una volta fatto questo sono andato sul plc e scorrendo l'Array che mi ero creato tutti i valori sono a zero.

Secondo te dove la procedura che ho eseguito è corretta o mi sono tralasciato qualche passaggio per strada.

Grazie

Roberto Gioachin
Inserita:

Scusa "pineto", ma mi sà che stai cercando di fare una cosa che il plc non è in grado di fare.

Per prima cosa, stai usando un FP0 come hai scritto nella prima descrizione o un FPe come hai scritto nella seconda?

Altra cosa molto importante, il PLC non è un PC, quindi non puoi utilizzarlo per inviare o ricevere file, ma bensì stringhe.

Questi PLC (come qualsiasi altro) comunicano da e verso la seriale attraverso un protocollo o comunque a mezzo stringhe, non è di certo in grado di riconoscere file, indipendentemente dal formato.

Metodo di comunicazione via mewtocoll: (computer link)

Il plc risponde a richieste di lettura o scrittura che gli vengono fatte a mezzo di questo protocollo proprietario, di tipo ascii.

Se il PC non invia stringhe correttamente codificate secondo questo protocollo, il plc non risponde o risponde con un codice di errore.

In questa configurazione il pc è master ed il plc è slave, possono essere collegati sulla stessa rete (RS485) più slave ma un solo master.

Con RS232 si può fare solamente un collegamenti 1:1

Metodo di comunicazione a protocollo libero: (general comunication)

Il plc diventa master della rete, sul plc si deve compilare la stringa da inviare, è possibile creare protocolli ascii o esadecimale, oppure inviare byte senza nessuna particolare codifica,

naturalmente il pc deve saper interpretare questi dati, che ancora una volta non possono essere dei file.

Per utilizzare la comunicazione in questo modo, devi definire un'area di memoria, intesa come una serie continua di dataword (DT) da utilizzare come buffer di ricezione.

Utilizzando questa configurazione e l'istruzione "F144" (per FP0) puoi fare il modo che il plc possa ricevere delle stringhe nel buffer, sulle quali puoi inserire dei valori o dei caratteri,

una volta ricevuti i dati, devi usare qualche istruzione del plc per decodificarli, altrimenti potrebbero essere visualizzati come dei valori numerici a 16 bit.

Altri metodi di comunicazione:

I plc più moderni possono utilizzare il protocollo Modbus RTU, si tratta di un protocollo esadecimale molto usato da vari produttori di apparecchiature quali inverter, termoregolatori ecc.

Anche in questo caso i dati non possone essere inviati se non utilizzando le regole di questo protocollo. Quindi niente file ma stringhe.

Il plc non gestisce la seriale nello stesso modo del pc, quindi bisogna rispettare regole che sono descritte sui manuali del produttore.

Sicuramente non posso essere stato esauriente, ma spero di averti dato un'idea di come si possono inviare e ricevere dati da un plc, naturalmente con un pò di pazienza e fantasia si riescono a fare moltissime cose, ma non tutte.

Ciao

Roberto

Inserita:

Roberto Gioachin grazzie per la delucidazione.

Per prima cosa, stai usando un FP0 come hai scritto nella prima descrizione o un FPe come hai scritto nella seconda?

Si,in effetti ho fatto un po di confusione, sto utilizzando un FPe

Altra cosa molto importante, il PLC non è un PC, quindi non puoi utilizzarlo per inviare o ricevere file, ma bensì stringhe.

si anche qui non c'è stata un po di incomprensione quello che devo fare e inviare delle stringhe che si trovano all'interno del file TXT,questo credo che si possa fare.

Da quello che ai scritto nel post precedente credo che il protocollo ideale per quello che dovrei realizzare e la seconda (general comunication)

in modo da crearmi un buffer dove vado a scrivere tutte le stringhe che ricevo.

Al di fuoiri del plc,secondo te con Hyper terminal si risce a fare quello che dovrei fare ho mi occorre un altro programma.

Chiarito un pò il tutto, se con gli elemti che ho a disposizione se si riesce a fare quello che dovrei fare tu cosa mi consigli di fare,come ho scritto nel mio primo post ho provato ad inviare delle stringhe da plc a pc e riesco a comunicare,pero se faccio il contrario non ricevo nulla.

Grazie

Roberto Gioachin
Inserita:

Come già ho scritto, con un pò di fantasia si riescono a fare molte cose.

Se configuri il PLC come General comunication, puoi effettivamente riuscire a ricevere dati senza dover utilizzare nessun tipo di protocollo, quindi questa è la via che si deve scegliere in questi casi.

Come si deve fare:

In questa configurazione il PLC è master ed il pc è slave, sul plc viene configurata la zona di memoria (DT) da utilizzare come buffer di ricezione.

Dal plc deve partire la richiesta per la trasmissione, quindi si deve lanciare una istruzione "F144" impostando il numero di byte uguale a zero, in questo modo il buffer di ricezione viene azzerato e la comunicazione viene inizializzata.

Entro un certo tempo, (prima che scada il tempo di attesa del plc) il pc deve rispondere con una stinga libera, questa la troverai memorizzata sulle DT che hai configurato come buffer di ricezione.

Naturalmente questi dati possono essere semplicemente dei numeri o dei caratteri codificati in ascii, questo è un problema tutto tuo.

L'unica cosa che devi verificare, è che se invii dei numeri la trasmissione deve essere impostata su 8 bit, se invii caratteri, la trasmissione può essere anche 7 bit.

Ciao

Roberto

Inserita:

Roberto scusami ma purtroppo in queste aplicazioni sono un neofita,dato che è la prima volta che provo a fare determinate cose con un PLC.

Ti chiedo un po di pazienza per darmi il tempo di capire come affrontare il tutto

Dal plc deve partire la richiesta per la trasmissione, quindi si deve lanciare una istruzione "F144" impostando il numero di byte uguale a zero, in questo modo il buffer di ricezione viene azzerato e la comunicazione viene inizializzata.

Questa è un operazione che avevo gia fatto,per la ricezione ho tolto il fronte di salita davanti all'istruzione F144 e ho impostato DT0 sull'area di ricezione e 0 sui byte da inviare,come da esempio del manuale di programazione.

il pc deve rispondere con una stinga libera, questa la troverai memorizzata sulle DT che hai configurato come buffer di ricezione.

Quando inizializzo la comunicazione sulla DT0 non vedo scritto nulla e sempre a zero,cambia lo stato solo se imposto un valore differente da 0 sul numero di byte da inviare

Una volta impostata l'istuzione F144 l'ho abilitata e sono andato su Hyper Terminal e ho provato ad inviare qualcosa scorrendo il buffer "partendo da DT0" tutti i dati sono a zero,non ricevo nulla.

Tu ai mai provato a fare qualcosa del genere con questi plc e con Hyper Terminal?In Hyper Terminal ci sono delle impostazioni particolari oltre alla porta di cominicazione

Tiallego due immagini di quello che ho realizzato

immagine1wb6.png

immagine2et5.png

Inserita:

Ciao.

le velocita penso che siano giuste,perche se provo a spedire una stringa al pc lui riceve correttamente.
.

hai usato hyper terminal per vederla !?

Allora nello stesso modo Hyper terminal deve mandarla.

Le modalità di comunicazione e processo con eventuali protocolli te lo vedrai poi in seguito, ma ora tu devi essere sicuro di fare uscire i dati dalla seriale come piaciano al plc!.

Vediamo come puoi vedere se i dati escono dal pc?. Collegati con un cavo null-moden ad un altro pc e con le com dei due pc tramite seriale ti passi i files.

Hmm comunque Hyper terminal funziona lascia perdere ciò che ho scritto riguardo ai 2 pc.

Dicevi che hai ricevuto la stringa, postala!.

Posta i valori delle Dt0, Dt1, ecc. ed il valore della stringa che hai letto con Hyper .

Non è che Mewtocoll ha bisogno di qualche carattere ad inizio stringa Tipo "[at],#,ç,§" ? se hai ricevuto qulcsa postalo!

Se usi ASCII il protocollo Va ASCII, se no le stringhe che invii devono rispettare il protocollo Mewtocoll, che non conosco. Non ricordo, hai solo una seriale su quel plc?

Inserita:
Dicevi che hai ricevuto la stringa, postala!.

Posta i valori delle Dt0, Dt1, ecc. ed il valore della stringa che hai letto con Hyper .

No! non rieso a ricevere nulla,le deu DT sono sempre a zero,su Hyper terminal non risco a vedere nulla,nel senso che se faccio "invia file di testo" la schermata rimane sempre bianca.

Invece se faccio "Aquisisci testo" e poi provo ad inviare una stringa dal plc sulla schermata compare quello che ho inviato.

Come posso essere sicuro che da Hyper terminal escono le stringhe che si trovano nel file?

Inserita:

Ho provato a far comunicare 2 pc con Hyper terminal,ho notato che se provo ad inviare una striga dall'altra parte non ricevo nulla.

Sembrerebbe che il problema venga dal pc dato che non butta fuori nulla,ho provato a fare una ricerca su Google di Hyper terminal ma non ho trovato nulla.

Inserita:

Ciao.

Vediamo come puoi vedere se i dati escono dal pc?. Collegati con un cavo null-moden ad un altro pc e con le com dei due pc tramite seriale ti passi i files.

Invece se faccio "Aquisisci testo" e poi provo ad inviare una stringa dal plc sulla schermata compare quello che ho inviato.

Ok fatto questo azzera le D e poi invia il file che hai appena ticevuto?

comunque

Dicevi che hai ricevuto la stringa, postala!.

Posta i valori delle Dt0, Dt1, ecc. ed il valore della stringa che hai letto con Hyper .

Inserita:
Vediamo come puoi vedere se i dati escono dal pc?. Collegati con un cavo null-moden ad un altro pc e con le com dei due pc tramite seriale ti passi i files

Ho provato con un avetto seriale con 2 e 3 invertiti su di un lato ma non riesco a passarmi i file

Ok fatto questo azzera le D e poi invia il file che hai appena ticevuto?

comunque

Riisultato

Inserita:

dovresti aprire e bufferizzare il file , e poi spedire l'array di caratteri , con i terminatori messi per bene

(13 e 10 ) --> \n

leggi bene le informazioni sulla funzione del tuo plc, magari approfondisci il plc , magari trovi qualcosa che non sapevi

Inserita:

walterword scusami ma non capisco

dovresti aprire e bufferizzare il file , e poi spedire l'array di caratteri , con i terminatori messi per bene

(13 e 10 ) --> \n

mi potresti spiegare meglio quello che devo fare

grazie

Inserita:

Ciao.

Testo "abcd\n" lo vedi solo come "abcd".

se vuoi aggiungere "efg" nel caso1quello con \n finale avrai

"abdd

efg"

nel caso 2 senza \n avrai"abcdefg".

Ricevere ricevi ma... come dice walterword devi fare attenzione alla costruzione della stringa in fase di spedizione.

In pratica usa hyper terminal non per vedere on line ma per salvare su file. Poi con un editor (io ad esempio uso ultraedit)apri il file, solo editor tipo quelli ti permettono di vedere i caratteri nel formato Hex, e cosi potrai vedere i mitici (13 e 10). Tra l'altro leggo nel tuo set up che hai 'cr' come terminatore. lo hai messo ? o meglio nel file c'è ? al limite prima di chiudere il file vai a capo.

ecco una guida di hyperterminal

una delle tante.

La cosa strana è che tra 2 pc non riesci a passarti un file....

comunque se Hyper terminal funziona, beccati il file ricevuto, e rispediscilo al plc, in questo modo eviti di mettere a mano i caratteri su citati.

Non ricordo, hai solo una seriale su quel plc? , una configurazione della porta ascii eviterebbe di rispettare procedure che un protocollo come Mewtocoll (che non conosco) potrebbe richiedere prima di accettare una stringa in entrata. in questo caso solo il manuale specifico ti può chiarire il tutto.

Inserita:

un file e' composto da righe , ogni riga puo essere una stringa definita e limitata dai caratteri di cui sopra .

Quindi col pc devi creare un'applicazione , tipo in visual basic o affini , leggere il file ed i dati utili accodarli

in un buffer o meglio in un array di bytes o char .

Alla fine spedisci tutto il buffer o meglio l'array di char .

Se il file e' di testo , ogni riga si distingue dall'altra tramite i caratteri \n

Questo serve al parser che legge il file , per poter gestire ed interpretare i dati o le informazioni

Tu prova a fare un esempio piu semplice , crei ed assegni i valori ad un array di caratteri , per esempio :

Prendi 10 caratteri e li carichi in un array di 10 caratteri , poi li spedisci via seriale aggiungendo \n

i due caratteri sono il carriage return ed il salto alla riga successiva .

Il plc riceve la stringa , e qui bisona capire come funziona la funzione del plc che ti permette di leggere il buffer in arrivo

Normalmente , parlo per siemens con scheda CP340 , la scheda ti restituisce un bit che ti dice che il buffer e' pieno

e pronto ad essere processato , lo fanno tutti i processori e micro .

A questo punto hai nel plc un'area di memoria caricata con i caratteri spediti dal pc che dovrai interpretare qualora fossero dati , da caratteri a intero o float o altro , se invece sono comandi ascii liinterpreti e fa eseguire al plc quello che deve .

Se usi hyperterminal , e vuoi spedire i dati dal plc , studia bene come funziona la trasmissione , setta bene i parametri , ed informati se devi aggiungere i caratteri \n oppure se il plc , la sua funzione , li aggiunge automaticamente

Normalmente con un microcontrollore , con una riga di printf("stringa\n") viene inviata la stringa ed hyper la visualizza

Inserita:

non credo che il tuo plc permetta di spedire stream di dati , quindi files ......

Ricordati che nella semplicità di una comunicazione , che sia seriale , ethernet o WiFi , alla fine sono sempre array di bytes che vengono spediti .Se li dichiari come char (caratteri ) saranno gestiti e visualizzati graficamente come tali , "un carattere

e' la stessa cosa di byte " e viceversa .......

Vedi se la tua funzione di restituisce un bit che ti dice che il job di comunizione e' attivo , in questo caso non scrivere sulla seriale con la F144 , scriverai quanco il buffer di scrittura sarà vuoto .

Vedi bene anche il settaggio di hyperterminal , in >>> impostazioni ci sono dei flags che ti dicono qualcosa sui caratteri terminali in ricezione ed invio , insomma ..... fai qualcosa .... :)

Inserita:
quello con \n finale

Scusa ma questa \n finale cosa indica

Tra l'altro leggo nel tuo set up che hai 'cr' come terminatore. lo hai messo ? o meglio nel file c'è ?

'cr' c'era di default cosa sta ad indicare,e come faccio a metterlo nel file

Non ricordo, hai solo una seriale su quel plc?

si ho solo una seriale aggiuntia

Quindi col pc devi creare un'applicazione , tipo in visual basic o affini , leggere il file ed i dati utili accodarli

in un buffer o meglio in un array di bytes o char .

Qui andiamo un po sul difficile,non cocnosco visual basic pensavo che hyper terminal riuscisse a fare quello

Prendi 10 caratteri e li carichi in un array di 10 caratteri , poi li spedisci via seriale aggiungendo \n

i due caratteri sono il carriage return ed il salto alla riga successiva

in che modo carico 10 caratteri in unarray sul pc?

walterword,ho seguito il tuo consiglio di dare uno sguado alle impostazioni di hyper terminal ho provato a spuntare in impostazioni ascii l'eco dei caratteri è quando spedisco da pc a plc sul pc vedo quello che in teoria spedisce al plc ma continuo ad non ricevere nulla.

Purtroppo come dicevo in un mio precedente post sono neofita in comunicazioni con dispositivi esterni perche è la prima volta che mi ci cimento.

Sono veramente in un bel guaio :ph34r:

Oltre alle soluzioni che mi ai indicato ci sono altri sistemi diciamo un pò piu facili per inviare delle stringhe di un file ad un dispositivo esterno,perche da quello che ho capito il problema sembrerebbe più verso il pc che da parte del plc,giusto?

Grazie

Roberto Gioachin
Inserita:

Scusa se ti rispondo a singhiozzo, ma ... non sono proprio in ferie.

Le informazioni che ti hanno dato i vari amici del forum, sono molto professionali, ma mi pare di aver capito che non ti hanno chiarito molto, certo tu hai dichiarato di essere un neofita.

Il mio consiglio a questo punto è quello di abbandonare Hiper terminal, e di cercare in rete un "tester per seriale", ne trovi molti di free.

Se sei fortunato puoi trovare dei tester che possono rispondere quando dalla seriale remota, in questo caso il plc, arriva una determinata stringa, non chiederemi i nomi o gli indirizzi, dovrei cercare nel mio archivio ed ora non ho proprio il tempo.

Quando in fpwin configuri la seriale del plc come general comunication, ti viene chiesto di inserire la DT di partenza e la quantità di word da utilizzare come buffer di ricezione.

Su queste dataword tu potrai trovare i dati che invii dal pc al plc.

L'istruzione F144 è indispensabile per abilitare la seriale alla ricezione di dati.

La prima parte del lavoro, quindi l'hai già fatta, infatti tu hai inviato una stringa e questa è arrivata sul tuo pc, nello stesso momento però, dovresti inviare la stringa dal pc al plc, se aspetti troppo, il plc non accetta più i dati. I tester per seriale ti possono aiutare proprio in questo.

Il plc panasonic non si comporta come la scheda cp340 siemens menzionata da un collega, il plc non ti dice quando il buffer è pieno, a meno che tu non scriva un programma specifico per identificare la condizione, ma questa strada io non te la consiglio.

Prima di lanciare l'istruzione F144, salva il contenuto del tuo buffer di ricezione, quindi lancia l'istruzione F144 che cancellerà il buffer e predispone il plc per ricevere nuovi dati.

Io credo che per prima cosa tu devi fare in modo di ricevere questi benedetti dati, poi puoi sbizzarrirti con tutte le possibilità che ti ofre questo plc, che a me non ha mai creato problemi.

Ciao

Roberto

Roberto Gioachin
Inserita:

Ancora una considerazione, mi pare di aver visto che il registro 417 "ind iniziale buffer di ricezione com1" è impostato su "0", significa DT0 e la capacità del buffer (registro 418) è impostato su 250, questo significa che il tuo buffer và da DT0 a DT249, ma poi tu hai usato da DT100 in poi per i dati da trasmettere, naturalmente questo non và bene.

Ti consiglio poi di impostare il registro 413 su 8 bit, per il resto può andare bene.

Io ti posso assicurare di aver già letto con questo plc. dati inviati in continuo da bilance ed altre apparecchiature, non senza incontrare problemi, ma senza mai dover rinunciare. Quindi... insisti.

Ciao

Roberto

Inserita:
Scusa se ti rispondo a singhiozzo, ma ... non sono proprio in ferie

non preocuuparti,grazie lo stesso

certo tu hai dichiarato di essere un neofita.

Purtroppo SI

l mio consiglio a questo punto è quello di abbandonare Hiper terminal, e di cercare in rete un "tester per seriale", ne trovi molti di free.

Si! in effetti ecredo che sia la cosa migliore da fare,prima devo verificare che riesco a comunicare tra i due e poi passo al resto

Quando in fpwin configuri la seriale del plc come general comunication, ti viene chiesto di inserire la DT di partenza e la quantità di word da utilizzare come buffer di ricezione.

Su queste dataword tu potrai trovare i dati che invii dal pc al plc.

L'istruzione F144 è indispensabile per abilitare la seriale alla ricezione di dati.

Quindi i dati che ricevo li trovo dalla DT configurata in configurazione, e dovro controllare quel buffer li no quella inserita sull'istruzione F144.

Ancora una considerazione, mi pare di aver visto che il registro 417 "ind iniziale buffer di ricezione com1" è impostato su "0", significa DT0 e la capacità del buffer (registro 418) è impostato su 250, questo significa che il tuo buffer và da DT0 a DT249, ma poi tu hai usato da DT100 in poi per i dati da trasmettere, naturalmente questo non và bene.

Ti consiglio poi di impostare il registro 413 su 8 bit, per il resto può andare bene.

Ok

Grazie

Inserita:

Ho fatto una ricerca come consigliato da Roberto Gioachin e ho trovato questo

SITO

con questo programma risco a cominicare esntrambi i lati tra pc e plc e plc e pc.

L'unica cosa che non ho capito e perche se devo cominicare tra pc e plc non devo abilitare l'istruzione F144,succede che non riesco a riempiere il buffer,con l'istruzione abilitata riempio solo la prima DT

Roberto Gioachin
Inserita:

Non è che ho capito molto bene la tua domanda, ma intanto mi pare di capire che un passo avanti l'hai fatto.

Adesso prova a fare un'altro passo.

La funzione F144 deve essere eseguita su un fronte di salita, nel momento in cui viene eseguita, il buffer si cancella e la porta è disponibile per ricevere nuovi dati.

Quindi prima di eseguire questa istruzione devi copiare il contenuto del buffer in un'artra zona per poter elaborare i tuoi dati.

Una cosa importante a questo punto è la gestione del "cr" (terminatore), quindi quando invii una stringa da pc a plc, aggiungi alla fine il codice "cr", il plc è in grado di riconoscere l'arrivo di questo carattere e ti informa con uno "special relè" R9032, guardati bene il manuale, in quel momento puoi essere sicuro che la trasmissione è terminata e puoi quindi eseguire un'altra volta l'istruzione F144 (dopo aver salvato i dati contenuti sul buffer).

Se non vuoi usare "cr", il plc ti permette di essere configurato per usare altri caratteri come terminatore.

Ancora una cosa:

Sulla prima dataword del buffer, trovi il numero di byte ricevuti, questo dato ti può servire per capire quando la trasmissione si arresta e per sapere quanti dati devi esaminare.

Per il resto, come già ti ho detto, dipende tutto dalla tua fantasia.

Ciao

Roberto

Inserita:
on è che ho capito molto bene la tua domanda

Ho risolto

mi pare di capire che un passo avanti l'hai fatto

Urca se lo fatto !!!

Una cosa importante a questo punto è la gestione del "cr" (terminatore), quindi quando invii una stringa da pc a plc, aggiungi alla fine il codice "cr"

Come faccio a inserire il "cr"

Sulla prima dataword del buffer, trovi il numero di byte ricevuti, questo dato ti può servire per capire quando la trasmissione si arresta e per sapere quanti dati devi esaminare

Si in effetti mi indica quanti caratteri ci sono nel mio buffer.

Una volta fatto eseguite le prove che mi ha indicato ,come mi consigli di procedere per interpretare delle stringhe da un file TXT,e il caso che torno a smanettare con Hyper Terminal?

Secondo le prove che abbiamo fatto secondo te il problema e su Hyper Terminal che non dialoga con il Plc nel senso che invia dei caratteri che il plc non riesce ad interpretare ,ho forse c'è qualche altro problema ammonte che non ho individuato.

Grazie

Roberto Gioachin
Inserita:

Il "cr" è un carattere speciale, per inserirlo devi aggiungere "0D" in esadecimale, Oppure CR come carattere, viene riconosciuto in automatico.

Alcuni tester lo inseriscono utilizzando il tasto "enter" del computer.

Hyper terminal, non è proprio il miglior strumento in questi casi, diventa molto più interessante quando lo colleghi ad un modem, infatti è nato per questo.

Se il tuo problema è quello di prendere un file testo ed inviare il contenuto al plc, allora credo che serva qualcosa di più soffisticato.

Una buona soluzione sarebbe quella di costruire un programmino in basic che possa prendere i dati da un file per inviarli al plc, ma non sò se per te questa strada sia praticabile.

Ora non sapendo quale sia lo scopo del lavore che stai facendo, ho difficoltà a dirti quale sia la miglior soluzione, infatti io pensavo che la tua fosse solamente voglia di provare a far comunicare il pc con il plc, ma ora mi pare di capire che hai delle esigenze un pò piu particolari.

Generalmente quando si vuole instaurare una comunicazione per lo scambio di dati, si devono considerare alcuni aspetti importanti.

Per prima cosa si deve stabilire chi è che comanda, quindi chi è il master e chi è lo slave.

Se per esempio il pc deve inviare dati quando lo decide lui, è giusto che il master sia appunto il pc, in questo caso sul pc deve essere inserito un programma specifico per quelle determinate azioni, inoltre il pc deve conoscere il protocollo con cui comunicare le informazioni al plc.

Per fare questo, il plc deve essere configurato come computer link ed il pc deve comunicare attraverso il protocollo del plc, (mewtocoll).

Se invece il pc invia sempre dati in continuo, nel modo in cui si comporta per esempio una bilancia, allora sarà il plc il master, in quanto è lui che decide se ricevere i dati o no.

L'applicazione che stai provando è proprio quest'ultima.

Naturalmente in questo caso è previsto che il plc può decidere di ignorare alcuni dati, prendi ad esempio la bilancia che invia di continuo l'informazione del peso, ma se al plc non serve sempre conoscere il peso, può decidere di interrompere la lettura dei dati.

Ora arrivando alla tua richiesta, non mi pare che per inviare il contenuto di un file dal pc al plc, sia corretto utilizzare questo ultimo metodo, in quanto non potrai mai essere sicuro che tutti i dati siano arrivati a destinazione.

Sembra più corretto scrivere un programma in basic, che gestisca il protocollo mewtocoll e che inoltre sia in grado di capire se si è verificato un errore di trasmissione.

Non sò se ho ancora le sorgenti, ma io parecchi anni fà ho realizzato un programmino in basic, che legge i dati da un file e li invia al plc attraverso il protocollo mewtocoll, mi ricordo che non si trattava di un'operazione particolarmente complessa.

Se riesco a trovare qualcosa nei prossimi giorni ti faccio sapere, naturalmente è da considerare solo a scopo di esempio, visto che si tratta di una cosa anche abbastanza datata.

Spero di non averti creato confusione invece che aiutarti.

Ciao

Roberto

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