Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Linguaggio C E Porta Seriale - librerie


Messaggi consigliati

Inserito:

Salve Ragazzi

desideravo sapere se qualcuno può indicarmi quali sono le librerie per il linguaggio C, contenenti funzioni per la gestione delle porte seriali....Io uso il compilatore DEV C++...Un'altra domanda: come faccio ad avviare un'altra applicazione dal mio eseguibile scritto in C?

grazie ciao


Inserita:

Puoi usare le API di Windows (se il tuo eseguibile è per windows) CreateFile, WriteFile e ReadFile.

Per lanciare un altro eseguibile CreateProcess.

Ciao

Inserita:

Ragazzi ho risolto con il Qbasic, lo so è antiquato come linguaggio ma ha la funzione OPEN COM che consente di comunicare con la porta seriale....

ciao B)

Inserita:

Ragazzi

ho un leggero (forse grosso) problema.

In pratica acquisisco da µcontrollore dei dati provenienti da un sensore. Diamo per assodato che i dati siano corretti, in quanto ho avuto modo di provare il sistema e non ci sono problemi a livello hardware.

Gestisco la comunicazione seriale tramite QBASIC solo che nel convertire gli ASCII provenienti dal µControllore, c sono delle cifre errate, ovvero che non rientrano nel range dei numeri che può mandare il µcontrollore. ribadisco che ho avuto modo di verificare la correttezza dei dati mandati dal µcontrollore, e che l'algoritmo di conversione che utilizzo per la conversione dei dati è stato già verificato. Quindi mi chiedo se è un problema intrinseco del QBASIC oppure?

Non credo sia un problema di velocità di comunicazione (uso 9600 baud), e quindi il PC perde tempo (clock del PC 266 MHZ) nell'eseguire la varie operazioni (di controllo e di scrittura su hd), tra l'altro trasferendo solo a video (divrebbe essere + veloce la scrittura) ho la stessa problematica.

avete dei suggerimenti? :blink:

Se non sono stato chiaro potete chiedere magari risolviamo sto problema.

Grazie ciao :huh:

Inserita:

Le impostazioni come Bit di Dati / Parita' / Bit di Stop sono corrette ?

Ciao :)

Inserita:

Secondo me sono disturbi nella comunicazone prova a implementare un byte di controllo di comunicazone come nei PLC se provi a guardare ad esempio nei manuali omron come avviene la comunicazione con la seriale

alla fine di ogni stringa l'ultimo carattere si chiama FCS e si ottiene tramite or esclusivo dei caratteri trasmessi,

tra l'altro a pagina 334 del manuale di programmazione vedi un esempio in basic per calcolarlo

Ciao, Fabrizio

Inserita:

Ciao,

hai provato a verificare, ad esempio con Hyperterminal, se il PC riceve i caratteri ASCII corretti?

Ciao

Inserita: (modificato)

Le impostazioni come Bit di Dati / Parita' / Bit di Stop sono corrette ?

Si, credo di si in quanto scrivo questa funzione:

OPEN "COM1:9600,N,8,1,CD0,CS0,DC0,OP0,TB2048,RB2048"

e poi ne ho la conferma in quanto nella E²PROM del PIC ho scritto delle frasi che trasferisco attraverso la seriale e leggo correttamente a video.

hai provato a verificare, ad esempio con Hyperterminal, se il PC riceve i caratteri ASCII corretti?
Modificato: da Pablo78
Inserita:

Scartabellando su internet ho trovato un'articolino che ripota un esempio:

OPEN "com1:9600,n,8,1,CD0,CS0,DS0,RS" FOR INPUT AS #1
readit:
' The stamp needs these next two lines to clear the DTR bit on
' com port 1
tcmp = INP(&H3FC)
OUT &H3FC, tcmp AND 254
' Take in the bytes one after another: Stamp is sending them in
' the form space,space,number or space,number,number or number,
' number,number for the digits between 0 and 999.
' The "READ IT" loop grabs three digits:

Se ho capito bene, dovrebbe prendere i byte ricevuti uno dopo l'altro e mandarli sotto forma :

"SPAZIO-SPAZIO-NUMERO" oppure "SPAZIO-NUMERO-NUMERO" oppure "NUMERO-NUMERO-NUMERO"...

Questo si ricollega al fatto che se io mando semplicemente un carattere alla seriale e poi ricevendolo lo trasferisco ad un file, scriverà la cifra + alcuni spazi. Può essere che ciò è dovuto al fatto che i caratteri codificati in ASCII vanno da 0 a 255 e quindi se mando un carattere corrispondente a 5 riceverò "spazio-spazio-5" se invece è 60 avrò "spazio-6-0" mentre per 235 "2-3-5". Adesso come dice la mia ragazza "cavoletto marcio!!" :o ,come faccio a risolvere? :blink:

Spero che queste deduzioni servano almeno a qualcuno....... <_<

Ciao

Paolo

Inserita:
OPEN "COM1:9600,N,8,1,CD0,CS0,DC0,OP0,TB2048,RB2048"  FOR RANDOM AS #1 'APERTURA COM1
Inserita:

Ragazzi dopo estenuanti e molteplici esperimenti ho scovato e risolto il problema.....

il programma, partita l'acquisizione, non so per quale arcano motivo si "mangia" 1 byte che non scrive sul file.

In pratica devo convertire in decimale numeri composti da due byte in range che va 0000 a 03FF (0÷1023) e da

FFFF÷FC01 (-1÷-1023), ciò è dovuto al fatto che ho un modulo A/D a 10 bit e che le sottrazioni che avvengono a livello (assembler) in complemento alla base. Quello che succedeva era invece che apparivano cifre tipo 1280, oppure ±255 ecc. quando io acquisivo massa flottante!!.....Infatti adesso nel file ho cifre che non vanno aldilà del -4÷+4 con la maggior parte dei numeri a 0.

Quindi per portare le cose sulla strada visto che non posso recuperare quel 1°byte, gli faccio mangiare pure il 2° in maniera tale che il resto dei byte in arrivo siano accoppiati perfettamente. Ho fatto diverse prove e le cose sembrano funzionare.... :D

Speriamo che si mantengano così fino alla presentazione di questo lavoro..... :huh:

Ciao e grazie a tutti

Paolo

Inserita:

Ma non si riesce proprio a fare qualcosa, per comunicare con la seriale tramite C?

So che esiste la libreria bios, con le funzioni bioscom ecc.oppure la dos, con file header dos.h...

Aiutatemi

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