搜索
更多>> 热门搜索:
当前位置:

OFweek工控网

PLC/PAC

正文

基于VB6.0的S7-200PLC与计算机的通讯设计

导读: 本文采用s7-200plc的自由口通讯协议,基于vb6.0开发了一种简单实用且易于功能扩展的监控界面,其中计算机作为上位机,通过mscomm控件建立与下位机plc的通讯,可以实现数字量和模拟量读写、存储及模拟量趋势曲线绘制。

1  引言
           
  plc 作为一种稳定可靠的控制器在工业控制系统得到了广泛的应用[1]。但是由于中小型plc的人机接口功能不很完善,不能提供给用户一个友好的交互界面,因此妨碍了对现场运行过程的跟踪与监控[2~5]。目前一些通用的组态软件,以其功能强大、界面友好、开发简洁等优点在计算机监控领域已经得到了广泛的应用,但是一般价格比较昂贵[6~7]。

  visual basic6.0 在开发可视化环境下的监控系统时具有其独特的优势,它本身提供的mscomm控件就是为应用程序提供串口通讯而设计的,它屏蔽了通讯过程中的底层操作,只需设置、监视mscomm控件的属性和事件即可完成对串行口的初始化和数据输入输出[8~10]。西门子s7-200plc由于其体积小,可靠性高,通讯功能强大等特点,在工业控制领域得到广泛的应用。s7-200系列plc的通讯方式主要有三种:ppi方式、profibus-dp方式、freeport(自由口)方式。其中自由口方式是由用户自己定义通讯协议,具有与外围设备通讯方便、自由,易于计算机控制软件的开发等特点,因此使用自由口通讯方式实现plc与上位机通信的控制方案较多[11~14]。

  本文采用s7-200plc的自由口通讯协议,基于vb6.0开发了一种简单实用且易于功能扩展的监控界面,其中计算机作为上位机,通过mscomm控件建立与下位机plc的通讯,可以实现数字量和模拟量读写、存储及模拟量趋势曲线绘制。
            
2  通讯原理 
           
  在上位机中,通过vb6.0中的mscomm控件完成数据的发送与接收;在下位机中则是通过plc的指令完成数据的发送与接收的。
           
  2.1 通讯初始化设置
           
  由于s7-200plc与计算机的自由口通讯是串行通讯,故通讯前需要通讯双方的串行端口初始化,使双方通讯参数保持一致。
           
  (1) 上位机初始化设置
           
  上位机使用mscomm控件通过串行端口发送和接收数据,因此首先要对mscomm控件进行初始化设置,主要始化设置如下:

            mscomm1.commport=1 `设定通讯端口号
            mscomm1.portopen=true `通讯端口打开
            mscomm1.settings="9600,n,8,1"
            mscomm1.inputmode=1
           
  settings:以字符串的形式设置并返回波特率、奇偶校验位、数据位和停止位。其中以字符n、o、e 分别代表无校验、奇校验和偶校验。
           
  inputmode:设置从缓冲区读取数据的格式;0为字符串格式(text),1为二进制格式(binary) [15]。
           
  (2) 下位机的初始化设置
           
  为了使下位机与上位机的通讯参数保持一致,可通过对plc的自由端口控制寄存器smb30(端口0)或smb130(端口1)的设置来实现。由于本文中使用的是cpu222是端口0,因此对plc的通讯设置是通过设置smb30来完成的。smb30的设置主要包括奇偶校验位、数据位、波特率、协议选择等参数。本文smb30设置内容如下,奇偶校验为不校验、字符数据位为8位/字符、波特率为9600bit/s、协议选择为自由口协议,故smb30设置为9。由于本文是通过接收字符中断接收数据,通过定时中断发送数据,因此需要将两个中断初始化。
           
  plc主要初始化设置:

            movb 9, smb30   //将自由口控制存储器设置9
            movb 200, smb34   //定时中断时间设置(200ms)
            atch int_0, 8   //接收字符中断
            atch int_1, 10  //定时中断
            eni  //中断允许
            2.2 通讯方式

             图1  数据存储时的界面
       

    
  (1) 上位机通讯方式
           
  首先将上位机待发送的m个字节依次存储在数组s中,每次待接收的数据存储在变量r中。
           
  发送信息时,数组s中第一个元素s(0)存储第一个待发送字节……最后一个元素s(m-1)存储最后一个待发送字节,发送方式为mscomm1.output=s。
           
  接收方式为 r=mscomm1.input。
           
  由于plc中的信息是以byte的形式传输到计算机中,因此上位机需要对接收的数据进行数据处理。由于plc中模拟量传感器数据是以word的形式存储在aiw中,而plc在发送该数据时是按照word对应的两个byte发送,故计算机在后台计算中要将其对应的两个byte转换为word。为了在人机界面中表达数字量(qb,ib,mb)的各个状态,需要在计算机后台计算中把plc的各数字量的十进制转换为八位二进制,通过对八位二进制的每个位做0、1判断,利用vb6.0可使用多种方法把判断结果表达在界面中。

             图2  存储在excel表格中的部分数据
 

           
  (2) 下位机通讯方式
           
  为了在计算机中实时显示plc运行状况及传感器的实时数据,就需要plc主动发送信息。为此,本文通过“定时中断”使plc周期地向计算机发送数据。具体方法是在定时中断事件里,使用plc自带的发送指令xmt发送数据,定时中断的时间设置(1ms~255ms)即为发送周期。
           
  s7-200系列的plc接收指令有两种方法:第一种方法是使用plc自带的rcv指令来接收计算机数据;第二种方法采用plc提供的“接收字符中断”方式,将smb2(自由口接收字符缓冲区)定义指针,使用指针接收数据。在这两种方法中,第二种方法更加灵活,因此在本文中,plc在接收信息时采用指针接收数据。即在plc接收数据时,每次接收m个字节,仅在第一个字节进入smb2时定义指针,并将该字节写入指针所指向的变量存储字节;第二个字节进入smb2时,指针指向下一个变量存储字节,并把第二个字节写入……最后一个字节进入smb2时,指针指向下一个变量存储字节,把第m个字节写入。若数据接收完成,则清空用于计数的变量存储字节,等待下次接收数据,至此完成一次数据接收。本文中在接收字符中断里使用指针接收2个字节:

            ld   sm4.5    //变送器闲置时动作
            lps
            ab=  vb99, 0   //vb99为0时
            movd    &vb100, ac1   
            //定义指针ac1,存储于vb100
            lrd                             
            movb smb2, *ac1  
            //指针指向自由口接收字符缓冲区
            lrd                               
            incd ac1    //指针递增
            lrd                               
            incb vb99    //接收字节个数递增
            lpp           
            ab=  vb99, 2   //接收字节个数为2
            movb 0, vb99    //计数清零,完成一次接收

1  2  下一页>  
责任编辑:siliver
免责声明: 本文仅代表作者个人观点,与 OFweek工控网 无关。其原创性以及文中陈述文字和内容未经本站证实, 对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅 作参考,并请自行核实相关内容。

我来说两句

(共0条评论,0人参与)

请输入评论

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

  • 机械
  • 自动化
  • 单片机
  • 猎头职位
更多
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码: