贴一个使用串口的方法
来源:互联网 发布:淘宝怎么提前收款 编辑:程序博客网 时间:2024/05/29 18:21
void CPlaylistDoc::SendToComm(std::vector<PREINFO>& preinfo)
{
BOOL ret = FALSE;
int presetint = 0, address = 0;
TCHAR szCom[MAX_PATH] = {0};
CString strPath;
if (preinfo.empty())
return;
strPath = ::GetAppFolder();
strPath += _T("\\PresetBit.ini");
GetPrivateProfileString(_T("PreSetInfo"), _T("comnum"), _T("COM1"), szCom, MAX_PATH, strPath);
CString strCom;
strCom = szCom;
strCom = strCom.Mid(3);
int inum = _ttoi(strCom);
if (inum >= 10)
wsprintf(szCom, _T("\\\\.\\com%d"), inum);
else
wsprintf(szCom, _T("com%d"), inum);
HANDLE hCom=CreateFile(szCom, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//同步方式
if(INVALID_HANDLE_VALUE == hCom)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(CreateFile Error.)"));
goto END;
}
ret = SetupComm(hCom, 512, 512);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetupComm Error.)"));
goto END;
}
COMMTIMEOUTS timeouts;
ret = GetCommTimeouts(hCom, &timeouts);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(GetCommTimeouts Error.)"));
goto END;
}
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 500;
timeouts.ReadTotalTimeoutConstant = 5000;
timeouts.WriteTotalTimeoutMultiplier = 500;
timeouts.WriteTotalTimeoutConstant = 5000;
ret = SetCommTimeouts(hCom, &timeouts);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetCommTimeouts Error.)"));
goto END;
}
DCB dcb;
ret = GetCommState(hCom, &dcb);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(GetCommState Error.)"));
goto END;
}
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_9600;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
ret = SetCommState(hCom, &dcb);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetCommState Error.)"));
goto END;
}
char Hex[] =
{
'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'A', 'B',
'C', 'D', 'E', 'F'
};
std::vector<PREINFO>::iterator _pre = preinfo.begin();
while(_pre != preinfo.end())
{
if (_pre->presetbit>100 ||
_pre->presetbit<=0 ||
_pre->address<=0)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(Presetbit Set Error presetbit=%d.)"), _pre->presetbit);
_pre++;
continue;
}
presetint = _pre->presetbit-1;
address = _pre->address;
COMPROTOCOL pro;
memset(&pro, 0, sizeof(COMPROTOCOL));
int ahig = Hex[address>>4 & 0xff];
int alow = Hex[address & 0xff];
int phig = Hex[presetint/10];
int plow = Hex[presetint%10];
pro.SetValue(ahig, alow, 'R', phig, plow);
ret = PurgeComm(hCom, PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT);//清空缓存
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(PurgeComm Error.)"));
goto END;
}
DWORD wCount;
ret = WriteFile(hCom, (char *)&pro, sizeof(COMPROTOCOL), &wCount, NULL);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(WriteFile Error.)"));
goto END;
}
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(WriteFile Sucess [%c%c%c%c%c%c%x].)"), pro.head, pro.adrhig, pro.adrlow, pro.cmd, pro.param1, pro.param2, pro.tail);
_pre++;
}
if (hCom)
{
CloseHandle(hCom);
hCom = NULL;
}
END:
if (hCom)
{
CloseHandle(hCom);
hCom = NULL;
}
}
{
BOOL ret = FALSE;
int presetint = 0, address = 0;
TCHAR szCom[MAX_PATH] = {0};
CString strPath;
if (preinfo.empty())
return;
strPath = ::GetAppFolder();
strPath += _T("\\PresetBit.ini");
GetPrivateProfileString(_T("PreSetInfo"), _T("comnum"), _T("COM1"), szCom, MAX_PATH, strPath);
CString strCom;
strCom = szCom;
strCom = strCom.Mid(3);
int inum = _ttoi(strCom);
if (inum >= 10)
wsprintf(szCom, _T("\\\\.\\com%d"), inum);
else
wsprintf(szCom, _T("com%d"), inum);
HANDLE hCom=CreateFile(szCom, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//同步方式
if(INVALID_HANDLE_VALUE == hCom)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(CreateFile Error.)"));
goto END;
}
ret = SetupComm(hCom, 512, 512);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetupComm Error.)"));
goto END;
}
COMMTIMEOUTS timeouts;
ret = GetCommTimeouts(hCom, &timeouts);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(GetCommTimeouts Error.)"));
goto END;
}
timeouts.ReadIntervalTimeout = 0;
timeouts.ReadTotalTimeoutMultiplier = 500;
timeouts.ReadTotalTimeoutConstant = 5000;
timeouts.WriteTotalTimeoutMultiplier = 500;
timeouts.WriteTotalTimeoutConstant = 5000;
ret = SetCommTimeouts(hCom, &timeouts);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetCommTimeouts Error.)"));
goto END;
}
DCB dcb;
ret = GetCommState(hCom, &dcb);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(GetCommState Error.)"));
goto END;
}
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_9600;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
ret = SetCommState(hCom, &dcb);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(SetCommState Error.)"));
goto END;
}
char Hex[] =
{
'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'A', 'B',
'C', 'D', 'E', 'F'
};
std::vector<PREINFO>::iterator _pre = preinfo.begin();
while(_pre != preinfo.end())
{
if (_pre->presetbit>100 ||
_pre->presetbit<=0 ||
_pre->address<=0)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(Presetbit Set Error presetbit=%d.)"), _pre->presetbit);
_pre++;
continue;
}
presetint = _pre->presetbit-1;
address = _pre->address;
COMPROTOCOL pro;
memset(&pro, 0, sizeof(COMPROTOCOL));
int ahig = Hex[address>>4 & 0xff];
int alow = Hex[address & 0xff];
int phig = Hex[presetint/10];
int plow = Hex[presetint%10];
pro.SetValue(ahig, alow, 'R', phig, plow);
ret = PurgeComm(hCom, PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT);//清空缓存
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(PurgeComm Error.)"));
goto END;
}
DWORD wCount;
ret = WriteFile(hCom, (char *)&pro, sizeof(COMPROTOCOL), &wCount, NULL);
if (FALSE == ret)
{
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(WriteFile Error.)"));
goto END;
}
WRITE_LOG(LogerPlst, 0, FALSE, _T("SendToComm(WriteFile Sucess [%c%c%c%c%c%c%x].)"), pro.head, pro.adrhig, pro.adrlow, pro.cmd, pro.param1, pro.param2, pro.tail);
_pre++;
}
if (hCom)
{
CloseHandle(hCom);
hCom = NULL;
}
END:
if (hCom)
{
CloseHandle(hCom);
hCom = NULL;
}
}
阅读全文
0 0
- 贴一个使用串口的方法
- VMware使用串口的方法
- 一个使用Java读取串口的程序
- Linux使用串口做为终端的方法
- 使用串口下载vxworks映象的方法
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- 利用adb 调试设备串口信息的一个小方法
- C51只有一个串口,不够用怎么办?介绍三种单片机模拟串口的方法
- Delphi里使用SPComm串口控件的一个乌龙BUG
- WinCE中串口通讯的调试方法----串口分离软件的使用
- 串口控件MSCOMM的注册方法(使用MSCOMM串口控件程序的发布问题)
- VirtualBox中直接使用本机物理串口的方法
- win7 x64使用usb转串口线驱动的方法
- VC++ 使用MSComm控件检测串口是否存在的方法
- 【串口通信】LabVIEW串口通信的一个例子-串口"示波器"
- 串口线的使用
- Arduino串口的使用
- 串口的使用
- 中国国家防火墙
- Python爬取竞彩网每场比赛的开奖结果中的详细信息
- spoken language processing 总结概要
- leetcode 398. Random Pick Index 均概率挑选index
- easyui动态编辑,并改变单元格值
- 贴一个使用串口的方法
- UIWindow
- logback配置不生效的问题
- Play2 for Java(四:Controller、Action、Result)
- 跑马灯效果的MarqueeViewLibrary自定义布局
- python视频抽帧图片
- 蓝桥杯--数字排列的Python解法
- 【Scikit-Learn 中文文档】36 随机投影
- from表单提交前的JS检测