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系列文章目录
    • Python pylogix 介绍
    • Rockwell AB PLC实例项目介绍
      • 硬件组态
      • 项目程序
    • pylogix 方法
      • 与PLC建立连接
      • 获取模块信息
      • 获取设备信息
      • 获取PLC时间
      • 设置PLC时间
      • 获取程序列表
      • 获取所有Tag名称列表
      • 获取指定Program范围内Tag名称列表
      • 读取PLC中变量值
      • 向PLC写入变量值

Python pylogix 介绍

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

Rockwell AB PLC实例项目介绍

硬件组态

Python pylogix 读写AB PLC常用方法实例_第1张图片

项目程序

Python pylogix 读写AB PLC常用方法实例_第2张图片

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模块

模块信息

Python pylogix 读写AB PLC常用方法实例_第3张图片
结果如下:

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则与之对应

模块信息

Python pylogix 读写AB PLC常用方法实例_第4张图片
结果如下:

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时间
Python pylogix 读写AB PLC常用方法实例_第5张图片

结果如下:

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列表
Python pylogix 读写AB PLC常用方法实例_第6张图片
结果如下:

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

获取所有Tag名称列表

comm.GetTagList()

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

PLC控制器范围的Tag

Python pylogix 读写AB PLC常用方法实例_第7张图片

遍历获取到的tag名称列表

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

结果如下:
Python pylogix 读写AB PLC常用方法实例_第8张图片

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

comm.GetProgramTagList('Program:Armorstart_test')

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

Program Armorstart_test范围的Tag
Python pylogix 读写AB PLC常用方法实例_第9张图片

遍历获取到的tag名称列表

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

结果如下:
Python pylogix 读写AB PLC常用方法实例_第10张图片

读取PLC中变量值

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

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

Program:ProgramName.TagName

Program:MainProgram范围内变量在线监控值
Python pylogix 读写AB PLC常用方法实例_第11张图片

读取单个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值
Python pylogix 读写AB PLC常用方法实例_第12张图片

写入数组数据

将数据写入数组时不必指定长度,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数组数据
Python pylogix 读写AB PLC常用方法实例_第13张图片

你可能感兴趣的:(python,制造,自动化)