python 西门子_python读取S7-1200 DB块

本文介绍了如何使用Python的Snap7库与西门子S7-1200 PLC进行通信,读取DB块数据。详细讲解了读取过程,包括设置参数、数据类型转换,并展示了简化读取操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过Python实现DB区读操作

版权声明

无需授权随便转载

读DB区

使用的方法依旧是read_areadef read_area(self, area, dbnumber, start, size)

area是PLC内各寄存区的代码,具体参考下表

dbnumber是DB块编号,可以在DB块属性中常规选项中查看到,start为寄存区起始地址,size是DB块完整的长度,因为DB块中可以有各种数据类型,所以长度参数一定要准确,否则返回数据会出现问题。

要访问DB块,必须取消DB块属性中的优化的块访问选项

针对的是DB块,所有area参数需要使用0x84,size参数需要通过DB块内的数据数量和数据类型具体计算出来

因为read_area方法返回的是byteArray类型的结果,可以通过get_bool,get_int,get_read,get_dword方法直接将byteArray类型转换成对应的数据类型

比如针对get_bool方法def get_bool(_bytearray, byte_index, bool_index)

第一个bytearray参数是read_area的返回值,byte_index参数是DB块中变量的偏移量,bool_index参数是位变量的地址。

先来看一个简单的例子,DB块中有两个变量,一个浮点数,一个布尔量

main函数中的代码如下def main():

s71200 = snap7.client.Client()

connect(s71200, '192.168.2.110', 0, 1)    while True:        try:

data = s71200.read_area(0x84, 1, 0, 5)#此处5代表DB块中数据长度,浮点数4个byte,布尔量一个byte

print(data)

value = get_real(data, 0)#此处0是浮点数的偏移量

value2 = get_bool(data, 4, 0)#此处4是布尔量的偏移量

print(value, value2)

sleep(5)        except Snap7Exception as e:

connect(s71200, '192.168.2.110', 0, 1)if __name__ == '__main__':

main()

运行后如下

但是这样操作很麻烦,需要提前计算好DB块中的数据长度,需要将每个数据的偏移量和数据类型都填好,这里希望有一个简单的方法,定义好DB块的数据名称,数据类型,数据偏移量,之后运行程序后,自动计算长度,对应数据类型和偏移量,从而获取正确的结果。

DB块中的数据名称及数据类型,偏移量如下图

定义DB块数据格式db = \"""

DB001 Real 0.0

DB002 Bool 4.0

DB003 Int 6.0

DB004 String 8.0

DB005 Real 264.0

"""

数据格式定义好后,需要从这个数据格式中得到r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值