如何设置串行通信的特点测量仪器与计算机之间的相位差

文档贡献者
该文档贡献者很忙,什么也没留下。
下载此文档
正在努力加载中...
电力系统中相位测量的研究论文
文档星级:
内容提示:电力系统中相位测量的研究论文,论文,电力,相位,电力系统,相位检测中的,相位测量,电力系统中,测量的,测量电力,电力系统论文,非最小相位系统,载波相位测量,最小相位系统,最大相位系统,相位差测量
文档格式:PDF|
浏览次数:1|
上传日期: 05:52:23|
下载积分:
该用户还上传了这些文档
官方公共微信
下载文档:电力系统中相位测量的研究论文.PDF基于单片机的相位测量仪电路设计(完整版)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
18页免费10页免费14页免费2页¥2.004页免费 6页免费20页4下载券3页免费38页4下载券42页免费
喜欢此文档的还喜欢23页4下载券951页1下载券10页免费41页1下载券47页免费
基于单片机的相位测量仪电路设计(完整版)|毕​业​设​计​论​文​,​基​于​单​片​机​的​相​位​测​量​仪​电​路​设​计​(​完​整​版​)
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢查看: 625|回复: 0
基于VB与C51串行通信协议的设计与实现
帖子金币JC币
从四品知府, 积分 905, 距离下一级还需 95 积分
从四品知府, 积分 905, 距离下一级还需 95 积分
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
  串行通信是计算机之间较常用的通信手段之一,在工业控制中,经常要将带有rs232总线接口的仪器作为i/o接口设备,通过rs232串行总线与pc计算机组成一整套仪器系统。
  单片机c语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
  本文通过制定串行通信协议,上位机采用vb语言,单片机用c语言编程来实现计算机与单片机之间的串行通信,这对功能复杂的通信,采用串口通信协议将使数据传送准确可靠。
  2 通信协议及程序设计思想
  pc机与单片机之间的通信是通过串行口实现的,由于单片机系统电平是ttl电平,与标准rs232不兼容,本实验通过max232将ttl电平转换为 rs232标准,再与pc机的串口连接。为使数据在链路上无差错的传送,并实现不同的功能,本文采用通信协议来规约数据的传输。本文采用的通信协议如下:
  (1) 通信参数设定:
  波特率9600,无奇偶校验,8个数据位,1个停止位。
  (2) 命令帧格式:
  1byte 1byte 2byte 1byte
  起始标志 功能码 参数 校验和命令帧起始标志为63h。
  功能码:命令帧中的功能码代表不同的命令,例如,当功能码取50h时为上位机读数据命令,下位机接到此命令后把数据传给上位机;当功能码取60h时为上位机写数据命令。命令帧的第三个段为命令参数,是传输命令时的附加信息,如果命令不需要附加信息时,可以将它置为0即可,但有些命令需要进一步的信息,例如,当功能码取52h时帧表示错误命令,这时就可以用命令帧的参数段来表示错误的原因或类型。这种命令帧格式可以保证很大的扩展性和灵活性。
  在命令帧和数据帧中都设置了一个字节的校验码,可以确保帧在传输过程中没有错误,这里采用比较容易实现的和校验方式.
  (3) 数据帧格式:
  1byte 2byte 10byte 1byte
  起始标志 序号 数据块 校验和
  其中数据帧起始标志为64h,序号是当多帧数据要发送时所规定的发送顺序号。数据块为所要传输的内容。
  上位机(pc机)作为主机控制通信的进行,下位机(单片机)作为从机中断响应上位机的通信要求,进入中断服务程序,进行相应的操作。
  3 vb中的串行通信机制及其在上位机通信中的实现
  vb6中有一个专门用来串行通信的控件-mscomm控件。在vb6中选择“工程/部件”菜单项,在“控件”对话框选中“microsoft comm.control 6.0”,单击“确定”即可添加mscomm控件,然后在窗体中依次布置如下控件并正确设置其属性:3个commandbutton按钮,两个 textbox文本框,一个定时器timer1。其中text1显示的是pc机接收单片机发送的数据,text2显示的是pc机发往单片机的数据。
  mscomm控件有两种处理通讯的方式:事件驱动通讯和查询方式。事件驱动的通讯方式处理串行端口交互作用非常有效,是一种功能强大的处理通讯的方法。在通讯过程中,当有通讯事件或错误发生时,mscomm控件的oncomm事件可捕获并处理它们。commevent属性中保留了最近一次通讯事件或错误的数值代码,无论何时当commevent属性的值变化时,就产生oncomm事件。笔者采用oncomm对comevreceive事件的响应来处理收到的数据。当接收缓冲中有rthreshold个字符时该事件产生并持续直到用input属性从接收缓冲区中删除数据。
  首先,上位机向单片机发一个连接命令,下位机接到该命令后给一个表示确认的应答信号,于是实现双方握手。不管上位机是读取数据还是发送数据,在数据接收或发送之前都先发送一帧命令以确定是什么样的数据(这是在命令帧的功能码和参数中设定的)。
  上位机读数据时,每隔一定时间向下位机发送一帧读数据命令,下位机接到此命令即把数据传上来,送到文本框中显示。上位机发送数据时,首先给下位机发一“写数据”命令帧,下位机接到命令后做好准备接收数据,然后上位机才发数据帧。
  (1) “连接”命令按钮的鼠标单击事件
  功能:设置mscomm控件的属性,参数,向下位机发送一个握手信号。
  private sub command1_click() ‘发送连接命令
  dim x(1) as byte
  x(0)=246 ‘握手信号(十六进制为f6h)
  mscomm1.inputlen=1 ‘从接收缓冲区读取1个字符
  mscomm1.rthreshold=1‘接收缓冲区每收到指定个的字符都会使mscomm控件产生 ‘oncomm事件。
  mscomm1.settings=“9600,n,8,1”‘波特率9600,
  ‘无奇偶校验,8个数据位,1个停止位
  if mscomm1.portopen=false then
  mscomm1.portopen=true‘判断通讯口1是否打开
  end if
  mscomm1.output=x
  end sub
  (2) “接收”命令按钮的鼠标单击事件
  启动timer1,定时向下位机发送“读数据”命令帧,在timer1中加入发控制命令的程序,每接收一帧数据就会触发oncomm 的commevreceive事件。
  private sub timer1_timer()
  dim i as integer
  dim cmdbuf(5) as byte
  dim p as byte
  cmdbuf(0)=99 ‘命令帧起始标志(十六进制为63h)
  cmdbuf(1)=80 ‘功能码
  cmdbuf(2)=16 ‘参数
  cmdbuf(3)=0
  for i=0 to 3
  p=p+cmdbuf(i)
  cmdbuf(4)=p ‘校验和为前四位数据的和
  mscomm1.output=cmdbuf‘把数组送到输出缓冲区中
  end sub
  发送数据与接收数据程序大致相同,在发送命令按钮的click过程中首先加入发控制命令的程序,然后再发送数据帧。
  (3) oncomm事件
  接收缓冲区收到指定个数的字符后使mscomm控件产生oncomm事件。
  private sub mscomm1_oncomm()
  dim buf as variant
  dim rdata() as byte
  dim p as variant
  mevent=comevreceive then
  buf=mscomm1.input
  rdata = buf
  text6.text = rdata(0)
  select case rdata(0)
  case 246  `下位机发来的连接确定命令
  mscomm1.inputlen = 1
  mscomm1.rthreshold = 1
  case 100 `接收下位机数据
  while mscomm1.inbuffercount & 12
  mscomm1.inputlen = 12
  buf = mscomm1.input
  end select
  4 下位机程序设计
  在我们所研制的系统中,上下位机的通信机制采用了类似主从式的协议,下位机(由89c52单片机控制)是从机,正常状态下,下位机执行内部的控制方案,当上位机需要与之通信时,下位机利用其中断响应上位机的通信要求,并进行相应的处理。下位机采用c51进行单片机程序设计。
  在使用串口之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤是:
  (1) 确定定时器1的工作方式-编程tmod寄存器;
  (2) 计算定时器1的初值-装载th1,tl1;
  (3) 启动定时器-编程tcon中的tr1;
  (4) 确定串行口的控制-编程
  void initial(void) /*串口初始化*/
  { tmod=0x20;
  pcon=0x00;
  et1=0;
  tr1=1;
  scon=0x50;
  主程序如下:
  #include
  void main()
  void initial(void);
  void timer1code(void);
  void shakehand(void);
  char readcmd(void);
  void senddata(void);
  char receivedata(void);
  while(1)
  if(commflag==0){shakehand();} /*握手信号*/
  if(commflag==1)/*命令信号*/
  if(readcmd()==1)/*读命令成功*/
  switch(command[0])/*判断命令帧的功能码*/
  {case 0x50:/*pc读数据*/
  senddata();/*下位机把所需数 /*据发给上位机*/
  case 0x60:/*pc写数据*/
  receivedata();/*下位机接收数据*/
  5 结束语
  以上程序在系统实际运行中效果良好,通过串口通信协议,上位机能自由地读取单片机上的数据,也能按照命令帧中功能码和参数的不同设置发送不同格式的数据给单片机。上述程序具有较大的实用性,如果需要实现微机与微机,或微机与多个单片机的串行通信,只要根据原理将以上方法和程序稍加改动即可。
京公网安备079
Powered by基于DSP的通信综合实验系统的设计与开发_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
79页免费78页免费9页免费4页¥2.0035页免费 4页免费4页免费7页免费3页免费4页免费
基于DSP的通信综合实验系统的设计与开发|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢来源:《自动化与仪器仪表》2010年第04期 作者:张红军;韦晓明;苏锐生;
基于VB通信控件MSComm实现计算机与欧姆龙PLC串行通信编程的研究与应用
0引言计算机串行通信是计算机与控制设备(PLC)进行数据传送的一种通信方式,也是实现工业自动控制经常用到的通信模式。每一种通信方式都严格约定了与其对应的通信协议。要确保计算机与P L C之间能正常通信,就必须遵照PLC通信协议编写通信程序。本文将围绕如何使用VisualBasic(简称VB)的MSComm通信控件编写计算机与欧姆龙PLC串行通信程序进行阐述。1串行通信串行通信在工业系统控制的范畴中一直占据着极其重要的地位,串行端口(RS-232)是计算机上的标准配置,常用于连接调制解调器来传输数据,在计算机的硬件设备管理器中可以看到,定义为COM1、COM2等。常用的串行通信方式有两种,分别是RS-232和RS-485,本文以RS-232方式为例进行介绍。2VB集成开发环境中MSComm通信控件的使用与设置2.1VisualBasic集成开发环境V B采用了面向对象的程序设计思想。它的基本思路是把复杂的程序设计问题分解为一个个能够完成独立功能的相对简单的对象集合,所谓“对象”就是一个可操作的实体,如窗体、窗体中的命令按钮、标签、文本框等。面向对象的编程就好......(本文共计4页)
相关文章推荐
《电工技术》2006年12期
《科技创新导报》2010年27期
《科技创新导报》2008年16期
《测控技术》2004年02期
《工业控制计算机》2009年07期
《科学技术与工程》2010年31期
《机电工程技术》2005年10期
《机电工程》2007年01期
《微计算机信息》2008年27期
《科技资讯》2008年35期
《微计算机信息》2008年24期
《自动化与仪表》2000年02期
《武汉工程职业技术学院学报》2004年02期
《石油化工自动化》2002年02期
《天津科技大学学报》2004年01期
《九江职业技术学院学报》2007年03期
《计算机自动测量与控制》2001年04期
《煤炭科学技术》2007年12期
《制造业自动化》2011年01期
自动化与仪器仪表
主办:重庆市自动化与仪器仪表学会;重庆工业自动化仪表研究所
出版:自动化与仪器仪表杂志编辑部
出版周期:月刊
出版地:重庆市

我要回帖

更多关于 串行通信的特点 的文章

 

随机推荐