2024-04-13 C++ RS-232C通信制御プログラム(パート2) <RS232C.cpp> #include <iostream>#include "SerialPort.h" // シリアルポートクラスのヘッダーファイルをインクルード int main() { // シリアルポート設定(ポート、データビット長、パリティチェック、ストップビッチ長) SerialPort serial(TEXT("COM1"), CBR_9600, 8, EVENPARITY, ONESTOPBIT); // シリアルポートが正常に開かれたか確認 if (!serial.isConnected()) { //std::cerr << << std::endl; printf("Cannot Initialize SIO port [%s].\n","COM1"); return 1; } // メッセージの送信 std::string message = "Hello, Serial Port!"; serial.TxCommand(message.c_str(), message.size()); // データの受信 char incomingData[256] = { 0 }; serial.RxCommand(incomingData, sizeof(incomingData)); // 受信したデータを表示 std::cout << "Received data: " << incomingData << std::endl; return 0;} <COM.cpp> #include "SerialPort.h"#include <iostream>#include <windows.h> // シリアルポートのオープンSerialPort::SerialPort(const TCHAR* portName, DWORD baudRate, BYTE byteSize, BYTE parity, BYTE stopBits) { hSerial = CreateFile( portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); // シリアルポートの設定 if (hSerial != INVALID_HANDLE_VALUE) { DCB dcbSerialParams = { 0 }; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); GetCommState(hSerial, &dcbSerialParams); dcbSerialParams.BaudRate = baudRate; dcbSerialParams.ByteSize = byteSize; dcbSerialParams.Parity = parity; dcbSerialParams.StopBits = stopBits; SetCommState(hSerial, &dcbSerialParams); connected = true; } else { std::cerr << "Error: Unable to open COM port." << std::endl; connected = false; }} SerialPort::~SerialPort() { if (hSerial != INVALID_HANDLE_VALUE) { CloseHandle(hSerial); }} bool SerialPort::TxCommand(const char* buffer, unsigned int bufferSize) { DWORD bytesWritten; if (!WriteFile(hSerial, (void*)buffer, bufferSize, &bytesWritten, NULL)) { std::cerr << "Error: Unable to write to COM port." << std::endl; return false; } return true;} bool SerialPort::RxCommand(char* buffer, unsigned int bufferSize) { DWORD bytesRead; if (!ReadFile(hSerial, buffer, bufferSize, &bytesRead, NULL)) { std::cerr << "Error: Unable to read from COM port." << std::endl; return false; } return true;} bool SerialPort::isConnected() { return connected;} <SerialPort.h> #include <Windows.h> class SerialPort {public: // コンストラクタ SerialPort(const TCHAR* portName, DWORD baudRate, BYTE byteSize, BYTE parity, BYTE stopBits); // デストラクタ ~SerialPort(); // データ送信 bool TxCommand(const char* buffer, unsigned int bufferSize); // データ受信 bool RxCommand(char* buffer, unsigned int bufferSize); // 接続確認 bool isConnected(); private: HANDLE hSerial; bool connected;};