[RISOLTO] RS 232 e plc omron

Ciao a tutti, ho un problema di comunicazione in rs232 tra un plc omron e arduino uno.
Se comunico dati da arduino a plc non ho problemi (utilizzo Serial.write(valore))

Mentre se provo a inviare dati da plc a arduino, quest’ultimo non riceve nulla, utilizzo la funzione Txd (usata tante volte con altri dispositivi e non ho mai avuto problemi)

Ho testato la stringa che invio dal plc sul terminal di un pc e trasmetto quello che voglio, quindi ok. Ho testato la porta dell’arduino e è ok. Non so più cosa testare

Se qualcuno ha qualche idea ringrazio

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Chiedo scusa, presentazione fatta. Ero preso dal mio problema che mi affligge da giorni, non sgarrerò più.

Grazie

... se magari metti il codice Arduino che stai utiizzando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) proviamo a darci un'occhiata :wink:

Guglielmo

Come dicevo sto testando la comunicazione quindi il mio listato è molto semplice:

#define LED 13

void setup() {
  pinMode(LED,OUTPUT);
  Serial.begin(9600);
  digitalWrite(LED,LOW);
}

void loop() {
  //Se arriva qualche cosa accendo il led
  if (Serial.available()>0){
    digitalWrite(LED,HIGH);
  }
}

Il codice che ho realizzato la prima volta era più complesso ma come ho scritto funzionava solo da Arduino a PLC, dato che da PLC a Arduino non andava ho realizzato un codice più semplice per vedere se va o non va, il led mi rimane sempre spendo, la porta seriale del PLC l'ho impostata 8,1,N,9600 infatti come ho scritto sopra i dati il PLC li riceve benissimo.

Non ho altre idee

EDIT: Mi sono dimenticato di scrivere che ho fatto un altro test,visto che il flag di "Port Ready del PLC una volta inviato il messaggio andava a OFF e restava a OFF", tipicamente rimane a off giusto il tempo di inviare il messaggio poi torna ON, quindi ho fatto il test che spiego sotto:

  1. Inviato il messaggio dal PLC;
  2. Arduino rimane il led spento;
  3. tolgo il cavo e lo metto al PC;
  4. nel terminale del PC arriva il messaggio;

Scusa, solo per pura curiosità, hai provato a mettere Serial.available>=0 ?

Io ti consiglio una cosa ...
... NON usare la vera seriale di Arduino UNO (... lasciatela per il monitor seriale ed i messaggi di debug che potrai inserire nel programma) ed utilizza la SoftwareSerial su due altri pin (ti consiglio il pin 10 RX ed il pin 11 TX ... per ragioni di compatibilità con altre schede).

Inoltre ... ho già visto mlte volte problemi con cose collegate alla vera seriale, quindi ... :wink:

Guglielmo

miky_police:
Scusa, solo per pura curiosità, hai provato a mettere Serial.available>=0 ?

Scusa che senso ha? :o

Se non c'è nulla da 0, se c'è qualche cosa da il numero di bytes disponibili, quindi ... in ogni caso l'IF è verificato !

Guglielmo

ciao lcfc,

se usi questo codice ed invii qualche cosa da monitor seriale dell'ide di arduino il led si accende?

EDIT: @Guglielmo: penso volesse verificare che arduino in effetti riconosca i byte in ingresso (penso)
EDIT2: eh eh ... non avevo visto che rispondevi a miky_police

ORSO2001:
EDIT: @Guglielmo: penso volesse verificare che arduino in effetti riconosca i byte in ingresso (penso)

Ci sarebbe intanto da capire COME riceve questi dati da PLC ? Linea RS485 con adattatore TTL ? Li simula sulla USB da monitor seriale ? ecc. ecc.

Io ho dato per scontato che usi un adattore (PLC <--> Arduino) che collega hai pin 0 ed 1 ... altrimenti, se usa la USB ... ovviamente il discorso cade.

Guglielmo

Ci sarebbe intanto da capire COME riceve questi dati da PLC ? Linea RS485 con adattatore TTL ? Li simula sulla USB da monitor seriale ? ecc. ecc.
Io ho dato per scontato che usi un adattore che colega hai pin 0 ed 1 ... altrimenti, se usa la USB .. ovviamente il discorso cade.
Guglielmo

si esatto...sarebbe stata la domanda successiva...cioè come sono collegati i due dispositivi...

Grazie a tutti per le risposte.

Io ti consiglio una cosa ...
... NON usare la vera seriale di Arduino UNO (... lasciatela per il monitor seriale ed i messaggi di debug che potrai inserire nel programma) ed utilizza la SoftwareSerial su due altri pin (ti consiglio il pin 10 RX ed il pin 11 TX ... per ragioni di compatibilità con altre schede).

Avevo pensato di usare una softwareserial ma da qualche parte avevo letto che poteva creare problemi con la ricezione(non potevo usare myseriale.available()) allora puntavo alla sua seriale. Proverò utilizzando una software serial poi posterò i risultati, solo che queste prove le posso verificare col pc che ho al lavoro e al momento l'ho lasciato in ufficio, testerò domani sera (se la neve mi permetterà di arrivare al lavoro :))

Ci sarebbe intanto da capire COME riceve questi dati da PLC ? Linea RS485 con adattatore TTL ? Li simula sulla USB da monitor seriale ? ecc. ecc.

Utilizzo un max232 per adattare i livelli, ho collegato ai pin 0 e 1 e comunico con la seriale rs232 della cpu Omron. Ho ordinato un shield rs485 per provare ad usare il modbus(spesso lo uso al lavoro) ma ancora non mi è arrivato. Ho letto in rete che si può collegare un PLC omron via USB ma devo comprare lo shield USB Host per arduino, proverò anche con quello.

se usi questo codice ed invii qualche cosa da monitor seriale dell'ide di arduino il led si accende?

Sì si accende, col monitor dell'ide funziona tutto perfettamente, il led si accende.

Quello che non capisco è il Flag del PortReady del PLC che rimane perennemente a OFF dopo che invio il messaggio (il messaggio è 1 carattere per l'esattezza è: L), sono 10 anni che uso PLC Omron e questo flag ritorna a ON subito dopo aver spedito il messaggio, il fatto che rimanga nel buffer del PLC non mi convince

lcfc:
Avevo pensato di usare una softwareserial ma da qualche parte avevo letto che poteva creare problemi con la ricezione(non potevo usare myseriale.available())

... assolutamente FALSO, studiati il reference della SoftwareSerial che ti ho linkato. Le limitazioni sono sui pin utilizzabili, in funzione della scheda usata (per la UNO non ce ne sono) e sulla velocità che, oltre i 9600, comincia a dare qulche problemino ::slight_smile:

La vera porta seriale, con adattatori e moduli vari, al 90% da problemi ... lo abbiamo riscontrato tantissime volte con i moduli bluetooth HC-05, quindi ... dai retta, usa la SoftwareSerial e lascati la vera seriale per il debug.

Guglielmo

Io ho notato una cosa: ha fatto una prova, trasmesso ad arduino, non ha ricevuto, staccato cavo, attaccato al pc, ha ricevuto.
Ora, i bit non sono acqua, non rimangono nei tubi, rimangono nei buffer.
Se ho capito bene significa che nel buffer trasmissione del plc sono rimasti i bit e perché sono rimasti?
Date un occhio allo handshacking, non vorrei che il plc richieda handshaking hardware. Casomai ponticellare ...

Standardoil:
... Se ho capito bene significa che nel buffer trasmissione del plc sono rimasti i bit e perché sono rimasti?
Date un occhio allo handshacking, non vorrei che il plc richieda handshaking hardware. Casomai ponticellare ...

Vedo solo ora l'Edit che ha aggiunto ...

... SI, ho idea che, oltre ai possibili problemi che la seriale HW di Arduino UNO a volte crea, c'è sicuramente un problema di mancanza di un qualche cosa che dia al PLC l'ok a trasmettere. Magari controlla il DTR o qualche altro segnale che, con la seriale di Arduino, sicuramente manca ... ::slight_smile:

Guglielmo

Grazie. Stasera proverò. Handshake del plc l’ho disabilitato. In altre occasioni ho connesso solo tx, rx, gnd e non ho mai avuto problemi, ma proverò a ponticellare anche quelli così mi tolgo tutti i dubbi. Grazie mi siete stati molto utili, vi aggiorno appena testo queste cose

EDIT: Testato con porta SoftwareSerial e avevo ancora problemi

Se ho capito bene significa che nel buffer trasmissione del plc sono rimasti i bit e perché sono rimasti?
Date un occhio allo handshacking, non vorrei che il plc richieda handshaking hardware. Casomai ponticellare ...

ho realizzato il ponte per handshake e funziona. Tutto OK.

Vorrei ringraziare tutti per il supporto datomi, mi sono perso nel più banale degli errori.....

Grazie ancora