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
- 1. Interfaccia Javascript con porta seriale RS-232
- 2. C: libreria seriale RS-232 multipiattaforma?
- 3. iPhone a RS-232 via Bluetooth
- 4. Lettura dalla porta seriale in C#
- 5. Quale classe USB utilizza la porta COM seriale?
- 6. cavo porta seriale Unplugged
- 7. Accesso alla porta seriale in Adobe-Air
- 8. lettura dalla porta seriale fallisce
- 9. Programmazione Qt e porta seriale
- 10. impostazione interruzione porta seriale in linux
- 11. caratteri privi di porta seriale
- 12. Impossibile aprire la porta seriale in .NET
- 13. C# - Come consegnare quale thread legge dalla porta seriale?
- 14. Porta seriale ReadLine vs ReadExisting o come leggere correttamente i dati dalla porta seriale
- 15. Lettura da porta seriale con ciclo while
- 16. Come leggere e scrivere dalla porta seriale
- 17. Ottenere nomi di porta seriale errati da bluetoothdevice (C#)
- 18. Porta seriale Linux: blocco lettura con timeout
- 19. Programmazione seriale in C, in DOS
- 20. Polling porta seriale e gestione dati
- 21. Leggi file dalla porta seriale utilizzando Java
- 22. Java/Arduino - Lettura dati dalla porta seriale
- 23. Come faccio a sapere quale porta seriale usare su Linux?
- 24. Ascolto della porta seriale su Delphi 7
- 25. Accesso alla porta seriale via php
- 26. Invio tasto "INVIO" tramite porta seriale
- 27. Utilizzare la porta seriale nell'ambiente Web
- 28. Monitor porta seriale/Com per Windows x64
- 29. Lettura e scrittura su porta seriale in Ubuntu con C/C++ e LibSerial
- 30. Il programma si blocca quando si chiude la connessione della porta seriale
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