Wykonałem połączenie portu szeregowego RS-232 w C++ za pomocą 16-bitowego kompilatora (korzystałem z IDE Turbo C++). Zawiera plik nagłówkowy bios.h
, który zawiera wszystkie wymagane funkcje do odczytu wartości z portu. Teraz chcę odczytać wartość z portu szeregowego przy użyciu 32-bitowego kompilatora Cing w C++. Używam Dev CPP jako mojego IDE. Tutaj nie mogłem znaleźć bios.h
. Czy są dostępne specjalne pliki nagłówkowe w Mingw? Używam teraz kompilatora 32-bitowego, ponieważ w moim projekcie na uczelni używam obsługi wyjątków, które, jak sądzę, nie są obsługiwane w Turbo C. Proszę, pomóżcie mi.Połączenie szeregowe (RS-232) w C++
Odpowiedz
Proszę spojrzeć tutaj:
- RS-232 for Linux and Windows1)
- Windows Serial Port Programming2)
- Using the Serial Ports in Visual C++3)
- Serial Communication in Windows
1)Możesz użyć tego w Windows (w tym. MinGW) oraz Linux. Alternatywnie możesz użyć tylko kodu jako przykładu.
2)Tutorial krok po kroku jak korzystać z portów szeregowych na oknach
3)można użyć tego dosłownie na MinGW
Oto niektóre bardzo prosty kod (bez obsługi błędów i ustawień):
#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);
Teraz możesz użyć WriteFile()
/ReadFile()
do zapisu/odczytu bajtów. Nie zapomnij zamknąć połączenie:
CloseHandle(serialHandle);
Myślę, że powinieneś nazwać 'SetCommState' zamiast' GetCommState' po raz drugi? – Ben
Masz rację, to pomyłka - dzięki za podpowiedź, naprawiłem to. – ollo
Mówisz, że możesz go również używać w systemie Linux, ale "#include
- 1. Programowanie szeregowe w C, w DOS
- 2. Stałe szeregowe w czasie kompilacji
- 3. Arduino - zniekształcone wyjście szeregowe
- 4. Cux Linux wykrywa wszystkie porty szeregowe
- 5. Słabe połączenie funkcji C
- 6. Jak wyłączyć/włączyć połączenie sieciowe w C#
- 7. Nawiąż połączenie P2P w języku C#
- 8. C# Skype API Połączenie wideo
- 9. C# - Jak wykonać połączenie HTTP
- 10. C++ Dlaczego połączenie jest niejednoznaczne?
- 11. W jaki sposób wprowadza się funkcje szeregowe do wolfram alpha?
- 12. Jak skutecznie czekać na CTS lub DSR z RS232 w systemie Linux?
- 13. połączenie mongodb połączenie
- 14. Jak otrzymać dane szeregowe za pomocą android bluetooth
- 15. C# powinienem pozostawić otwarte połączenie w łączeniu puli
- 16. Jak mogę wykonać połączenie telefoniczne w Celu C?
- 17. Usuń połączenie lub Zamknij połączenie
- 18. io.on ("połączenie", ...) kontra io.sockets.on ("połączenie", ...)
- 19. Połączenie pooling w slick?
- 20. Niebezpieczne połączenie w kanciastym
- 21. Wykonuj połączenie w mongoDB
- 22. Połączenie OLEDB w R
- 23. Połączenie SSL iOS w Swift
- 24. Połączenie głosowe za pośrednictwem modemu GSM
- 25. Python: Połączenie w listach list (?)
- 26. Połączenie z pamięcią (R)
- 27. Połączenie połączeń a połączenie trwałe mysqli
- 28. jak testuje połączenie w doktrynie 2?
- 29. Połączenie łączenia z niepowiązaniami w data.table?
- 30. Jak otworzyć połączenie SQLite w trybie WAL
myślę, że nie będą dostępne do pracy z trybu użytkownika z COM bezpośrednio, jak to było w. Jeśli chcesz użyć starego połączenia, powinieneś nadal używać 16-bitowego kompilatora i uruchamiać aplikację w emulatorach dos, to jest dosbox. Prześle fizyczny port COM do interfejsów bios.h. –
zabulus
Nie mogłem zrozumieć, co miałeś do powiedzenia? Czy mogę uruchomić mój plik .exe mojego programu, który został opracowany w Mingw w DosBox? Jeśli tak, to w jaki sposób? – iammurtaza
W swoim pytaniu opowiedziałeś o. Wygląda na to, że ten plik był używany w środowisku DOS do komunikowania się z portem COM. Ten sposób komunikacji w nowoczesnych oknach nie jest obecnie dostępny. Zakładam, że chcesz, aby kompilator exe był uruchamiany w środowisku Windows. W takim przypadku powinieneś użyć innego API. tj. google dla "CreateFile COM1" –
zabulus