陈惠鑫
级别: 工控侠客
精华主题: 0
发帖数量: 62 个
工控威望: 2448 点
下载积分: 250 分
在线时间: 51(小时)
注册时间: 2020-02-19
最后登录: 2024-06-07
查看陈惠鑫的 主题 / 回贴
楼主  发表于: 2021-08-21 12:19
主程序是io,在主程序里赋值
$i[10]=ffh
$i[11]=ffh
$i[12]=ffh
$i[13]=ffh
把所有的IO都点亮,然后
$i[3]=01
IOprint::main()
waittime 0.1
$i[3]=00
IOprint::main()
waittime 0.1
赋值01代表0位打开,赋值00代表0位关闭,同理10,11代表1位打开跟关闭,以此类推,延时0.1是因为不延时程序1秒不到就走完了,通讯处理不过来。
IOprint::main()是子程序调用,调用子程序中main程序逻辑
IOprint:首先判断是哪一个号段的io触发了,Y0-7,Y10-17,Y20-27,Y30-37,以此进入相应函数
Y:
if($i[3]==$i[4])
goto Y90
endif
if($i[3]>=0&&$i[3]<=80)
goto Y0
endif
if($i[3]>=100&&$i[3]<=180)
goto Y10
endif
if($i[3]>=200&&$i[3]<=280)
goto Y20
endif
if($i[3]>=300&&$i[3]<=380)
goto Y30
endif
goto Y
进入之后理解相关的程序步为什么这样做。这是这个程序的核心,与逻辑、或逻辑的理解。
Y0:
if($i[3]==01)
$i[10]=$i[10]|01b
//print $i[10]
endif
if($i[3]==100)
$i[11]=$i[11]&11111110b
//print $i[11]
endif
Y10:
if($i[3]==101)
$i[11]=$i[11]|01b
//print $i[11]
endif
if($i[3]==200)
$I[12]=$I[12]&11111110b
//print $i[12]
endif
上面先是使用了$i[3]作为位置判断进行调整,然后根据判断赋值给$i[10],$i[11],$i[12],$i[13]作为Y0-Y37的输出记录,之所以分开是因为这样做后面的io触发不受前面的影响,而且数据的发送是FF最大,因此只能使用多个连续的寄存器替代。
PLC处理程序比较简单,这里就不描述了。。
接线就是把Y37接到X0去触发下一次的循环。
[ 此帖被陈惠鑫在2021-08-21 12:24重新编辑 ]
附件: 程序.zip (193 K) 下载次数:42
网站提示: 请不要用迅雷下载附件,容易出错
陈惠鑫
级别: 工控侠客
精华主题: 0
发帖数量: 62 个
工控威望: 2448 点
下载积分: 250 分
在线时间: 51(小时)
注册时间: 2020-02-19
最后登录: 2024-06-07
查看陈惠鑫的 主题 / 回贴
1楼  发表于: 2021-08-21 12:23
视频压缩后比较模糊
附件: 领控无协议跑马灯~3.zip (2545 K) 下载次数:43
网站提示: 请不要用迅雷下载附件,容易出错
加勒比海带
级别: 论坛先锋
精华主题: 0
发帖数量: 2236 个
工控威望: 1837 点
下载积分: 6902 分
在线时间: 64(小时)
注册时间: 2021-07-19
最后登录: 2024-08-05
查看加勒比海带的 主题 / 回贴
2楼  发表于: 2021-10-19 11:04
下载学学学习