技术中心
 
 

VB与s7200通讯例子……读取温度值的程序范例

   日期:2007-12-04     作者:管理员    

  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&n

bsp; 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                        &
nbsp;         打开端口
  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   &n
bsp;            绘制2#炉的温度曲线,为黄色
  Text1.Text = Str(p11)                          输出1#炉温度值
  Text2.Text = Str(p22)                          输出2#炉温度值
  Text3.Text = Str(x1)                            输出监控时间
  End Sub

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢