当前位置:智城范文网>范文大全 > 征文 > 用vc++实现PC与电机的数据通信

用vc++实现PC与电机的数据通信

时间:2022-03-15 08:41:32 来源:网友投稿

摘 要设计一种基于vc++的步进电机控制系统,用vc++6.0编制控制可视化程序界面,实现通过上位机对步进电机的基本控制:按指定步数和方向控制步进电机转动,并利用上位机实时显示步进电机的运行状态。该设计方案开发成本较低,有很强的实用性。

关键词电机;vc++;串行通信;智能

中图分类号TP文献标识码A文章编号1673-9671-(2010)111-0022-01

很多时候我们需要通过软件界面控制电机的启动,正转,反转,控制并监视电机的步进值,并在界面上反映出来,使用户能够直观的了解电机的一些参数,进行一些实时的处理。vc++是Windows环境下的可视化编程工具,可以实现通信和数据处理的编程要求,而串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文用vc++提供的ActiveX控件与通信函数,实现了PC与电机设备间的数据通信,从而实现电机的智能化。

1步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。即当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

2VC++程序设计

2.1MSComm 控件的使用

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通信功能。要添加此控件,可选择Project->Add To Project->Components and Controls菜单命令,然后在弹出的Components and Controls Gallery 对话框中双击Registered ActiveX 文件夹,再选中“Microsoft Communications Controls,Version 6.0”选项,单击“Insert”按钮就可以完成添加MSComm 控件操作。

2.2MSComm控件几个常用的属性

1)CommPort 属性:设置并返回连接的串行端口号,Windows 将会利用该串口和外界通信。

2)Settings 属性:设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。默认值是“9600,N,8,1”。

3)RThreshold 属性:MSComm 控件设置CommEvent 属性为comEvReceive 并产生OnComm 。

4)SThreshold 属性:MSComm 控件设置CommEvent 属性为comEvSend 并产生OnComm 事件,设置并返回传输缓冲区中允许的最小字符数。

5)InputMode 属性:设置或返回传输数据的类型。

6)Input 属性:表示从接收缓冲区移走一串字符,将缓冲区接收到的数据读入变量,属性为Variant 型变量。

7)PortOpen属性:用于打开或关闭端口。

8)OutPut属性:用于向发送缓冲区写数据流,属性为Variant变量。

2.3MSComm控件的串口编程基本流程

1)在当前Project 中插入MSComm 控件。

2)初始化并打开串口。

3)串口读写:GetInput()和SetOutput(),这两个函数的原型是:VARIANT GetInput()及 void SetOutput(const VARIANT& NewValue)。

2.4电机界面如图1

PC机控制电机正向启动的部分代码如下:

BYTE g_bSendComd[5] = {0x55,0xb0,0xa0,0x00,0x00};

void CDianjiDlg::OnForwardStart()

{UpdateData(TRUE);tanslateint();

g_bSendComd[0]=0x55;g_bSendComd[1]=0xb0;g_bSendComd[2]=0xa0;g_bSendComd[3]=hicount;

g_bSendComd[4]=locount;CByteArray OutBuf; COleVariant varOutput; OutBuf.SetSize(5);

for(int i = 0; i < 5; i++)

{ OutBuf.SetAt(i, g_bSendComd[i]); // BYTE转CByteArray

OutBuf[i] = g_bSendComd[i];// BYTE转CByteArray

}

varOutput = OutBuf; m_ctrlComm.SetOutput(varOutput);m_iCurrent = 0;m_iADValue = 0;

UpdateData(FALSE);}

图1电机控制器

正向步进值/反向步进值表示电机转动的方向和圈数,当我们输入步进值再点击电机正向启动按钮时,电机正向转动,点电机停止时会显示现在电机转了多少圈,并显示当前AD值,点击电机归零可以重新设置步进值,反向的原理相同。

电机上传指令给PC机时:电机每发送一次命令PC机当前计数值加一,并在当前AD值中显示,代码实现时用到了一个MAKEWORD宏,这个宏创建一个被指定变量连接而成的WORD变量,返回一个WORD变量。这样就实现了PC控制电机启动和停止并监视运行状况的目的,达到了可视化智能控制的效果,方便我们及时掌握电机的运行情况。

3小结

VC++是一个非常优秀的用户平台,提供了多种方法对串口进行通信控制,使用户不必了解具体的硬件原理,简化了编程,本例已用电机做了测试,效果达到了预期的目标,可以很好的实现上下位机间的通信。

参考文献

[1]李现勇.Visual C++串口通信技术与工程实践[M].人民邮电出版社 2002,5.

[2]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践(第二版)[M].北京:电子工业出版社,2007.

[3]黄维通.Visual C++面向对象与可视化程序设计[M].北京:清华大学出版社,2003.

[4]陈天华.面向对象程序设计与Visual C++6.0 教程[M].北京:清华大学出版社,2006.

[5]马建红.Visual C++程序设计与软件技术基础[M].中国水利水电出版社,2003,4.

作者简介

高建云,成都理工大学在读硕士研究生,主要从事于c++界面设计和信号处理研究。

推荐访问: 数据通信 电机 vc PC

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号