Python pylogix 读写AB PLC常用方法实例

Python pylogix系列文章目录

一、Python Pylogix 读写Rockwell AB PLC变量数据
二、Python pylogix 读写AB PLC常用方法实例
三、Python pylogix 对AB PLC进行数据采集的思路总结
四、Python PyQt5+pylogix制作上位操作画面与AB PLC进行数据交互

Python pylogix 介绍

Pylogix是一个基于Python的库,它提供了一组用于与Rockwell PLC通信的API。以下实例基于Ethernet/IP网络与Rockwell AB PLC 1756-L73S进行通信,用于读取和写入Rockwell PLC变量数据。

Rockwell AB PLC实例项目介绍

硬件组态

在这里插入图片描述

项目程序

在这里插入图片描述

pylogix 方法

所有的pylogix方法都会以Response类的形式返回数据,该类有3个成员:TagName、Value和Status。并非所有成员都适用于每个方法,因此有时候TagName可能为空,比如在获取PLC时间时,TagName就不适用。Value的类型取决于所使用的方法。例如,当读取单个tag时,Value可以是单个值,或者在读取tag列表时,Value可以是值的列表,或者在请求设备属性或在网络上发现设备时,Value可以是device类型。

与PLC建立连接

from pylogix import PLC
with PLC() as comm:
    comm.IPAddress = '172.20.141.12'

导入PLC类,创建一个PLC对象,输入与PLC建立通讯连接的1756-EN2T模块IP地址

获取模块信息

comm.GetModuleProperties(0)

该方法用于获取模块信息,参数为PLC机架的插槽编号,实例为获取Slot 0插槽的模块信息,在PLC硬件组态中对应的为1756-L73S CPU模块

模块信息

在这里插入图片描述
结果如下:

Response(TagName=None, 
Value=0 0 172.20.141.12 1 Rockwell Automation/Allen-Bradley 14 None 148 20.18 12384 0xbb854b 27 1756-L73S/B LOGIX5573SAFETY 89, 
Status=Success)

获取设备信息

comm.GetDeviceProperties()

该方法通常获取到的为通信所连接的模块信息,例如实例中使用Slot 9插槽中的1756-EN2T模块进行通信,获取到的Value则与之对应

模块信息

在这里插入图片描述
结果如下:

Response(TagName=None,
 Value=0 0 172.20.141.12 1 Rockwell Automation/Allen-Bradley 12 None 166 11.2 96 0xd07180d3 11 1756-EN2T/D 0,
  Status=Success)

获取PLC时间

默认情况下,值将是datetime类。如果设置raw=True,则将返回原始微秒值。

comm.GetPLCTime()

PLC时间
在这里插入图片描述

结果如下:

Response(TagName=None, 
Value=2023-12-12 01:59:02.084589,
Status=Success)

设置PLC时间

comm.SetPLCTime()

该方法将PLC时钟与计算机时间同步,默认设置的为格林尼治时间。

Response(TagName=None, 
Value=1701931630923561, 
Status=Success)

获取程序列表

comm.GetProgramsList()

该方法获取PLC中项目所有Program列表
在这里插入图片描述
结果如下:

Response(TagName=None, 
Value=['Program:MainProgram', 
'Program:SafetyProgram', 
'Program:Armorstart_test'], 
Status=Success)

获取所有Tag名称列表

comm.GetTagList()

该方法检索控制器及程序范围的标签,返回Response类,其中Value将是Tag类的列表。

PLC控制器范围的Tag

在这里插入图片描述

遍历获取到的tag名称列表

for Tag in comm.GetTagList().Value:
    print(Tag)

结果如下:
在这里插入图片描述

获取指定Program范围内Tag名称列表

comm.GetProgramTagList('Program:Armorstart_test')

该方法检索指定Program的tag列表,需要提供Program名称,返回Response类,其中Value将是Tag类的列表。

Program Armorstart_test范围的Tag
在这里插入图片描述

遍历获取到的tag名称列表

for Tag in comm.GetProgramTagList('Program:Armorstart_test').Value:
    print(Tag)

结果如下:
在这里插入图片描述

读取PLC中变量值

Read()方法可以使用单个tag名称执行简单读取,也可以使用tag名称列表进行批量读取。目前Read()只能处理基本数据类型(BOOL、SINT、INT、DINT、LINT、REAL、STRING)。虽然可以读取UDT(用户自定义数据结构)的成员,但必须在基本数据类型级别上进行。

注意:如果访问Program范围内的变量,请使用以下语法:

Program:ProgramName.TagName

Program:MainProgram范围内变量在线监控值
MainProgram范围内变量在线监控

读取单个tag

comm.Read('Program:MainProgram.temp')

结果如下:

Response(TagName=Program:MainProgram.temp, Value=1, Status=Success)

读取多个tag组合的列表

tagList=['Program:MainProgram.tag_Dint.0',
'Program:MainProgram.tag_Dint',
'Program:MainProgram.tag_String',
'Program:MainProgram.tag_Real']
comm.Read(tagList)

Response(TagName=Program:MainProgram.tag_Dint.0, Value=True,Status=Success),
Response(TagName=Program:MainProgram.tag_Dint,Value=3, Status=Success),
Response(TagName=Program:MainProgram.tag_String, Value=tag in MainProgram, Status=Success),
Response(TagName=Program:MainProgram.tag_Real,Value=12.119999885559082, Status=Success)

向PLC写入变量值

使用Write()方法将数值写入PLC标签时,可以向单个标签写入一个值。向数组标签写入值列表,或者向标签列表写入值列表,Write()函数将返回Response类,主要用于查看写入是否成功。

写入单个数值

向单个标签写入单个数值,请传递标签名称和数值。请注意数据类型,对于整数(SINT/INT/DINT),请使用int类型,对于实数,请使用float类型,对于字符串,请使用str类型。

comm.Write('Program:MainProgram.temp',0)

Response(TagName=Program:MainProgram.temp, Value=0, Status=Success)

同时写入多种数据类型的值

write_data = [('Program:MainProgram.tag_Dint', 10),
                  ('Program:MainProgram.tag_String', 'This tag in Program:MainProgram'),
                  ('Program:MainProgram.tag_Real', 3.55)]
comm.Write(write_data)

Response(TagName=Program:MainProgram.tag_Dint, Value=[10], Status=Success),
Response(TagName=Program:MainProgram.tag_String, Value=[[31, 0, 0, 0, 84, 104, 105, 115, 32, 116, 97, 103, 32, 105, 110, 32, 80, 114, 111, 103, 114, 97, 109, 58, 77, 97, 105, 110, 80, 114, 111, 103, 114, 97, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], Status=Success),
Response(TagName=Program:MainProgram.tag_Real, Value=[3.55], Status=Success)

写入数据后的tag值
在这里插入图片描述

写入数组数据

将数据写入数组时不必指定长度,pylogix会使用列表中的数值数量。

comm.Write('Program:MainProgram.tag_Array[0]',['123','456','789'])

Response(TagName=Program:MainProgram.tag_Array[0], Value=[‘123’, ‘456’, ‘789’], Status=Success)

tag_Array数组数据
在这里插入图片描述

  • 36
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电工学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值