西门子S7-1200 HslcommunicationDemo大纲拆解
上位机编写软件:PyQt5
语言:python
第三方组件:Hslcommunication
PLC:西门子s-7 1200
首界面实现如下:
添加文件名
import datetime #添加时间插件模块
import sys #sys模块包含了与Python解释器和它的环境有关的函数
import threading #提供了一个比thread模块更高层的API来提供线程的并发性。这些线程并发运行并共享内存
import HslCommunication #添加hsl模块
from HslCommunication import SoftBasic, MelsecMcNet, MelsecMcAsciiNet, MelsecA1ENet, SiemensS7Net, SiemensPLCS, \SiemensFetchWriteNet, OmronFinsNet, ModbusTcpNet, OperateResult, NetSimplifyClient #从hsl模块中添加PLC型号from PyQt5 import QtWidgets, QtCore, QtGui #QtCore包含模块类的定义;QtGui为窗口系统集成,事件处理,,2D图形,基本图像,字体和文本提供类
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QMessageBox, QAction, QPushButton, QVBoxLayout, \QLineEdit, QTextEdit #从QtWidgets和QtGui中引入用到的模块
from PyQt5.QtGui import QPalette, QFont, QIcon, QBrush, QColor, QPainter
定义一个WindowsLoad的类,其父类是QMainWindow,作为整个PLC首界面的一整个类
class WindowsLoad(QtWidgets.QMainWindow): #定义一个WindowsLoad的类,其父类是QMainWindowdef __init__(self): def threadReadFromServer(self, num):netSimplifyClient = NetSimplifyClient('118.24.36.220', 18467) #实例化一个客户端对象,需要手动指定Ip地址和端口# netSimplifyClient.Token = uuid.UUID('66a469ad-a595-48ed-abe1-912f7085dbcd') #网络类的身份令牌,在hsl协议的模式下会有效,在和设备进行通信的时候是无效的# netSimplifyClient.SetLoginAccount("admin","123456") # 如果采用了账户名和密码的验证时用这条。设置当前的登录的账户名和密码信息,并启用账户验证的功能,账户名为空时设置不生效#Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。#相当于保存密码的功能,第一次用用户名和密码,以后一段时间内只需要token和客户端的token进行对比即可connect = netSimplifyClient.ConnectServer() #netSimplifyClient.ConnectServer()尝试连接远程的服务器,如果连接成功,就切换短连接模式到长连接模式if connect.IsSuccess == False:print(connect.Message) #如果连接失败,显示连接失败的信息else:netSimplifyClient.ReadFromServer(600, '1.0.0') #客户端向服务器进行请求netSimplifyClient.ConnectClose() #手动断开与远程服务器的连接 def initUI(self): #对窗口一系列布局,按钮的信号和槽搭建。#槽函数并不在这个def中t1 = threading.Thread(target=self.threadReadFromServer, args=(13,)) #t1代表可以执行的某个任务的一个线程,target是最重要的参数,是一个回调函数t1.start() #要让一个线程启动,就要调用其start方法即可def center(self): #控制窗口在屏幕中心def blogClick(self): #一系列首界面的槽函数...def pushButton101_Click(self): #西门子1200选项被按下的槽函数,显示子界面self.formSiemens = FormSiemens(SiemensPLCS.S1200)self.formSiemens.show()def show(self): #首界面显示函数super().show()
刚进入的主界面,主要功能是选择不同的PLC。由本次使用的是西门子1200,故点击1200,进入子界面。
首先定义一个传递功能模块,DemoUtils
class DemoUtils: #实用程序类,用于读写结果的呈送@staticmethoddef ReadResultRender(result: OperateResult, address: str, textBox: QTextEdit): #参数后加:其实是注释,表明参数的类型@staticmethoddef WriteResultRender(result: OperateResult, address: str):
子界面的一些布局类,以及功能函数
class UserControlHead(QWidget): #显示主界面的一些绘制,不含功能
class UserControlReadWriteOp(QWidget): #上面两个读写框功能设计类def __init__(self, parent=None):def initUI(self): #上面两个读写框的布局函数,以及按钮的信号和槽def button_read_bool_click(self): # 各种读按钮的触发函数,r-bool按钮按下 if self.textbox5.text() == "1":DemoUtils.ReadResultRender(self.readWriteNet.ReadBool(self.textbox3.text()), self.textbox3.text(),self.textbox4) #readWriteNet(连接结果0或1,地址,大框框显示连接信息)else:DemoUtils.ReadResultRender(self.readWriteNet.ReadBool(self.textbox3.text(), int(self.textbox5.text())),self.textbox3.text(), self.textbox4) #没看懂那个1的框框是什么???????????????????...def button_write_bool_click(self): #各种写入按钮的触发函数if self.textbox7.text().lower() == "true": #text().lower()函数,将文本的大写全改成小写。如果框框里是true,则执行DemoUtils.WriteResultRender(self.readWriteNet.WriteBool(self.textbox8.text(), True), self.textbox8.text())# WriteResultRender(连接结果0或1,连接地址)# self.readWriteNet.WriteInt64向PLC中写入bool数组,返回是否写入成功,(,地址?????????????????????????????)else:DemoUtils.WriteResultRender(self.readWriteNet.WriteBool(self.textbox8.text(), False), self.textbox8.text())...def SetReadWriteNet(self, readWrite, address, strLength=10): #设置读写地址#在class FormSiemens的第一部分“connect”按钮被按下时会触发这个函数
下面到了Siemens专属类,class FormSiemens,在首界面按下对应的PLC后,会创建一个窗口实例对象,就是下面这个类的实例
class FormSiemens(QtWidgets.QMainWindow):def __init__(self, plc: SiemensPLCS):def initUI(self): #整个界面的外观设计,以及模块布局def center(self): #下面是一些读写按钮的触发函数def button_connect_click(self): #第一部分connect按钮的触发函数def button_disconnect_click(self): #第一部分disconnect按钮的触发函数def button3_click(self): #3号框,“order number”按钮def button25_click(self): #3号框,“bulk read”按钮def button26_click(self): #4号框,“read”按钮
所有类都定义完了,最后是一些收尾代码:
app = QtWidgets.QApplication(sys.argv)
windowsLoad = WindowsLoad()
windowsLoad.show()
sys.exit(app.exec_())
西门子S7-1200 HslcommunicationDemo大纲拆解相关推荐
- PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速
PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...
- PLC实验—西门子S7 1200 PID控制步进电机转速
PLC实验-西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制,因为并不是并不研究这个方向,研二又比较忙,时间限制只加了比例系数 这里只是抛砖引玉,希望大家可以进一步完善补充 思路 ...
- labview控制 西门子S7-1200 1214 dcdcdcplc 程序
labview控制 西门子S7-1200 1214 dcdcdcplc 程序 plc只需要设置连接机制与IP即可 通讯为TCP/IP协议 YID:7320649697140387工控物联网
- S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN
S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN PLCS7-1200,可赠送v15软件 西门子博图编写,程序包含一台机器所具备的所有功 ...
- 西门子plc s-7 1200驱动伺服电机方法
西门子plc s-7 1200驱动伺服电机方法 前言 完整设备连接 驱动实际接线图 程序编写 新建项目 添加工艺对象 配置工艺对象 程序编写 启动方法 选择工作模式 前言 其实,伺服电机还用另外两种工 ...
- 西门子S7系列PLC安全防护研究
近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...
- C#使用西门子S7 协议读写PLC DB块
教大家使用C#如何方便快速的读写西门子DB块的值,实现上位机跟plc进行通讯的流程 使用的西门子PLC型号,S7 1200 1.Nuget 安装s7 驱动包 2.西门子plc定义一个db块,这个是我们 ...
- 西门子S7 模拟器使用教程
一.S7协议概述 S7协议是西门子S7系列PLC通信的核心协议,它是一种位于传输层之上的通信协议,其物理层/数据链路层可以是MPI总线.PROFIBUS总线或者工业以太网. S7以太网协议本身也是TC ...
- 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
一. 引子 首先感谢博客园:第一篇文章.第一个开源项目,算是旗开得胜.可以看到,项目大部分流量来自于博客园,码农乐园,名不虚传^^. 园友给了我很多支持,并提出了很好的改进意见.现加入屏幕分辨率自 ...
最新文章
- 80+机器学习数据集,还不快收藏
- jenkins调整jdk版本不生效的解决办法
- 深入分析 Java 方法反射的实现原理
- C#中IEnumerableT.GroupBy()的简单使用
- mysql 知识_关于mysql基础知识的介绍
- 卷积神经网络(CNN)之池化层的实现
- 配置CentOS6.3 NFS
- php private ,public protected三者的区别
- 25留数及其应用(一)
- 杭州第二机场选址的三个备选方案仁和、瓶窑、塘栖中选择瓶窑的理由。元芳,你怎么看?
- 如何从Apple电子钱包中删除旧登机牌
- closest()方法简介
- CAN 总线通信 简要概括
- Python数据预处理:机器学习、人工智能通用技术(1)
- 寻求大量iOS app马甲包上架appstore
- Java是剑客-飘逸;.NET是刀客-霸道
- RecycleView 二级列表(多级列表)
- 计算机基础 电子工业出版,电子工业出版社21世纪计算机基础教育系列教材2吴功宜吴英编着.ppt...
- python基础-运算符
- 短视频应用应该如何打造技术架构?