Python-OPCUA 读写西门子PLC设备的数据

这篇具有很好参考价值的文章主要介绍了Python-OPCUA 读写西门子PLC设备的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python版本:3.9
在python中,通过opc ua 通讯方式向PLC中读写数据

1. 安装opcua

首先安装一下opcua:pip install opcua

2. 实现与PLC的交互

我们可以通过导入文件的方式,实现plc设备数据的批量读取与写入
首先 我们可以通过KEPserve软件来实时监控到PLC设备的数据,这样方便我们待会读取的时候能够更加直观

3. KEPserver的配置

①:右键点击连接性,选择OPC UA Client
Python-OPCUA 读写西门子PLC设备的数据

②:点击下一页,设置通道名称,然后在点击下一页
Python-OPCUA 读写西门子PLC设备的数据

③ : 默认下一页,直到添加通道页面,输入PLC设备的地址与端口号,记住:opc.tcp://需保留,同时,安全策略选项需选择无,然后点击下一页,直到完成
Python-OPCUA 读写西门子PLC设备的数据

④ :通道建好后,接下来右击通道选择新建设备,输入设备名称,然后默认下一页
Python-OPCUA 读写西门子PLC设备的数据

⑤ :一直默认下一页,直到添加设备向导这一步,点击导入项,选择需要读取的点位的数据
Python-OPCUA 读写西门子PLC设备的数据

⑥:当配置完成之后,点击页面上方的QC图标按钮,就能看到读取到的PLC设备的数据了
Python-OPCUA 读写西门子PLC设备的数据

4. 当kepserver配置完成后,接下来使用Python 实现与PLC的交互,直接上代码

	# coding=utf-8
	# 导入需要的模块	
import importlib, sys, time, xlrd, sqlite3

importlib.reload(sys)
from opcua import Client, ua
from datetime import datetime
from xlrd import xldate_as_tuple
try:
# 输入PLC设备的IP地址,进行连接
    client = Client("opc.tcp://192.168.0.5:4840")
    client.connect()
    # print("连接成功=======================================================")
#在E:/data3.xls文件中,输入PLC数据的地址位,与需要写进PLC设备的相应地址位的数据
    filename = xlrd.open_workbook("E:/data3.xls")
    sheet = filename.sheet_by_index(0)
    rows = sheet.nrows
    cols = sheet.ncols
    all_content = []
    col_content = []
# 判断需要写入PLC设备的数据的类型
    for i in range(rows):
        row_content = []
        for j in range(cols):
            ctype = sheet.cell(i, j).ctype  # 表格的数据类型
            cell = sheet.cell_value(i, j)
            if ctype == 2 and cell % 1 == 0:  # 如果是整形
                cell = int(cell)
            elif ctype == 3:
                # 转成datetime对象
                date = datetime(*xldate_as_tuple(cell, 0))
                cell = date.strftime('%Y/%d/%m %H:%M:%S')
            elif ctype == 4:
                cell = True if cell == 1 else False
            row_content.append(cell)
        all_content.append(row_content[1::])
        col_content.append(row_content[0:1:])
    list = []
    list1 = []
    list2 = []

    for x in all_content[1::]:
        for y in x:
            list.append(y)
    for x in col_content[1::]:
        for y in x:
            list1.append(y)
    for i in range(len(list1)):
        list2_1 = list1[i]
        var = client.get_node(list2_1)
        list2.append(var.get_value())
    type1 = []
    for i in range(1, sheet.nrows):
        if sheet.cell(i, 1).ctype == 1:
            type1 = 'String'
        elif sheet.cell(i, 1).ctype == 3:
            type1 = 'Date'
        elif sheet.cell(i, 1).ctype == 4:
            type1 = 'Boolean'
        elif sheet.cell(i, 1).ctype == 2:
            if len(str(sheet.cell_value(i, 1)).split('.')[1]) == 1 and            str(sheet.cell_value(i, 1)).split('.')[1] == '0':
                type1 = 'Int32'
            else:
                type1 = 'Float'
# 如果需要写入PLC的数据的类型 与PLC地址位中的数据的类型一致,就将数据写入到PLC中
        if isinstance(list[i - 1], type(list2[i - 1])):
            if type1 == 'Boolean':
                var1 = client.get_node(list1[i - 1])
                tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.Boolean))
                var1.set_value(tempvalue)
            elif type1 == 'Date':
                var1 = client.get_node(list1[i - 1])
                tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.DateTime))
                var1.set_value(tempvalue)
            elif type1 == 'String':
                var1 = client.get_node(list1[i - 1])
                tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.String))
                var1.set_value(tempvalue)
            elif type1 == 'Float':
                var1 = client.get_node(list1[i - 1])
                tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.Float))
                var1.set_value(tempvalue)
            elif type1 == 'Int32':
                try:
                    var1 = client.get_node(list1[i - 1])
                    tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.UInt16))
                    var1.set_value(tempvalue)
                except:
                    var1 = client.get_node(list1[i - 1])
                    tempvalue = ua.DataValue(ua.Variant(list[i - 1], ua.VariantType.UInt32))
                    var1.set_value(tempvalue)
            else:
                pass
        else:
            pass

except:
    print("连接失败")
# 断开连接
client.disconnect()

至此,就实现了PLC变量中的读写,我们可以通过KEPserver来看 读取到的数据是否与PLC设备的数据一致以及需要写入的数据是否写入到了PLC设备中

作者:王鹏果文章来源地址https://www.toymoban.com/news/detail-490894.html

到了这里,关于Python-OPCUA 读写西门子PLC设备的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 西门子PLC S7-1500系列CPU与西门子PLC S7-300系列的通讯模块CP343-1进行TCP通讯的方法

    西门子PLC S7-1500系列是西门子新一代PLC产品,它通过多方面的创新,为用户提供了更高性价比的产品,提高了用户的工程实施效率。西门子PLC S7-1500为用户在自动化控制系统中提供了更高的运行能力,而且简单易用,节省了大量的系统开发时间,西门子PLC S7-1500系列有很强的通

    2023年04月08日
    浏览(79)
  • 西门子PLC S7-1200程序实例,西门子1200与安川机器人TCP IP通讯

    西门子PLC S7-1200程序实例,博图版本V15 1,西门子1200与安川机器人TCP IP通讯,包含机器人GSD文件; 2,西门子1200控制6轴伺服电机,四台台脉冲控制台达B2伺服,两台PN通讯控制西门子V90伺服电机; 3,两台西门子1200开放式通讯交互数据联动; 4,与4台位移传感器modbus485轮询读取

    2024年04月10日
    浏览(40)
  • 快速西门子PLC入门(零基础心得版)

    PLC可编程逻辑控制器是种专门为在工业环境下应用而设计的数字运算操作电子系统。它采用一种可编程的存储器,在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,通过数字式或模拟式的输入输出来控制各种类型的机械设备或生产过程。 目前主流

    2024年02月06日
    浏览(32)
  • 西门子PLC与LabVIEW进行TCP通讯

    读写过程类似,因此只以 LabVIEW 读 PLC 写为例。 西门子 PLC 型号为 CPU 1215C DC/DC/DC,订货号 6ES7 215-1AG40-0XB0。 TIA PORTAL 版本为 V17,LabVIEW 版本为 LabVIEW2020。 确保PC和PLC处于同一网段下,并用网线连接好。 PLC 需要使用到 TSEND_C 指令。 LabVIEW需要使用到TCP的打开连接、读取数据、关

    2024年02月06日
    浏览(31)
  • C#和西门子PLC使用Udp通信

    目录 一、PLC程序工程创建 1、硬件配置 2、程序编程 3、添加监控表 二、C#程序工程创建 1、界面UI 2、代码编写 (1)创建本地Udp (2)读PLC的线程函数 (3)定时器 (4)上位机写寄存器操作 (5)StringToByte()方法封装 (6)窗口关闭 3、C#和PLC测试 (1)C#上位机写操作1 (2)C#上位

    2024年02月04日
    浏览(33)
  • 西门子PLC S7-1200如何实现远程上下载?

    西门子S7-1200是一款高性能的PLC,具有模块化、结构紧凑、功能全面、编程简单的特点,总工业自动化领域中应用广泛,如贴片系统、传送带系统、污水处理厂、配电站、能源管理系统。 在使用过程,无论是为了减少现场调试的成本时间,还是为了给客户提高更快更强的技术

    2024年02月12日
    浏览(37)
  • 西门子plc使用MQTT把数据上传腾讯云端

    使用1500系列的plc仿真接入腾讯云,实现可以上传数据和下放数据,可实现报警微信推送功能,作为笔记在此储存。 1.博图v16 2.S7-PLCSIM Advanced V4.0 3.西门子官方实例库 西门子官方实例库 https://support.industry.siemens.com/cs/document/109748872/use-the-simatic-controller-as-an-mqtt-client?dti=0lc=en-US 注

    2023年04月11日
    浏览(33)
  • C#上位机与西门子PLC数据交互

    拉了换一个简单的界面 我新建了一个DB数据块【DB1】,右键【DB1】,点击【属性】项,【优化的块访问】默认是勾选,要想显示数据块中地址偏移量,需要把【优化的块访问】勾选取消 1、右键项目名,选择图中【管理NuGet程序包】 2、在搜索框输入【S7netplus】,我安装的是第

    2024年02月13日
    浏览(36)
  • MATLAB和西门子SMART PLC OPC通信

    西门子S7-200SMART PLC OPC软件的下载和使用,请查看下面文章 Smart 200PLC PC Access SMART OPC通信_基于pc access smart的opc通信_RXXW_Dor的博客-CSDN博客 文章浏览阅读2.7k次,点赞2次,收藏5次。OPC是一种利用微软COM/DCOM技术达成自动控制的协议,采用典型的C/S模式,针对硬件设备的驱动程序由

    2024年02月06日
    浏览(27)
  • 西门子大型程序fanuc机器人焊装 包括1台 西门子1500PLC程序,2台触摸屏TP1500程序

    西门子大型程序fanuc机器人焊装  包括1台 西门子1500PLC程序,2台触摸屏TP1500程序,9个智能远程终端ET200SP Profinet连接 15个Festo智能模块Profinet通讯 10台Fanuc发那科机器人Profinet通讯 3台G120变频器Profinet通讯 2台智能电能管理仪表PAC3200 4个GRAPH顺控程序 图尔克RFID总线模组通讯 和ME

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包