基于VC6.0的串口通讯系统的上位机软件设计

Download Report

Transcript 基于VC6.0的串口通讯系统的上位机软件设计

基于VC6.0的串口通讯系统的
上位机软件设计
主讲:张友斌
主要内容
•
•
•
•
1、串行通讯的组成
2、串行通讯的分类
3、异步通讯软件开发
4、串口通讯实例编程
串行通讯的应用
•
•
•
•
数据交换
距离较远(RS232<15m,RS485<1.2km)
节省成本
速度要求不高
接口的电气特性
• RS-232-C:为负逻辑关系。即:逻 辑
“1”,-5— -15V;逻辑“0” +5—
+15V 。噪声容限为2V。即 要求接收器能
识别低至+3V的信号作为逻辑“0”,高
到-3V的信号 作为逻辑“1”。与TTL 电
平不兼容 。
• RS485:逻辑“1”以两线间的电压差为+
(2—6) V表示;逻辑“0”以两线间的
电压差为-(2—6)V表示。接口信号电
平比RS-232-C降低了,就不易损坏接口
电路的芯片, 且该电平与TTL电平兼容,
可方便与TTL 电路连接。
串行通讯系统的组成
• 串行通讯系统由上位机与下位机组成
串
口
上位机
通讯线
串
口
下位机
9针串口引脚与功能
针脚
功能
流向
1
载波检测(DCD)
上<-下
2
接受数据(RXD)
上<-下
3
发出数据(TXD)
上->下
4
数据终端准备好
(DTR)
上<-下
5
信号地线(SG)
公共
6
数据准备好(DSR)
上<-下
7
请求发送(RTS)
上->下
8
允许发送(CTS)
上<-下
9
9 振铃指示(RI)
上->下
上位机与下位机的种类



•
•
上位机与下位机是相对而言的
上位机:PC机,微处理器,智能仪表
下位机:PC机,微处理器,智能仪表
同种类:具有相同的电气特性接口
不同种类:不具有相同电气特性接口
RS232/RS485最简接线
上位机与下位机同种类时的连接
Tx
Rx
SG
上位机
Tx
Rx
SG
下位机
RS232/RS485最简接线
• 上位机与下位机不同种类时的连接
Tx
Tx
Rx
GND
转换芯片
例如:
MAX232
MAX485
Rx
GND
上位机
需确保Tx对应Rx
下位机
串行通讯的方法
• 同步通讯:通信双方必须先建立同步,
即双方的时钟要调整到同一个频率。收
发双方不停地发送和接收连续的同步比
特流。但这时还有两种不同的同步方式。
一 种是使用全网同步,用一个非常精确
的主时钟对全网所有结点上的时钟进行
同步。另一种是使用准同步,各结点的
时钟之间允许有微小的误差,然后采用
其他措施实 现同步传输。
串行通讯的方法
• 异步通讯
• 是一种很常用的通信方式。异步通信在发送
字符时,所发送的字符之间的时间间隔可以
是任意的。当然,接收端必须时刻做好接收
的准备。发送端可以在任意时刻开始发送字
符,因此必须在每一个字符的开始和结束的
地方加上标 志,即加上开始位和停止位,以
便使接收端能够正确地将每一个字符接收下
来。异步通信的好处是通信设备简单、便宜,
但传输效率较低(因为开始位和停止位的开
销所占比例较大)
异步通讯的主要参数
•
•
•
•
波特率
停止位
奇偶校验
握手方式
基于VC6.0的串口软件开发
•
•
•
•
•
确定串行通讯的组成
确定串行通讯的方式:同步/异步
确定通讯协议
确定通讯参数(格式):波特率等
确定操作界面
基于VC6.0的串行异步通讯
软件开发
•
•
•
•
•
软件设计步骤:
1、建立工程
2、设计界面
3、编写通讯程序
4、调试
建立工程步骤
• 1、打开VC6.0
• 2、新建工程(Project): 输入工程名
并选择工程类型为(.exe)
• 3、选择程序窗口类型:(文档、对话框)
• 4、选择窗口特性
• Finish
(下面以最简单的对话框为例子)
对话框的设计
•
•
•
•
•
设计画面布置
调整对话框大小
修改或设置对话框属性
插入控件
编写命令程序
MSCOMM控件的插入
• 主菜单Poject->Add to Project ->
Components and Controls->wait…->
Registered ActiveX Controls->
Microsoft Communication Control,Version 6.0
• 点击 insert ->OK(在控件工具里会出现一个新
的图标))
• 不点击Close 而点击More ,可看到关于
MSCOMM的详细帮助说明,再点击Close
• 待续…
MSCOMM控件的插入
• 点击“控件工具箱”中的MSCOMM控件
• 在对话框合适的地方点击右键
(MScomm控件插入完成)
• 按住左键拖动Mscomm控件到合适的地方
(不妨碍其他控件的显示即可)
• 试运行程序发现程序窗口中没有显示
Mscomm控件(因为该控件的属性默认为
隐藏)
MSCOMM控件的插入
• 为mscomm建立变量:主菜单->View>Classwizard->选择Member Variables属
性页->双击MScomm1->输入变量名
(例如m_mscomm)->OK->OK
串口软件编写
• 添加命令按钮->修改属性:ID号以及显
示字符
• 添加对应命令程序:双击该按钮,并修
改命令函数名->OK->自动进入该函数
编辑处
(此处一般添加有串口设置,打开串口,关
闭串口等按钮)
串口初始化程序
• 包括:
1 串口参数:波特率,奇偶校验,字节数,
停止位(例如:“9600,N,8,1”)
2 发送与接受数据类型(字符/二进制)
3 发送与接受缓冲器字节大小
4 发送多少个字节与接受多少个字节引起
中断(Windows不称为中断而称为:事件)
5 端口(com1.com2,….)……等等
数据的发送与接收
• 回到对话框 ->双击MSCOMM控件->修改函
数名(此为串口事件处理子程序)
• 发送字符串:在要发送的地方使用
m_mscomm.SetOutput(COleVariant(“字符串”));
• 接收字符串:在事件处理函数中较为方便
• 难点:对VARIANT的使用
VC中的VARIANT数据
VARIANT 数据为枚举类型
enum VARENUM
{ VT_EMPTY
= 0,
VT_NULL
= 1,
VT_I2
= 2,
VT_I4
= 3,
VT_R4
= 4,
VT_R8
= 5,
VT_CY
= 6,
VT_DATE
= 7,
VT_BSTR
= 8,
VT_DISPATCH = 9,
VT_ERROR
= 10,
…
}
对VARIANT的使用:
VARIANT m_input; //定义m_input
::VariantInit(&m_input);// 初始化( 清零)
m_input.vt =VT_BSTR; //指定具体数据类型
数据传递格式
datain=m_input.bstrVal; //“=”两边数据类型要求一致
接收数据程序
•
•
•
•
•
•
•
•
•
•
•
VARIANT m_input;
::VariantInit(&m_input);
m_input.vt =VT_BSTR;
CString str;
unsigned int flag=m_mscomm.GetCommEvent();//comEvReceive有数据事件发生
if(flag==2)
//1-发送了指定个数的数据,2-接收到指定个数的数据
{
m_input=m_mscomm.GetInput();//接收数据
str=m_input.bstrVal;
AfxMessageBox(str); //此处为数据处理
}
结论
• 串行通讯虽然有其技术的局限性,但目
前在许多场合依然得到广泛应用,作为
控制系统应用的设计者,必须熟练掌握
串口通讯的硬软件的设计与开发。