您现在所在的是:

PLC论坛

回帖:1个,阅读:537 [上一页] [1] [下一页]
5314
jczwfy 版主
文章数:2259
年度积分:50
历史总积分:5314
注册时间:2005/5/7
发站内信
09工控人生征文
发表于: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
日本人说中日友好,中国人民笑了:你丫骗谁呢?
日本人说自己爱和平,亚洲人民笑了:说的是人话吗?
日本人说自己要维护世界和平,美国人民笑了:问你大爷没?
日本人说自己是人,全世界的狗都叫了:兄弟,做狗要厚道,不能忘本!
欢迎访问我的博客http://blog.gkong.com/blog.asp?name=jczwfy
在线PLC触摸屏问题解答加Q号2*7*5*4*7*0*0*6,加好友注明工控网
9783
lwcccf
文章数:7459
年度积分:56
历史总积分:9783
注册时间:2006/1/7
发站内信
09工控人生征文
发表于:2009/9/23 10:34:23
#1楼
VB的不会,不知用VB有什么好处
希望通过论坛与各位成为朋友!
学无止境,学有所用

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003