工控网首页
>

应用设计

>

基于VC+ + 6.0的微机与多单片机通信

基于VC+ + 6.0的微机与多单片机通信

2006/5/23 9:08:00
关键词:串行通信;Active x;单片机 中图分类号:TP311.11 文献标识码:A Serial Communication of Computer with Multi - SCM Based VC + + 6.0 REN Zhan-kui (Dalian Naval Academy Company 15 ,Dalian 116018,China) Abstract: In this paper, a method of serial communication based on Active X accomplishes correspondence between microcomputer and multi- SCM (Single Chip Micyoco) with Microsoft Visual C++ 6.0. Depend on user-defined SPCP(Serial Port Communication Protocol), transmission is reliable. This method has been used in practice, it has the effect of high- speed and steady- going. Key words: serial communication; Active X; SCM(Single Chip Micyoco 1 引 言 在工业控制中,经常要组成微机为上位机而单片机为下位机的控制网络,两者一般通过RS - 232或RS - 485串行接口进行通信。但是,在Windows工业监控软件开发中,如何实现微机与多单片机之间的串行通信是一个较大的障碍,通信机制和数据结构是设计的关键之一。本文通过开发基于VC++6.0的微机与多单片机之间的RS-485串口通信程序,并应用于某武器控制系统中,达到了工业运用中开发Windows工控软件的实际要求。 2 系统分析 在我们开发的一个武器火控系统中,需要一台微机通过串口控制位于各武器单元的单片机。图1给出了上位微机与单片机通信示意图。其中,单片机组成的下位机可实时接收并处理上位微机发出的指令和装订参数、检测武器单元的运行状况并报告上位微机主机。上位机通过串口得到各武器单元的工作情况后,通过用户界面反映出来,同时根据设定的参数操纵下位机作出相应的动作,控制武器系统按预定的程式运转。
1.1 选择总线 在设计该系统时,我们选用了RS - 485串行总线接口标准。由单片机构成的多机串行通(信系统中,一般采用主从式结构:从机不主动发送命令或数据,一切都由主机控制。并且在一个多机通信系统中,只有一台单机作为主机,各台从机之间不能相互通讯,即使有信息交换也必须通过主机转发。RS - 485串行总线接口标准以差分平衡方式传输信号,具有很强的抗共模干扰的能力,允许一对双绞线上一个发送器驱动多个负载设备。工业现场控制系统中经常采用该总线标准进行数据传输。 1.2 通信规则 由于RS - 485通讯是一种半双工通讯,在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则: 1)复位时,主从机都应该处于接收状态。SN75176芯片(RS - 485总线驱动芯片)的发送和接收功能转换是由芯片的RE*,DE端控制的。RE*=1,DE=1时,SN75176发送状态;RE*=0,DE=0时,SN75176处于接收状态。一般使用单片机的一根口线连接RE*,DE端,应该将口线反向后接人SN75176的控制端,使上电时SN75176处于接收状态。 另外,在主从机软件上也应附加若干处理措施,如:上电时或正式通讯之前,对串行口做几次空操作,清除端口的非法数据和命令。 2)控制端RE*,DE的信号的有效脉宽应该大于发送或接收一帧信号的宽度。 在RS - 232,RS - 422等全双工通讯过程中,发送和接收信号分别在不同的物理链路上传输,发送端始终为发送端,接收端始终为接收端,不存在发送、接收控制信号切换问题。在RS - 485半双工通讯中,由于SN75176的发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。 发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能; 接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。 3)总线上所连接的各单机的发送控制信号在时序上完全隔开。 总之,发送和接收控制信号应该足够宽,以保证完整地接收一帧数据,任意两个单机的发送控制信号在时间上完全分开,避免总线争端。 3 串口通信协议设计 串口通信协议用于完成上位机和下位机之间数据传输功能,简称SPCP(Serial Port Communica tion Protoc01)。SPCP设计思想基于帧传输方式,即在向串口发送数据时是一帧一帧地发送。为保证可靠的传输,在传输开始前,通过握手建立连接(类似于TCP/IP),在每一帧的传输中,采用发送/应答/重连/失败的方式。 上位机发送的数据和指令如表1所示:
例如对1号单片机(地址为C1H)进行写动态数据操作时流程如下: (1)单片机发出地址编码,建立连接。数据长度为1个字节,帧格式为: (2)单片机返回收到的地址码,格式同(1) (3)主机发送动态数据。数据长度为11字节,帧格式为:
(4)3号单片机返回收到的动态数据,格式同(3); (5)主机接收后进行校验,校验正确则进入下 一程式发送,否则认为通信失败,需要重新进行以上步骤。 4 上位微机通信程序设计 在VC工程中加入串行通信控件MSComm后,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm 1Ti-comm),通过该对象便可以对串口属性进行设置,以下是通过设置控件属性对串口进行初始化的实例: BOOL CMyFuncDlg::OnInitDialog() { 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");//端口参数设置 m-ctrlComm.SetInputMode(1);//二进制方式检取数据 m-ctrlComm.SetRThreshold(1);//接收缓冲区中有多于或等于1个字符时引发 //一个接收数据的OnComm事件 m-ctrlComm.SetInputLen(0); m-ctrlComm.Getlnput();//预读缓冲区,清除非法数据和命令 } 其它属性均取默认值。 事件驱动是处理串行端口交互作用的一种非常有效的方法。OnComm事件的CommEvent属性可以捕捉并检查通信事件和错误。双击对话框中CMSComm控件,添加OnComm事件的代码: COleSafeArray safearray-inp; if(m-ctrlComm.GetCommEvent()==2)//表示接收缓冲区内有字符 { variant-inp=m-ctrlComm.GetInput(); safearray-inp=variant-inp;//变量类型转换 ……//数据处理过程 } 5 结束语 以上设计之程序实际运行效果良好,实现了仅用一台上位微机对多个武器单元的指挥控制。上位机具有友好的用户界面,可向任一下位机发送控制指令,并以绘制图形、数据表格等形式反映各武器单元运行情况,简洁直观。 参考文献 [1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社.1996. [2] 潘爱民、王国印译.Visual c++技术内幕[M].北京:清华大学出版社.1998.
投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机