大家帮我看下,这个程序为什么这么编写呢?

已锁定

like821080

  • 帖子

    728
  • 精华

    0
  • 被关注

    7

论坛等级:侠圣

注册时间:2008-09-05

普通 普通 如何晋级?

大家帮我看下,这个程序为什么这么编写呢?

635

4

2011-08-26 00:28:04

TYPE UDT_ANY_Pointer
STRUCT //10 Byte ANY Pointer e.g. P#DBxx.DBx0.0 Byte 10
Syntax_ID: BYTE; //Always 10 Hex
DataTyp: BYTE; //Code for data type
Count: WORD; //Number of Byte
DB_Number: WORD; //Number of DB
Byte_Pointer: DWORD; //Pointer to bit- and byte address
END_STRUCT
END_TYPE

FUNCTION Call_SFC14_15: INT

VAR_INPUT
SFC15_Select: BOOL; //0=SFC14 read data, 1=SFC15 write data
DP_Adresse: WORD; //DP-address ID LADDR
Byte_Count: INT; //Number of byte (consistent data)
DB_Nummer: INT; //Nummer of DB (which contains consistent data)
DB_Byte_Adr: INT; //Starting address (byte) of data in the DB
END_VAR

VAR_TEMP
Buffer: UDT_ANY_Pointer;
Temp_Any_Pointer AT Buffer: ANY;
Error: INT;
END_VAR

//Supply 10 byte buffer for the ANY Pointer
Buffer.Syntax_ID:= b#16#10; //Length of buffer
Buffer.DataTyp:= 2; //Code for data type BYTE
Buffer.Count:= INT_TO_WORD(Byte_Count); //Number of used data (byte)
Buffer.DB_Number:= INT_TO_WORD(DB_Nummer); //Number of destination DB for your data
Buffer.Byte_Pointer:= dw#16#84000000; //Zero pointer on global data DBX0.0 (over several areas)

//Load byte address in pointer:
Buffer.Byte_Pointer:= Buffer.Byte_Pointer OR (SHL(in:=WORD_TO_DWORD(INT_TO_WORD(DB_Byte_Adr)),N:=3));; //这行程序为什么要这么编写,有什么功用呢?

IF SFC15_Select THEN
Error:= DPWR_DAT(LADDR:= DP_Adresse, RECORD:= Temp_Any_Pointer); //Write data with SFC15
ELSE
Error:= DPRD_DAT(LADDR:= DP_Adresse, RECORD:= Temp_Any_Pointer); //Read data with SFC14
END_IF;
//为什么SFC15_Select 0=SFC14 read data, 1=SFC15 write data
Call_SFC14_15:= Error;
END_FUNCTION
大家帮我看下,这个程序为什么这么编写呢? 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54716条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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