吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1880|回复: 14
收起左侧

[Python 原创] python读取S7-400plc的数据,推送至钉钉群

  [复制链接]
canso123 发表于 2024-3-30 19:38
本帖最后由 苏紫方璇 于 2024-4-1 11:30 编辑

[Python] 纯文本查看 复制代码
import time
import datetime
import snap7
import requests
import json

from snap7 import util

# 初始化变量
value7 = None
start_time = None
end_time = None

while True:
    try:
        time.sleep(10)
        # 创建一个客户端对象
        client = snap7.client.Client()
        #设置链接类型
        client.set_connection_type(1)
        # 连接到PLC
        client.connect('10.112.14.111', 0, 4,102)
        # 读取PLC数据
        # 读DB182.DBD30生产数量
        data = client.read_area(snap7.types.Areas.DB, 182, 0, 34)
        value2 = util.get_dword(data, 30)
        # print(f"当前生产数量为: {value2}")

        # 读DB182.DBW0,模具号
        data = client.read_area(snap7.types.Areas.DB, 182, 0, 2)
        value1 = util.get_word(data, 0)
        # print(f"模具号的值为: {value1}")

        # 读DB201.DBX2.1
        data = client.read_area(snap7.types.Areas.DB,201,2,1)
        new_value7 = util.get_bool(data,0,1)
        print(f"整线运行状态: {new_value7},时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

        # 检查value7从False变为True的情况
        if new_value7 is False and value7 is True:
            start_time = datetime.datetime.now()

        # 检查value7从True变为False的情况
        elif new_value7 is True and value7 is False and start_time is not None:
            end_time = datetime.datetime.now()
            time_difference = end_time - start_time
            total_seconds = time_difference.total_seconds()
            minutes, seconds = divmod(total_seconds, 60)
            hours, minutes = divmod(minutes, 60)
            print(f"时间差为 {hours} 小时 {minutes} 分钟 {str(seconds)[0:4} 秒")
            webhook_url = '自己的钉钉机器人API'
            markdown_text =(
                ### Hello
                f'**当前模具号**:{value1}\n\n'
                f'**生产数量为**:{value2}\n\n'
                f'**当前时间为**:{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}\n\n'
                f'**停台时间**:{hours}小时{minutes}分钟{str(seconds)[0:4}秒')
            # 构建POST数据
            data = {
                "msgtype": "markdown",
                "markdown": {
                    "title": "Hello",  # 可选,消息标题
                    "text": markdown_text,
                },
            }
            response = requests.post(webhook_url, headers={'Content-Type': 'application/json'}, data=json.dumps(data))

        # 更新当前的value7值
        value7 = new_value7
    except Exception as e:
        print(f"发生错误: {e}. 尝试重新开始...")
        continue  # 遇到任何异常时,跳过本次循环,直接进行下一次循环重新开始

    finally:
        # 确保每次循环结束后都尝试断开连接,防止资源泄露
        try:
            client = snap7.client.Client()
            client.disconnect()
            client.destroy()
        except (AttributeError):
            pass

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
科目呵 + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2024-4-1 11:28
可以参照这个帖子粘贴代码
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
 楼主| canso123 发表于 2024-4-12 14:56
hurs 发表于 2024-3-30 21:40
数据是实时推送的吗?

是当那个数据变化时候,采集之间的时间,然后推送钉钉由钉钉机器人推送到钉钉群里面,实时的。好用,自己就是做出来了一直用来监控生产的停台时间
hurs 发表于 2024-3-30 21:40
losingstars 发表于 2024-3-30 21:47
有人试过吗?
markhoo911 发表于 2024-3-31 00:23
我擦,这个可以啊,但是我之前玩的时候好像是西门子S7-200的,但是没研究过结合Python玩。
137897772 发表于 2024-4-1 13:06
有试过的大佬吗
 楼主| canso123 发表于 2024-4-12 14:59

我自己编写出来的,都在运行,肯定好使啊
 楼主| canso123 发表于 2024-4-12 15:00
markhoo911 发表于 2024-3-31 00:23
我擦,这个可以啊,但是我之前玩的时候好像是西门子S7-200的,但是没研究过结合Python玩。

s7-200的不知道,但是这个是S7-400的
 楼主| canso123 发表于 2024-4-12 15:07
苏紫方璇 发表于 2024-4-1 11:28
可以参照这个帖子粘贴代码
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thr ...

好的,第一次发没注意
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表