当前位置: 首页 > news >正文

海康多相机同步取流保存图片

话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。

#"rtsp://admin:123456qq@192.168.10.192/stream1"
# rtsp://admin:Admin123@192.168.100.103:554/Streaming/Channels/101
#rtsp://admin:Admin123@192.168.100.103:554/cam/realmonitor?channel=1&subtype=0import time
import multiprocessing as mp
import cv2
import os"""
Source: Yonv1943 2018-06-17
https://github.com/Yonv1943/Python
https://zhuanlan.zhihu.com/p/38136322
OpenCV official demo
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html
海康、大华IpCamera RTSP地址和格式(原创,旧版)- 2014年08月12日 23:01:18 xiejiashu
rtsp_path_hikvison = "rtsp://%s:%s@%s/h265/ch%s/main/av_stream" % (user, pwd, ip, channel)
rtsp_path_dahua = "rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel)
https://blog.csdn.net/xiejiashu/article/details/38523437
最新(2017)海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明 - 2017年05月13日 10:51:46 xiejiashu
rtsp_path_hikvison = "rtsp://%s:%s@%s//Streaming/Channels/%d" % (user, pwd, ip, channel)
https://blog.csdn.net/xiejiashu/article/details/71786187
"""def image_put(q, user, pwd, ip, channel=1):# cap = cv2.VideoCapture("rtsp://%s:%s@%s/stream1" % (user, pwd, ip))# cap = cv2.VideoCapture("rtsp://%s:%s@%sStreaming/Channels/1701?transportmode=unicast" % (user, pwd, ip))# if cap.isOpened():#     print('HIKVISION')# else:#     cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))#     print('DaHua')cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))if cap.isOpened():print('HIKVISION')else:cap = cv2.VideoCapture("rtsp://admin:123456qq@192.168.100.12/stream1")print('Genius')while True:q.put(cap.read()[1])q.get() if q.qsize() > 1 else time.sleep(0.01)def run_opencv_camera():user, pwd, ip, channel = "admin", "123456qq", "33.90.7.110", 1cap_path = 0  # local camera (e.g. the front camera of laptop)# cap_path = 'video.avi'  # the path of video file# cap_path = "rtsp://%s:%s@%s/h264/ch%s/main/av_stream" % (user, pwd, ip, channel)  # HIKIVISION old version 2015# cap_path = "rtsp://%s:%s@%s//Streaming/Channels/%d" % (user, pwd, ip, channel)  # HIKIVISION new version 2017# cap_path = "rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel)  # dahuacap = cv2.VideoCapture(cap_path)while cap.isOpened():is_opened, frame = cap.read()cv2.imshow('frame', frame)cv2.waitKey(1000)cap.release()def image_get_s(queue_list, ip, img_path):"""show in single opencv-imshow window"""window_name1 = "%s" % ip[0]window_name2 = "%s" % ip[1]window_name3 = "%s" % ip[2]# window_name4 = "%s" % ip[3]idx_img = 0cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name3, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name4, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]img3 = imgs[2]# img4 = imgs[3]img1_tmp = cv2.resize(img1, (int(1920/2 ), int(1080/2 )))img2_tmp = cv2.resize(img2, (int(1920/2 ), int(1080/2 )))img3_tmp = cv2.resize(img3, (int(1920 / 2), int(1080 / 2)))# img4_tmp = cv2.resize(img4, (int(1920 / 2), int(1080 / 2)))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)cv2.imshow(window_name3, img3_tmp)# cv2.imshow(window_name4, img4_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)key = cv2.waitKey(1)if key == ord('s'):img_path0 = os.path.join(img_path[0], str(idx_img) + '.jpg')cv2.imwrite(img_path0, img1)img_path1 = os.path.join(img_path[1], str(idx_img) + '.jpg')cv2.imwrite(img_path1, img2)img_path2 = os.path.join(img_path[2], str(idx_img) + '.jpg')cv2.imwrite(img_path2, img3)# img_path3 = os.path.join(img_path[3], str(idx_img) + '.jpg')# cv2.imwrite(img_path3, img3)# idx_img += 1def image_get_all(queue_list, ip, img_path):"""show in single opencv-imshow window"""window_name1 = "%s" % ip[0]window_name2 = "%s" % ip[1]# window_name3 = "%s" % ip[2]# window_name4 = "%s" % ip[3]idx_img = 0cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name3, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name4, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]# img3 = imgs[2]# img4 = imgs[3]img1_tmp = cv2.resize(img1, (int(1920/2 ), int(1080/2 )))img2_tmp = cv2.resize(img2, (int(1920/2 ), int(1080/2 )))# img3_tmp = cv2.resize(img3, (int(1920/4), int(1080/ 4)))# img4_tmp = cv2.resize(img4, (int(1920 / 4), int(1080 / 4)))# print('11',len(img1_tmp))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)# cv2.imshow(window_name3, img3_tmp)# cv2.imshow(window_name4, img4_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)cv2.waitKey(1)cv2.imwrite(img_path[0]+str(idx_img)+'.jpg', img1)cv2.imwrite(img_path[1]+str(idx_img)+'.jpg', img2)# cv2.imwrite(img_path[2]+str(idx_img)+'.jpg', img3)# cv2.imwrite(img_path[3]+str(idx_img) +'.jpg',img4)idx_img +=1def run_single_camera():# user_name, user_pwd, camera_ip = "admin", "admin123456", "172.20.114.196"# user_name, user_pwd, camera_ip = "admin", "Admin123", "192.168.100.103:554"user_name, user_pwd, camera_ip = "admin", "Admin123", "192.168.100.100:554"mp.set_start_method(method='spawn')  # initqueue = mp.Queue(maxsize=2)processes = [mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)),mp.Process(target=image_get_s, args=(queue, camera_ip))][process.start() for process in processes][process.join() for process in processes]def run_multi_camera():user_name, user_pwd = "admin", "Admin123"camera_ip_l = [# "172.20.114.196",  # ipv4# "[fe80::3aaf:29ff:fed3:d260]",  # ipv6# "192.168.100.180:554",# "192.168.100.182:554","192.168.100.181:554","192.168.100.184:554",]mp.set_start_method(method='spawn')  # initqueues = [mp.Queue(maxsize=len(camera_ip_l)) for _ in camera_ip_l]imgs_path = []for i in range(len(camera_ip_l)):imgs_path.append("E:/dataset_0902/images/{}/".format(camera_ip_l[i].split('.')[-1].split(':')[0]))if not os.path.exists(imgs_path[-1]):os.makedirs(imgs_path[-1])processes = [mp.Process(target=image_get_all, args=(queues, camera_ip_l, imgs_path))]for queue, camera_ip, img_path in zip(queues, camera_ip_l, imgs_path):processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))for process in processes:process.daemon = Trueprocess.start()for process in processes:process.join()# p.join()def image_collect(queue_list, camera_ip_l):import numpy as np"""show in single opencv-imshow window"""window_name1 = "%s_and_so_no" % camera_ip_l[0]window_name2 = "%s_and_so_no" % camera_ip_l[1]cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]# cv2.imshow(window_name1, img1)# cv2.imshow(window_name2, img2)img1_tmp = cv2.resize(img1, (int(1920 / 2), int(1080 / 2)))img2_tmp = cv2.resize(img2, (int(1920 / 2), int(1080 / 2)))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)cv2.waitKey(1)# if key == ord('s'):#     img_path = os.path.join(img_folder, str(idx_img) + '.jpg')#     cv2.imwrite(img_path, img)#     idx_img += 1# """show in multiple opencv-imshow windows"""# [cv2.namedWindow(window_name, flags=cv2.WINDOW_FREERATIO)#  for window_name in camera_ip_l]# while True:#     for window_name, q in zip(camera_ip_l, queue_list):#         cv2.imshow(window_name, q.get())#         cv2.waitKey(1)def run_multi_camera_in_a_window():user_name, user_pwd = "admin", "Admin123"camera_ip_l = [# "172.20.114.196",  # ipv4# "[fe80::3aaf:29ff:fed3:d260]",  # ipv6"192.168.100.182:554","192.168.100.183:554"]mp.set_start_method(method='spawn')  # initqueues = [mp.Queue(maxsize=2) for _ in camera_ip_l]processes = [mp.Process(target=image_collect, args=(queues, camera_ip_l))]for queue, camera_ip in zip(queues, camera_ip_l):processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))for process in processes:process.daemon = True  # setattr(process, 'deamon', True)process.start()for process in processes:process.join()def get_biaoding():user, pwd, ip, channel = "admin", "Admin123", "192.168.100.182:554", 1cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))if cap.isOpened():print('HIKVISION')idx_img = 20img_folder = "D:/20210226/camera{}".format(ip.split('.')[-1].split(':')[0])if not os.path.exists(img_folder):os.makedirs(img_folder)while True:img = cap.read()[1]img_tmp = cv2.resize(img, (1920 // 2, 1080 // 2))cv2.imshow('image', img_tmp)key = cv2.waitKey(1)if key == ord('s'):img_path = os.path.join(img_folder, str(idx_img) + '.jpg')cv2.imwrite(img_path, img)idx_img += 1def get_img():cap1 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.181:554/", 1))# cap2 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.182:554/", 1))# cap3 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.183:554/", 1))# cap4 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.184:554/", 1))img_save1 = "E:/dataset_0902/calibrate_intri/181"# img_save1 = "D:/20210308/camera/181"# img_save2 = "D:/20210225/camera/182"# img_save3 = "D:/20210225/camera/183"# img_save4 = "D:/20210225/camera/184"if not os.path.exists(img_save1):os.makedirs(img_save1)# if not os.path.exists(img_save2):#     os.makedirs(img_save2)# if not os.path.exists(img_save3):#     os.makedirs(img_save3)# if not os.path.exists(img_save4):#     os.makedirs(img_save4)if cap1.isOpened():print('HIKVISION')idx_img = 0while True:time1 = cap1.get(cv2.CAP_PROP_POS_MSEC)print(time1)img1 = cap1.read()[1]if (img1 is None):print("ok")continuecv2.imwrite(img_save1 + '/' + str(idx_img) + '.jpg', img1)idx_img = idx_img + 1# key = cv2.waitKey(1)# if key == ord('s'):#     cv2.imwrite()#     cv2.imwrite(iimg_save1 + '/' + str(idx_img) + '.jpg', img1mg_save2 + '/' + str(idx_img) + '.jpg', img2)#     cv2.imwrite(img_save3 + '/' + str(idx_img) + '.jpg', img3)#     cv2.imwrite(img_save4 + '/' + str(idx_img) + '.jpg', img4)#     idx_img += 1img1 = cv2.resize(img1, (int(1920 / 4), int(1080 / 4)))cv2.imshow('1', img1)cv2.waitKey(1)if __name__ == '__main__':# get_biaoding()# get_img()run_multi_camera()

相关文章:

海康多相机同步取流保存图片

话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。 #"rtsp://admin:123456qq192.168.10.192/stream1" # rtsp://admin:Admin123192.168.100.103:554/Streaming/Channels/101 #rtsp://admin:Admin123192.168.100.103:554/cam/realmonitor?ch…...

win10 + vs2017 + cmake3.17编译OSG-3.4.1

参考教程:https://blog.csdn.net/bailang_zhizun/article/details/120992244 1. 下载与解压 2. 修改configure 1)Ungrouped Entries -- 》ACTUAL_3RDPARTY_DIR: 设置为: D:/Depend_3rd_party/OSG341/3rdParty 2) Ungrouped E…...

Excel VBA开发基本语句说明

前言 VBA(Visual Basic for Applications)是一种用于编写宏的编程语言,它广泛应用于Microsoft Office套件中的各种应用程序,如Excel、Word、Access和PowerPoint等。在这些应用程序中,VBA可用于自动化任务、定制功能、…...

应用在智能空调中的数字温度传感芯片

智能空调是具有自动调节功能的空调。智能空调系统能根据外界气候条件,按照预先设定的指标对温度、湿度、空气清洁度传感器所传来的信号进行分析、判断、及时自动打开制冷、加热、去湿及空气净化等功能的空调。适合放在卧室,客厅等地方。 在中央控制系统…...

Qt界面美化之Qt Style Sheets

Qt style sheet 简称QSS style sheet可以在代码中单独对某个控件使用,例如: labelLEDLIN new QLabel("",this); labelLEDLIN->setFixedSize(36,36); labelLEDLIN->setStyleSheet("background-color:red;border-radius:18px;colo…...

prometheus监控告警部署(k8s内部)

一、部署prometheus 先来说明一下需要用到的组件,需要使用pv、pvc存放prometheus的数据,使用pvc存放数据即使pod挂了删除重建也不会丢失数据,使用configmap挂载prometheus的配置文件和告警规则文件,使用service开放对外访问prometheus服务的端…...

数字孪生特高压电网三维可视化平台实现能源智能管理

电力是现代社会不可或缺的基础能源,而有效管理电力资源对于实现可持续发展至关重要。近年来,随着物联网、大数据、人工智能等技术的快速发展,电网领域的数字化转型已经成为一种趋势。而其中关键的一环便是电网三维数字孪生技术,它…...

12.JavaScript(WebAPI) - JS api文献精解

文章目录 1.WebAPI 背景知识1.1什么是 WebAPI1.2什么是 API1.3API 参考文档 2.DOM 基本概念2.1什么是 DOM2.2DOM 树 3.获取元素3.1querySelector3.2querySelectorAll 4.事件初识4.1基本概念4.2事件三要素4.3简单示例 5.操作元素5.1获取/修改元素内容5.1.1innerText5.1.2innerHT…...

亚马逊云科技:让生成式AI真正走向普惠

伴随着ChatGPT的横空出世,生成式AI(Artificial Intelligence Generated Content,也称AIGC)大潮也以锐不可当之势席卷全球。从各行各业的商业领袖,到千千万万的程序员和开发者,都在思考如何借助生成式AI技术…...

Java web(四):JSP

文章目录 一、JSP1.1 概述1.2 JSP入门1.3 JSP脚本1.4 缺点 二、EI表达式三、JSTL3.1 标签3.2 JSTL使用3.3 代码演示 四、MVC模式和三层架构五、项目实战【完成增删改查】 一、JSP 1.1 概述 JSP(全称:Java Server Pages):Java 服…...

HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进

前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…...

电子产品上架Temu平台需要做什么认证?UL测试报告

2022年8月17日报道,TEMU正在筹备跨境电商平台。9月1日,TEMU跨境电商平台正式在海外上线,首站将面向北美市场,该平台命名为TEMU,App Store应用详情页显示意为“Team Up,Price Down”,即买得人越多…...

热点报告 | 健身人群抵抗入冬肥,Dirtyfit引领23秋冬潮流?

您是否曾有以下困惑?打开小红书首页推荐,似乎已经被算法教育成了成熟的信息茧房,想要找到下一个热点,又忧虑一叶以障目;看着搜索框热词,又担心无法掌握热词背后的话题命脉,难以在浮光掠影中寻找…...

C++变参模板的使用

C17 1. 使用编译器if常量表达式 template<typename T, typename U, typename... Ts> void syszuxPrint(T arg1, Ts... arg_left) {std::cout << arg1 << ", ";if constexpr (sizeof...(arg_left) > 0){syszuxPrint(arg_left...);} } 但是这…...

【二、http】go的http基本请求设置(设置查询参数、定制请求头)get和post类似

一、设置url后边的参数&#xff0c;&#xff08;get和post请求为例子&#xff09; func requstByParamsGet(){requst, err : http.NewRequest(http.MethodGet, "http://httpbin.org/get", nil)if err ! nil {fmt.Println("ss")}params : make(url.Values)p…...

[学习笔记]python绘制图中图(绘制站点分布图)

背景 在绘制站点分布图时&#xff0c;有时需要采用图中图的方式&#xff0c;以便于在一张图中尽可能多的表达信息。此处记录一下利用python matplotlib绘制图中图的脚本&#xff0c;方便然后查询。 包含数据 该绘图脚本中包含以下数据&#xff1a; CMONOC站点分布&#xff…...

回归预测 | Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测

Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测 目录 Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机的多变量回归…...

React 学习笔记

React React.js是一个开源的JavaScript库&#xff0c;由Facebook于2013年开发&#xff0c;用于构建用户界面或UI组件。它主要用于构建单页应用程序或SPA&#xff0c;并且可以在Web和移动应用程序中使用。React.js使用虚拟DOM来提高性能&#xff0c;并使用组件化的方式来实现代…...

单链表的查找(按值查找、按位查找)(数据结构与算法)

什么是单链表&#xff1f; 单链表是一种常见的链式数据结构&#xff0c;用于存储和操作数据元素的集合。它由一系列的节点组成&#xff0c;每个节点包含两个部分&#xff1a;数据域和指针域。 单链表的每个节点包含了存储数据的数据域&#xff0c;以及指向下一个节点的指针域。…...

Qt 6.6 发布

@TOC 前言 Qt 6.6 发布于2023年10月10日 https://www.qt.io/blog/qt-6.6-releasedQt 6.6 系列源码下载 https://download.qt.io/official_releases/qt/6.6/Qt 在线安装器下载 https://download.qt.io/official_releases/online_installers/国内镜像下载 在线安装器(维护工具)…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...