python 与1200plc仿真通讯

安装

​ python-snap7是python中的一个开放的功能包,所以使用前只需要直接用pip安装
pip install python-snap7

1.先去掉DB块中优化块访问的勾
在这里插入图片描述
2.打开PLC连接机制,勾上允许来自远程对象的PUT/GET通信访问。
在这里插入图片描述
3、db块中数据
在这里插入图片描述
4、打开这个软件(仿真模拟,有实体plc可跳过)
下载路径:https://download.csdn.net/download/qq_43493715/87634720
在这里插入图片描述
在博图中启用仿真
在这里插入图片描述
点击添加
在这里插入图片描述
在这里插入图片描述
设置好本机ip和选择plc ip

在这里插入图片描述
写入
仿真ip地址填写本机ip,有实体plc填写plc ip

import snap7
from snap7 import util
 
# 创建通讯客户端实例
plcObj = snap7.client.Client()
 
# 连接至PLC
plcObj.connect('192.168.2.41', 0, 1)
 
print("开始发送!")
 
# 写入bool
bool1 = 0    ##bool1--》第0个字节段的第1个位,就是偏移量为0.0的bool量的值
bool2 = 1
bool3 = 0
bool4 = 1
bool5 = 1
bool6 = 0
bool7 = 0
bool8 = 0
 
boolData = bytearray(1)
util.set_bool(boolData, 0, 0, bool(bool1))
util.set_bool(boolData, 0, 1, bool(bool2))
util.set_bool(boolData, 0, 2, bool(bool3))
util.set_bool(boolData, 0, 3, bool(bool4))
util.set_bool(boolData, 0, 4, bool(bool5))
util.set_bool(boolData, 0, 5, bool(bool6))
util.set_bool(boolData, 0, 6, bool(bool7))
util.set_bool(boolData, 0, 7, bool(bool8))
plcObj.db_write(110, 0, boolData)
 
# 写入int
intData = bytearray(2)
util.set_int(intData, 0, 5)
plcObj.db_write(110, 2, intData)
 
# 写入real
realData = bytearray(4)
util.set_real(realData, 0, 99.9)
plcObj.db_write(110, 4, realData)
 
# 写入string
# sss = 'qqq'
# print(len(sss))
# stringData = bytearray(len(sss) + 2)
# util.set_string(stringData, 0, sss, 256)
# stringData[0] = 254
# plcObj.db_write(211, 8, stringData)
string = 'db211'
data = int.to_bytes(254, 1, 'big') + int.to_bytes(len(string), 1, 'big') + string.encode(encoding='ascii')
plcObj.write_area(snap7.client.Areas.DB, 110, 8, data)
 
plcObj.disconnect()
 
print("发送成功!")

 
 

读取

import snap7
from snap7 import util
# import struct
 
# 创建通讯客户端实例
plc = snap7.client.Client()
 
# 连接至PLC
plc.connect('192.168.2.41', 0, 1)              #plcObj.connect('PLC的IP', 0, 机架号(0或1))
 
# 读取数据
data = plc.db_read(110, 0, 264)              #data = plc.db_read(读取的哪一个DB块, 读取的起始地址(偏移量),读取的结束地址(偏移量))
 
# 关闭连接
plc.disconnect()
 
# python解析
print("开始解析数据")
# 解析bool
bool1 = util.get_bool(data, 0, 0)       #bool1 = util.get_bool(data, 0, 0)--》第0个字节段的第1个位,就是偏移量为0.0的bool量的值
bool2 = util.get_bool(data, 0, 1)       #bool1 = util.get_bool(data, 0, 1)--》第0个字节段的第2个位,就是偏移量为0.1的bool量的值
bool3 = util.get_bool(data, 0, 2)
bool4 = util.get_bool(data, 0, 3)
bool5 = util.get_bool(data, 0, 4)
bool6 = util.get_bool(data, 0, 5)
bool7 = util.get_bool(data, 0, 6)
bool8 = util.get_bool(data, 0, 7)
 
# 解析int
Int1 = util.get_int(data, 2)            #Int1 = util.get_int(data, 2)--》读取到的数据包date,解析偏移量为2.0开始长度为一个整型的数据
 
# 解析real
Real1 = util.get_real(data, 4)           #Real1 = util.get_real(data, 4)--》读取到的数据包date,解析偏移量为4.0开始长度为一个real型的数据
 
 
# 解析string
string1 = util.get_string(data, 8)       #string1 = util.get_string(data, 8)--》读取到的数据包date,解析偏移量为8.0开始长度为一个string型的数据
 
#将解析的bool量编成字典
bool_group = {"bool1:": bool1,
              "bool2:": bool2,
              "bool3:": bool3,
              "bool4:": bool4,
              "bool5:": bool5,
              "bool6:": bool6,
              "bool7:": bool7,
              "bool8:": bool8
              }
# 打印输出字典
print(bool_group)
# 打印输出整型
print("int:", Int1)
# 打印输出real型
print("real:", Real1)
# 打印输出字符串
print("string:", string1)
 
 
 
 

转载:https://blog.csdn.net/m0_69013551/article/details/129126776?spm=1001.2014.3001.5502

https://blog.csdn.net/m0_69013551/article/details/129738794?spm=1001.2014.3001.5502

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用不同的库实现与西门子PLC通讯。其中,一种常用的库是python-snap7。这个库提供了与PLC通讯所需的功能,而且代码相对较少。你可以使用python-snap7库来实现与西门子PLC通讯。 另外,如果你手头没有PLC,你可以参考一篇名为"C#使用S7NetPlus以及PLCSIM Advanced V3.0实现西门子PLC仿真通讯"的文章,该文章介绍了如何使用C#和PLCSIM Advanced V3.0来进行西门子PLC仿真通讯。 通过使用python-snap7库,你可以解析PLC读取的字节数据。不过,对于一些人来说,这种方法可能不太容易理解和使用,而且解析布尔值可能存在一些问题,因为Python在位操作方面的支持并不像C#那样好。这意味着在使用python-snap7库解析布尔值时可能会稍微麻烦一些。 总之,使用python-snap7库是一种在Python中实现与西门子PLC通讯的方法。如果你对C#也有一定的了解,你会发现相比之下,Python的代码量要少一些。但是,底层的通讯原理是相同的,只是具体的实现方式有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python使用python-snap7实现西门子PLC通讯](https://blog.csdn.net/XUMENGCAS/article/details/122695234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值