西门子PLC FC21用法

西门子PLC FC21用法


2024年4月18日发(作者:)

NC读写PLC数据

系统内部有一块NC/PLC高速交换数据的独立的区域(双端口RAM),该区域大小默认为

1024。这个数据交换区是在DRAM中,也就是说,系统下电后,交换区内数据不保持。

NC

R1=$ADBx[n]

NC/

PLC

数据

交换

FC21

写操作

PLC

$ADBx[n]=1.2

FC21

读操作

NC侧:

使用系统变量$A_DBB[n], $A_DBW[n], $A_DBD[n]和$A_DBR[n]读/写数据交换区的数据,不支

持位操作。

$A_DBB[n]

字节(8位)

$A_DBW[n]

字(16位)

$A_DBD[n]

双字(32位)

$A_DBR[n]

实数(32位)

使用$A_DBR[n]读写时,数据会有一定误差,因为NC中使用64位表示实数,而PLC中使用

32位表示实数。

如果只需要NC读取PLC的数据(例:R1=$A_DBR[0]),不需要设置机床数据。

如果还需要NC写数据到PLC(例:$A_DBR[4]=123.456),则需要根据实际情况设置:

MD28150 MM_NUM_VDIVAR_ELEMENTS

该数据所占内存=MD28150*24字节。

PLC侧:

使用PLC基本程序块FC21读/写数据交换区的数据。

FC21有多种功能,其中功能3是读操作,功能4是写操作。

参数 参数类型 参数数据类型 取值范围 说明

Enable Bool

输入 FC21有效

Funct Byte

输入 3,4 3—读;4—写

S7Var Any

输入 S7数据 源/目的

IVAR1 Int 0..1023

输入 偏移

IVAR2 Int -1..1023

输入 信号灯,-1是无

信号灯

Error Bool

输出

ErrCode Int

错误代码 输出

其中IVAR2(信号灯)用于NC与PLC的协调,告诉NC/PLC什么时候可以读数据,什么时候

可以写数据。如果数据量不大,不会产生NC/PLC读写冲突可以把IVAR2设为-1。(注:机床

的设计者应保证NC/PLC之间交换数据的时序。)

例1:

PLC编程加入:

CALL FC21

Enable:=TRUE

其中:”x”可以是B/W/D/R

“n”是数据交换区的偏移量,注意与PLC侧数据类型要一致。

Funct:=B#16#4 Å写操作

S7Var:=P#M100.0 BYTE 10 ÅMB100-MB109

IVAR1:=0 Å偏移为0

IVAR2:=99 Å信号灯字节为缓冲区第99个字节

Error:=M200.0

Errcode:=MW210

CALL FC21

Enable:=TRUE

Funct:=B#16#3 Å读操作

S7Var:=P#M150.0 BYTE 10 ÅMB150-MB159

IVAR1:=21 Å偏移为21

IVAR2:=98 Å信号灯字节为缓冲区第99个字节

Error:=M200.1

Errcode:=MW212

加工程序例:

$A_DBB[99]=0 Å信号灯=0 写操作

R50=0

AAA:

R[R50]=$A_DBB[R50]

MSG("R"<

G4F0.3

R50=R50+1

IF R50<10 GOTOB AAA Å循环将MB100-MB109(通过中间缓冲区)的值读到R0-R9

STOPRE

MSG("")

$A_DBB[98]=1

$A_DBB[21]=R10

G4F0.5

M02

例2:

PLC-侧 DUAL-PORT-RAM NC-侧

写信号灯

Byte 0

DPR_WRITE

读信号灯

DPR_READ Byte 1

Byte 2

Byte 3

MB100, MB101, MB102, MB103 R1

Byte 4

MB 104,MB105, MB 106, MB107 R2

MB108, Mb109, MB110, MB111 R3

MB112,MB113, MB114,MB115 R4

MB116, MB117,MB118, MB119 R5

MB120, MB121, MB122, MB123 R6

Byte 5

Byte 6

Byte 7

Byte 8

Byte 9

Byte 10

Byte 11

Byte 12

Byte 13

Byte 14

Byte 15

Byte 16

Byte 17

Byte 18

Byte 19

Byte 20

Byte 21

Byte 22

Byte 23

Byte 24

Byte 25

Byte 26

Byte 27

Byte 28

Byte 29

.......

.......

ENDE DPR BYTE

1023

NC向缓冲

区写数据

PLC从缓冲

区读数据

%_N_FC_21_WRITE_MPF

;$PATH=/_N_MPF_DIR

N10 MSG("NC_WRITE")

N20 if $A_DBB[0]<>0 GOTOF ENDE ; 信号灯不允许NC向缓冲区写数据(即PLC正在读

取数据还未完成),跳转到ENDE

N30 $A_DBB[0]=0 ; Semaphore wird auf Null gesetzt

N40 $A_DBR[4]=R1 ; 把R1的值写到缓冲区(byte4-7)

STOPRE

N50 $A_DBR[8]=R2 ; 把R2的值写到缓冲区(byte8-11)

STOPRE

N60 $A_DBR[12]=R3 ; 把R3的值写到缓冲区(byte12-15)

N70 STOPRE

N80 $A_DBB[0]=1 ; 把信号灯1改为允许PLC读数据

N90 ENDE: ; Sprungmarke

N100 M30

CALL FC21

Enable: =TRUE ; FC21启动条件

Funct: =B#16#3 ; 3 = PLC读缓冲区的数据

S7Var: =P#M100.0 DWORD 3 ; 数据目的地,调用FC21后,PLC会把缓冲区中

Byte4开始的3个双字读出来并存放到

MD100(MB100,MB101,MB102,MB103)

MD104(MB104,MB105,MB106,MB107)

MD108(MB108,MB109,MB110,MB111)

IVar1: =4 ; 偏移 4

Ivar2: =0 ; PLC读数据的信号灯

Error: =M79.4 ; 调用 FC21错误指示位

Errorcode: =MW77 ; 如出错,错误代码存放到MW77

NC从缓冲

区读数据

PLC向缓冲

区写数据

%_N_FC21_NCREAD_MPF

;$PATH=/_N_MPF_DIR

N10 MSG("NC_READ")

N20 if $A_DBB[1]==0 GOTOF ENDE ; 信号灯不允许NC读缓冲区数据(即PLC正在向

缓冲区写数据还未完成),跳转到ENDE

N40R4= $A_DBR[16] ; 将缓冲区byte16-19的值读入到R4

STOPRE

N50R5= $A_DBR[20] ; 将缓冲区byte20-23的值读入到R5

STOPRE

N60 R6= $A_DBR[24] ; 将缓冲区byte24-27的值读入到R6

N70 STOPRE

N80 $A_DBB[1]=0 ; 把信号灯改为0允许PLC写数据

N90 ENDE:

N100 M30

CALL FC21

Enable: =TRUE ; FC21启动条件

Funct: =B#16#4 ; 4 = PLC向缓冲区写数据

S7Var: =P#M112.0 DWORD 3 ; 数据源,调用FC21后,会把

MD112(MB112,MB113,MB114,MB115)

MD116(MB116,MB117,MB118,MB119)

MD120(MB120,MB121,MB122,MB123)

这3个双字写到缓冲区Byte16-Byte27

IVar1: =16 ; 偏移 16

Ivar2: =1 ; PLC写数据的信号灯

Error: =M79.5 ; 调用 FC21错误指示位

Errorcode: =MW88 ; 如出错,错误代码存放到MW88


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713413173a2244106.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信