串口控制下位机程序出现问题
我所实现的功能是:上位机通过串口给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);
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);
...全文
相关推荐
VC串口控制加摄像头视频适合机器人上位机,只要适当改变active控件属性,很适合做机器人的上位机编程入门.rar
嵌入式软件开发上位机
C#项目实战——串口控制下位机开关程序【实例】
本案例实现功能包括:1、刷新串口功能:通过点击刷新串口,可以将可使用的COM口添加到下拉菜单;2、打开串口功能:通过点击打开串口按钮,可以打开下拉框选中的COM口,并将文本改成关闭串口,再次点击则能关闭相应串口;3、点击各通道的开关按钮,通过打开的串口发出不同的指令,从而实现相应的动作;
单片机MSP430与PC机串口通讯设计说明.pdf
。。。
一种基于C51单片机的图像采集处理系统设计.pdf
一种基于C51单片机的图像采集处理系统设计.pdf
181-教学案例-PC机中央控制心电信号采集系统参考.pdf
181-教学案例-PC机中央控制心电信号采集系统参考.pdf


硬件/系统
