新闻详情

新闻详情

首页 / 资讯中心 / 详情

python的先进制造技术工业场景模拟第十五篇:使用Networkx绘制CAD/CAM工艺数据流图,节点包含零件模型,工艺方案,刀路,机床程序。

发布时间:2026/9/30 12:37:15来源:尧图网络
python的先进制造技术工业场景模拟第十五篇:使用Networkx绘制CAD/CAM工艺数据流图,节点包含零件模型,工艺方案,刀路,机床程序。
周二上午工艺准备室。这个叶轮的工艺路线又断了CAM 工程师老赵指着电脑屏幕零件模型在 UG 里工艺方案写在本地的 Word 文档里刀路文件在编程员的电脑上机床程序拷在 U 盘里——四个东西散落在四个地方中间靠人肉传。上次换了个新人拿着旧版刀路去上机结果刀具和工艺方案不匹配撞刀了主轴轴承干废一个八千多。我看了眼他桌面上的文件叶轮_v3.prt叶轮_工艺方案_v2.docx叶轮_刀路_A3.nc叶轮_机床程序_v1.nc这些文件之间有没有关联记录我问。没有老赵摇头全靠文件名和人的记忆。系统里不记录这个刀路是用哪个工艺方案生成的、这个机床程序对应哪个版本的零件模型。每次换人接手或者工艺变更就得翻聊天记录找——上次用的是哪个版本 刀路谁编的 程序拷到哪台机床了所以你需要的不是文件管理是关系管理对老赵眼睛一亮我需要知道的是从零件模型到最终机床程序中间经过了哪些节点、每个节点产出了什么、节点之间是怎么连的。比如——零件模型 v3 → 工艺方案 v2 → 刀路 A3 → 机床程序 v1。这条链路要能画出来一眼看清。而且如果中间某个节点变了——比如工艺方案升到 v3——下游哪些东西需要跟着重新生成要能追溯。明白了我打开 VS Code你需要一个程序用节点表示 CAD 模型、工艺方案、刀路文件、机床程序用有向边表示生成关系。零件模型 → 工艺方案基于工艺方案 → 刀路生成刀路 → 机床程序后处理。用 NetworkX 构建这个有向图节点颜色区分类型边标签标注关系输出一张 CAD/CAM 工艺数据流图。我敲了几行代码import networkx as nxG nx.DiGraph()G.add_node(叶轮_v3, typeCAD模型)G.add_node(工艺方案_v2, type工艺方案)G.add_node(刀路_A3, type刀路文件)G.add_node(机床程序_v1, type机床程序)G.add_edge(叶轮_v3, 工艺方案_v2, relation基于)G.add_edge(工艺方案_v2, 刀路_A3, relation生成)G.add_edge(刀路_A3, 机床程序_v1, relation后处理)这只是核心逻辑我说完整版会用 OOP 封装一个类管节点定义CAD/工艺/刀路/程序四种类型一个类管边关系基于/生成/后处理/验证一个类管数据加载从 CSV 或 JSON 读取工艺链路数据一个类管图分析追溯上游/下游、找孤立节点、检测循环依赖一个类管可视化节点按类型着色、边标签标注关系、子图高亮。数据自包含——用 numpy 合成一份含 15 节点的 CAD/CAM 工艺数据流模拟多零件、多版本的复杂链路读者下载就能跑。老赵凑近屏幕所以你这东西就是把工艺准备过程中散落的文件和它们之间的关系画成一张图——哪个模型生成了哪个刀路、哪个程序对应哪个工艺方案一眼就看出来了。换版本的时候顺着边往下游找就知道哪些要重新生成。对。而且还能做影响分析我补充比如用 NetworkX 的 ancestors() 和 descendants() 函数输入一个节点自动找出它的所有上游依赖和下游产物。工艺方案改了descendants 告诉你哪些刀路和程序必须重做。CAD/CAM 的工艺数据管理不是文件名带版本号是用图结构管理数据血缘让每一次变更都可追溯。一、实际应用场景真实痛点场景设定CAD/CAM 工艺准备流程中从零件三维模型到最终机床 G 代码经历多个阶段CAD 建模 → 工艺方案制定 → CAM 刀路编程 → 后处理生成机床程序。每个阶段产出一种数据文件文件之间存在着明确的生成或基于关系。实际车间中这些文件分散存储关系仅靠工程师个人记忆或文件名约定维护。当工艺变更如刀具更换、模型修订时无法快速追溯哪些下游文件需要重新生成导致使用过期文件上机的风险。现场原话叙事化我不是不想管版本老赵说每个文件我都加了版本号——v1、v2、v3。但版本号管的是单个文件管不了文件之间的关系。叶轮_v3.prt 改了我怎么知道哪些刀路是基于旧版模型编的工艺方案从 v1 改到 v3哪些机床程序还是用 v1 方案生成的系统里没有血缘关系图——我只看到一堆带版本号的文件不知道谁依赖谁。核心矛盾分散存储的工艺文件与工程师需要的上下游关系追溯之间的管理断层。需要一个CAD/CAM 工艺数据流图程序用networkx 构建有向图管理节点关系用matplotlib 可视化工艺链路用pandas 管理节点属性表用numpy 计算节点中心性指标输出结构化的数据流图和变更影响报告。二、痛点分析映射到滨州职业学院《先进制造技术》课程模型《先进制造技术》模块 本篇痛点对应数控加工与CAD/CAM技术CAD/CAM 集成与数据流转 工艺数据流建模从三维模型到 G 代码的全链路关系管理。先进制造技术基础先进制造信息流 数据血缘追溯工艺变更时的下游影响分析。智能制造与数字孪生工艺数字孪生 图结构可视化用节点-边模型映射物理工艺准备流程。先进制造新模式协同设计与并行工程 依赖关系管理多角色协作时的数据一致性保障。一句话总结我们需要构建一个CAD/CAM 工艺数据流图程序用networkx 构建有向图管理 CAD 模型→工艺方案→刀路→机床程序的生成关系用matplotlib 绘制可视化数据流用pandas 管理节点属性用numpy 计算节点中心性实现从文件堆到可追溯工艺链路的转化。三、核心逻辑讲解大白话3.1 问题本质把工艺数据想象成家谱树把 CAD/CAM 的工艺文件关系想象成一个大家族的家谱* CAD 模型 老祖宗所有东西都从它派生出来。* 工艺方案 第二代基于 CAD 模型制定告诉后面的人怎么加工这个零件。* 刀路文件 第三代工艺方案说用球头刀走曲面刀路就是具体的走刀路径。* 机床程序 第四代刀路经过后处理变成机床能读的 G 代码。* 有向边 生父子关系CAD 模型 → 工艺方案基于工艺方案 → 刀路生成刀路 → 机床程序后处理。* 变更影响 一人改全家动老祖宗改了模型升版所有后代都可能要跟着改——用 NetworkX 的descendants() 一键查出哪些后代受影响。工业应用* networkx.DiGraphG nx.DiGraph() 创建一个有向图节点是文件边是生成关系。* 节点类型着色node_type 属性决定颜色——CAD 模型蓝色、工艺方案橙色、刀路文件绿色、机床程序红色。* 中心性分析nx.betweenness_centrality() 找出最关键的中间节点——哪个文件被引用最多它就是工艺链路的瓶颈。3.2 业务逻辑 → 代码映射定义 CAD/CAM 工艺数据模型│▼ NodeDefinition (枚举)节点类型CAD_MODEL CAD模型PROCESS_PLAN 工艺方案TOOLPATH 刀路文件MACHINE_PROGRAM 机床程序│▼ EdgeDefinition边关系BASED_ON 基于 # CAD → 工艺GENERATES 生成 # 工艺 → 刀路POST_PROCESSES 后处理 # 刀路 → 程序VERIFIES 验证 # 程序 → 仿真│▼ ProcessDataLoader (pandas)加载节点和边数据nodes.csv: node_id, node_type, name, version, owneredges.csv: source, target, relation│▼ ProcessGraphBuilder (networkx)构建有向图nx.DiGraph()add_node() with attributesadd_edge() with relation label│▼ GraphAnalyzer (networkx numpy)图分析ancestors(node) → 上游追溯descendants(node) → 下游影响betweenness_centrality() → 关键节点is_directed_acyclic() → 检测循环依赖│▼ ProcessVisualizer (matplotlib networkx)可视化1. 工艺数据流有向图节点着色、边标签2. 节点类型饼图3. 关键路径高亮子图4. 变更影响范围图│▼ SyntheticDataGenerator (numpy)合成数据生成模拟 4 种零件 × 多版本的工艺链路3.3 为什么用图结构而不是文件夹* 问题文件夹只能表达谁和谁放在一起不能表达谁依赖谁。* 处理策略有向图天然表达生成关系ancestors() 和descendants() 自动追溯上下游。* 工程合理性复杂零件叶轮、叶片的工艺链路可能有数十个节点、上百条边图结构是唯一能完整表达多对多依赖的方式。3.4 分析前后对比维度 文件夹 文件名版本号 图结构数据流关系表达 无 有向边明确标注变更追溯 翻聊天记录问人descendants() 一键查下游孤立文件检测 不知道nx.isolates() 自动发现循环依赖 不可能发现nx.find_cycle() 自动检测关键瓶颈 凭经验猜 中心性指标量化四、OOP 代码实现4.1 项目结构cam_process_graph/├── cam_process_graph/│ ├── __init__.py│ ├── node_definition.py # 节点类型定义│ ├── edge_definition.py # 边关系定义│ ├── data_loader.py # 数据加载│ ├── graph_builder.py # 图构建│ ├── graph_analyzer.py # 图分析│ ├── visualizer.py # 可视化│ └── synthetic_data.py # 合成数据生成├── tests/│ ├── __init__.py│ └── test_process_graph.py # 单元测试├── results/│ ├── process_dataflow.png # 工艺数据流图│ ├── node_type_pie.png # 节点类型分布│ ├── critical_path.png # 关键路径高亮│ ├── impact_analysis.png # 变更影响范围│ ├── graph_report.txt # 文本分析报告│ └── graph_export.gexf # 图数据导出└── run_process_graph.py # 主程序入口4.2 核心源码detailssummary/summaryCAD/CAM 工艺节点类型定义from enum import Enumfrom typing import Dictclass NodeType(Enum):工艺节点类型CAD_MODEL CAD模型PROCESS_PLAN 工艺方案TOOLPATH 刀路文件MACHINE_PROGRAM 机床程序SIMULATION 仿真验证classmethoddef get_color_map(cls) - Dict[str, str]:节点类型到颜色的映射return {cls.CAD_MODEL.value: #3498DB, # 蓝cls.PROCESS_PLAN.value: #E67E22, # 橙cls.TOOLPATH.value: #2ECC71, # 绿cls.MACHINE_PROGRAM.value: #E74C3C, # 红cls.SIMULATION.value: #9B59B6, # 紫}classmethoddef get_short_label(cls) - Dict[str, str]:短标签return {cls.CAD_MODEL.value: CAD,cls.PROCESS_PLAN.value: CAPP,cls.TOOLPATH.value: CAM,cls.MACHINE_PROGRAM.value: NC,cls.SIMULATION.value: SIM,}/detailsdetailssummary/summaryCAD/CAM 工艺边关系定义from enum import Enumfrom typing import Dictclass EdgeRelation(Enum):边关系类型BASED_ON 基于GENERATES 生成POST_PROCESSES 后处理VERIFIES 验证SUPERSEDES 替代classmethoddef get_valid_edges(cls) - Dict[str, str]:合法的边关系source_type → target_type: relation规则CAD模型 → 工艺方案: 基于工艺方案 → 刀路文件: 生成刀路文件 → 机床程序: 后处理机床程序 → 仿真验证: 验证return {(CAD模型, 工艺方案): cls.BASED_ON.value,(工艺方案, 刀路文件): cls.GENERATES.value,(刀路文件, 机床程序): cls.POST_PROCESSES.value,(机床程序, 仿真验证): cls.VERIFIES.value,}/detailsdetailssummary/summary工艺数据加载器import pandas as pdfrom pathlib import Pathfrom typing import Optional, Tupleclass ProcessDataLoader:CAD/CAM 工艺数据加载器支持 CSV 格式的节点和边数据。def __init__(self, encoding: str utf-8):self.encoding encodingdef load_nodes(self, filepath: str) - pd.DataFrame:加载节点数据CSV 格式node_id, node_type, name, version, ownerpath Path(filepath)if not path.exists():raise FileNotFoundError(f节点文件不存在: {path})df pd.read_csv(path, encodingself.encoding)return dfdef load_edges(self, filepath: str) - pd.DataFrame:加载边数据CSV 格式source, target, relationpath Path(filepath)if not path.exists():raise FileNotFoundError(f边文件不存在: {path})df pd.read_csv(path, encodingself.encoding)return dfdef load_from_dicts(self,nodes: list,edges: list) - Tuple[pd.DataFrame, pd.DataFrame]:从字典列表加载nodes_df pd.DataFrame(nodes)edges_df pd.DataFrame(edges)return nodes_df, edges_df/detailsdetailssummary/summary工艺数据流图构建器import networkx as nximport pandas as pdfrom typing import Dict, List, Optionalfrom cam_process_graph.node_definition import NodeTypefrom cam_process_graph.edge_definition import EdgeRelationclass ProcessGraphBuilder:CAD/CAM 工艺数据流有向图构建器def __init__(self):self.graph nx.DiGraph()def build_from_dataframes(self,nodes_df: pd.DataFrame,edges_df: pd.DataFrame) - nx.DiGraph:从 DataFrame 构建图Parameters----------nodes_df : pd.DataFrame节点数据含 node_id, node_type, name 等列edges_df : pd.DataFrame边数据含 source, target, relation 列Returns-------nx.DiGraphself.graph.clear()# 添加节点for _, row in nodes_df.iterrows():node_attrs row.to_dict()node_id node_attrs.pop(node_id, None)if node_id is not None:self.graph.add_node(node_id, **node_attrs)# 添加边for _, row in edges_df.iterrows():source row.get(source)target row.get(target)relation row.get(relation, )if source and target:self.graph.add_edge(source, target, relationrelation)return self.graphdef add_node(self, node_id: str, **attrs) - None:添加单个节点self.graph.add_node(node_id, **attrs)def add_edge(self, source: str, target: str, relation: str ) - None:添加单条边self.graph.add_edge(source, target, relationrelation)def get_graph(self) - nx.DiGraph:return self.graphdef validate_edges(self) - List[str]:验证边的合法性Returns-------list不合法边的描述列表invalid []valid_edges EdgeRelation.get_valid_edges()for u, v, data in self.graph.edges(dataTrue):u_type self.graph.nodes[u].get(node_type, )v_type self.graph.nodes[v].get(node_type, )relation data.get(relation, )key (u_type, v_type)if key in valid_edges:expected_relation valid_edges[key]if relation ! expected_relation:invalid.append(f{u} → {v}: 关系应为{expected_relation}实际为{relation})else:invalid.append(f{u} → {v}: 类型组合 {u_type} → {v_type} 不在合法边列表中)return invalid/detailsdetailssummary/summary工艺数据流图分析器import networkx as nximport numpy as npfrom typing import Dict, List, Set, Optionalclass GraphAnalyzer:CAD/CAM 工艺数据流图分析器提供追溯、影响分析、关键节点识别等功能。def __init__(self, graph: nx.DiGraph):self.graph graphdef get_upstream(self, node_id: str) - Set[str]:获取所有上游节点祖先if node_id not in self.graph:return set()return nx.ancestors(self.graph, node_id)def get_downstream(self, node_id: str) - Set[str]:获取所有下游节点后代if node_id not in self.graph:return set()return nx.descendants(self.graph, node_id)def get_direct_upstream(self, node_id: str) - List[str]:获取直接上游前驱if node_id not in self.graph:return []return list(self.graph.predecessors(node_id))def get_direct_downstream(self, node_id: str) - List[str]:获取直接下游后继if node_id not in self.graph:return []return list(self.graph.successors(node_id))def find_isolates(self) - List[str]:查找孤立节点return list(nx.isolates(self.graph))def detect_cycles(self) - List:检测循环依赖try:cycles list(nx.find_cycle(self.graph, orientationoriginal))return cyclesexcept nx.NetworkXNoCycle:return []def is_dag(self) - bool:检查是否为有向无环图return nx.is_directed_acyclic_graph(self.graph)def betweenness_centrality(self) - Dict[str, float]:计算介数中心性return nx.betweenness_centrality(self.graph)def degree_centrality(self) - Dict[str, float]:计算度中心性return nx.degree_centrality(self.graph)def get_critical_nodes(self, top_k: int 5) - List[tuple]:获取最关键的前 K 个节点bc self.betweenness_centrality()sorted_nodes sorted(bc.items(), keylambda x: x[1], reverseTrue)return sorted_nodes[:top_k]def impact_analysis(self, changed_node: str) - Dict:变更影响分析Parameters----------changed_node : str发生变更的节点 IDReturns-------dict影响分析结果downstream self.get_downstream(changed_node)direct_downstream self.get_direct_downstream(changed_node)# 按类型统计下游type_counts {}for node in downstream:node_type self.graph.nodes[node].get(node_type, 未知)type_counts[node_type] type_counts.get(node_type, 0) 1return {changed_node: changed_node,total_downstream: len(downstream),direct_downstream: len(direct_downstream),downstream_nodes: list(downstream),direct_downstream_nodes: direct_downstream,type_distribution: type_counts,}def get_paths_between(self, source: str, target: str) - List[List[str]]:获取两个节点之间的所有路径if source not in self.graph or target not in self.graph:return []try:paths list(nx.all_simple_paths(self.graph, source, target))return pathsexcept nx.NetworkXNoPath:return []/detailsdetailssummary/summary工艺数据流可视化import numpy as npimport matplotlib.pyplot as pltimport networkx as nxfrom pathlib import Pathfrom typing import Optional, Listplt.rcParams[font.sans-serif] [SimHei, DejaVu Sans]plt.rcParams[axes.unicode_minus] Falsefrom cam_process_graph.node_definition import NodeTypeclass ProcessVisualizer:CAD/CAM 工艺数据流可视化def __init__(self, results_dir: str results):self.results_dir Path(results_dir)self.results_dir.mkdir(exist_okTrue)self.color_map NodeType.get_color_map()def plot_dataflow(self,graph: nx.DiGraph,title: str CAD/CAM 工艺数据流图,layout: str hierarchical,highlight_nodes: Optional[List[str]] None) - None:绘制工艺数据流有向图Parameters----------graph : nx.DiGraph工艺数据流图title : str标题layout : str布局方式 (hierarchical, spring, circular)highlight_nodes : list, optional需要高亮的节点列表fig, ax plt.subplots(figsize(18, 12))# 布局if layout hierarchical:# 按节点类型分层layers {}for i, ntype in enumerate(NodeType):nodes_of_type [n for n, d in graph.nodes(dataTrue)if d.get(node_type) ntype.value]for j, node in enumerate(nodes_of_type):layers[node] (i, -j)if len(layers) len(graph.nodes):pos nx.spring_layout(graph, k3, iterations50, seed42)else:pos layerselif layout spring:pos nx.spring_layout(graph, k3, iterations50, seed42)else:pos nx.circular_layout(graph)# 节点颜色node_colors []for node in graph.nodes():node_type graph.nodes[node].get(node_type, )color self.color_map.get(node_type, #BDC3C7)if highlight_nodes and node in highlight_nodes:color #F1C40F # 高亮为黄色node_colors.append(color)# 节点大小基于度中心性degrees dict(graph.degree())max_degree max(degrees.values()) if degrees else 1node_sizes [500 1500 * (degrees.get(n, 0) / max_degree)for n in graph.nodes()]# 绘制节点nx.draw_networkx_nodes(graph, pos, axax,node_colornode_colors,node_sizenode_sizes,alpha0.9,edgecolorswhite,linewidths1.5,)# 绘制边nx.draw_networkx_edges(graph, pos, axax,edge_color#7F8C8D,width1.5,arrowsTrue,arrowsize15,arrowstyle-|,connectionstylearc3,rad0.15,)# 边标签edge_labels nx.get_edge_attributes(graph, relation)nx.draw_networkx_edge_labels(graph, pos, axax,edge_labelsedge_labels,font_size8,font_color#2C3E50,)# 节点标签labels {}for node in graph.nodes():name graph.nodes[node].get(name, node)version graph.nodes[node].get(version, )if version:labels[node] f{name}\n(v{version})else:labels[node] namenx.draw_networkx_labels(graph, pos, axax,labelslabels,font_size7,font_weightbold,font_colorwhite,)# 图例from matplotlib.patches import Patchlegend_elements [Patch(facecolorcolor, labelntype)for ntype, color in self.color_map.items()]legend_elements.append(Patch(facecolor#F1C40F, label高亮/选中))ax.legend(handleslegend_elements, locupper left, fontsize9)ax.set_title(title, fontsize16, fontweightbold, pad20)ax.axis(off)plt.tight_layout()plt.savefig(self.results_dir / process_dataflow.png,dpi150, bbox_inchestight)plt.close()def plot_node_type_pie(self, graph: nx.DiGraph) - None:绘制节点类型分布饼图type_counts {}for _, data in graph.nodes(dataTrue):ntype data.get(node_type, 未知)type_counts[ntype] type_counts.get(ntype, 0) 1fig, ax plt.subplots(figsize(8, 8))labels list(type_counts.keys())sizes list(type_counts.values())colors [self.color_map.get(l, #BDC3C7) for l in labels]ax.pie(sizes, labelslabels, colorscolors, autopct%1.1f%%,shadowFalse, startangle90, textprops{fontsize: 10})ax.set_title(节点类型分布, fontsize14, fontweightbold)plt.tight_layout()plt.savefig(self.results_dir / node_type_pie.png,dpi150, bbox_inchestight)plt.close()def plot_impact_analysis(self,graph: nx.DiGraph,impact_result: dict) - None:绘制变更影响范围图changed_node impact_result[changed_node]downstream set(impact_result[downstream_nodes])fig, ax plt.subplots(figsize(18, 12))pos nx.spring_layout(graph, k3, iterations50, seed42)# 节点颜色node_colors []for利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI工程落地全流程:从数据管线到模型部署的完整实践指南 2026/9/30 13:29:40

AI工程落地全流程:从数据管线到模型部署的完整实践指南

从零开始搞AI工程,我踩过的那些坑和总结出的主线 说实话,"AI工程"这四个字现在被用得太滥了。有人拿它指调API,有人拿它说训练大模型,还有人干脆把写两行prompt都叫AI工程。但从零开始真正把AI能力落地成系统、产品、可…

阅读更多 →
Windows操作系统核心机制详解:从内核架构到调度与内存管理 2026/9/30 13:29:40

Windows操作系统核心机制详解:从内核架构到调度与内存管理

说实话,我刚工作那几年,对 Windows 操作系统的理解一直停留在“能用就行”的状态。桌面上跑着各种开发工具,出问题第一反应是搜索引擎,再不行就重启。真正让我重视起操作系统基础知识,是有一次生产环境里的 Windows Se…

阅读更多 →
Dell笔记本Fn键与功能键切换全攻略:BIOS与快捷键设置详解 2026/9/30 13:29:39

Dell笔记本Fn键与功能键切换全攻略:BIOS与快捷键设置详解

先问个问题:你是不是也遇到过这种抓狂的时刻——在Dell笔记本上按F5想刷新网页,结果弹出的却是键盘背光亮度调节?或者在CAD里用F8想锁定正交,结果屏幕暗了一格?这十有八九是Fn键和功能键的默认行为没对齐造成的。Dell这…

阅读更多 →
DeepSeek+即梦搭建AI视频流水线:从脚本到成片的完整实践 2026/9/30 13:29:39

DeepSeek+即梦搭建AI视频流水线:从脚本到成片的完整实践

简介:《DeepSeek即梦:AI视频创作从0到1全突破》是一份面向AI视频创作初学者、有视频制作基础者及希望提升效率的专业人士的全流程指南。文档系统讲解了从前期准备、DeepSeek脚本生成、即梦AI画面生成、静态图转动态视频到后期合成的完整链路,…

阅读更多 →
TuriX Skills技能系统教程:用Markdown手册教会“数字牛马“点星GitHub(附可直接套用的模板) 2026/9/30 13:29:22

TuriX Skills技能系统教程:用Markdown手册教会“数字牛马“点星GitHub(附可直接套用的模板)

TuriX Skills技能系统教程:用Markdown手册教会"数字牛马"点星GitHub(附可直接套用的模板) 【免费下载链接】TuriX-CUA This is the official website for TuriX Computer-use-Agent 项目地址: https://gitcode.com/gh_mirrors/tu…

阅读更多 →
配置VNC sever 6.11.0版本 linux(激活码) 2026/9/30 13:29:13

配置VNC sever 6.11.0版本 linux(激活码)

官网下载vnc senver6.11.0版本后,进入软件 不要选择用户密码名登录。有个licence选择。 输入key 便可激活。 资源如下: VNC server 6.11.0 linux版本 “脱影”现象‌:通常指 VNC 客户端看到的画面停滞、残缺或只有鼠标能动背景不动。这是因…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉