python读取S7-400plc的数据,推送至钉钉群

查看 102|回复 9
作者:canso123   
[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

数据, 模具

hurs   

数据是实时推送的吗?
losingstars   

有人试过吗?
markhoo911   

我擦,这个可以啊,但是我之前玩的时候好像是西门子S7-200的,但是没研究过结合Python玩。
137897772   

可以参照这个帖子粘贴代码
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
canso123
OP
  

有试过的大佬吗
canso123
OP
  


hurs 发表于 2024-3-30 21:40
数据是实时推送的吗?

是当那个数据变化时候,采集之间的时间,然后推送钉钉由钉钉机器人推送到钉钉群里面,实时的。好用,自己就是做出来了一直用来监控生产的停台时间
canso123
OP
  


losingstars 发表于 2024-3-30 21:47
有人试过吗?

我自己编写出来的,都在运行,肯定好使啊
canso123
OP
  


markhoo911 发表于 2024-3-31 00:23
我擦,这个可以啊,但是我之前玩的时候好像是西门子S7-200的,但是没研究过结合Python玩。

s7-200的不知道,但是这个是S7-400的
137897772   


苏紫方璇 发表于 2024-4-1 11:28
可以参照这个帖子粘贴代码
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thr ...

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

返回顶部