gan通过python实现_Python通过S7协议与S71200通信实现

Snap7是一个用于处理S7以太网协议,与西门子S7系列PLC通讯的开源通讯组件。支持与S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太网通信。

网络上有一个基于Snap7开发的Python开源库python-snap7,下面就具体介绍利用Python实现与S7-1200的通信。

1.安装开源库 python-snap

070338899e458d9e4068ccf91b3c5cd9.png

2. PLC端准备

IP地址设置,与PC同一网段;

0684f4a80cc291ab2afc3034bbf8835a.png

注:本例使用TIA V13

3. Python程序开发

主要通过read_area和write_area两个函数实现对PLC数据的读写

读取M位存储区数据:

read_area(area,dbnumber,start,size)

area:

area参数用于区分I、Q、M、DB存储区:

areas = ADict({
'PE': 0x81, #input 输入区
'PA': 0x82, #output 输出区
'MK': 0x83, #bit memory 中间存储区(M区)
'DB': 0x84, #DB区
'CT': 0x1C, #counters
'TM': 0x1D, #Timers
})

dnumber:0

start:起始地址

size:读取长度

下图举例读取S7-1200 %MW2的数据;

23dac6beeeb77d3c71cb5c5a76e5d755.png

写M位存储区数据:

write_area(self, area, dbnumber, start, data)

area:0x83;

dnumber:0

start:起始地址

data:数据

import snap7from snap7.util import *  #对位操作的函数要导入该库import time
client = snap7.client.Client()# IP地址,机架,槽位client.connect('192.168.0.1',0,1)#测试是否通讯成功if client.get_connected():print('连接成功')else:print('连接失败')
a = bytearray(2) # 定义一个包含两个字节类型的数组a[0]=0x08

a[1]=0x02

#往M区起始为2的地址写入数据a

client.write_area(0x83,0,2,a)

6d77ce5e4ddb3694b92f1f71b2716761.png

还有一种方法,先读取需要修改的数据,然后通过set方法修改其值,最后通过write_area写入,这样就不必按字节写入了。

res = client.read_area(0x83,0,0,2)
set_int(res,0,128) # 128是写入的值
client.write_area(0x83,0,0,res)

3a7745dc6ed8067564d709a20796b908.png

最后分享一个跑马灯视频:

相关文章:

Python通过Modbus TCP与PLC通信

Python通过OPC UA与PLC通信

如果喜欢这篇文章,请点个“在看”吧9e50205e8757224fe35904a898e4223c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GAN是生成式对抗网络(Generative Adversarial Network)的缩写,是一种深度学习的算法。下面是一个简单的GAN算法Python实现示例: ```python # 导入必要的库 import numpy as np import matplotlib.pyplot as plt from keras.datasets import mnist from keras.layers import Dense, Dropout, Input from keras.models import Model, Sequential from keras.optimizers import Adam # 定义生成器模型 def build_generator(): generator = Sequential() generator.add(Dense(256, input_dim=100, activation='relu')) generator.add(Dense(512, activation='relu')) generator.add(Dense(784, activation='tanh')) generator.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) return generator # 定义判别器模型 def build_discriminator(): discriminator = Sequential() discriminator.add(Dense(512, input_dim=784, activation='relu')) discriminator.add(Dropout(0.3)) discriminator.add(Dense(256, activation='relu')) discriminator.add(Dropout(0.3)) discriminator.add(Dense(1, activation='sigmoid')) discriminator.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) return discriminator # 定义GAN模型 def build_gan(generator, discriminator): discriminator.trainable = False gan = Sequential() gan.add(generator) gan.add(discriminator) gan.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) return gan # 加载MNIST数据集 (train_data, _), (_, _) = mnist.load_data() # 数据预处理 train_data = train_data.reshape(train_data.shape[0], 784) train_data = train_data / 127.5 - 1. # 定义超参数 epochs = 10000 batch_size = 128 sample_interval = 1000 # 构建GAN模型 generator = build_generator() discriminator = build_discriminator() gan = build_gan(generator, discriminator) # 开始训练 for epoch in range(epochs): # 训练判别器 idx = np.random.randint(0, train_data.shape[0], batch_size) real_imgs = train_data[idx] noise = np.random.normal(0, 1, (batch_size, 100)) fake_imgs = generator.predict(noise) d_loss_real = discriminator.train_on_batch(real_imgs, np.ones((batch_size, 1))) d_loss_fake = discriminator.train_on_batch(fake_imgs, np.zeros((batch_size, 1))) d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) # 训练生成器 noise = np.random.normal(0, 1, (batch_size, 100)) g_loss = gan.train_on_batch(noise, np.ones((batch_size, 1))) # 打印训练结果 print("Epoch %d [D loss: %f] [G loss: %f]" % (epoch, d_loss, g_loss)) # 保存生成器的图片 if epoch % sample_interval == 0: noise = np.random.normal(0, 1, (25, 100)) gen_imgs = generator.predict(noise) gen_imgs = 0.5 * gen_imgs + 0.5 fig, axs = plt.subplots(5, 5) cnt = 0 for i in range(5): for j in range(5): axs[i,j].imshow(gen_imgs[cnt, :].reshape(28, 28), cmap='gray') axs[i,j].axis('off') cnt += 1 fig.savefig("gan_mnist_%d.png" % epoch) ``` 该示例代码中,首先定义了一个生成器模型和一个判别器模型,然后通过这两个模型构建出GAN模型。接着加载MNIST数据集,并对数据进行预处理。最后开始训练GAN模型,每隔一定的时间就保存一些生成器生成的图片。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值