#!/bin/python
#encoding=utf8
from tkinter import *
import snap7
from functools import reduceclass WidgetsDemo:def __init__(self):window = Tk()window.title("用户界面")#添加一个多选按钮和单选按钮到frame1'''frame1 = Frame(window)frame1.pack()  #看下面的解释(包管理器)self.v2 = IntVar()rbRed = Radiobutton(frame1, text = "红色", bg = "red", variable = self.v2, value = 1, command = self.processRaidobutton)rbYellow = Radiobutton(frame1, text="黄色", bg="yellow", variable=self.v2, value=2, command=self.processRaidobutton)#将cbtBold排列在frame1的网格第一行第一列(网格管理器也会在下面有解释)rbRed.grid(row=1, column=2)rbYellow.grid(row=1, column=3)'''#添加一个label、entry、button和message到frame2frame2 = Frame(window)frame2.pack()label = Label(frame2, text = "请输入IP")#label2 = Label(frame2, text="端口")label3 = Label(frame2, text="机架号")label4= Label(frame2, text="插槽号")lblDBNo = Label(frame2, text="db")lblDataSz = Label(frame2, text="数据大小(byte)")lblDataAd = Label(frame2, text="数据起始地址")btnCls=Button(frame2, text = "清屏", command = self.cearMsg, width =8)btnTstCnn=Button(frame2, text = "连接测试", command = self.testCnn, width =8)self.v1 = IntVar()btnRead = Button(frame2, text="查询数据", command=self.queryData, width =8)self.IP = StringVar()self.IP.set('192.168.100.1')self.slot=IntVar()self.rack=IntVar()self.port=IntVar()self.port.set(502)self.DBNo=IntVar()self.dataAd=IntVar()self.dataSz=IntVar()self.data=StringVar()self.msg=StringVar()self.sendTl=StringVar()self.sendTl.set("发送")entryIP = Entry(frame2, textvariable = self.IP)entryslot = Entry(frame2, textvariable=self.slot)entryrack = Entry(frame2, textvariable=self.rack)#entryport = Entry(frame2, textvariable=self.port)entryDBNo = Entry(frame2, textvariable=self.DBNo)entrydataAd = Entry(frame2, textvariable=self.dataAd)entrydataSz= Entry(frame2, textvariable=self.dataSz)self.btnSendData = Button(frame2, text = self.sendTl.get(), command = self.sendData, width =8)label.grid(row = 1, column = 1)entryIP.grid(row = 1, column = 2)#label2.grid(row=1, column=3)#entryport.grid(row=1, column=4)label3.grid(row=1, column=3)entryslot.grid(row=1, column=4)label4.grid(row=1, column=5)entryrack.grid(row=1, column=6)lblDBNo.grid(row=2, column=1)entryDBNo.grid(row=2, column=2)lblDataAd.grid(row=2, column=3)entrydataAd.grid(row=2, column=4)lblDataSz.grid(row=2, column=5)entrydataSz.grid(row=2, column=6)btnRead.grid(row=4, column=6,sticky=W)self.btnSendData.grid(row = 3, column = 6,sticky=W)btnCls.grid(row=4, column=2,sticky=W)btnTstCnn.grid(row=4,column=5)lblData = Label(frame2, text="发送数据")lblData.grid(row=3, column=1)txtData = Entry(frame2,textvariable=self.data,width = 62)txtData.grid(row=3, column=2,columnspan=4,sticky=W )# message.grid(row = 1, column = 4)#添加一个texttext = Text(window),显示测试的相关信息self.txtMsg=Text(window)self.txtMsg.pack()self.txtMsg.insert(END, "")  #END表示插入到当前文本最后
        window.mainloop()#数据查询,查出结果为Bytestringdef queryData(self):plc = snap7.client.Client()try:plc.connect(self.IP.get(), self.rack.get(),self.slot.get())data= plc.db_read(self.DBNo.get(),self.dataAd,self.dataSz)self.txtMsg.insert(END, data)except  Exception as e:self.txtMsg.insert(END, (e, 'IP:', self.IP.get()))finally:if plc.get_connected():plc.disconnect()#清空文本框中的信息def cearMsg(self):self.txtMsg.delete(1.0, END)#连接测试def testCnn(self):plc = snap7.client.Client()try:plc.connect(self.IP.get(), self.rack.get(), self.slot.get())#if plc.get_connected:self.txtMsg.insert(END,'连接成功')plc.disconnect()except  Exception as e:self.txtMsg.insert(END, (e, 'IP:', self.IP.get(), 'Port:'))#发送数据def sendData(self):plc = snap7.client.Client()"""Here we replace a piece of data in a db block with new dataArgs:db (int): The db to usestart(int): The start within the dbsize(int): The size of the data in bytes_butearray (enumerable): The data to put in the db"""try:data = self.StrtoByesarray(self.data.get())if not data.strip():self.txtMsg.insert(END,'发送数据不能为空')returnplc.connect(self.IP.get(), self.rack.get(), self.slot.get())plc.db_write(self.DBNo, self.dataAd, data)except  Exception as e:self.txtMsg.insert(END , (e,'IP:',self.IP.get(), 'Port:'))finally:if plc.get_connected():plc.disconnect()#将bytes字符串转化为bytesdef StrtoByesarray(self,strdata):strarry = strdata.split()list = []for itm in strarry:list.append(itm)return bytearray(list)WidgetsDemo()

转载于:https://www.cnblogs.com/teachen/p/9722751.html

测试Snap7连接PLC相关推荐

  1. python通过opc读plc实例_OPC通讯实例(C#通过OPC连接PLC读写数据)

    [实例简介]C#通过OPC连接PLC读写数据 [实例截图] [核心代码] using System; using System.Collections.Generic; using System.Co ...

  2. 西门子PC ADAPTER USB A2无法连接PLC的坑

    西门子PC ADAPTER USB A2无法连接PLC的坑 前几天受朋友之托从咸鱼上淘了两款西门子编程电缆,型号分为6ES7 972-0CB20-0XA0  和 6GK1 571-0BA00-0AA0 ...

  3. C#通过OPC协议连接PLC

    今天是2020年2月28号,因"新冠病炎"在家办公的第一个月. 事情的起因是公司突然交我给一个任务,给电机车做个雷达扫描图,用于显示机车前方所有障碍物的信息,如下图所示.c#开发, ...

  4. android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接

    我正在使用具有蓝牙适配器的Ubuntu 11.10台式电脑和使用带有蓝牙的Android 2.2的Android平板电脑. (两款设备上的蓝牙版本应为2.0或2.1版本)如何使从台式电脑到Androi ...

  5. 测试jdbc连mysql数据库_java连接mysql数据库及测试是否连接成功的方法

    本文实例讲述了java连接mysql数据库及测试是否连接成功的方法.分享给大家供大家参考,具体如下: package com.test.tool; import java.sql.Connection ...

  6. java mysql 连接测试_java连接mysql数据库及测试是否连接成功的方法

    本文实例讲述了java连接mysql数据库及测试是否连接成功的方法.分享给大家供大家参考,具体如下: package com.test.tool; import java.sql.Connection ...

  7. opc读取ab的plc数据_使用OPC的模式去连接PLC进行AB SLC-5_04数据的采集

    使用OPC的方式去连接PLC进行AB SLC-5_04数据的采集 1.  必备软件 Rslinx classic 2.57 .net framework 2.0 VS2013 OS: win7 ent ...

  8. php pdo 与对比mysql,php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例...

    php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例 本文实例讲述了php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率.分享给大家供大家参考,具体如下: ...

  9. 创建PHP测试页面,连接并查询MariaDB数据库

    创建PHP测试页面,连接并查询MariaDB数据库. #cat /usr/local/nginx/html/test2.php <?php ##注意 php与?之间不能有空格 $mysqli = ...

最新文章

  1. ​第一本 Compose 图书上市,联想大咖教你学会 Android 全新 UI 编程
  2. 反射(高大上)、类的内置方法
  3. About LOCAL_PRIVATE_PLATFORM_APIS in Android.mk
  4. 全球首富贝佐斯离婚协议达成,前妻获383亿美元
  5. NYOJ 906 杨辉三角
  6. 面向对象六大原则详解
  7. [转载]超酷代码-使用 ASP.NET AJAX 进行拖放
  8. JavaScript 一维数组、二维数组(某个属性)去重方法
  9. ios Quartz 各种绘制图形用法
  10. max日期最大值为0_【SQL】SQL面试50题思路解答与分类整理(下)CASE与日期函数...
  11. 关于LightMapping和NavMesh烘焙的动态载入
  12. oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决......
  13. Android开发初体验——创建一个简单的APP
  14. unity学习之动画状态切换后角色沉入地面里面
  15. 一位 19 年 Mac 用户的心声:“我真的很讨厌库克”
  16. matlab频谱分析中振幅的物理意义,频谱图分析的意义,频谱图的物理意义是什么呢,频率的振幅能够反映什么物理意义呢?(例如下图)请哪位大师指点,不胜感激!...
  17. 如何将word转换成excel格式
  18. Web追踪——CNAME Cloaking
  19. subprocess.Popen()
  20. 数据共享之相互排斥量mutex

热门文章

  1. 红米k40关闭系统自动更新方法介绍(详细步骤)
  2. 邯郸网络服务器机柜型号,珠海服务器机柜批发
  3. 搭建小学创客教育的平台框架
  4. 不同核数cpu php速度,计算机的性能指标完全由CPU决定对吗
  5. 91.(cesium篇)cesium火箭发射模拟
  6. IDEA里配置Bootstrap
  7. Apm飞控学习笔记之添加我的飞行模式-Cxm
  8. 词典翻译  英译汉
  9. encode和tokenize的区别
  10. xp系统usb android,xp系统usb手机网络共享怎么设置,xp设置usb手机网络分享的方法