PLC STL any数据类型

1.any数据类型共10个字节,数据格式如下

2.Byte 0: 固定10h 表示S7

   Byte 1:表示数据类型

 

Coding of the Data Types

 

Hexadecimal Code

Data Type

Description

b#16#00

NIL

Null pointer

b#16#01

BOOL

Bits

b#16#02

BYTE

Bytes (8 bits)

b#16#03

CHAR

Characters (8 bits)

b#16#04

WORD

Words (16 bits)

b#16#05

INT

Integers (16 bits)

B#16#06

DWORD

Words (32 bits)

b#16#07

DINT

Double integers (32 bits)

b#16#08

REAL

Floating-point numbers (32 bits)

b#16#09

DATE

Date

b#16#0A

TIME_OF_DAY (TOD)

Time of day

b#16#0B

TIME

Time

b#16#0C

S5TIME

Data type S5TIME

b#16#0E

DATE_AND_TIME (DT)

Date and time (64 bits)

b#16#13

STRING

String

Byte 2,3  /Word2:表示传送的数据长度,重复因子

Byte 4,5/Word3:表示DB块号或者为0

Byte 6:表示存储区域

Hexadecimal Code

Area

Description

b#16#80

P

I/O area

b#16#81

I

Input area

b#16#82

Q

Output area

b#16#83

M

Bit memory area

b#16#84

DB

Data block

b#16#85

DI

Instance data block

b#16#86

L

Local data (L stack)

b#16#87

V

Previous local data

DW6:存放偏移的起始地址

3.举例,从DB2002 拷贝 50字节长度的数据,共20组,到DB2003 对应的结构中

      A     M   2001.0
      JCN   nop
      L     P#DBX 0.0                             //传送起始地址
      AD    DW#16#FFFFFF                
      T     #TEMPDW                             //这一步转成32位地址格式?
      L     0
      T     MW  2002
      L     20                          //循环复制的次数
      L     -1
      +I    
lop:  T     #loopcnt
      LAR1  P##SRC
      L     W#16#1002               //16#10 代表S7   16#02表示数据类型是 byte
      T     LW [AR1,P#0.0]        //将W#16#1002传给 any 的第一个字
      L     50                             //每次拷贝的  数据长度
      T     LW [AR1,P#2.0]       //传给 any 的第二个字
      L     2002                        //  DB 块号,传给 any 的第三个字
      T     LW [AR1,P#4.0]
      L     #loopcnt
//  L     -1
// +I    
      L     50
      *I    
      SLD   3
      L     #TEMPDW
      +D    
      T     LD [AR1,P#6.0]    //带拷贝的数据存储的起始地址

      L     B#16#84
      T     LB [AR1,P#6.0]  //存储区是DB 块

      LAR1  P##DEST
      L     W#16#1002
      T     LW [AR1,P#0.0]  // any 第一个字
      L     50                        //any 接收的数据长度
      T     LW [AR1,P#2.0]
      L     2003                  // any 接收的 DB块
      T     LW [AR1,P#4.0]
      L     #loopcnt                  

      L     50
      *I    
      SLD   3                         //偏移量
      L     #TEMPDW
      +D    
      T     LD [AR1,P#6.0]   //any 接收的数据存储起始地址
      L     B#16#84
      T     LB [AR1,P#6.0]   //存储区域是DB块

      CALL  "BLKMOV"
       SRCBLK :=#SRC
       RET_VAL:=#RetVal
       DSTBLK :=#DEST
      L     #RetVal


      L     1
      L     MW  2002
      +I    
      T     MW  2002
      L     #loopcnt                            //开始下一次循环
      LOOP  lop
nop:  NOP   0



原文地址:https://www.cnblogs.com/albertfg/p/7504099.html