中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

三菱Mitsubishi

抖音 西门子减速电机 德嘉 台达 英威腾 泓格论坛 西门子 我和LOGO!有个约会 FLIR红外热像论坛 【有奖活动】英威腾 “Ni美国国家仪器 “PLC发展趋势大讨论”活动圆满结束 cc-link图文征集活动 西门子SMART LINE V3
工控论坛首页 三菱Mitsubishi → 浏览主题: GX WORKS3 如何调用程序块
发表新帖 回复该主题
回帖:29个,阅读:4570 [上一页] [1] [2] [3] [下一页]
* 帖子主题:

GX WORKS3 如何调用程序块

[已结贴]
分享到
1204
wgefwgef
文章数:134
年度积分:89
历史总积分:1204
注册时间:2008/5/14
发站内信
发表于:2018/9/18 9:16:06
#0楼
GX WORKS3 如何调用程序块呢 比如我只在登录程序中建立一个程序块 MAIN,需要根据条件调用程序块P1,P2该如何用?调用FB,直接拖进去就行了,但调用程序块不行。以前用CODESYS直接写 p1(); p2();就可以,但在GX WORKS3里面好像不行,该怎么用
附件 image.jpg
[此贴子已经被作者于2018/9/18 9:16:21编辑过]
28269
cvlsam 版主
文章数:10660
年度积分:479
历史总积分:28269
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2018/9/18 9:52:03
#1楼
以下是引用wgefwgef2018/9/18 9:16:06的发言:
GX WORKS3 如何调用程序块呢 比如我只在登录程序中建立一个程序块 MAIN,需要根据条件调用程序块P1,P2该如何用?调用FB,直接拖进去就行了,但调用程序块不行。以前用CODESYS直接写 p1(); p2();就可以,但在GX WORKS3里面好像不行,该怎么用
附件 image.jpg
[此贴子已经被作者于2018/9/18 9:16:21编辑过]

只有分配给任务的程序才会被执行,因此:
你需要将P1,P2程序块分配给事件任务或者无类型指定任务,然后通过触发事件任务执行条件或者使用指令将无类型指定任务变成对应任务后执行。

在Codesys中,你一样要将程序分配给任务,只不过三菱中的扫描任务在Codesys中称为循环任务而已。

Good Luck~
18060
gk_0 版主
文章数:7064
年度积分:587
历史总积分:18060
注册时间:2013/9/9
发站内信
2018论坛贡献奖
2017论坛贡献奖
2017国庆活动(二)
2016论坛贡献奖
2016国庆活动(三)
英威腾变频器(一)
S7-200 SMART(一)
寻找英威腾(三)
英威腾PLC体验(一)
2015春节活动
2013辞旧迎新
2013辞旧迎新
2013国庆活动
发表于:2018/9/18 10:15:58
#2楼
回复 #1楼 cvlsam
看C版的回帖是一种享受
1204
wgefwgef
文章数:134
年度积分:89
历史总积分:1204
注册时间:2008/5/14
发站内信
发表于:2018/9/18 10:44:50
#3楼
回复 #1楼 cvlsam
请问,如果根据条件调用任务,比如根据布尔量的值调用,该用哪个指令
28269
cvlsam 版主
文章数:10660
年度积分:479
历史总积分:28269
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2018/9/18 10:47:47
#4楼
以下是引用wgefwgef2018/9/18 10:44:50的发言:
请问,如果根据条件调用任务,比如根据布尔量的值调用,该用哪个指令

诸如:

LD X0

OUT Y0

总会用的吧。

Good Luck~
7250
w71412659
文章数:1457
年度积分:93
历史总积分:7250
注册时间:2013/5/8
发站内信
2018论坛魅力之星
发表于:2018/9/18 11:19:06
#5楼
以下是引用gk_02018/9/18 10:15:58的发言:
看C版的回帖是一种享受
同意!
1204
wgefwgef
文章数:134
年度积分:89
历史总积分:1204
注册时间:2008/5/14
发站内信
发表于:2018/9/18 11:56:33
#6楼
回复 #4楼 cvlsam
你好像没明白我的意思。
1204
wgefwgef
文章数:134
年度积分:89
历史总积分:1204
注册时间:2008/5/14
发站内信
发表于:2018/9/18 12:14:19
#7楼
回复 #1楼 cvlsam
在CODESYS中,可以不把程序分配给任务!!比如程序 P1 分配给循环任务。P2 P3 不用分配,我只要在程序P1中调用 P2,P3 一样可以!!看来GX WORKS3 是没这功能,呵呵!!
28269
cvlsam 版主
文章数:10660
年度积分:479
历史总积分:28269
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2018/9/18 12:28:43
#8楼
以下是引用wgefwgef2018/9/18 11:56:33的发言:
你好像没明白我的意思。

您的编程水平太弱了,您甚至于Codesys都没有整明白。

首先,以您在Codesys中的经验来说,您前面说只要调用类似P()就可以了,我想您是混淆了功能块,功能和程序组织块之间的区别。

在Codesys中,功能块与功能必须在程序组织块中才能被调用,而要执行程序组织块,则需要将程序组织块分配给任务。
附件 snap3.jpg

而同样,如果要在程序块中调用其它程序块,那么通俗的做法有以下2种:
方式一:建立事件任务并将需要调用的程序块分配给事件任务,然后在主程序中对触发事件任务的变量进行操作。



附件 snap4.jpg

而通过主程序对全局变量进行操作,从而触发事件任务。

也就是我写的LD X0,OUT Y0,Y0在三菱中作为输入输出地址,其本身就是全局变量,局部变量的有效范围无法触发程序块外的事件任务。

方式二:将要调用的程序块也分配给循环任务,而在其内部程序块中写入诸如:
IF  AAA  THEN
  Program;
END_IF;
这样的条件调用语句来变相的实现程序块与程序块之间的调用。

方式一和方式二的区别在于:
方式二作为循环任务,会始终被扫描,因此即使不调用,其仍然占用扫描时间。
方式一虽然不占用扫描时间,但是对于PLC厂家来说,事件任务并非无限增加,因此在数量超出时,牺牲扫描时间来拓展事件任务。

就从您的Codesys来说,您的Codesys的编程还有很长的路要走。

Good Luck~
28269
cvlsam 版主
文章数:10660
年度积分:479
历史总积分:28269
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2018/9/18 12:32:50
#9楼
接下来说说GX Works3,如果您已经整明白Codesys的操作模式,那么GX Works3的操作模式也是相同的,将程序块分配给事件任务,设定触发类型,在要调用它的地方编写诸如

LD X0
OUT Y0

来触发事件任务。
附件 snap5.jpg


很抱歉前面的回帖让您误解了,我原以为您已经建立事件任务并分配了程序块,设定了触发条件,没想到您基本的步骤都没有会。

Good Luck~
工控学堂推荐视频:

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

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

124.8