8522|0

23

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

VB与s7200通讯例子(blueapple) [复制链接]

引自:http://blog.gkong.com/blog.asp?name=blueapple 读取温度值的程序范例 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 Sub 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
此帖出自工控电子论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表