ソースを参照

11

Modbus_RTU
zcn1123 4年前
コミット
9d5636c0ef
1個のファイルの変更16行の追加18行の削除
  1. +16
    -18
      Modbus_communication/Modbus_RTU_Salve/RTU_common.cpp

+ 16
- 18
Modbus_communication/Modbus_RTU_Salve/RTU_common.cpp ファイルの表示

@@ -14,16 +14,16 @@ char read_buf[MAX_NUMBER];
* dcb.ByteSize=6,7,8时 dcb.StopBits不能为1
* dcb.ByteSize=5时 dcb.StopBits不能为2
********************************************************************************************/
HANDLE InitCOM(LPCTSTR Port, int baud_rate, BYTE date_bits, BYTE stop_bit, BYTE parity)
HANDLE Init_COM(LPCTSTR Port, int baud_rate, BYTE date_bits, BYTE stop_bit, BYTE parity)
{
HANDLE hCom = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//同步方式打开串口
if (INVALID_HANDLE_VALUE == hCom)
HANDLE Handle_Com = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//同步方式打开串口
if (INVALID_HANDLE_VALUE == Handle_Com)
{
return INVALID_HANDLE_VALUE;
}
SetupComm(hCom, 4096, 4096);//设置缓存
SetupComm(Handle_Com, 4096, 4096);//设置缓存
DCB dcb;
if (!GetCommState(hCom, &dcb))
if (!GetCommState(Handle_Com, &dcb))
{
cout << "获取串口配置失败" << endl;
}
@@ -47,22 +47,20 @@ HANDLE InitCOM(LPCTSTR Port, int baud_rate, BYTE date_bits, BYTE stop_bit, BYTE
dcb.fParity = TRUE; //奇偶校验开启
dcb.Parity = parity; //校验模式
}
cout << SetCommState(hCom, &dcb) << endl;
PurgeComm(hCom, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);//清除缓存
cout << SetCommState(Handle_Com, &dcb) << endl;
PurgeComm(Handle_Com, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);//清除缓存
//设置串口读写时间
COMMTIMEOUTS CommTimeOuts;
GetCommTimeouts(hCom, &CommTimeOuts);
GetCommTimeouts(Handle_Com, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 5;
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 10;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;
if (!SetCommTimeouts(hCom, &CommTimeOuts)) {
if (!SetCommTimeouts(Handle_Com, &CommTimeOuts)) {
return INVALID_HANDLE_VALUE;
}
//创建线程,读取数据
//HANDLE hReadCommThread = (HANDLE)CreateThread(NULL, 0, CommProc, &hCom, 0, NULL);
return hCom;
return Handle_Com;
}

/*********************************************************************************************
@@ -135,8 +133,8 @@ int test(void)
{
string COMM;
cin >> COMM;
HANDLE H_Com = InitCOM((LPCTSTR)COMM.c_str(), 9600, 8, 0, 1);
if (H_Com == INVALID_HANDLE_VALUE)
HANDLE Handle_Com = Init_COM((LPCTSTR)COMM.c_str(), 9600, 8, 0, 1);
if (Handle_Com == INVALID_HANDLE_VALUE)
{
cout << "初始化串口失败" << endl;
getchar();
@@ -152,16 +150,16 @@ int test(void)
//生成请求报文
//发送请求报文

PurgeComm(H_Com, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);//清除缓存
PurgeComm(Handle_Com, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);//清除缓存
while (1)
{
if (true == SendData(H_Com, "ok", 2))
if (true == SendData(Handle_Com, "ok", 2))
{
cout << "发送请求报文成功" << endl;
break;
}
}
BOOL bReadOK = ReadFile(H_Com, read_buf, 256, &dwRead, NULL);
BOOL bReadOK = ReadFile(Handle_Com, read_buf, 256, &dwRead, NULL);
if (bReadOK && (dwRead > 0))
{
read_buf[dwRead] = '\0';
@@ -170,7 +168,7 @@ int test(void)
else
cout << "loss" << endl;
}
CloseHandle(H_Com);
CloseHandle(Handle_Com);
getchar();
return 0;
}

読み込み中…
キャンセル
保存