Ho eseguito la connessione seriale RS-232 in C++ utilizzando il compilatore a 16 bit (stavo usando Turbo C++ IDE). Comprendeva il file di intestazione bios.h
che contiene tutte le funzioni richieste per la lettura dei valori dalla porta. Ora voglio leggere il valore dalla porta seriale usando il compilatore Mingw C++ a 32 bit. Sto usando Dev CPP come IDE. Qui non ho trovato bios.h
. Sono disponibili file di intestazione speciali per questo scopo in Mingw? Sto usando il compilatore a 32 bit ora perché nel mio progetto universitario ho avuto modo di utilizzare la gestione delle eccezioni che suppongo non sia supportata in Turbo C. Please help me out.Connessione porta seriale (RS -232) in C++
risposta
prega di dare un'occhiata qui:
- RS-232 for Linux and Windows1)
- Windows Serial Port Programming2)
- Using the Serial Ports in Visual C++3)
- Serial Communication in Windows
1)È possibile utilizzare questo con Windows (incl. MinGW) così come Linux. Alternativa puoi usare il codice solo come esempio.
2)Step-by-step tutorial come utilizzare le porte seriali sulle finestre
3)È possibile utilizzare questo letteralmente su MinGW
Ecco alcuni molto, molto codice semplice (senza alcuna gestione degli errori o impostazioni):
#include <windows.h>
/* ... */
// Open serial port
HANDLE serialHandle;
serialHandle = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Do some basic settings
DCB serialParams = { 0 };
serialParams.DCBlength = sizeof(serialParams);
GetCommState(serialHandle, &serialParams);
serialParams.BaudRate = baudrate;
serialParams.ByteSize = byteSize;
serialParams.StopBits = stopBits;
serialParams.Parity = parity;
SetCommState(serialHandle, &serialParams);
// Set timeouts
COMMTIMEOUTS timeout = { 0 };
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 50;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(serialHandle, &timeout);
Ora è possibile utilizzare WriteFile()
/ReadFile()
per scrivere/leggere byte. Non dimenticare di chiudere il collegamento:
CloseHandle(serialHandle);
Penso che dovresti chiamare 'SetCommState' piuttosto che' GetCommState' una seconda volta? – Ben
Hai ragione, è un errore - grazie per il suggerimento, l'ho risolto. – ollo
Hai detto che puoi anche usarlo su Linux, ma tu "# include
Credo che non sarà a disposizione per lavorare da modalità utente con COM direttamente come lo era nel. Se si desidera utilizzare la vecchia connessione, è necessario continuare a utilizzare il compilatore a 16 bit ed eseguire l'app in qualche dos emulatore, ad es. Dosbox. Trasmetterà la COM fisica alle interfacce bios.h. –
zabulus
Non riuscivo a capire completamente cosa volevi dire? Posso eseguire il mio file .exe del mio programma che è stato sviluppato in Mingw in DosBox? Se sì come? – iammurtaza
Nella tua domanda hai parlato di. Sembra che questo file sia stato utilizzato in ambiente DOS per comunicare con la porta COM. Questo modo di comunicare su finestre moderne ora non è disponibile. Presumo che tu voglia eseguire il compile exe in ambiente Windows. In questo caso dovresti usare un'altra API. Ad esempio, google per "CreateFile COM1" –
zabulus