Python通过KEPServerEX 6读取PLC数据

ps:博主电脑通过以太网连接PLC

 1.配置kepserver

前期配置请参考博文前部分:WPF通过KEPServerEX 读取PLC 的DB块值 - 锡城小笼包 - 博客园 (cnblogs.com)

获取OPC UA地址:

右击任务栏中的kepserver图标,选择“OPC UA配置”。

选择适配器,查看TCP地址,一般默认为opc.tcp://127.0.0.1:49320,也可以自己添加。安全策略选“无”。

2.连接kepserver

client = Client('opc.tcp://127.0.0.1:49320', timeout=10)    # 地址为本地配置的kepserver地址

# 连接kepserver
client.connect()    
print("Connected to KEPserver")

try:
    # 测试连接是否成功
    # 获取根节点
    root = client.get_root_node()
    print("Root node:", root)
    # 获取对象节点
    objects = client.get_objects_node()
    print("Objects node:", objects)
except Exception as e:
    print(e)
finally:
    # 断开连接
    client.disconnect()
    print("Disconnected from KEPserver")

3.读取节点

例如我要读取“Channel1.Device1.start”的数据。

 找到你要读取的节点层级,如果不知道,就按笨办法一层一层找

# 连接kepserver
client.connect() 
print("Connected to KEPserver")

# 连接后
# 获取根节点
root = client.get_root_node()

# 获取子节点
children = root.get_children()
print("children node:", children)

①先输出root node的children:

 ②此时还不知道目标值在哪个node下,先找第一个node的children:

children = root.get_children()[0].get_children()
print("children node:", children)

 ③可以看到上面输出的结果,Channel1在第15位,输出Channel1的children:

children = root.get_children()[0].get_children()[14].get_children()
print("children node:", children)

④Device1在第3位,输出Device1的children:

children = root.get_children()[0].get_children()[14].get_children()[2].get_children()
print("children node:", children)

⑤此时就可以根据你要的节点序号传值到参数‘number’。

def readNode(number):
    # 读取你的节点
    # 需要找到你要读取的节点位置,例如我需要读取的NodeItem为Channel1.Device1.start
    node = root.get_children()[0].get_children()[14].get_children()[2].get_children()[number]
    value = node.get_value()
    return value

4.完整代码

from queue import PriorityQueue
import time
from opcua import Client, ua
import csv


class SubHandler(object):
    def datachange_notification(self, node, val, data):
        print("Python: New data change event", node, val, data)


def readNode(number):
    # 读取你的节点,这里需要修改自己的节点位置
    # 需要找到你要读取的节点位置,例如我需要读取的NodeItem为Channel1.Device1.start
    node = root.get_children()[0].get_children()[14].get_children()[2].get_children()[number]
    value = node.get_value()
    return value


def readData():
    # 读取1号节点,这里需要修改自己要获取的节点号
    value1 = readNode(1)
    print("number1:", value1)

    # 读取2号节点
    value2 = readNode(2)
    print("number2:", value2)

    # 读取3号节点
    value3 = readNode(30)
    print("number3:", value3)

    # 读取4号节点
    value4 = readNode(13)
    print("number4:", value4)

    return value1, value2, value3, value4


client = Client('opc.tcp://127.0.0.1:49320', timeout=10)    # 地址为本地配置的kepserver地址
csv_file_path = "data.csv"    # 如果要将数据存入文件,新建文件地址


try:
    # 连接kepserver
    client.connect()    
    print("Connected to KEPserver")
    # 获取根节点
    root = client.get_root_node()
    print("Root node:", root)
    # 获取对象节点
    objects = client.get_objects_node()
    print("Objects node:", objects)
    # 如果你不知道自己需要读取的节点层级可以按一下方式获取
    # 获取子节点
    print(root.get_children())

    while True:
        # 读取节点数据,并存入csv文件
        with open(csv_file_path, mode='w', newline='') as file:
            writer = csv.writer(file)  # 以写的方式打开csv文件
            writer.writerow(["1", "2", "3", "4"])  # 定义表头
            #读取多组节点数据
            for i in range(4):
                print(f"第{i + 1}组读取:")
                value1, value2, value3, value4 = readData()
                writer.writerow([value1, value2, value3, value4])
                time.sleep(5)
            print("完成读取!")
except Exception as e:
    print(e)
finally:
    client.disconnect()
    print("Disconnected from KEPserver")

 找节点序号这个方法很笨,我也是自己找不到教程摸索出来的,第一次用kepserver不知道怎么直接找到节点,如果有知道的小伙伴欢迎在评论区指教!!

KepServerEX6是一款工业自动化(IAA)软件,它提供了一个平台,用于连接和监控各种设备和系统。汇川PLC是一种可编程逻辑控制器(PLC),用于工业自动化应用。要使用KepServerEX6读取汇川PLC数据,您可以按照以下步骤进行操作: 1. 安装和配置KepServerEX6:确保已正确安装KepServerEX6软件,并按照其文档或向导进行配置。 2. 连接汇川PLC:使用KepServerEX6提供的功能,连接到您的汇川PLC。您需要提供PLC的IP地址、端口号、协议等信息,以便建立连接。 3. 配置数据访问:在KepServerEX6中,您需要为要读取数据创建一个数据访问对象(DAO)。DAO用于与PLC通信,以获取所需的数据。 4. 读取数据:一旦建立了连接并配置了DAO,您可以使用KepServerEX6提供的API函数或编程语言(如C/C++、VBScript等)来读取PLC中的数据。根据您的需求,可以使用适当的函数和方法来检索数据。 5. 处理数据:获取到数据后,您可以将它们存储在KepServerEX6的数据存储中,以便在应用程序中进行进一步处理和分析。 需要注意的是,汇川PLC可能使用不同的通信协议和数据格式,具体取决于其型号和版本。因此,您需要根据汇川PLC的文档和要求进行适当的配置和读取操作。此外,确保您的KepServerEX6软件版本与汇川PLC兼容,并参考KepServerEX6的文档以获取更多详细信息和指导。 请注意,以上步骤是一般性的指导,具体操作可能因您的环境和需求而有所不同。建议在进行任何更改之前备份重要的数据和配置,并参考KepServerEX6的文档以获取更详细的说明和指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值