发表于:2009/9/22 18:37:18
#0楼
读取温度值的程序范例
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, 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
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=101481&Name=jczwfy
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, 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
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=101481&Name=jczwfy
日本人说中日友好,中国人民笑了:你丫骗谁呢?
日本人说自己爱和平,亚洲人民笑了:说的是人话吗?
日本人说自己要维护世界和平,美国人民笑了:问你大爷没?
日本人说自己是人,全世界的狗都叫了:兄弟,做狗要厚道,不能忘本!
欢迎访问我的博客http://blog.gkong.com/blog.asp?name=jczwfy
在线PLC触摸屏问题解答加Q号2*7*5*4*7*0*0*6,加好友注明工控网
日本人说自己爱和平,亚洲人民笑了:说的是人话吗?
日本人说自己要维护世界和平,美国人民笑了:问你大爷没?
日本人说自己是人,全世界的狗都叫了:兄弟,做狗要厚道,不能忘本!
欢迎访问我的博客http://blog.gkong.com/blog.asp?name=jczwfy
在线PLC触摸屏问题解答加Q号2*7*5*4*7*0*0*6,加好友注明工控网