解决PLC通信会断然后报错的问题

news/2025/4/1 1:38:47/

 这里的重点是plc_connection,第一次建立client的时候,它会报错

连接失败,错误信息: b' TCP : Unreachable peer'

所以才建不了client,所以也get不了 plc data,所以才报错。

所以plc_connection一定要有重试机制!!!

import snap7
import struct
import timePLC_IP = '192.168.10.2'def plc_connection(PLC_IP, retry_delay=2):"""尝试连接 PLC,无限重试,直到成功。每次失败后等待 retry_delay 秒再重试。"""while True:try:PLC = snap7.client.Client()PLC.connect(PLC_IP, rack=0, slot=2)if PLC.get_connected():print(f"成功连接到 PLC (IP: {PLC_IP})")return PLCexcept Exception as e:print(f"连接失败,错误信息: {e}")time.sleep(retry_delay)  # 等待一段时间后重试def get_plc_data(plc_obj, db):data = plc_obj.db_read(db_number=db, start=0, size=2)value = struct.unpack('!h', data)[0]return valuedef is_connected(plc_obj):"""检查 PLC 是否仍然连接。通过尝试读取一个 DB 块来验证连接状态。"""try:# 尝试读取一个小型数据块(例如 2 字节)a=plc_obj.db_read(db_number=1200, start=0, size=2)return Trueexcept Exception as e:print(f"连接检测失败,错误信息: {e}")return Falsedef main():retry_delay = 2plc_obj = None  # 初始化 PLC 对象为 Nonewhile True:try:a=get_plc_data(plc_obj,1200)print(a)# 如果 PLC 对象不存在或连接已断开,则重新连接# if plc_obj is None or not is_connected(plc_obj):#     if plc_obj is not None:#         try:#             plc_obj.disconnect()  # 断开旧的连接(如果存在)#         except Exception as e:#             print(f"断开旧连接时出错: {e}")#     print("尝试重新连接 PLC...")#     plc_obj = plc_connection(PLC_IP, retry_delay=retry_delay)# print('lianjie', plc_obj.get_connected())# time.sleep(5)except Exception as e:print(f"发生未知错误: {e}")print("等待 5 秒后重试连接...")if plc_obj is not None:try:plc_obj.disconnect()  # 断开旧的连接(如果存在)except Exception as e:print(f"断开旧连接时出错: {e}")print("尝试重新连接 PLC...")plc_obj = plc_connection(PLC_IP, retry_delay=retry_delay)time.sleep(5)  # 等待一段时间后重新尝试连接if __name__ == '__main__':main()


http://www.ppmy.cn/news/1584002.html

相关文章

航拍数据集汇总,覆盖车辆/船舶检测/物体评估/城市景观……

随着无人机的普及化和计算机视觉技术的迅猛发展,无人机航拍作为一种创新的摄影方式,正以前所未有的速度走进大众视野。它打破了传统拍摄的局限,为我们开启了「上帝视角」。航拍硬件性能逐渐逼近物理极限,算法优化的难度也日益增大…

Go 语言标准库中time模块详细功能介绍与示例

以下是 Go 语言 time 模块的详细说明及示例,涵盖时间操作、定时器、时区处理等核心功能: 一、时间基础操作 1. 获取时间 // 当前本地时间 now : time.Now() fmt.Println(now) // 2023-08-04 15:30:45.123456 0800 CST// 构造指定时间 t : time.Date(20…

Linux 下安装和使用 Jupyter Notebook

Jupyter Notebook / Lab 是 Python 开发和数据分析中不可或缺的工具。为了避免环境污染,推荐使用虚拟环境方式安装并启动它。本教程将教你如何: 安装 Python、pip、venv使用虚拟环境安装 Jupyter设置登录密码启动并远程访问编写一个一键启动脚本&#x…

浏览器缓存资源 service worker

效果&#xff1a;访问 图片使用浏览器本地缓存 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>通过 Service Worker 拦截和处理网络请求&#xff08;可以实现网络资源的缓存&#xff…

【Leetcode 每日一题】2716. 最小化字符串长度

问题背景 给你一个下标从 0 0 0 开始的字符串 s s s&#xff0c;重复执行下述操作 任意 次&#xff1a; 在字符串中选出一个下标 i i i&#xff0c;并使 c c c 为字符串下标 i i i 处的字符。并在 i i i 左侧&#xff08;如果有&#xff09;和 右侧&#xff08;如果有&…

Yarn下载的一些心得

&#xff08;我在解决终端不能识别yarn作为命令在网上找了好久&#xff0c;写下一点自己的心得&#xff09; 首先使用 npm instal -g yarn 来下载yarn没有错&#xff0c;但是会遇见下面的问题。 1.如果你没有下载npm &#xff0c; 那么下载nodejs来得到npm, 2.如果你使用了命…

ADZS-ICE-2000和AD-ICE2000仿真器在线升级固件

作者的话 近期发现有些兄弟的ICE-2000仿真器链接DSP报错&#xff0c;然后test第四步不通过&#xff0c;我就拿我的仿真器也试了一下&#xff0c;发现ADI悄咪咪的在线升级仿真器固件&#xff0c;有些兄弟不会操作&#xff0c;就会导致仿真器升级失败&#xff0c;连不上目标板&a…

17--华为防火墙智能选路全解:网络世界的智能导航系统

华为防火墙智能选路全解&#xff1a;网络世界的智能导航系统 开篇故事&#xff1a;快递小哥的烦恼与网络世界的相似性 想象你是个快递站站长&#xff0c;每天要处理来自全国各地的包裹。突然某天遇到&#xff1a; &#x1f69a; 双11爆仓&#xff1a;如何把包裹最快送到客户手…