上位机编写软件: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大纲拆解相关推荐

  1. PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

    PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...

  2. PLC实验—西门子S7 1200 PID控制步进电机转速

    PLC实验-西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制,因为并不是并不研究这个方向,研二又比较忙,时间限制只加了比例系数 这里只是抛砖引玉,希望大家可以进一步完善补充 思路 ...

  3. labview控制 西门子S7-1200 1214 dcdcdcplc 程序

    labview控制 西门子S7-1200 1214 dcdcdcplc 程序 plc只需要设置连接机制与IP即可 通讯为TCP/IP协议 YID:7320649697140387工控物联网

  4. S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN

    S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN PLCS7-1200,可赠送v15软件 西门子博图编写,程序包含一台机器所具备的所有功 ...

  5. 西门子plc s-7 1200驱动伺服电机方法

    西门子plc s-7 1200驱动伺服电机方法 前言 完整设备连接 驱动实际接线图 程序编写 新建项目 添加工艺对象 配置工艺对象 程序编写 启动方法 选择工作模式 前言 其实,伺服电机还用另外两种工 ...

  6. 西门子S7系列PLC安全防护研究

    近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...

  7. C#使用西门子S7 协议读写PLC DB块

    教大家使用C#如何方便快速的读写西门子DB块的值,实现上位机跟plc进行通讯的流程 使用的西门子PLC型号,S7 1200 1.Nuget 安装s7 驱动包 2.西门子plc定义一个db块,这个是我们 ...

  8. 西门子S7 模拟器使用教程

    一.S7协议概述 S7协议是西门子S7系列PLC通信的核心协议,它是一种位于传输层之上的通信协议,其物理层/数据链路层可以是MPI总线.PROFIBUS总线或者工业以太网. S7以太网协议本身也是TC ...

  9. 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7

    一.   引子 首先感谢博客园:第一篇文章.第一个开源项目,算是旗开得胜.可以看到,项目大部分流量来自于博客园,码农乐园,名不虚传^^. 园友给了我很多支持,并提出了很好的改进意见.现加入屏幕分辨率自 ...

最新文章

  1. 80+机器学习数据集,还不快收藏
  2. jenkins调整jdk版本不生效的解决办法
  3. 深入分析 Java 方法反射的实现原理
  4. C#中IEnumerableT.GroupBy()的简单使用
  5. mysql 知识_关于mysql基础知识的介绍
  6. 卷积神经网络(CNN)之池化层的实现
  7. 配置CentOS6.3 NFS
  8. php private ,public protected三者的区别
  9. 25留数及其应用(一)
  10. 杭州第二机场选址的三个备选方案仁和、瓶窑、塘栖中选择瓶窑的理由。元芳,你怎么看?
  11. 如何从Apple电子钱包中删除旧登机牌
  12. closest()方法简介
  13. CAN 总线通信 简要概括
  14. Python数据预处理:机器学习、人工智能通用技术(1)
  15. 寻求大量iOS app马甲包上架appstore
  16. Java是剑客-飘逸;.NET是刀客-霸道
  17. RecycleView 二级列表(多级列表)
  18. 计算机基础 电子工业出版,电子工业出版社21世纪计算机基础教育系列教材2吴功宜吴英编着.ppt...
  19. python基础-运算符
  20. 短视频应用应该如何打造技术架构?

热门文章

  1. dpi、dp、sp、px、mm之间的关系
  2. Fastqc安装运行(jdk安装)
  3. matlab的上机报告,数理统计和Matlab上机报告.doc
  4. 智能PID软件-AVEVA Diagrams报表功能介绍【图瓦软件出品】
  5. [转载]内存管理与TLB
  6. 网络使用工具HttpWatch的使用方法
  7. 微信小程序开发初体验
  8. 如何在oracle官网下载ojdbc8,想不想在maven里直接下载ojdbc这个jar?
  9. Altium Designer Summer 09绘制3D封装库
  10. IP,域名,DNS,端口