技術(shù)頻道

      基于VB6.0的S7-200PLC與計(jì)算機(jī)的通訊設(shè)計(jì)

      1 引言

        plc 作為一種穩(wěn)定可靠的控制器在工業(yè)控制系統(tǒng)得到了廣泛的應(yīng)用[1]。但是由于中小型plc的人機(jī)接口功能不很完善,不能提供給用戶一個(gè)友好的交互界面,因此妨礙了對(duì)現(xiàn)場運(yùn)行過程的跟蹤與監(jiān)控[2~5]。目前一些通用的組態(tài)軟件,以其功能強(qiáng)大、界面友好、開發(fā)簡潔等優(yōu)點(diǎn)在計(jì)算機(jī)監(jiān)控領(lǐng)域已經(jīng)得到了廣泛的應(yīng)用,但是一般價(jià)格比較昂貴[6~7]。

        visual basic6.0 在開發(fā)可視化環(huán)境下的監(jiān)控系統(tǒng)時(shí)具有其獨(dú)特的優(yōu)勢,它本身提供的mscomm控件就是為應(yīng)用程序提供串口通訊而設(shè)計(jì)的,它屏蔽了通訊過程中的底層操作,只需設(shè)置、監(jiān)視mscomm控件的屬性和事件即可完成對(duì)串行口的初始化和數(shù)據(jù)輸入輸出[8~10]。西門子s7-200plc由于其體積小,可靠性高,通訊功能強(qiáng)大等特點(diǎn),在工業(yè)控制領(lǐng)域得到廣泛的應(yīng)用。s7-200系列plc的通訊方式主要有三種:ppi方式、profibus-dp方式、freeport(自由口)方式。其中自由口方式是由用戶自己定義通訊協(xié)議,具有與外圍設(shè)備通訊方便、自由,易于計(jì)算機(jī)控制軟件的開發(fā)等特點(diǎn),因此使用自由口通訊方式實(shí)現(xiàn)plc與上位機(jī)通信的控制方案較多[11~14]。

        本文采用s7-200plc的自由口通訊協(xié)議,基于vb6.0開發(fā)了一種簡單實(shí)用且易于功能擴(kuò)展的監(jiān)控界面,其中計(jì)算機(jī)作為上位機(jī),通過mscomm控件建立與下位機(jī)plc的通訊,可以實(shí)現(xiàn)數(shù)字量和模擬量讀寫、存儲(chǔ)及模擬量趨勢曲線繪制。

      2 通訊原理

        在上位機(jī)中,通過vb6.0中的mscomm控件完成數(shù)據(jù)的發(fā)送與接收;在下位機(jī)中則是通過plc的指令完成數(shù)據(jù)的發(fā)送與接收的。

        2.1 通訊初始化設(shè)置

        由于s7-200plc與計(jì)算機(jī)的自由口通訊是串行通訊,故通訊前需要通訊雙方的串行端口初始化,使雙方通訊參數(shù)保持一致。

        (1) 上位機(jī)初始化設(shè)置

        上位機(jī)使用mscomm控件通過串行端口發(fā)送和接收數(shù)據(jù),因此首先要對(duì)mscomm控件進(jìn)行初始化設(shè)置,主要始化設(shè)置如下:

      mscomm1.commport=1 `設(shè)定通訊端口號(hào)
      mscomm1.portopen=true `通訊端口打開
      mscomm1.settings="9600,n,8,1"
      mscomm1.inputmode=1

        settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)位、數(shù)據(jù)位和停止位。其中以字符n、o、e 分別代表無校驗(yàn)、奇校驗(yàn)和偶校驗(yàn)。

        inputmode:設(shè)置從緩沖區(qū)讀取數(shù)據(jù)的格式;0為字符串格式(text),1為二進(jìn)制格式(binary) [15]。

        (2) 下位機(jī)的初始化設(shè)置

        為了使下位機(jī)與上位機(jī)的通訊參數(shù)保持一致,可通過對(duì)plc的自由端口控制寄存器smb30(端口0)或smb130(端口1)的設(shè)置來實(shí)現(xiàn)。由于本文中使用的是cpu222是端口0,因此對(duì)plc的通訊設(shè)置是通過設(shè)置smb30來完成的。smb30的設(shè)置主要包括奇偶校驗(yàn)位、數(shù)據(jù)位、波特率、協(xié)議選擇等參數(shù)。本文smb30設(shè)置內(nèi)容如下,奇偶校驗(yàn)為不校驗(yàn)、字符數(shù)據(jù)位為8位/字符、波特率為9600bit/s、協(xié)議選擇為自由口協(xié)議,故smb30設(shè)置為9。由于本文是通過接收字符中斷接收數(shù)據(jù),通過定時(shí)中斷發(fā)送數(shù)據(jù),因此需要將兩個(gè)中斷初始化。

        plc主要初始化設(shè)置:

      movb 9, smb30 //將自由口控制存儲(chǔ)器設(shè)置9
      movb 200, smb34 //定時(shí)中斷時(shí)間設(shè)置(200ms)
      atch int_0, 8 //接收字符中斷
      atch int_1, 10 //定時(shí)中斷
      eni //中斷允許

      2.2 通訊方式

      圖1 數(shù)據(jù)存儲(chǔ)時(shí)的界面


      (1) 上位機(jī)通訊方式

        首先將上位機(jī)待發(fā)送的m個(gè)字節(jié)依次存儲(chǔ)在數(shù)組s中,每次待接收的數(shù)據(jù)存儲(chǔ)在變量r中。

        發(fā)送信息時(shí),數(shù)組s中第一個(gè)元素s(0)存儲(chǔ)第一個(gè)待發(fā)送字節(jié)……最后一個(gè)元素s(m-1)存儲(chǔ)最后一個(gè)待發(fā)送字節(jié),發(fā)送方式為mscomm1.output=s。

        接收方式為 r=mscomm1.input。

        由于plc中的信息是以byte的形式傳輸?shù)接?jì)算機(jī)中,因此上位機(jī)需要對(duì)接收的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。由于plc中模擬量傳感器數(shù)據(jù)是以word的形式存儲(chǔ)在aiw中,而plc在發(fā)送該數(shù)據(jù)時(shí)是按照word對(duì)應(yīng)的兩個(gè)byte發(fā)送,故計(jì)算機(jī)在后臺(tái)計(jì)算中要將其對(duì)應(yīng)的兩個(gè)byte轉(zhuǎn)換為word。為了在人機(jī)界面中表達(dá)數(shù)字量(qb,ib,mb)的各個(gè)狀態(tài),需要在計(jì)算機(jī)后臺(tái)計(jì)算中把plc的各數(shù)字量的十進(jìn)制轉(zhuǎn)換為八位二進(jìn)制,通過對(duì)八位二進(jìn)制的每個(gè)位做0、1判斷,利用vb6.0可使用多種方法把判斷結(jié)果表達(dá)在界面中。

      圖2 存儲(chǔ)在excel表格中的部分?jǐn)?shù)據(jù)


        (2) 下位機(jī)通訊方式

        為了在計(jì)算機(jī)中實(shí)時(shí)顯示plc運(yùn)行狀況及傳感器的實(shí)時(shí)數(shù)據(jù),就需要plc主動(dòng)發(fā)送信息。為此,本文通過“定時(shí)中斷”使plc周期地向計(jì)算機(jī)發(fā)送數(shù)據(jù)。具體方法是在定時(shí)中斷事件里,使用plc自帶的發(fā)送指令xmt發(fā)送數(shù)據(jù),定時(shí)中斷的時(shí)間設(shè)置(1ms~255ms)即為發(fā)送周期。

        s7-200系列的plc接收指令有兩種方法:第一種方法是使用plc自帶的rcv指令來接收計(jì)算機(jī)數(shù)據(jù);第二種方法采用plc提供的“接收字符中斷”方式,將smb2(自由口接收字符緩沖區(qū))定義指針,使用指針接收數(shù)據(jù)。在這兩種方法中,第二種方法更加靈活,因此在本文中,plc在接收信息時(shí)采用指針接收數(shù)據(jù)。即在plc接收數(shù)據(jù)時(shí),每次接收m個(gè)字節(jié),僅在第一個(gè)字節(jié)進(jìn)入smb2時(shí)定義指針,并將該字節(jié)寫入指針?biāo)赶虻淖兞看鎯?chǔ)字節(jié);第二個(gè)字節(jié)進(jìn)入smb2時(shí),指針指向下一個(gè)變量存儲(chǔ)字節(jié),并把第二個(gè)字節(jié)寫入……最后一個(gè)字節(jié)進(jìn)入smb2時(shí),指針指向下一個(gè)變量存儲(chǔ)字節(jié),把第m個(gè)字節(jié)寫入。若數(shù)據(jù)接收完成,則清空用于計(jì)數(shù)的變量存儲(chǔ)字節(jié),等待下次接收數(shù)據(jù),至此完成一次數(shù)據(jù)接收。本文中在接收字符中斷里使用指針接收2個(gè)字節(jié):

      ld sm4.5 //變送器閑置時(shí)動(dòng)作
      lps
      ab= vb99, 0 //vb99為0時(shí)
      movd &vb100, ac1
      //定義指針ac1,存儲(chǔ)于vb100
      lrd
      movb smb2, *ac1
      //指針指向自由口接收字符緩沖區(qū)
      lrd
      incd ac1 //指針遞增
      lrd
      incb vb99 //接收字節(jié)個(gè)數(shù)遞增
      lpp
      ab= vb99, 2 //接收字節(jié)個(gè)數(shù)為2
      movb 0, vb99 //計(jì)數(shù)清零,完成一次接收

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 久久AAAA片一区二区| 久久无码AV一区二区三区| 国精产品999一区二区三区有限 | 日本一区二区三区不卡在线视频| 中文字幕一区二区三区四区 | 国产成人无码aa精品一区| 国产无线乱码一区二三区| 亚洲国产精品第一区二区三区| 成人在线观看一区| 在线精品日韩一区二区三区| 无码人妻aⅴ一区二区三区| 在线精品一区二区三区| 精品无码中出一区二区| 日本一区二区三区精品国产| 日本精品视频一区二区| 国产成人精品一区二三区| 小泽玛丽无码视频一区| 中文字幕色AV一区二区三区| 色妞AV永久一区二区国产AV| 一区二区不卡在线| 国产日韩高清一区二区三区| 一区二区三区午夜| 亚洲高清美女一区二区三区| 国产91久久精品一区二区| 在线视频一区二区三区四区| 一区二区视频免费观看| 无码人妻精品一区二区三区66| 老熟女高潮一区二区三区| 日韩动漫av在线播放一区| 国产精品丝袜一区二区三区 | 中文字幕一区视频一线| 亚洲国产视频一区| 久久影院亚洲一区| 亚洲一区在线视频| av无码人妻一区二区三区牛牛 | 国模吧无码一区二区三区| 伊人色综合网一区二区三区| 亚洲综合色自拍一区| 日韩a无吗一区二区三区| 久久精品亚洲一区二区| 精品国产一区二区三区2021|