前提・実現したいこと
RS485通信を使ってインバータの制御を行うシステムを開発しております。
COM4ポートを開放して、送信データを作成して書き込みを行います。
このような機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
34行目 sprintf(szCommand, "00FB10000");
'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
45行目 sprintf(szTx, "\5%s%02X", szCommand, nSum);
'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
該当のソースコード
ソースコード
Visual
1#include <stdio.h> 2#include <windows.h> 3using namespace std; 4int main(int) { 5 HANDLE hCom; // 通信ハンドル 6 DCB hDcb; // 通信設定用の構造体 7 COMMTIMEOUTS hTim; // タイムアウト設定用の構造体 8 char szTx[0x10]; // 送信バッファ 9 char szRx[0x10]; // 受信バッファ 10 char szCommand[0x10];// コマンド 11 DWORD nTx, nRx; // バッファサイズ格納用 12 int nSum; // サムコード計算用 13 BOOL bRet; 14 int nRet; 15 unsigned int i; 16 //?????COM4ポートをオープンする ???? 17 hCom = CreateFile(L"COM4", (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 18 if (hCom != INVALID_HANDLE_VALUE) { 19 //???? COM4ポートの通信設定をする ???? 20 GetCommState(hCom, &hDcb); // 現在の通信情報を取得 21 hDcb.DCBlength = sizeof(DCB); // 構造体サイズ設定 22 hDcb.BaudRate = 19200; // 通信速度=19200bps 23 hDcb.ByteSize = 8; // データ長=8bit 24 hDcb.Parity = 2; // 偶数パリティ 25 hDcb.StopBits = 2; // ストップビット=2bit 26 bRet = SetCommState(hCom, &hDcb); // 変更した通信情報の設定 27 if (bRet == TRUE) { 28 //???? COM1ポートのタイムアウト設定をする ???? 29 GetCommTimeouts(hCom, &hTim); // 現状のタイムアウト値取得 30 hTim.WriteTotalTimeoutConstant = 1000; // 書込みタイムアウト1秒 31 hTim.ReadTotalTimeoutConstant = 1000; // 読込みタイムアウト1秒 32 SetCommTimeouts(hCom, &hTim); // 変更したタイムアウト値設定 33 //???? 局番1のインバータをネットワーク運転モードに切り換えるコマンドを設定 ???? 34 sprintf(szCommand, "00FB10000"); // 送信データ(NET運転書込み) 35 nTx = strlen(szCommand); // 送信データサイズ 36 //???? サムコードを生成する ???? 37 nSum = 0; // サムデータ初期化 38 for (i = 0; i < nTx; i++) { 39 nSum += szCommand[i]; // サムコードを計算 40 nSum &= (0xff); // データをマスク 41 } 42 //???? 送信データを生成する ???? 43 memset(szTx, 0, sizeof(szTx)); // 送信バッファ初期化 44 memset(szRx, 0, sizeof(szRx)); // 受信バッファ初期化 45 sprintf(szTx, "\5%s%02X", szCommand, nSum);// ENQコード+送信データ+サムコード 46 nTx = 1 + nTx + 2; // ENQコード数+送信データ数+サムコード数 47 nRet = WriteFile(hCom, szTx, nTx, &nTx, NULL); 48 //???? 送信 ???? 49 if (nRet != 0) { 50 nRet = ReadFile(hCom, szRx, sizeof(szRx), &nRx, NULL); 51 //???? 受信 ???? 52 if (nRet != 0) { 53 //???? 受信データを表示する ???? 54 for (i = 0; i < nRx; i++) { 55 printf("%02X ", (BYTE)szRx[i]);// 受信データをコンソール出力 56 // アスキーコードを16進数で表示します。'0'の場合30と表示します。 57 } 58 printf("\n\r"); 59 } 60 } 61 } 62 CloseHandle(hCom); // 通信ポートを閉じる 63 } 64}
試したこと
「sprintf」を「sprintf_s」を変更しましたが、エラーは解消されませんでした。
sprintf_s(szCommand, "00FB10000");
sprintf_s(szTx, "\5%s%02X", szCommand, nSum);
おわかりの方いらっしゃいましたらお教えください。