简单的串口通信
来源:互联网 发布:python buffer函数 编辑:程序博客网 时间:2024/05/21 11:27
(3)在对话框中添加控件:向主对话框中添加通讯 控件、按钮、文本框、编辑框和组合框,其中部分属性如表3所示。
(4)初始化串口:
在OnInitDialog()函数中添加初始化串口参数的代码
// TODO: Add extra initialization here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1 if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口
else AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(16); //参数15表示每当串口接收缓冲区中有多于或等于15个字 符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
(5)编写帧校验函数:
首先在CSCommTestDlg类中加入公共成员函数说明
BYTE PLCData[30];//定义输入数据存储区
Void verfun(BYTE vdata[],int n);//定义校验函数
然后写帧校验函数:
void CSCommTestDlg::verfun(BYTE vdata[],int n)
{ int i; BYTE sum=vdata[0];
for(i=1;i<=n-2;i++)
sum^=vdata[i];//计算校验码
vdata[n]=sum;//保存帧校验码
}
(6)为通讯控件IDC_MSComm1添加OnComm消息处理函数OnComm()
void CSCommTestDlg::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k; BYTE rxdata[2048]; //设置BYTE数组(8位无符号整数)
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++)//将数组转入存储区
{
PLCData[k]=rxdata[k];
}
verfun(PLCData,16);//计算校验码
if(PLCData[15]==PLCData[16])
{ //接收数据正确发送确认信号
m_ctrlComm.SetOutput(COleVariant("K@")); //可以在下面自行加上对数据的处理
if(!m_quit)//如果没有结束信号则续传数据
m_ctrlComm.SetOutput(COleVariant("C@"));
else
m_ctrlComm.SetOutput(COleVariant("Z@"));
}
else
//接收数据出错要求重发数据
m_ctrlComm.SetOutput(COleVariant("R@"));
(7)为按钮IDC_BUTTON_START和IDC_BUTTON_QUIT添加消息处理函数OnButtonStart()和On ButtonQuit()
void CSCommTestDlg::OnButtonQuit()
{
m_quit=TRUE;
}
void CSCommTestDlg::OnButtonStart()
{ m_quit=FALSE;
m_ctrlComm.SetOutput(COleVariant("A@")); //发送请求信号
}
4 结束语 本文运用VC++和MFC开发了计算机与PLC的通讯系统,充分利用计算机和PLC本身的资源实现了上位机对PLC的实时监控,可以有效地对作业工具进行监控和管理。本文介绍的通讯系统用于超高压带电作业机器人的控制系统,实践表明,系统简练、稳定,取得了令人满意的效果。 参考文献: [1]朱正礼等.基于VC++的PLC与上位机的通讯.电气传动,2002(2). [2]西门子有限公司.西门子S7-200可编程序控制器系统手册,1999.
- 简单的串口通信
- 简单的串口通信
- Atmega32简单的串口通信
- C#--简单的串口通信程序
- 简单封装的串口通信类
- 关于serialport的简单串口通信
- 串口通信++++多线程简单实例
- Windows 串口通信简单示例
- C++ MFC 简单 串口通信
- 一个简单的串口通信程序(vc6 mfc)
- 简单跨平台串口通信C++类的实现
- 串口通信之简单协议-----结构体的发送
- C# 一个C#串口通信的简单调试工具
- 制作dll文件,最简单的VC串口通信。
- 串口通信的基本概念
- 串口通信的基本知识
- 串口通信的基本概念
- 串口通信的基本概念
- Struts bean:write 标签格式化输出
- 招聘和组建一个优秀的测试团队
- System.Web.HttpContext类型对象
- 联想电脑不能GHOST的解决办法
- 联强EMBA:能力的内涵
- 简单的串口通信
- Exchange Server 2003的RBL应用
- 如何将数据转化为XML格式
- 如何批量删除多个文本文件中的指定字符串
- MsSigChk——用MASM32写的微软文件数字签名检验程序(9.50 KB)
- 答辩结束了!
- Example of constaint satisfatory problem:Australia Map Coloring
- 无心
- 地图编辑器 (AIR)