PC通过串口读取rs232条码扫描枪扫描的条码问题

马少华 马少华 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
底存实际传输我不太懂,从网上找了一些代码,自己试验了一下,可以读出来,是用的异步读取模式,但现在有一个问题,我重复扫描相同条码100次,会有20到30次读取不准,发生截断,一个条码作两次读出来。

直接上代码,
我用的是COM1口,基本设置如下:
dcb.BaudRate = 9600; //波特率为9600
dcb.ByteSize = 8; //每个字节有8位
dcb.Parity = NOPARITY; //无奇偶校验位
dcb.StopBits = ONESTOPBIT; //一个停止位

//设定超时
COMMTIMEOUTS TimeOuts;

TimeOuts.ReadIntervalTimeout = MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier=1000;
TimeOuts.ReadTotalTimeoutConstant=1000;
//在读一次输入缓冲区的内容后读操作就立即返回,
//而不管是否读入了要求的字符。

//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=50;
TimeOuts.WriteTotalTimeoutConstant=5000;

读取代码

UINT __cdecl OnWatchCom(LPVOID lparam)
{
CBillDlg *pDlg = (CBillDlg *)lparam;
if(pDlg == NULL) return -1;
CString strResult;
char buff[128] = {0};
while(pDlg->m_IsWatching)
{
if(pDlg->m_Com.ReadCom(buff,128,2000))
{
pDlg->m_Com.ClearComBuf(PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
strResult.Format(_T("%s"),buff);
if(!strResult.IsEmpty())
{
pDlg->m_strBillNo = strResult;
pDlg->UpdateData(0);
}
}
Sleep(50);
}
return 0;
}
BOOL CComport::ReadCom(char *buff, int nlen, int dwMiniTimeout)
{
if(!IsOpen()) return FALSE;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

COMSTAT ComStat;
DWORD dwErrorFlags;

memset(buff,'\0',nlen);
DWORD dwBytesRead=nlen;//读取的字节数
BOOL bReadStat;

ClearComErr(&dwErrorFlags,&ComStat);
dwBytesRead=min(dwBytesRead, (DWORD)ComStat.cbInQue);
bReadStat=ReadFile(m_hCom,buff,dwBytesRead,&dwBytesRead,&m_osRead);
if(!bReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
{
//GetOverlappedResult(m_hCom,&m_osRead,&dwBytesRead,TRUE);
WaitForSingleObject(m_osRead.hEvent,dwMiniTimeout);
//使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
//当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
//ResetEvent(m_osRead.hEvent);
}
}
CloseHandle(m_osRead.hEvent);
return TRUE;
}


不知道是读函数的问题还是超时设置的问题,我的条码是12位数字,网上写的大多数超时方式我都试过。可还是没什么效果.请指教
...全文

相关推荐

台达PLC阅读条码扫描枪程序应用.pdf

采用低成本PLC,接收条码枪收入。PLC可以处理生产线逻辑也同时接收扫描枪信息输入。条码枪已经很广泛用于生产线。

zhuyongjun021

霍尼韦尔3310g扫描枪快速入门:配置、部署与故障排查指南

条码扫描枪是现代仓储物流与零售收银中不可或缺的数据采集工具,其通过激光或影像技术读取一维码信息,并借助USB-HID等接口模式实现即插即用。理解设备的基本工作原理与参数配置,是保障高效稳定运行的关键。霍尼韦尔3310g作为一款经典的一维条码扫描枪,支持通过扫描配置码快速调整蜂鸣器音量、数据后缀、码制开关等参数,也可使用DataGrid软件进行批量设置与固件升级。在实际应用中,无论是POS收银、仓库盘点还是电子屏幕码识别,掌握接口模式选择、反光处理技巧及常见故障排查方法,都能显著提升工作效率。本文从基础概念出

辟谣的大舌头LONG

PC端二维条码扫描软件-QuickMark

PC端二维码查看软件,摄像头可以扫描到相应的二维条码,包括一维条码.

suntech11620

PC电脑扫描枪串口数据自动中文解码到焦点位置.rar

条码扫描枪串口接收数据输出到焦点位置的插件,支持条码英文及中文GB2312和UTF8编码,且自动判断编码,可以配置串口COM名称和波特率。

Stdonald

C#使用RS232串口通讯示例

完整的RS232串口通讯示例

xiaolinvfp
评论 20
收藏 已收藏
分享
返回顶部
马少华
其他硬件开发 2,432 成员 4,281 内容