一、软件界面

二、代码分享

from tkinter import *
from tkinter import ttk
import time
import pyads# # 打包成.exe的方法:pyinstaller -w -p C:\Windows\System32\downlevel  -i D:\Python_Test\03-pycharm\6\001.ico D:\Python_Test\03-pycharm\6\Ads_Test.py (xxx:想要打包的文件夹)
class GUI_DISIN():def __init__(self,GUI_Name):self.GUI_Name=GUI_Nameself.func = ''#初始化设计窗口def set_init_Gui(self):self.GUI_Name.title('倍福通讯测试')self.GUI_Name.geometry('800x200+10+10')#添加标签self.label1 = Label(self.GUI_Name,text="输入变量名")self.label1.grid(row=0,column=0)#下拉框标题self.label5 = Label(self.GUI_Name, text="数据类型")self.label5.grid(row=0, column=5)self.label2 = Label(self.GUI_Name,text="变量值")self.label2.grid(row=0,column=10)self.label3 = Label(self.GUI_Name, text="日志输出")self.label3.grid(row=0, column=13)self.label4 = Label(self.GUI_Name, text="")self.label4.grid(row=0, column=15)self.label5 = Label(self.GUI_Name, text="NetID:")self.label5.grid(row=2, column=0)self.label6 = Label(self.GUI_Name, text="Port:")self.label6.grid(row=2, column=5)#添加文本框#变量名输入self.text1 = Text(self.GUI_Name,width=20,height=2)self.text1.grid(row=1,column=0)#数据值输出self.text2 = Text(self.GUI_Name,width=20,height=2)self.text2.grid(row=1,column=10)#日志输出self.text3 = Text(self.GUI_Name,width=30,height=2)self.text3.grid(row=1,column=13)#实时时间显示self.text4 = Text(self.GUI_Name,width=18,height=2,font=('times',10,'bold'))self.text4.grid(row=0,column=14)#NetIDself.text5 = Text(self.GUI_Name,width=20,height=2)self.text5.grid(row=3,column=0)#Portself.text6 = Text(self.GUI_Name,width=20,height=2)self.text6.grid(row=3,column=5)#按钮-单次读取self.button1 = Button(self.GUI_Name,text='单次读取',bg='lightblue',width=10,command=self.ReadData_Once)self.button1.grid(row=1,column=14)#按钮-连续读取self.button2 = Button(self.GUI_Name,text='循环读取',bg='lightblue',width=10,command=self.ReadData_Continuous)self.button2.grid(row=2,column=14)#按钮-取消连续读取self.button2 = Button(self.GUI_Name,text='循环读取停止',bg='lightblue',width=10,command=self.Cancel_ReadData_Continuous)self.button2.grid(row=3,column=14)#添加下拉框value = StringVar()value.set('CCC')values = ['PLCTYPE_BOOL','PLCTYPE_BYTE','PLCTYPE_DWORD','PLCTYPE_DINT','PLCTYPE_INT','PLCTYPE_LREAL','PLCTYPE_REAL','PLCTYPE_SINT','PLCTYPE_STRING','PLCTYPE_TOD','PLCTYPE_UBYTE','PLCTYPE_UDINT','PLCTYPE_UINT','PLCTYPE_USINT','PLCTYPE_WORD','PLCTYPE_LINT','PLCTYPE_ULINT','PLCTYPE_DATE','PLCTYPE_DATE_AND_TIME','PLCTYPE_DT','PLCTYPE_TIME,']#   下拉列表控件self.combobox = ttk.Combobox(master=self.GUI_Name,  # 父容器height=10,  # 高度,下拉显示的条目数量width=15,  # 宽度state='readonly',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabledcursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...font=('', 15),  # 字体textvariable=value,  # 通过StringVar设置可改变的值values=values,  # 设置下拉框的选项)self.combobox.grid(row=1,column=5)#   实时显示时间self.tick()def ReadData_Continuous(self):#循环读取变量i=1print(1)self.ReadData_Once()self.func = self.GUI_Name.after(10, self.ReadData_Continuous)  # .after函数可以循环实现该函数def Cancel_ReadData_Continuous(self):#取消连续读取self.GUI_Name.after_cancel(self.func)def ReadData_Once(self):# 单次读取变量pass#   读取NetIDNetID = self.text5.get(1.0,END).strip()#   读取PortPort = int(self.text6.get(1.0,END).strip())#   打开PLCplc = pyads.Connection(NetID, Port)plc.open()#   通过变量名去读值src ='.'+ self.text1.get(1.0,END).strip()print(src)src_type = self.combobox.get().strip()# print(type(src_type))# 得到数据类型src_type1 =self.Get_ParaType(src_type)# src_type = pyads.PLCTYPE_BOOLprint(type(src_type1))try:if src !='' and src_type !='':print('okk')result = ''result = plc.read_by_name(data_name=src,plc_datatype=src_type1)print(result)if result != '':try:self.text2.delete(1.0, END)self.text2.insert(1.0, result)str1 = '变量--'+str(src) + '--读取成功!'self.log(str1)except:self.text2.delete(1.0, END)self.log('读取字符为空失败')except :self.text2.delete(1.0, END)self.log('打开端口失败')def Get_ParaType(self,input_str):#   实现字符串转变量类型功能if input_str == 'PLCTYPE_BOOL':return pyads.PLCTYPE_BOOLelif input_str == 'PLCTYPE_BYTE':return pyads.PLCTYPE_BYTEelif input_str == 'PLCTYPE_DWORD':return pyads.PLCTYPE_DWORDelif input_str == 'PLCTYPE_DINT':return pyads.PLCTYPE_DINTelif input_str == 'PLCTYPE_INT':return pyads.PLCTYPE_INTelif input_str == 'PLCTYPE_LREAL':return pyads.PLCTYPE_LREALelif input_str == 'PLCTYPE_REAL':return pyads.PLCTYPE_REALelif input_str == 'PLCTYPE_SINT':return pyads.PLCTYPE_SINTelif input_str == 'PLCTYPE_STRING':return pyads.PLCTYPE_STRINGelif input_str == 'PLCTYPE_TOD':return pyads.PLCTYPE_TODelif input_str == 'PLCTYPE_UBYTE':return pyads.PLCTYPE_UBYTEelif input_str == 'PLCTYPE_UDINT':return pyads.PLCTYPE_UDINTelif input_str == 'PLCTYPE_UINT':return pyads.PLCTYPE_UINTelif input_str == 'PLCTYPE_USINT':return pyads.PLCTYPE_USINTelif input_str == 'PLCTYPE_WORD':return pyads.PLCTYPE_WORDelif input_str == 'PLCTYPE_LINT':return pyads.PLCTYPE_LINTelif input_str == 'PLCTYPE_ULINT':return pyads.PLCTYPE_ULINTelif input_str == 'PLCTYPE_DATE':return pyads.PLCTYPE_DATEelif input_str == 'PLCTYPE_DATE_AND_TIME':return pyads.PLCTYPE_DATE_AND_TIMEelif input_str == 'PLCTYPE_DT':return pyads.PLCTYPE_DTelif input_str == 'PLCTYPE_TIME':return pyads.PLCTYPE_TIMEelse:return ''def Get_Time(self):#   获取当前时间CurrentTime = time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time()))return CurrentTime#实时显示时间def tick(self):time1 = ''time2 =self.Get_Time()if time1!=time2:time1 = time2self.text4.delete(1.0,END)self.text4.insert(1.0,time1)#self.label4.config(text=time1)self.GUI_Name.after(10,self.tick) #.after函数可以循环实现该函数#   打印日志def log(self,src):passCurrentTime = self.Get_Time()src =str(CurrentTime)+srcself.text3.delete(1.0, END)self.text3.insert(1.0, src)src = ''if __name__ == '__main__':print('-----程序开始-----')GUI = Tk()class_GUI = GUI_DISIN(GUI)class_GUI.set_init_Gui()GUI.mainloop()

Python编写软件与从倍福PLC通讯软件相关推荐

  1. C# TCP/IP通讯协议的整理(三)附带——与倍福PLC通讯

    首先,需要一个和倍福PLC通讯的dll,一般厂家会提供 添加到引用后,直接创建通讯类 using System; using System.Collections.Generic; using Sys ...

  2. 倍福ads通讯软件_倍福TwinCAT ADS通讯-高级语言.ppt

    倍福TwinCAT ADS通讯-高级语言 * ADS组件库文件组成简介 ADS组件库集成在TwinCAT软件中,安装任何版本的TwinCAT软件都包含ADS通讯组件,如果用户希望在没有安装TwinCA ...

  3. 倍福ads通讯软件_软件定义汽车“性感”吗?东软睿驰有自己的答案

    在中国汽车行业,有一家非常特殊的软件公司.成立于1991年的东软集团是中国第一家上市的软件公司,依靠软件外包起家,很早就开始涉足汽车座舱信息娱乐系统领域. 五年前,作为面向汽车智能网联转型变革做出的战 ...

  4. C#与倍福PLC通讯手册之--TcAdsClient类属性方法探索

    目录 1.public bool IsConnected { get; } 获取一个值,该值指示本地Ads端口是否已成功打开.它不指示目标端口是否可用.使用ReadState方法确定目标端口是否可用 ...

  5. 学习倍福PLC需要掌握以下几个方面的知识:

    PLC基础知识:了解PLC的基本构成.工作原理.通信协议等. 编程语言:倍福PLC主要使用Ladder Logic和Instruction List两种编程语言,需要掌握它们的语法.结构和编程方法. ...

  6. matlab与倍福,倍福|TwinCAT|自动化软件-倍福展示最新版TwinCAT 3.1自动化软件

    倍福展示最新版TwinCAT 3.1自动化软件 2012年11月20-22日,Beckhoff在2012德国纽伦堡国际电气自动化系统及元件展览会上展示了其3.1版本的TwinCAT自动化软件.该软件的 ...

  7. 倍福PLC串口模块使用

    之前使用的EL6021模块,如果使用PLC自带的COM口,则ST代码编写方面需要做一些修改: 1.将COMIN和OUT的类型修改 修改为: 2.将功能块的调用Mode修改: 修改为: 此外,COM口设 ...

  8. 倍福PLC的Modbus-TCP Server入门教程

    倍福PLC的Modbus-TCP Server入门教程 一.实验目的 二.实验环境 三.需要的软件 四.操作步骤 五.问题 作者:SAM 一.实验目的 1.使用倍福TwinCAT3作为Modbus-T ...

  9. 倍福PLC和C#通过ADS通信传输Bool数组变量

    在倍福PLC和C#通信,采用ADS通信,本文讲解C#如何读取和写入bool类型数组变量. 操作流程 1.1. PLC程序设计 首先定义相关的变量,如下所示,激活配置: 1.2. C#程序设计 关于C# ...

  10. 倍福PLC和C#通过ADS通信传输int类型变量

    在倍福PLC和C#通信,采用ADS通信,本文讲解C#如何读取和写入int类型变量. 操作流程 1.1. PLC程序设计 首先定义相关的变量,如下所示,激活配置: 1.2. C#程序设计 关于C#和倍福 ...

最新文章

  1. html怎么设置取当前日期格式,js获取当前日期,格式为YYYY-MM-DD
  2. tensorflow2.0的cpu与gpu运行时间对比
  3. maven引入hadoop_Maven引入hadoop依赖包出错解决办法
  4. vba 定义类_VBA中类的介绍及应用简介
  5. Laravel 中的环境与配置
  6. python 抓取微博评论破亿_一篇文章教会你使用Python定时抓取微博评论
  7. 实践中学到的最重要的机器学习经验!
  8. node php环境变量配置,关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍...
  9. 12. Qt中相关字符串处理
  10. bae java乱码_BAE安装HotNews Pro乱码解决方案
  11. C-Free 5.0最新注册码
  12. c++早绑定和晚绑定
  13. 向量表示 运动抛物线_黄老师讲数学(460)向量、数列、双变量、坐标计算、极限等结合的一道题...
  14. 游戏软件测试学什么条件,游戏测试工程师岗位的工作内容
  15. basler相机的类
  16. 撤销git reset
  17. 回顾2022! 链上NFT精彩项目大盘点
  18. 【BZOJ2152】聪聪可可 树分治
  19. 使用pandas处理excel,并使用Openpyxl修改单元格格式
  20. Android Qcom USB Driver学习(一)

热门文章

  1. 二、 jQuery带本地时间的日历代码
  2. 电商网站开发设计方案、电商网站开发重要性
  3. 有趣的github项目
  4. STM32H7+LAN8720A之ETH与LWIP配置问题(End)
  5. 小米 note3 android,小米Note3将更新MIUI10:基于安卓8.1 速度提升明显手感更加丝滑...
  6. Modelsim SE-64 10.4版本在WIN10-64位下找不到LICENSE的解决办法
  7. 3D材质管理软件Adobe Substance 3D Sampler中文版
  8. [Everyday Mathematic]20150217
  9. vsto mysql_VSTO安装部署(完美解决XP+2007)
  10. 五 Zabbix全网监控