『7x24小时有问必答』
本文是Snap7软件包系列教程的第5篇,上一篇文章我们介绍了Snap7Client与S7服务器创建连接的方法/函数,最常用的是ConnectTo()。当成功创建连接后,接下来就是对服务器数据进行读写,今天我们就来介绍Snap7Client的ReadArea()和WriteArea()方法。

1、Snap7Client.ReadArea()
Snap7Client的ReadArea()方法可以从S7服务器(S7 Server)读取数据,功能非常强大,支持多种存储区的数据读取,包括:输入缓存区(Input)、输出缓存区(Output)、位存储区(M)、数据块(DB)、定时器区(Timer)和计数器区(Counter);
ReadArea()方法有六个输入参数,包括:
Area:整数类型,存储区的代号(下文详解);
DBNumber:整数类型,数据块的编号(仅适用于Area=0x84的情况);
Start:整数类型,要读取数据的起始地址
Amount:整数类型,要读取的的数量
WordLen:整数类型,要读取的字的长度
pUserData:指针类型,存放读取到的数据的地址;
①:当按位(bit)进行访问时,起始地址计算有所不同,下文详述;

:在之前的实际使用中,这个Amount值通常我认为是字节的数量。不过作者在参考手册中特别说明Amount表示字的数量,此处暂时存疑;

③:字的长度有不同的代号,下文详述;

参数列表如下:
Snap7Client.ReadArea()输入参数列表

名称

数据类型

说明

Area

整数

要访问的存储区的代号

DBNumber

整数

要访问的数据块编号(Area=0x84)

Start

整数

要访问数据的起始地址

Amount

整数

要读取的字的数量

WordLen

整数

要读取的字的长度

pUserData

指针

指向存放数据的地址

参数Area是要访问的存储区的代号,不同的数值代表不同的存储区,详见下面的表格:
参数Area的值

名称

值(16进制)

说明

S7AreaPE

0x81

过程输入映像区

S7AreaPA

0x82

过程输出映像区

S7AreaMK

0x83

位存储区

S7AreaDB

0x84

数据块

S7AreaCT

0x1C

计数器

S7AreaTM

0x1D

定时器

参数WordLen用来定义数据访问的长度,详见下面的表格:
参数WordLen的值

名称

值(16进制)

说明

S7WLBit

0x01

位(字内部的)

S7WLByte

0x02

字节(8位)

S7WLWord

0x04

字(16位)

S7WLDword

0x06

双字(32位)

S7WLReal

0x08

实数(32位)

S7WLCounter

0x1C

计数器(16位)

S7WLTimer

0x1D

定时器(16位)

在类S7Client中,以只读静态成员的方式对上述Area和WordLen的值进行了定义,如下图所示:
我们可以在代码中直接对变量进行赋值,也可以使用S7Client的静态成员进行赋值,比如下面的代码:
另外要说明的是,如果访问长度设置为位(S7WLBit),那么起始地址必须以位的形式进行计算。例如,如果起始地址为DB100.DBX20.2,那么参数Start的值=20*8+2=162(编号从0开始);
函数ReadArea()的返回值为整数类型,成功读取数据时返回值为零;如果返回值为非零整数则代表某种错误,需要查看错误列表确定错误类型。函数原型如下图:
2、Snap7Client.WriteArea()
WriteArea()方法可以将数据写入到S7服务器的指定存储区中,支持的存储区的类型与ReadArea()相同,其参数也与ReadArea()相同,是ReadArea()方法的逆操作,其函数原型如下图所示:
ReadArea()和WriteArea()都是以同步的方式执行,换句话说就是如果函数没有返回,则程序会一直等待,可能出现假死现象。因此,这两个方法/函数适用于数据量不大的情况。如果要读取或写入的数据比较多,则建议使用AsReadArea()和AsWriteArea()方法。
另外,ReadArea()和WriteArea()的参数比较多,使用起来不太方便。Snap7Client还提供DBRead/Write、ABRead/Write等单一存储区读写的函数,将在后续介绍。
我开通了微信视频号,以视频的方式分享一些工控小知识,欢迎扫描下方的二维码体验:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码