中国辽宁省营口市西门子东北区总代理,西门子变频器总代理,西门子伺服电机总代理
- 供应商
- 广东湘恒智能科技有限公司
- 认证
- 西门子
- S120
- 变频器
- 伺服电机
- G120XA
- 一级总代理
- 联系电话
- 18126392341
- 手机号
- 15267534595
- 联系人
- 梁涛
- 所在地
- 惠州大亚湾澳头石化大道中480号太东天地花园2栋二单元9层01号房(仅限办公)(注册地址)
- 更新时间
- 2024-06-19 09:10
通讯与组态]西门子s7-200与上位机通讯,读取温度值的程序范例!
plc主程序
网络1
//设置控制方式为自由口通信方式,启动接收字符中断 //
plc扫描
自由口通信,波特率为9600,数据位8,停止位1,无校验
初始化rcv,允许rcv,有结束符,检查空闲时间
字串6
结束符为 a
空闲时间为5ms
一次接收的zui大字符为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 字串7
网络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 字串5
creti
not
rcv vb199, 0
*******************************
vb源程序
dim x1,k1, k2
dim p11,p22 '定义变量
dim aa()asbyte '定义数组
privatesubcommand1_click() '开始监控,定时器1有效
timer1.enabled= true
endsub
privatesubcommand2_click() '退事程序,定时器1无效
timer1.enabled= false
cls '清屏 字串4
unloadme
endsub
privatesubform_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 '设定端口号 字串2
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 '清空接收缓冲区
endsub
privatesubtimer1_timer() '定时器1有效,触发接收事件
字串8
mscomm1.portopen=true '打开端口
redimaa(0 to5) '定义动态数组
k1 =0 '识别plc站号,为1
if k1 = 0then mscomm1.output = "1" + chr(10) + chr(13) '发送
do whilemscomm1.inbuffercount =0 '准备接收数据
字串4
loop
aa =mscomm1.input '接收数据存入数组
if aa(0)> 64 then goto xxx:
k2 =int(aa(0) * 255 + aa(1) * 1)
selectcase k2
case1
p11 =int(aa(2) * 255 + aa(3) * 1)
p22 =int(aa(4) * 255 + aa(5) * 1)
caseelse
endselect
k1 = k1 +1
if k1> 2 then k1 = 0
xxx:
mscomm1.portopen= false
endsub
privatesubtimer2_timer() '绘制各中频炉的温度曲线
x1 = x1 +1 '时间增加为1s
picture1.pset(x1, p11),vbred '绘制1#炉的温度曲线,为红色
字串9
picture1.pset(x1, p22),vbblue '绘制2#炉的温度曲线,为黄色
text1.text=str(p11) '输出1#炉温度值
text2.text=str(p22) '输出2#炉温度值
text3.text=str(x1) '输出监控时间
endsub
展开全文