2、python西门子PLC仿真画面设计

一、准备:

1、目标:

通过python编程画面,实现西门子PLC通讯,同时画面显示IO信息,打开时显示左侧画面,点击按钮,会根据PLC上标签显示,此处我用仿真器模拟强制了%I3805.0

2、工具:

如上一篇文章

模块:tkinter,ttkbootstrap,snap7

终端运行

pip install ttkbootstrap //可以到github下载压缩包,解压到项目文件中

pip install tkinter

二、设计

1、PLC仿真

(1)连接

如前文所述方式连接PLC,并装载仿真程序,我用的是公司机器人的程序,程序可以随意,注意网址和插槽设置,运行成功后终端会提示,程序我放到最后

(2)读取PLC点信息

通过代码

i_gluePump = plc_PSJ.read_area(snap7.client.Areas.PE, 0, 3805, 1)

其中PE代表输入,0代表读取参考,3805代表%i3805,1代表一个字节,相当于读取了3805.0-3805.7的数据

图中对应想要获取的PLC信息,PA是Q,DB是DB块,其他可以百度

(3)处理字节数据

因为我只想得到3805.0的状态,作为判断条件,所以我用到下面指令

glue1 = bool.__bool__((i_gluePump.__getitem__(0) >> 0) & 0b1)
print(glue1)

此时的glue1就是3805.0

2、画面设计

(1)导入画布

画布的参数如图,resizable表示是否扩大缩小窗口,我写的是FALSE,不允许

(2)设计标签、按钮

跟据个人喜好更改

(3)画布展示

这个mainloop本身就是循环,所以后面想做实时监测标签还没实现,按钮可以更新读取的点及画面更新,这个正在处理中。。。。

3、联合

我目前写的是用按钮控制刷新数据,按一次按钮,我就读一次3805.0的值,并更改画面,如果是TRUE则正常,FALSE则异常

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
import time
import snap7
from snap7 import util
import threading

plc_PSJ = snap7.client.Client()               #启动客户端
plc_PSJ.connect('192.168.43.80', 0, 1)
print(f"connect:{plc_PSJ.get_connected()}")

i_gluePump = plc_PSJ.read_area(snap7.client.Areas.PE, 0, 3805, 1)
print(i_gluePump)
glue1 = bool.__bool__((i_gluePump.__getitem__(0) >> 0) & 0b1)
print(glue1)
def buttonclick():
    root.event_generate('<<myEvent>>')
def myEvent1(glue1):
    i_gluePump = plc_PSJ.read_area(snap7.client.Areas.PE, 0, 3805, 1)
    glue1 = bool.__bool__((i_gluePump.__getitem__(0) >> 0) & 0b1)
    print(glue1)
    time.sleep(1)
    if glue1 == True:

        ll2["text"] = "胶泵正常"
        ll2["background"] = "green"
        ll2["foreground"] = "white"
        # l1.pack(side=TOP, padx=5, pady=15)
    else:
        ll2["text"] = "胶泵异常"
        ll2["background"] = "red"
        ll2["foreground"] = "black"

root = ttk.Window("调漆间报警", "superhero", position=[100, 100], size=(300, 250), resizable=(False, False))#画布设计

l1 = ttk.Label(root, text="胶间状态", font=("幼圆", 18, 'bold'), bootstyle=DEFAULT)#画面标题
l1.pack(side=TOP, padx=5, pady=20)
root.bind("<<myEvent>>", myEvent1)

ll2 = ttk.Label(root, text="胶泵正常", font=("华文琥珀", 14, ''), bootstyle="inverse-success", anchor=CENTER)#报警图标
ll2.pack(side=TOP, padx=5, pady=15, ipadx=10, ipady=15)

b1 = ttk.Button(root, text="查看状态", bootstyle="sucess", command=buttonclick)#按钮
b1.pack(side=TOP, padx=5, pady=15)

root.mainloop()



4、打包exe程序

1、在pycharm终端输入 install pyinstaller 安装pyinstaller

2、执行命令 pyinstaller -F -w main.py即可

disk文件夹下会有.exe文件

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用不同的库实现与西门子PLC的通讯。其中,一种常用的库是python-snap7。这个库提供了与PLC通讯所需的功能,而且代码相对较少。你可以使用python-snap7库来实现与西门子PLC的通讯。 另外,如果你手头没有PLC,你可以参考一篇名为"C#使用S7NetPlus以及PLCSIM Advanced V3.0实现西门子PLC仿真通讯"的文章,该文章介绍了如何使用C#和PLCSIM Advanced V3.0来进行西门子PLC仿真通讯。 通过使用python-snap7库,你可以解析PLC读取的字节数据。不过,对于一些人来说,这种方法可能不太容易理解和使用,而且解析布尔值可能存在一些问题,因为Python在位操作方面的支持并不像C#那样好。这意味着在使用python-snap7库解析布尔值时可能会稍微麻烦一些。 总之,使用python-snap7库是一种在Python中实现与西门子PLC通讯的方法。如果你对C#也有一定的了解,你会发现相比之下,Python的代码量要少一些。但是,底层的通讯原理是相同的,只是具体的实现方式有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python使用python-snap7实现西门子PLC通讯](https://blog.csdn.net/XUMENGCAS/article/details/122695234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值