前提・実現したいこと
通信機能を有するインバータをRS485通信にてコントロールするプログラムを作っています。
USB-RS485変換を行って、COM4ポートを割り当て通信を行います。
発生している問題・エラーメッセージ
CreateFile("COM4", (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
「 "const char *" の引数は型 "LPCWSTR" のパラメーターと互換性がありません」というエラーとなります。
if (hCom != NULL) {
「'const char [5]' から 'char' に変換できません」というエラーになります。
該当のソースコード
言語:Visual C++(Visual Studio 2019)
ソースコード
-#include <stdio.h>
-#include <windows.h>
using namespace std;
int main(int) {
HANDLE hCom; // 通信ハンドル
DCB hDcb; // 通信設定用の構造体
COMMTIMEOUTS hTim; // タイムアウト設定用の構造体
char szTx[0x10]; // 送信バッファ
char szRx[0x10]; // 受信バッファ
char szCommand[0x10];// コマンド
int nTx, nRx; // バッファサイズ格納用
int nSum; // サムコード計算用
BOOL bRet;
int nRet;
int i;
//?????COM4ポートをオープンする ????
hCom = CreateFile("COM4", (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom != NULL) {
//???? COM4ポートの通信設定をする ????
GetCommState(hCom, &hDcb); // 現在の通信情報を取得
hDcb.DCBlength = sizeof(DCB); // 構造体サイズ設定
hDcb.BaudRate = 19200; // 通信速度=19200bps
hDcb.ByteSize = 8; // データ長=8bit
hDcb.Parity = 2; // 偶数パリティ
hDcb.StopBits = 2; // ストップビット=2bit
bRet = SetCommState(hCom, &hDcb); // 変更した通信情報の設定
if (bRet == TRUE) {
//???? COM1ポートのタイムアウト設定をする ????
GetCommTimeouts(hCom, &hTim); // 現状のタイムアウト値取得
hTim.WriteTotalTimeoutConstant = 1000; // 書込みタイムアウト1秒
hTim.ReadTotalTimeoutConstant = 1000; // 読込みタイムアウト1秒
SetCommTimeouts(hCom, &hTim); // 変更したタイムアウト値設定
//???? 局番1のインバータをネットワーク運転モードに切り換えるコマンドを設定 ????
sprintf(szCommand, "00FB10000"); // 送信データ(NET運転書込み)
nTx = strlen(szCommand); // 送信データサイズ
//???? サムコードを生成する ????
nSum = 0; // サムデータ初期化
for (i = 0; i < nTx; i++) {
nSum += szCommand[i]; // サムコードを計算
nSum &= (0xff); // データをマスク
}
//???? 送信データを生成する ????
memset(szTx, 0, sizeof(szTx)); // 送信バッファ初期化
memset(szRx, 0, sizeof(szRx)); // 受信バッファ初期化
sprintf(szTx, "\5%s%02X", szCommand, nSum);// ENQコード+送信データ+サムコード
nTx = 1 + nTx + 2; // ENQコード数+送信データ数+サムコード数
nRet = WriteFile(hCom, szTx, nTx, &nTx, NULL);
//???? 送信 ????
if (nRet != 0) {
nRet = ReadFile(hCom, szRx, sizeof(szRx), &nRx, NULL);
//???? 受信 ????
if (nRet != 0) {
//???? 受信データを表示する ????
for (i = 0; i < nRx; i++) {
printf("%02X ", (BYTE)szRx[i]);// 受信データをコンソール出力
// アスキーコードを16進数で表示します。'0'の場合30と表示します。
}
printf("\n\r");
}
}
}
CloseHandle(hCom); // 通信ポートを閉じる
}
}
試したこと
https://teratail.com/questions/118636 を参考にして、
void CreateFile( )という定義をしようとしたのですが、記述内容がわかりませんでした。
おわかりの方がいらっしゃいましたらお教えください。よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/11 03:00
2020/04/11 03:05 編集
2020/04/11 04:32
2020/04/11 05:45