2024-04-10 C++ RS-232C通信制御プログラム 指定されたシリアルポート(COM1)を開き、指定されたボーレート(9600bps)で通信を行います。指定されたデータを送信し、受信したデータを取得して表示します。必要に応じてポート名やボーレートを変更してください。 #include <iostream>#include <Windows.h> // シリアルポートを開く関数HANDLE openSerialPort(const char* portName, DWORD baudRate) { HANDLE hSerial = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hSerial == INVALID_HANDLE_VALUE) { std::cerr << "Failed to open serial port." << std::endl; return NULL; } DCB dcbSerialParams = { 0 }; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(hSerial, &dcbSerialParams)) { std::cerr << "Failed to get serial port parameters." << std::endl; CloseHandle(hSerial); return NULL; } dcbSerialParams.BaudRate = baudRate; dcbSerialParams.ByteSize = 8; dcbSerialParams.StopBits = ONESTOPBIT; dcbSerialParams.Parity = NOPARITY; if (!SetCommState(hSerial, &dcbSerialParams)) { std::cerr << "Failed to set serial port parameters." << std::endl; CloseHandle(hSerial); return NULL; } COMMTIMEOUTS timeouts = { 0 }; timeouts.ReadIntervalTimeout = 50; timeouts.ReadTotalTimeoutConstant = 50; timeouts.ReadTotalTimeoutMultiplier = 10; timeouts.WriteTotalTimeoutConstant = 50; timeouts.WriteTotalTimeoutMultiplier = 10; if (!SetCommTimeouts(hSerial, &timeouts)) { std::cerr << "Failed to set serial port timeouts." << std::endl; CloseHandle(hSerial); return NULL; } return hSerial;} // シリアルポートをクローズする関数void closeSerialPort(HANDLE hSerial) { if (hSerial != INVALID_HANDLE_VALUE) { CloseHandle(hSerial); }} // データを送信する関数bool sendData(HANDLE hSerial, const char* data, DWORD dataSize) { DWORD dwBytesWritten; if (!WriteFile(hSerial, data, dataSize, &dwBytesWritten, NULL)) { std::cerr << "Failed to write to serial port." << std::endl; return false; } return true;} // データを受信する関数bool receiveData(HANDLE hSerial, char* buffer, DWORD bufferSize) { DWORD dwBytesRead; if (!ReadFile(hSerial, buffer, bufferSize, &dwBytesRead, NULL)) { std::cerr << "Failed to read from serial port." << std::endl; return false; } return true;} int main() { const char* portName = "COM1"; const DWORD baudRate = CBR_9600; HANDLE hSerial = openSerialPort(portName, baudRate); if (hSerial == NULL) { std::cerr << "Failed to open serial port." << std::endl; return 1; } const char* sendDataStr = "Hello, RS-232C!"; if (sendData(hSerial, sendDataStr, strlen(sendDataStr))) { std::cout << "Data sent: " << sendDataStr << std::endl; } char receiveBuffer[256]; if (receiveData(hSerial, receiveBuffer, sizeof(receiveBuffer))) { std::cout << "Data received: " << receiveBuffer << std::endl; } closeSerialPort(hSerial); return 0;}