串口控制下位机程序出现问题

caoyang311 2011-03-28 01:15:32
我所实现的功能是:上位机通过串口给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);
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoyang311 2011-03-29
  • 打赏
  • 举报
回复
搞定了,是因为相机在打开的状态下直接关闭导致的,用API函数直接关闭掉相机,在关闭窗口就可以了。
zyrr159487 2011-03-28
  • 打赏
  • 举报
回复
编译出错是因为进程还开着,强行结束也不行吗?
caoyang311 2011-03-28
  • 打赏
  • 举报
回复
是的,只是顺序改了下,别的没动。
tt2com 2011-03-28
  • 打赏
  • 举报
回复
你这个程序是不是厂家提供的demo程序?
我用过的一些厂家的demo程序是不允许修改的,一改就出错。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧