串口控制下位机程序出现问题
我所实现的功能是:上位机通过串口给PLC一个信号,PLC控制相机采集图像。程序运行一次后,在任务管理器中就关不掉了,导致修改后编译出错
LINK : fatal error LNK1168: cannot open Debug/DEMO.exe for writing
Error executing link.exe.
Creating browse info file...
请问这是什么原因啊?初始化代码如下。
//--------------------------------相机初始化-----------------------------------
HVSTATUS status = BeginHVDevice(1, &m_hhv); //打开摄像机
HV_VERIFY(status);
m_bOpen = FALSE; //打开摄像机标志
m_bStart = FALSE; //开始采集标志
m_bTigger = FALSE; //触发模式标志
m_bContinuation = FALSE; //连续采集标志
m_pBmpInfo = NULL; //BMP图像信息
m_pRawBuffer = NULL; //原始图像数据缓冲初始化
m_pImageBuffer = NULL; //Bayer转换后图像数据缓冲区初始化
for(int i=0;i<256;i++) //颜色查找表
{
m_pLutR[i] = i;
m_pLutG[i] = i;
m_pLutB[i] = i;
}
m_pBmpInfo = (BITMAPINFO *)m_chBmpBuf;
// 初始化BITMAPINFO 结构,此结构在保存bmp文件、显示采集图像时使用
m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
// 图像宽度,一般为输出窗口宽度
m_pBmpInfo->bmiHeader.biWidth = Width/2;
// 图像宽度,一般为输出窗口高度
m_pBmpInfo->bmiHeader.biHeight = Height/2;
m_pBmpInfo->bmiHeader.biPlanes = 1;
m_pBmpInfo->bmiHeader.biBitCount = 24;
m_pBmpInfo->bmiHeader.biCompression = BI_RGB;
m_pBmpInfo->bmiHeader.biSizeImage = 0;
m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biClrUsed = 0;
m_pBmpInfo->bmiHeader.biClrImportant = 0;
/*
* 分配原始图像缓冲区,一般用来存储采集图像原始数据
* 一般图像缓冲区大小由输出窗口大小和视频格式确定。
*/
m_pRawBuffer = new BYTE[Width*Height];
ASSERT(m_pRawBuffer);
/*分配降采样后的图像*/
m_pHalfBuffer = new BYTE[Width*Height/4];
ASSERT(m_pRawBuffer);
/*
分配Bayer转换后图像数据缓冲
*/
m_pImageBuffer = new BYTE[Width * Height * 3];
ASSERT(m_pImageBuffer);
//---------------------------------初始化PLC通信串口------------------------------
hCom_plc=CreateFile("COM2",//COM2口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(hCom_plc==(HANDLE)-1)
{
AfxMessageBox("打开COM2失败!");
return FALSE;
}
SetupComm(hCom_plc,1000,1000); //输入缓冲区和输出缓冲区的大小都是1000字节
COMMTIMEOUTS TimeOuts2;
//设定读超时
TimeOuts2.ReadIntervalTimeout=MAXDWORD;
TimeOuts2.ReadTotalTimeoutMultiplier=0;
TimeOuts2.ReadTotalTimeoutConstant=0;
//在读一次输入缓冲区的内容后读操作就立即返回,
//而不管是否读入了要求的字符。
//设定写超时
TimeOuts2.WriteTotalTimeoutMultiplier=100;
TimeOuts2.WriteTotalTimeoutConstant=500;
SetCommTimeouts(hCom_plc,&TimeOuts2); //设置超时
DCB dcb2;
GetCommState(hCom_plc,&dcb2);
dcb2.BaudRate=9600; //波特率为9600
dcb2.ByteSize=7; //每个字节有7位
dcb2.Parity=EVENPARITY; //偶校验位
dcb2.StopBits=TWOSTOPBITS; //两个停止位
SetCommState(hCom_plc,&dcb2);
PurgeComm(hCom_plc,PURGE_TXCLEAR|PURGE_RXCLEAR);
//-------------------------------相机配置--------------------------------------------
HVOpenSnap(m_hhv, SnapThreadCallback, m_hWnd); //初始化摄像机采集
// HVSetSnapMode(m_hhv, CONTINUATION); //将采集模式设置为连续采集
HVSetSnapMode(m_hhv, TRIGGER); //将采集模式设置为触发采集
status = HVSetTriggerPolarity(m_hhv, HIGH);
HV_VERIFY(status);
/*
* 启动数字摄像机采集图像到内存
*/
BYTE *ppBuf[1];
ppBuf[0] = m_pRawBuffer;
HVStartSnap(m_hhv, ppBuf,1);
HV_VERIFY(status);