技術頻道

      基于VB6.0的S7-200PLC與計算機的通訊設計

      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 //計數清零,完成一次接收

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 人妻无码视频一区二区三区| 性色A码一区二区三区天美传媒| 亚洲av片一区二区三区| 99精品国产一区二区三区不卡| 美日韩一区二区三区| 中文字幕一区二区三区在线观看 | 国产人妖视频一区二区| 久久久无码精品人妻一区| 99久久综合狠狠综合久久一区| 国偷自产Av一区二区三区吞精| 视频一区二区在线播放| 加勒比无码一区二区三区| 91无码人妻精品一区二区三区L| 亚洲av无码不卡一区二区三区| 香蕉免费看一区二区三区| 亚洲美女高清一区二区三区| 日韩有码一区二区| 精品一区二区高清在线观看| 国产福利一区视频| 美女免费视频一区二区三区| 免费一区二区三区四区五区| 午夜一区二区在线观看| 激情久久av一区av二区av三区| 国产成人久久一区二区不卡三区 | 日本一区二区三区在线网 | 国产成人一区二区三中文| 无码人妻精品一区二区在线视频| 在线精品亚洲一区二区小说| 狠狠综合久久AV一区二区三区| 亚洲毛片αv无线播放一区 | 波多野结衣中文字幕一区二区三区| 精品国产区一区二区三区在线观看| 亚洲av色香蕉一区二区三区| 在线观看精品视频一区二区三区| 亚洲AV无码片一区二区三区 | 日韩有码一区二区| 亚洲日韩国产精品第一页一区| 少妇特黄A一区二区三区| 自拍日韩亚洲一区在线| 精品国产AV无码一区二区三区| 亚洲AV永久无码精品一区二区国产 |