帮看看这段SCL程序在哪里出错了,谢谢

已锁定

幸福的方向

  • 帖子

    227
  • 精华

    0
  • 被关注

    16

论坛等级:侠士

注册时间:2010-04-11

普通 普通 如何晋级?

帮看看这段SCL程序在哪里出错了,谢谢

817

5

2017-01-11 22:07:58

记不清是在哪里拷贝的一段程序,今天试着用一下SCL编程,运行有误。程序是拷贝的:


FUNCTION FC10 : void


// Block Parameters

VAR_INPUT

    // Input Parameters

Addr1:ANY;  // 输入变量:Addr1是 ANY类型 

END_VAR


VAR_OUTPUT

    Sum:REAL;      //输出变量:Sum是 实数类型   


END_VAR


VAR_TEMP

    // Temporary Variables

TempAny:ANY;

STRForDB AT TempAny: STRUCT

    SyntaxID:BYTE;

    DataType:BYTE;

    DataCount:INT; 

    DB_Number:WORD;

    Byte_Pointer:DWORD;

END_STRUCT;

DataNum:INT;                                   //临时变量  整数类型          

TempSum:REAL;                                  //临时变量 Sum 实数类型 用于求和    

    

END_VAR


TempAny:=Addr1;                          //将同为any类型的输入变量Addr1赋值给临时变量TempAny           

TempSum:=0.0;                            //临时变量赋初值      

FOR DataNum:= 0 TO STRForDB.DataCount-1 BY 1 DO                            //共10字节

TempSum:=TempSum+DWORD_TO_REAL(WORD_TO_BLOCK_DB(STRForDB.DB_Number).DD[DataNum*4]);

END_FOR;

Sum:=TempSum;

END_FUNCTION


ORGANIZATION_BLOCK OB1

VAR_TEMP

    // Reserved

    info : ARRAY[0..19] OF BYTE;

    // Temporary Variables

DBAddr: STRUCT

SyntaxID:BYTE;

DataType:BYTE;

DataCount:WORD;

DB_Number:WORD;

Byte_Pointer:DWORD;

END_STRUCT;


DBAddrAny AT DBAddr: ANY;                 //any类型的DBAddrAny可以访问DBAddr

RealSum:REAL;

END_VAR


    // Statement

DBAddr.SyntaxID:=16#10;                     //赋实参                   

DBAddr.DataType:=16#08;                     //08代表数据类型是实数

DBAddr.DataCount:=10;                       //长度10个实数

DBAddr.DB_Number:=16#1;                     //DB号为1

DBAddr.Byte_Pointer:=dw#16#84000000;        //dbb0.0

Sum(Addr1:=DBAddrAny, Sum:=RealSum );                              // IN: ANY

                                             // OUT: REAL                                                 // VOID

   

END_ORGANIZATION_BLOCK



报警大致如下:1.can not find / copy block sum.

              2.function not defind.

              3.invalid or missing function type.

请教:1. OB1是这样直接在SCL源程序环境中,写在function10 后面吗?

      2. 这里也没有在OB1里面用CALL调用(像语句表和梯形图语言那样在OB1里面调用FC),语法不对吧?  

       3. 那个SUM好像是上边的FUNCTION10里面出现过,但在OB1里面的应用,好像是在调用函数,这里用法出错了吗?

       刚学习着用,程序也是搬来的,请指教一下这程序应该怎样安排才是正确的。先谢过了

 


帮看看这段SCL程序在哪里出错了,谢谢 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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