基于单文档的串口通讯,求教

老道_ 2008-03-27 02:12:46
没有采用CSerialPort类,是用的控件,也就是龚建伟书中说的方法,把控件放到ABOUT对话框中,在view文件中自己创建了下,调试程序一切正常,但是打包后,就不能发送了,没找到原因,谁能给点提示,谢谢

int CCommunicationView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(1,1000,NULL);
i=0;
// TODO: Add your specialized creation code here
m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
m_MSComm.SetPortOpen(FALSE);
m_MSComm.SetCommPort(1); //选择COM1
m_MSComm.SetInBufferSize(1024); //接收缓冲区
m_MSComm.SetOutBufferSize(1024);//发送缓冲区
m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_MSComm.SetInputMode(1);//以二进制方式读写数据
m_MSComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_MSComm.SetSettings("2400,n,8,1");//波特率2400无检验位,8个数据位,1个停止位
if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
m_MSComm.SetPortOpen(TRUE);//打开串口
if(m_MSComm.GetPortOpen())
AfxMessageBox("Open Serial Port Success!");
m_MSComm.GetInput(); //先预读缓冲区以清除残留数据
return 0;
}


是不是定时器,不能这么用?还是?请有这方面经验的指点下
...全文
169 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jason99032 2010-10-05
我给你说说,安装VC过程中MSCOMM有注册,打包以后在没有安装VC的环境下运行,一。有可能没把MSCOMM控件打包进去,二。即使打包进去没有注册也白搭,看看怎么怎么注册MSCOMM控件,网上很多的,或者把建立那个注册表的键值,我只是搞硬件,不知道一些术语怎么说的,说错了也不要笑我,但说的怎么做那是正确的。
回复
老道_ 2008-03-27
以后可以考虑api等,但是现在我得搞明白,要不心里堵的难受啊,再就是的确是没打开串口1,执行安装包的机器上我用别的工具还能打开串口1,就验证了提示Open Serial Port Failure是正确的,但是为什么调试可以,安装在自己机器上也可以,换到别的机器上就不行了呢,最大的可能性还是打包过程缺少了东西?什么,我没搞清楚,希望明天能解决,我还会加分,希望大家能给提示或帮助
回复
老道_ 2008-03-27
[Quote=引用 12 楼 zaodt 的回复:]

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM


以上注册表键下,是计算机中的串行口列表。
[/Quote]
回复
zaodt 2008-03-27

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM


以上注册表键下,是计算机中的串行口列表。
回复
zaodt 2008-03-27


其实,用 API 读写串行口比用控件的方式灵活、方便:


http://vckbase.com/document/viewdoc/?id=1114
回复
老道_ 2008-03-27
至尊宝宝 @ 杭州和回贴亦是善举不是你们说的原因,我试过了,以前我做对话框的都打过包,知道得注册,现在是单文档,关键是提示Open Serial Port Failure,应该是打开串口失败?
回复
老道_ 2008-03-27
这个我用的打包软件是installshield8,以前做对话框的时候一快打进去就没问题了,这个还不一样?那我先试试再说
回复
cnzdgs 2008-03-27
同上,注册MSCOMM32.OCX。
回复
zaodt 2008-03-27

楼主使用了 MSCOMM32 控件,在部署时也需要为客户的计算机部署。

两种方法:

1、手工注册

复制 mscomm32.ocx 文件到客户的计算机,如:c:\windows\system32\mscomm32.ocx

【开始】-【运行】-【regsvr32 c:\windows\system32\mscomm32.ocx】


2、使用安装制作工具

安装制作工具都可以注册这个控件。


补充:如果直接用 API 函数读写串行口,就可以省去这么多麻烦。
回复
老道_ 2008-03-27
[Quote=引用 4 楼 draculacsdn 的回复:]
对每一步都用返回值判断,看看问题出在什么地方。
[/Quote]

程序调试的时候,我都返回看了,能打开串口,也能通讯,但是打包后,离开非vc环境怎么就不行了,难道是打包还需要加载什么东西?基于无非就是把控件加上就是了,没什么特殊的啊
回复
老道_ 2008-03-27
void CCommunicationView::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
CString ww,w;
byte ppp0[260]={0xEB,0x90,0x04,0x00,0x01,0x80,0x00,0x85}; //
byte ppp1[260]={0xEB,0x90,0x04,0x00,0x02,0x80,0x00,0x86}; //
byte ppp2[260]={0xEB,0x90,0x04,0x00,0x05,0x80,0x00,0x89}; //
byte ppp3[260]={0xEB,0x90,0x04,0x00,0x06,0x80,0x00,0x8A}; //
byte ppp4[260]={0xEB,0x90,0x04,0x00,0x03,0x80,0x00,0x87}; //
CByteArray hexdata;
i++;
switch(i)
{
case 1:
{
for(int j=0;j<8;j++)
{
ww.Format("%02X ",ppp0[j]);
w+=ww;
}
int len1=String2Hex(w,hexdata);
m_MSComm.SetOutput(COleVariant(hexdata));
break;
}
case 2:
{
for(int j=0;j<8;j++)
{
ww.Format("%02X ",ppp1[j]);
w+=ww;
}
int len1=String2Hex(w,hexdata);
m_MSComm.SetOutput(COleVariant(hexdata));
break;
}
case 3:
{
for(int j=0;j<8;j++)
{
ww.Format("%02X ",ppp2[j]);
w+=ww;
}
int len1=String2Hex(w,hexdata);
m_MSComm.SetOutput(COleVariant(hexdata));
break;
}
case 4:
{
for(int j=0;j<8;j++)
{
ww.Format("%02X ",ppp3[j]);
w+=ww;
}
int len1=String2Hex(w,hexdata);
m_MSComm.SetOutput(COleVariant(hexdata));
break;
}
case 5:
{
for(int j=0;j<8;j++)
{
ww.Format("%02X ",ppp4[j]);
w+=ww;
}
int len1=String2Hex(w,hexdata);
m_MSComm.SetOutput(COleVariant(hexdata));
i=0;
break;
}
}
CView::OnTimer(nIDEvent);
}


是个轮询程序,i是个全局变量,在OnCreate函数里赋初值0,麻烦ls再看看,那里的问题
回复
draculacsdn 2008-03-27
对每一步都用返回值判断,看看问题出在什么地方。
回复
ripyu 2008-03-27
串口已经打开了吧,用超级终端试试能打开不
回复
ripyu 2008-03-27
没看出啥问题.

关键看ontimer里怎么处理的
回复
老道_ 2008-03-27
更正:应该是AfxMessageBox("Open Serial Port Failure!");

//现在的问题是,调试的时候打开串口是没有问题的,打成安装包后,提示Open Serial Port Failure,按初始化串口来说的话,也就是没打开串口,可大家都这么用啊,打包的时候还要注意点什么吗?以前用的都是基于对话框的,没问题
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-27 02:12
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……