发一个自己写的上位机软件(含VC6.0工程文件)
本帖最后由 zouzhichao 于 2013-5-21 14:40 编辑自己写的,如果你想学VC6.0 MFC软件设计的话,这篇文章是一个不错的入门级解析,本人功力有限,这个软件上不了厅堂,还请高手勿拍砖
对于电工来说,MFC写上位机主要是控件的学习,别的更深入的东西不是一时半会能搞明白的
这个软件包括了一个普通的Edit类控件,串口控件,NTGraph绘图控件,这里主要讲串口控件和NTGraph绘图控件,以及设计这个软件的一个整体思路
看不懂 要注册控件才能用 串口初始化代码:
//如果串口是打开的,先关闭串口
if(m_Mscomm.GetPortOpen())
m_Mscomm.SetPortOpen(false);
else
{
//设置接收,发送缓存区大小
m_Mscomm.SetInBufferSize(1024);
m_Mscomm.SetOutBufferSize(1024);
//选择ASCII或者BIN模式
m_Mscomm.SetInputMode(1);
//4800/9600/19200/38400,无校验,8位数据位,1个停止位
LPCTSTR Buffer = {"4800,n,8,1", "9600,n,8,1", "19200,n,8,1", "38400,n,8,1"};
m_Mscomm.SetSettings(Buffer);
//每接受到一个字节就响应,类似中断
m_Mscomm.SetRThreshold(1);
m_Mscomm.SetInputLen(0);
//打开串口
m_Mscomm.SetPortOpen(true);
//判断是否已开
if(m_Mscomm.GetPortOpen())
AfxMessageBox("打开串口");
} 关闭串口代码:
if(m_Mscomm.GetPortOpen())
m_Mscomm.SetPortOpen(false);
上面漏了一句,选择串口号
m_Mscomm.SetCommPort(CommNum); 谢谢楼主分享。 串口响应函数:
void CMyDlg::OnOnCommMscomm()
{
// TODO: Add your control notification handler code here
static char Buffer = {NULL};
static char* Point = (char*)Buffer;
//接收字符的Event号是2,如果不是2,直接返回
if(2 != m_Mscomm.GetCommEvent())
return;
//读取接收缓存区
VARIANT Temp1 = m_Mscomm.GetInput();
COleSafeArray Temp = Temp1;
long StrLen = Temp.GetOneDimSize();
for (long i = 0; i < StrLen; i++, Point++)
Temp.GetElement(&i, Point);
//我一般习惯采用'\n'代表一条消息的结束,所以会有下面这句
if ('\n' == *(Point - 1))
{
//
Point = (char*)Buffer;
memset(Point, NULL, 1024);
}
}
// TODO: Add your control notification handler code here这个表示MFC自动生成的模板框架,自己写的代码写到这句的下面 串口发送函数:
int CMyDlg::CommOutStr(const char* Str)
{
//如果串口没有打开,直接返回-1
if(!m_Mscomm.GetPortOpen())
return -1;
//得到字符串长度
unsigned int StrLen = strlen(Str);
//转换格式
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(StrLen);
for (unsigned int i = 0; i < StrLen; i++, Str++)
m_Array.SetAt(i, *((unsigned char*)Str));
//发送
m_Mscomm.SetOutput(COleVariant(m_Array));
return 0;
} 有了这三个函数,再加几个EDIT控件,基本就可以写一个很简陋的串口助手了 一般我习惯把串口号的选择,波特率的选择,校验位的选择,停止位的选择,用组合框控件
最后根据选择生成字符串,如“9600,n,8,1)
第一个参数:波特率
第二个参数:校验位,n = none, o = odd,e = even
第三个参数:数据位长度
第四个参数:停止位(1或2) 组合框的样式选择下拉列表形式,假设组合框的关联变量是m_CommNum,那么可以通过m_CommNum.GetCurSel(),m_CommNum.SetCurSel()来获取和设置当前的组合框选择 不错,比我当年第一个串口软件强多了{:shy:} loveye21 发表于 2013-5-21 15:07 static/image/common/back.gif
不错,比我当年第一个串口软件强多了
我写的第一个串口软件不是MFC做的,老复杂了,最开始只能发,不能收,后来加了一个线程才解决收数据的问题 loveye21 发表于 2013-5-21 15:07 static/image/common/back.gif
不错,比我当年第一个串口软件强多了
第一个串口软件的绘图也是一个一个点地画,实现一条动态曲线麻烦死了,写得都吐了,现在基本都用控件来做了,省事,开发快 龚建伟。
API的串口。
lee345 发表于 2013-5-21 14:48 static/image/common/back.gif
要注册控件才能用
用了一个NTGraph控件,这个要注册,但我的VC6.0它安装的时候就注册了,所以。。。。。这个程序编译出来拿到别的电脑上去,确实是不能运行的,当然他如果也装了VC的话,貌似那个控件都是注册了的,我试过自己单独注册,没有成功
串口控件一般都不需要注册了 为何还学VC6??VS不是更好吗 lr120363092 发表于 2013-5-21 16:08 static/image/common/back.gif
为何还学VC6??VS不是更好吗
跟不上时代了,有点老了,学不动新东西了,有精力会去整个VS08或者VS12吧 lr120363092 发表于 2013-5-21 16:08 static/image/common/back.gif
为何还学VC6??VS不是更好吗
现在电脑配置太低,目前跑不动VS2008,VS2012更没法整了(150块买的奔腾台式机){:lol:} 更习惯于把C++功能封装起来用C#调用,后者调试要方便百倍以上。 还是VC6好,VS2010以上虽然方便,但是老电脑使用的时候还需要安装库! wye11083 发表于 2013-5-21 19:49 static/image/common/back.gif
更习惯于把C++功能封装起来用C#调用,后者调试要方便百倍以上。
我习惯把C封装成DLL,给PowerBuilder调用(这个做数据库很方便,不好的地方就是软件需要打包才能到别的机器运行),现在不是很喜欢写上位机软件了 zouzhichao 发表于 2013-5-21 20:09 static/image/common/back.gif
我习惯把C封装成DLL,给PowerBuilder调用(这个做数据库很方便,不好的地方就是软件需要打包才能到别的机 ...
的确,C++也要编译成DLL才能被C#调用。写上位机的确很烦,不过是比下位机方便。 wye11083 发表于 2013-5-21 20:55 static/image/common/back.gif
的确,C++也要编译成DLL才能被C#调用。写上位机的确很烦,不过是比下位机方便。 ...
下位机只习惯AVR老八位,水平有限,做不了啥高科技玩意,看来您是上下全搞的高手,估计硬件你也能来几手 zouzhichao 发表于 2013-5-21 22:36 static/image/common/back.gif
下位机只习惯AVR老八位,水平有限,做不了啥高科技玩意,看来您是上下全搞的高手,估计硬件你也能来几手 ...
毛的高手,也就会用68013+FPGA写个小接口,算法都没写过。上位机就发发数据,读个68013的端口,==。用C#是因为调试方便,不用跟C++一样头疼了。 wye11083 发表于 2013-5-21 22:54 static/image/common/back.gif
毛的高手,也就会用68013+FPGA写个小接口,算法都没写过。上位机就发发数据,读个68013的端口,==。用C# ...
对我来说,很厉害了。大学就快过完了,什么东西都学得个半吊子样,读研没啥戏,也没啥兴致,找工作的时候也苦逼死了。做软件工程师人家开口闭口java会不会,网页会不会,数据库会不会,全他妈傻眼。找嵌入式的,人家一开口就是FPGA,DSP,ARM,摸都没摸过 zouzhichao 发表于 2013-5-21 23:11 static/image/common/back.gif
对我来说,很厉害了。大学就快过完了,什么东西都学得个半吊子样,读研没啥戏,也没啥兴致,找工作的时候 ...
学不学,学多少,在你自己,而不在你学校和你老师,当然好出身能给你增不少金。我也快毕业,不过是读研,51核的68013搞了一个月才会玩,FPGA学了半年才入了门,入门之后倒非常简单了。目前JAVA在平台应用上最广泛,而嵌入式ARM最多。如果你不打算搞最底层的硬件,就不用去搞FPGA,ARM足矣。当然DSP最好是熟悉一点。 感谢分享! wye11083 发表于 2013-5-21 23:16 static/image/common/back.gif
学不学,学多少,在你自己,而不在你学校和你老师,当然好出身能给你增不少金。我也快毕业,不过是读研, ...
多谢指导,有时间学学ARM
页:
[1]