技术论坛

 都是子程序,差别还是值得注意一下

返回主题列表
作者 主题
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
楼主    2019-06-19 18:07:07
主题:都是子程序,差别还是值得注意一下 精华帖 

因为是博图的小白,所以不敢发到那边的论坛上,又因为觉得有助于理解200系统的子程序接口参数,所以就发这里了。有问子程序多次调用互相干扰的,这贴对你也有那么一点点帮助。话不多说献丑上图:



工控爱好者
Hery_Han
侠圣

经验值: 2842
发帖数: 223
精华帖: 1
1楼    2019-06-19 23:26:30
主题:回复:都是子程序,差别还是值得注意一下

没仔细看,不过INOUT和OUT参数在FC中是有天壤之别,FC中的OUT参数相当于temp型变量,而INOUT参数相当于static型变量

winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
2楼    2019-06-20 07:03:11
主题:回复:都是子程序,差别还是值得注意一下
FC中没有static型的变量。我感觉博途v11下在FC中IN型的只读,OUT型的只写,INOUT型和temp型的可读可写。在STEP 7下是否同样未试过。而200的子程序中各种类型变量均可读可写
工控爱好者
芳季
至圣

经验值: 66581
发帖数: 14749
精华帖: 100
3楼    2019-06-20 11:09:27
主题:回复:都是子程序,差别还是值得注意一下

哦。这样。长见识了。


holdkcsxyz
至圣

经验值: 13008
发帖数: 1814
精华帖: 22
4楼    2019-06-20 15:45:23
主题:回复:都是子程序,差别还是值得注意一下

感谢分享,楼主对FC的理解有借鉴学习的地方,仔细看看学习下。

HUANGZE75
至圣

经验值: 63260
发帖数: 12669
精华帖: 121
5楼    2019-06-21 13:33:59
主题:回复:都是子程序,差别还是值得注意一下

在搞不清楚到底是输入还是输出,我一般都是定义为IN-out变量,是没有问题的

salt
游士

经验值: 197
发帖数: 13
精华帖: 0
6楼    2019-06-21 14:56:35
主题:回复:都是子程序,差别还是值得注意一下

知识的重要性!

我是石头
游侠

经验值: 380
发帖数: 23
精华帖: 0
7楼    2019-06-21 18:01:43
主题:回复:都是子程序,差别还是值得注意一下


我猜测啊

IN INOUT 是在调用fc子程序开始就将实参赋值形参,

INOUT OUT 是在fc子程序扫描到时?(或结束前?)才会将形参赋值实参。

所以如果在out形参 输出  使用前,使用其作为 条件输入 ,其形参值是不确定的。如果在同一扫描周期中,前后连续调用了fc子程序,那么out值就可能会是上一次调用fc子程序时的运算值

winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
8楼    2019-06-21 18:36:41
主题:回复:都是子程序,差别还是值得注意一下

200的子程序没有static型的变量存放过程数据,如果有过程数据需要读出和写入就需要INOUT变量来接纳这样的数据,或者编程用间接寻址的方式开辟管理一块子程序专有的V寄存器存放每次调用产生的过程数据。比如边沿检测指令的输入状态暂存就是这样的数据,它用于存储上次扫描时输入的状态,先是读出与当前的输入状态共同决定沿输出,然后把当前输入状态写入刷新。每个沿检测都需要分配这样一个过程数据存储。由于300,1200之类的FB块有static变量且有背景数据块一一对应存储每次调用产生的过程数据,用户可以省心不少。

工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
11楼    2019-06-22 11:58:50
主题:回复:都是子程序,差别还是值得注意一下

以下是对8楼的帖子的补充图片



工控爱好者
winter938
至圣

经验值: 10680
发帖数: 1561
精华帖: 33
12楼    2019-06-22 11:59:51
主题:回复:都是子程序,差别还是值得注意一下

以下还是对8楼的帖子的补充图片


这里的子程序没有了INOUT变量,对V区的使用可以帮助理解FB的STATIC变量和背景数据。这里对V区的分配是由用户编程手工实现的,300和1200是编程软件自动完成的。

工控爱好者
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。