又有问题请教大家了。。在FC调用FC的问题 点击:1399 | 回复:20



兔小喵一只

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-13 20:34:03
楼主
求助帖5分-已结帖

用西门子SCL语言编程,一些计算过程需要自己编写函数实现。遇到的问题是:一个函数的输入值是另一个函数的输出值,所以我想到用FC调用FC。

目前有三个函数,是FC48,FC4,FC49。在FB40里调用三个函数。

//下面是程序**********************************************红色的变量是输入输出值

FUNCTION_BLOCK FB40        //谷电期蓄能总控制
VAR_OUTPUT
    RESULT_Q:INT;    //输出Q量
    RESULT_W:INT;
     RESULT_Wt:INT;
END_VAR

BEGIN                   //调用FC48计算Q
 RESULT_Q:=FC48(Ai := "A" // IN: INT
  ,Hdesign_total := "Hdt" // IN: INT
  ,Wpower_real :="W0"  // IN: INT
  ,Qdesign_total :="Q0"  // OUT: INT
  ); // INT
                       
      //调用FC4计算Wpower_real******************************************
 RESULT_W:=FC4(Wpower_real_today :="W1"  // IN: INT
     ,Toutdr_offpk_sta_tody :="T01"  // IN: INT
     ,Toutdr_offpk_sta_yesdy := "T02" // IN: INT
     ,Wpower_real :="W0"  // OUT: INT
     ); // INT
  
   //调用FC49计算Wpower_real_today************************************
  RESULT_Wt:=FC49 (Theating_unit_11 := "Q2" // IN: REAL
    ,Theating_unit_12 := "Q3" // IN: REAL
    ,Theating_unit_21 := "Q4" // IN: REAL
    ,Theating_unit_22 := "Q5" // IN: REAL
    ,Theating_unit_31 := "Q6" // IN: REAL
    ,Theating_unit_32 := "Q7" // IN: REAL
    ,Qadd := "Qa" // IN: REAL
    ,A := "A" // IN: REAL
    ,Huser :="Hu"  // IN: REAL
    ,Ttime_offpkend_11 := "Q11" // IN: REAL
    ,Ttime_offpkend_12 := "Q12" // IN: REAL
    ,Ttime_offpkend_21 := "Q21" // IN: REAL
    ,Ttime_offpkend_22 := "Q22" // IN: REAL
    ,Ttime_offpkend_31 := "Q31" // IN: REAL
    ,Ttime_offpkend_32 := "Q32" // IN: REAL
    ,Wpower_real_today := "W1" // OUT: REAL
    ); // REAL          
END_FUNCTION_BLOCK

编译后的错误时invalid assignment。在调用FC48和FC4处有问题.

三个FC函数分别编译都没有问题。下面是三个函数:

FUNCTION FC48 : INT

VAR_INPUT
    Ai:INT;
    Hdesign_total:INT;
    Wpower_real:INT;
END_VAR

   VAR_OUTPUT
    Qdesign_total:INT;
 
END_VAR

   BEGIN
  
   FC48:=(Ai*Hdesign_total)*Wpower_real;
   Qdesign_total:=FC48;
     // Statement Section


END_FUNCTION

//****************************************************

FUNCTION FC4 : INT

VAR_INPUT
    Wpower_real_today:INT;
    Toutdr_offpk_sta_tody:INT;
    Toutdr_offpk_sta_yesdy:INT;
   
END_VAR
VAR_OUTPUT
    Wpower_real:INT;
END_VAR

    BEGIN

//*******************************************

FUNCTION FC49 : INT

 

VAR_INPUT
    Theating_unit_11:INT;
    Theating_unit_12:INT;
    Theating_unit_21:INT;
    Theating_unit_22:INT;
    Theating_unit_31:INT;
    Theating_unit_32:INT;
    Qadd:INT;
    A:INT;//房间面积
    Huser:INT;
    Ttime_offpkend_11:INT;
    Ttime_offpkend_12:INT;
    Ttime_offpkend_21:INT;
    Ttime_offpkend_22:INT;
    Ttime_offpkend_31:INT;
    Ttime_offpkend_32:INT;
END_VAR

   VAR_OUTPUT
    Wpower_real_today:INT;//第二天预计供热负荷
END_VAR

   BEGIN
   FC49:=(a*(Theating_unit_11+Theating_unit_12+Theating_unit_21+Theating_unit_22+Theating_unit_31+Theating_unit_32-Ttime_offpkend_11-Ttime_offpkend_12-Ttime_offpkend_21-Ttime_offpkend_22-Ttime_offpkend_31-Ttime_offpkend_32)+Qadd)/(A* Huser);
         Wpower_real_today:=FC49;
        
 END_FUNCTION




王者之师——梁真

  • 精华:2帖
  • 求助:3帖
  • 帖子:8帖 | 591回
  • 年度积分:0
  • 历史总积分:2570
  • 注册:2012年7月06日
发表于:2012-11-13 21:41:59
1楼
看不懂,高深的东西,路过

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 09:47:01
2楼
回复内容:
对:王者之师——梁真关于看不懂,高深的东西,路过 内容的回复:


哎,尽管如此也谢谢一下

wingwf2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2012-11-14 10:54:52
3楼

全部贴出来看看是什么问题

参数格式写错

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 11:39:28
4楼
回复内容:
对:wingwf2000关于全部贴出来看看是什么问题参数格式写错内容的回复:

都贴出来了,有点多~参数格式是指哪里?

阿水--王者之师

  • 精华:23帖
  • 求助:347帖
  • 帖子:1611帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2012-11-14 13:01:09
5楼

西门子SCL语言编程,高手汇编呀,学习啦!

    个人感觉 FC 调用 FC 是没有问题那还是你 各个 FC 块中的 输入或是输出 变量的 格式不统一,所最后的计算公司编译出错吧 !

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 15:43:41
6楼
回复内容:
对:阿水--王者之师关于西门子SCL语言编程,高手汇编呀,学习啦!    个人感觉 FC 调用 FC 是没有问题那还是你 各个 FC 块中的 输入或是输出 变量的 格式不统一,所最后的计算公司编译出错吧 !内容的回复:


谢谢啊~~学SCL自学效率不高,总是各种错误~我再检查检查各个格式~~

lgj3388

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 236回
  • 年度积分:0
  • 历史总积分:925
  • 注册:2003年8月13日
发表于:2012-11-14 15:54:38
7楼

逻辑关系要理顺。一有母驴是可以生出驴来但你要它生出它自己的爹来那是肯定不行的。

全局变量与局部变量别搞混了。检查出错的符号是不是没声明或声明错了。

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 16:02:21
8楼
回复内容:
对:lgj3388关于逻辑关系要理顺。一有母驴是可以生出驴来但你要它生出它自己的爹来那是肯定不行的。 内容的回复:

能帮指教一下,哪里的逻辑的问题吗

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-11-14 17:41:09
9楼

RESULT_Q:=FC48(Ai := "A" // IN: INT
  ,Hdesign_total := "Hdt" // IN: INT
  ,Wpower_real := "W0"  // IN: INT
  ,Qdesign_total :="Q0"  // OUT: INT
  ); // INT

你这都加引号什么意思???字符串才加引号吧?。。

通讯网-原创军团

  • 精华:11帖
  • 求助:1帖
  • 帖子:432帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-11-14 17:54:54
10楼
你这不像是自己编的嘛。。像是转换过来的嘛。。。。呵呵

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 18:13:44
11楼
回复内容:
对:通讯网-原创军团关于你这不像是自己编的嘛。。像是转换过来的嘛。。。。呵呵 内容的回复:

是自己编的哎。。。

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 18:15:18
12楼
回复内容:
对:通讯网-原创军团关于RESULT_Q:=FC48(Ai := "A" // IN: INT  ,Hdesign_total := "Hdt" // IN: INT  ,Wpower_real := "W0"  // IN: INT  ,Qdesign_total :="Q0"  // OUT: INT  ); // INT你这都加引号什么意思???字符串才加引号吧?。。内容的回复:

里面的A W0什么的,是在符号表里的,是要采集的变量,所以加了引号

kskstiy-王者之师军团

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 379回
  • 年度积分:0
  • 历史总积分:2649
  • 注册:2010年8月30日
发表于:2012-11-14 18:40:54
13楼
把语句表学好就不错了,干嘛这么瞎折腾呢

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-14 18:45:38
14楼
回复内容:
对:kskstiy-王者之师军团关于把语句表学好就不错了,干嘛这么瞎折腾呢 内容的回复:

不是我想瞎折腾啊~开始用梯形图的,后来有很多的功能梯形图不好实现。需要很多数学公式和循环判断,所以用scl编程,相比语句表容易解读。我没有学过语句表~

wingwf2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2012-11-15 11:28:38
15楼
估计是你的参数是int类型,而你的数据在符号表中定义的却是word类型,要将word修改为int类型

wingwf2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2012-11-15 11:36:37
16楼
或者你定义的参数是int,但你输入的却是real,你需要修改参数类型,或将real转换为int后再使用

wingwf2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2012-11-15 11:39:43
17楼

如上图所示,一般语法出错的机会多

wingwf2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 455回
  • 年度积分:0
  • 历史总积分:1000
  • 注册:2008年1月09日
发表于:2012-11-15 11:43:33
18楼
你这个算法比较简单,建议还是用梯形图写比较好,后来人看着也舒服,毕竟好多人都没学过SCL

谁的流年谁的殇

  • 精华:0帖
  • 求助:9帖
  • 帖子:26帖 | 421回
  • 年度积分:0
  • 历史总积分:1801
  • 注册:2011年4月19日
发表于:2012-11-15 13:33:16
19楼

路过,对梯形图比较了解,这个吗,嘿嘿……

兔小喵一只

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 20回
  • 年度积分:0
  • 历史总积分:66
  • 注册:2012年8月24日
发表于:2012-11-15 16:10:19
20楼
回复内容:
对:谁的流年谁的殇关于路过,对梯形图比较了解,这个吗,嘿嘿……内容的回复:

哎,刚开始我也用梯形图来着,后来,觉得有的地方不方便,就换了哎

热门招聘
相关主题

官方公众号

智造工程师