首頁 > 新聞係統 > 嵌入式係統 > 嵌入式係統技術 正文 > 論壇 返回 打印

VB與s7200通訊例子……讀取溫度值的程序範例

  PLC主程序
  網絡1
  // 設置控製方式為自由口通信方式,啟動接收字符中斷 //
  PLC首次掃描
  自由口通信,波特率為9600,數據位8,停止位1,無校驗
  初始化RCV,允許RCV,有結束符,檢查空閑時間
  結束符為 A
  空閑時間為5MS
  一次接收的最大字符為6個
  啟動通信口,接收完成中斷
  全局允許中斷
  接收數據
  LD    SM0.1
  MOVB  16#09, SMB30
  MOVB  16#B0, SMB87
  MOVB  16#0A, SMB89
  MOVB  6, SMB94
  ATCH  INT_0, 23
  ENI
  RCV    VB199, 0
  網絡2
  // 檢測溫度送VW0 //
  轉換成實際溫度值
  從工作站編號送到輸出緩衝區
  檢測溫度送輸出緩衝區
  LD    SM0.0
  MOVW  AIW0, VW0
  /I    +54, VW0
  MOVW  AIW2, VW2
  /I    +54, VW2
  MOVW  1, VW300
  MOVW  VW0, VW302
  MOVW  VW2, VW304
  網絡3
  // 設置溫度控製上限和下限//
  LD    SM0.0
  MOVW  +350, VW4
  MOVW  +450, VW6
  網絡4
  // 檢測溫度低於下限,則輸出加溫 //
  LDW<  VW0, VW4
  A      SM0.5
  S      Q0.0, 1
  網絡5
  // 檢測溫度高於上限,則輸出降溫 //
  LDW>  VW0, VW6
  A      SM0.5
  R      Q0.0, 1
  網絡6
  //準備傳送參數 //
  發送字節數據,送VB99
  發送檢測溫度數據,送VW100
  發送工作站編號數據,送VW102
  LD    SM0.0
  MOVB  6, VB99
  MOVW  VW300, VW100
  MOVW  VW302, VW102
  MOVW  VW304, VW104
  網絡7
  // 傳送數據 //
  LD    SM0.5
  XMT    VB99, 0

  中斷程序


  網絡1
  //通信口接收數據完成後的中斷 //
  // SMB86 等於16#20,表示PLC收到結速符 //
  收到結束符,把收到的數據傳到VB400
  中斷有條件返回 
  否則繼續接收
  LDB=  SMB86, 16#20
  MOVB  VB200, VB400
  CRETI
  NOT
  RCV    VB199, 0

  //*******************************//

  VB源程序

  Dim x1, k1, k2
  Dim p11, p22          定義變量
  Dim aa() As Byte      定義數組
  Private Sub Command1_Click()            開始監控,定時器1有效
  Timer1.Enabled = True
  End Sub
  Private S ub Command2_Click()            退事程序,定時器1無效
  Timer1.Enabled = False
  Cls  清屏
  Unload Me
  End Sub
  Private Sub Form_Load()                  初始化
  Timer1.Enabled = False  定時器1無效
  Timer1.Interval = 100  定時器1時間為0.1S
  Timer2.Enabled = True  定時器2有效
  Timer2.Interval = 1000  定時器2時間為1S
  Picture1.ScaleMode = 0  定義縱橫坐標

  MSComm1.CommPort = 1    設定端口號
  MSComm1.Settings = "9600,n,8,1"          設定通訊波特率
  MSComm1.InputLen = 6    輸入緩衝區為6個字符
  MSComm1.InBufferSize = 256                接收緩衝器大小
  MSComm1.OutBufferSize = 256              輸出緩衝器大小
  MSComm1.InputMode = comInputModeBinary    以二進製傳輸
  MSComm1.OutBufferCount = 0     ;            清空發送緩衝區
  MSComm1.InBufferCount = 0                清空接收緩衝區
  End Sub
  Private Sub Timer1_Timer()              定時器1有效,觸發接收事件
  MSComm1.PortOpen = True                打開端口
  ReDim aa(0 To 5)    定義動態數組
  k1 = 0              識別PLC站號,為1
  If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13)  發送
  Do While MSComm1.InBufferCount = 0    準備接收數據
  Loop
  aa = MSComm1.Input    接收數據存入數組
  If aa(0) > 64 Then GoTo xxx:
  k2 = Int(aa(0) * 255 + aa(1) * 1)
  Select Case k2
  Case 1
  p11 = Int(aa(2) * 255 + aa(3) * 1)
  p22 = Int(aa(4) * 255 + aa(5) * 1)
  Case Else
  End Select
  k1 = k1 + 1
  If k1 > 2 Then k1 = 0
  xxx:
  MSComm1.PortOpen = False
  End Sub
  Private Sub Timer2_Timer()                       繪製各中頻爐的溫度曲線
  x1 = x1 + 1                  時間增加為1S
  Picture1.PSet (x1, p11), VBRed                  繪製1#爐的溫度曲線,為紅色
  Picture1.PSet (x1, p22), vbBlue                繪製2#爐的溫度曲線,為黃色
  Text1.Text = Str(p11)        輸出1#爐溫度值
  Text2.Text = Str(p22)        輸出2#爐溫度值
  Text3.Text = Str(x1)          輸出監控時間
  End Sub



http://www.autooo.net/autooo/qianrushixitong/jishu/2007-12-16/43798.html