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

【R】meme格式绘制logo图

一、目标将meme格式转化成seqlog二、seqlog出图不完整# 1. 创建全新的环境避免任何冲突 conda deactivate conda create -n ggmotif_fresh -c conda-forge r-base4.2.3 # 2. 激活新环境 conda activate ggmotif_fresh R if (!require(BiocManager, quietly TRUE)) install.packages(BiocManager) BiocManager::install(seqLogo) # 加载seqLogo library(seqLogo) # 从MEME格式文件提取PFM并绘图 # 你需要先将MEME格式转换为位置频率矩阵 # 这里是一个简单示例 pfm - matrix(c( 10, 12, 4, 14, 2, 16, 2, 10, 18, 0, 0, 2, 0, 0, 0, 20, 4, 6, 10, 0 ), nrow4, byrowTRUE, dimnameslist(c(A, C, G, T))) # 转换为PWM并绘图 pwm - pfm / colSums(pfm) seqLogo(pwm) # 保存图片 png(motif_logo.png, width1000, height1000) seqLogo(pwm) dev.off()二、ggseqlog1、单个motifR install.packages(ggseqlogo) library(ggseqlogo) library(ggplot2) # 读取MEME文件 # 假设你的MEME文件名为 motifs.meme 或 meme.txt meme_file - /root/test/motifs_results/pwms/xylem_motifs.meme # 替换为你的文件路径 # 函数从MEME文件读取概率矩阵 read_meme_matrix - function(meme_file, motif_num 1) { # 读取文件 lines - readLines(meme_file) # 找到motif开始的标志 motif_start - grep(letter-probability matrix:, lines) if(length(motif_start) motif_num) { stop(paste(文件只有, length(motif_start), 个motif)) } # 定位到指定的motif start_line - motif_start[motif_num] # 获取矩阵维度信息 matrix_info - lines[start_line] # 解析w后面的数字宽度 w - as.numeric(sub(.*w\\s*(\\d).*, \\1, matrix_info)) # 读取矩阵数据 matrix_lines - lines[(start_line 1):(start_line w)] # 解析每一行 matrix_data - do.call(rbind, lapply(matrix_lines, function(line) { as.numeric(strsplit(trimws(line), \\s)[[1]]) })) # 转置为4行A,C,G,Tx w列的矩阵 # 通常MEME格式每行是A,C,G,T的概率 if(ncol(matrix_data) 4) { # 已经是每行一个位置列是碱基 matrix_data - t(matrix_data) } # 设置行名 rownames(matrix_data) - c(A, C, G, T) return(matrix_data) } # 读取第一个motif motif_matrix - read_meme_matrix(meme_file, motif_num 1) # 绘制logo p - ggseqlogo(motif_matrix) theme_classic() labs(title Motif from MEME file, x Position, y Information content (bits)) scale_x_continuous(breaks 1:ncol(motif_matrix)) # 保存 ggsave(meme_motif_logo.png, plot p, width 10, height 4, dpi 300)2、绘制多个motif并排版重新编号输出library(ggseqlogo) library(ggplot2) library(patchwork) # 用于排版 # 定义读取MEME文件的函数方法2的改进版 read_meme_matrix - function(meme_file, motif_num 1) { # 读取文件 lines - readLines(meme_file) # 找到所有motif开始的标志 motif_start - grep(letter-probability matrix:, lines) if(length(motif_start) motif_num) { stop(paste(文件只有, length(motif_start), 个motif)) } # 定位到指定的motif start_line - motif_start[motif_num] # 获取矩阵维度信息 matrix_info - lines[start_line] # 解析w后面的数字宽度 w - as.numeric(sub(.*w\\s*(\\d).*, \\1, matrix_info)) # 读取矩阵数据 matrix_lines - lines[(start_line 1):(start_line w)] # 解析每一行 matrix_data - do.call(rbind, lapply(matrix_lines, function(line) { as.numeric(strsplit(trimws(line), \\s)[[1]]) })) # 转置为4行A,C,G,Tx w列的矩阵 if(ncol(matrix_data) 4) { matrix_data - t(matrix_data) } # 设置行名 rownames(matrix_data) - c(A, C, G, T) return(matrix_data) } # 主程序 meme_file - /root/test/motifs_results/pwms/xylem_motifs.meme # 替换为你的文件路径 # 第一步获取文件中的motif总数 lines - readLines(meme_file) motif_starts - grep(letter-probability matrix:, lines) total_motifs - length(motif_starts) cat(paste(找到, total_motifs, 个motif\n)) # 第二步循环读取所有motif并分别保存 motif_matrices - list() # 存储所有矩阵 for(i in 1:total_motifs) { cat(paste(处理第, i, 个motif...\n)) # 读取矩阵 motif_matrix - read_meme_matrix(meme_file, motif_num i) motif_matrices[[i]] - motif_matrix # 创建单独的logo图 p - ggseqlogo(motif_matrix) theme_classic() labs(title paste(Motif, i), x Position, y Information content (bits)) scale_x_continuous(breaks 1:ncol(motif_matrix)) theme( plot.title element_text(hjust 0.5, size 14, face bold), axis.title element_text(size 10), axis.text element_text(size 9) ) # 保存单个motif图片 ggsave(paste0(motif_, i, _individual.png), plot p, width 8, height 3, dpi 300) cat(paste( 已保存: motif_, i, _individual.png\n, sep)) } # 第三步创建排版图形 ## 方法A使用patchwork包推荐更灵活 if(total_motifs 0) { # 创建所有motif的图形列表 plot_list - list() for(i in 1:total_motifs) { p - ggseqlogo(motif_matrices[[i]]) theme_classic() labs(title paste(Motif, i), x Position, y Bits) scale_x_continuous(breaks 1:ncol(motif_matrices[[i]])) theme( plot.title element_text(hjust 0.5, size 12, face bold), axis.title element_text(size 9), axis.text element_text(size 8), plot.margin margin(5, 5, 5, 5) ) plot_list[[i]] - p } # 决定排版布局 if(total_motifs 3) { # 少数motif用一行显示 combined_plot - wrap_plots(plot_list, ncol total_motifs) plot_annotation( title All Motifs from MEME Analysis, theme theme( plot.title element_text(hjust 0.5, size 16, face bold), plot.margin margin(10, 10, 10, 10) ) ) height - 4 width - 4 * total_motifs } else { # 多个motif用多行显示 ncol - ceiling(sqrt(total_motifs)) nrow - ceiling(total_motifs / ncol) combined_plot - wrap_plots(plot_list, ncol ncol) plot_annotation( title All Motifs from MEME Analysis, theme theme( plot.title element_text(hjust 0.5, size 16, face bold), plot.margin margin(10, 10, 10, 10) ) ) height - 3 * nrow width - 4 * ncol } # 保存排版后的图片 ggsave(all_motifs_patchwork.png, plot combined_plot, width width, height height, dpi 300, limitsize FALSE) # 允许大尺寸 cat(paste(\n已保存排版图片: all_motifs_patchwork.png (, width, x, height, 英寸)\n, sep)) } # 第四步生成汇总报告可选 cat(\n 汇总报告 \n) cat(paste(总motif数:, total_motifs, \n)) for(i in 1:total_motifs) { cat(paste(Motif, i, : 长度 , ncol(motif_matrices[[i]]), bp\n)) } cat(\n) # 第五步如果你想自定义每个motif的颜色 cat(\n是否要自定义颜色输入数字选择方案 (1-4)或直接运行默认方案:\n) cat(1: 经典颜色 (A绿色, C蓝色, G橙色, T红色)\n) cat(2: 紫色系\n) cat(3: 暖色系\n) cat(4: 冷色系\n) # 如果你想要自定义颜色可以运行这部分 customize_colors - function(choice 1) { if(choice 1) { # 经典颜色 col_scheme - list(A green, C blue, G orange, T red) } else if(choice 2) { # 紫色系 col_scheme - list(A #9e9ac8, C #6a51a3, G #cbc9e2, T #3f007d) } else if(choice 3) { # 暖色系 col_scheme - list(A #fd8d3c, C #fc4e2a, G #e31a1c, T #bd0026) } else if(choice 4) { # 冷色系 col_scheme - list(A #74c476, C #31a354, G #006d2c, T #00441b) } # 应用颜色重新绘制 custom_plots - list() for(i in 1:total_motifs) { p - ggseqlogo(motif_matrices[[i]], col_scheme col_scheme) theme_classic() labs(title paste(Motif, i), x Position, y Bits) custom_plots[[i]] - p } # 保存自定义颜色的排版 combined_custom - wrap_plots(custom_plots, ncol ifelse(total_motifs 3, total_motifs, 2)) ggsave(all_motifs_custom_colors.png, combined_custom, width 12, height 4*ceiling(total_motifs/3), dpi 300) cat(已保存自定义颜色版本: all_motifs_custom_colors.png\n) } # 取消下面一行的注释来使用自定义颜色修改数字选择方案 # customize_colors(1)按原名称保存library(ggseqlogo) library(ggplot2) library(patchwork) # 改进的读取函数同时返回矩阵和motif名称 read_meme_matrix_with_name - function(meme_file, motif_num 1) { lines - readLines(meme_file) # 找到所有MOTIF行和矩阵开始的位置 motif_lines - grep(^MOTIF, lines) motif_start - grep(letter-probability matrix:, lines) if(length(motif_start) motif_num) { stop(paste(文件只有, length(motif_start), 个motif)) } # 获取motif名称 motif_name_line - lines[motif_lines[motif_num]] # 提取MOTIF后面的名称通常是第二个字段 motif_name - strsplit(motif_name_line, \\s)[[1]][2] # 定位到矩阵开始 start_line - motif_start[motif_num] # 获取矩阵维度 matrix_info - lines[start_line] w - as.numeric(sub(.*w\\s*(\\d).*, \\1, matrix_info)) # 读取矩阵数据 matrix_lines - lines[(start_line 1):(start_line w)] matrix_data - do.call(rbind, lapply(matrix_lines, function(line) { as.numeric(strsplit(trimws(line), \\s)[[1]]) })) if(ncol(matrix_data) 4) matrix_data - t(matrix_data) rownames(matrix_data) - c(A, C, G, T) # 返回列表包含矩阵和名称 return(list( matrix matrix_data, name motif_name )) } # 主程序 meme_file - 你的MEME文件.meme # 替换为你的文件路径 # 获取基本信息 lines - readLines(meme_file) motif_lines - grep(^MOTIF, lines) total_motifs - length(motif_lines) cat(paste(找到, total_motifs, 个motif\n\n)) # 循环读取所有motif并保存 matrices - list() motif_names - c() for(i in 1:total_motifs) { # 读取矩阵和名称 result - read_meme_matrix_with_name(meme_file, i) matrices[[i]] - result$matrix motif_names - c(motif_names, result$name) cat(paste(处理 Motif, i, :, result$name, \n)) cat(paste( 长度:, ncol(result$matrix), bp\n)) # 创建安全的文件名替换特殊字符 safe_name - gsub([^A-Za-z0-9_-], _, result$name) # 创建单独的logo图 p - ggseqlogo(result$matrix) theme_classic() labs(title result$name, x Position, y Information content (bits)) scale_x_continuous(breaks 1:ncol(result$matrix)) theme( plot.title element_text(hjust 0.5, size 14, face bold), axis.title element_text(size 10), axis.text element_text(size 9) ) # 使用motif名称保存文件 filename - paste0(safe_name, _logo.png) ggsave(filename, plot p, width 8, height 3, dpi 300) cat(paste( 已保存:, filename, \n\n)) } # 创建所有motif的排版图 plot_list - list() for(i in 1:total_motifs) { p - ggseqlogo(matrices[[i]]) theme_classic() labs(title motif_names[i], x Position, y Bits) scale_x_continuous(breaks 1:ncol(matrices[[i]])) theme( plot.title element_text(hjust 0.5, size 10, face bold), axis.title element_text(size 8), axis.text element_text(size 7), plot.margin margin(5, 5, 5, 5) ) plot_list[[i]] - p } # 智能布局排版 if(total_motifs 3) { # 少数motif用一行 combined_plot - wrap_plots(plot_list, ncol total_motifs) plot_annotation( title All Motifs from MEME Analysis, theme theme( plot.title element_text(hjust 0.5, size 16, face bold) ) ) width - 4 * total_motifs height - 4 } else if(total_motifs 6) { # 中等数量用2行 ncol - ceiling(total_motifs / 2) combined_plot - wrap_plots(plot_list, ncol ncol) plot_annotation( title All Motifs from MEME Analysis, theme theme( plot.title element_text(hjust 0.5, size 16, face bold) ) ) width - 4 * ncol height - 8 } else { # 大量motif用网格布局 ncol - ceiling(sqrt(total_motifs)) combined_plot - wrap_plots(plot_list, ncol ncol) plot_annotation( title All Motifs from MEME Analysis, theme theme( plot.title element_text(hjust 0.5, size 16, face bold) ) ) width - 4 * ncol height - 3 * ceiling(total_motifs / ncol) } # 保存排版图 ggsave(all_motifs_combined.png, plot combined_plot, width width, height height, dpi 300, limitsize FALSE) # 生成汇总文件包含motif名称和长度信息 summary_file - motif_summary.txt sink(summary_file) cat(MEME Motif Summary\n) cat(\n\n) cat(paste(总motif数:, total_motifs, \n)) cat(paste(分析时间:, date(), \n\n)) cat(详细信息:\n) cat(---------\n) for(i in 1:total_motifs) { cat(sprintf(%2d. %-20s 长度: %2d bp 文件: %s_logo.png\n, i, motif_names[i], ncol(matrices[[i]]), gsub([^A-Za-z0-9_-], _, motif_names[i]))) } sink() cat(\n 完成 \n) cat(paste(生成了, total_motifs, 个单独的logo图\n)) cat(paste(排版图: all_motifs_combined.png\n)) cat(paste(汇总文件: motif_summary.txt\n)) cat(\n) # 可选显示所有motif名称 cat(\nMotif名称列表:\n) for(i in 1:total_motifs) { cat(sprintf( %2d: %s\n, i, motif_names[i])) }

相关文章:

【R】meme格式绘制logo图

一、目标将meme格式转化成seqlog二、seqlog出图不完整# 1. 创建全新的环境(避免任何冲突) conda deactivate conda create -n ggmotif_fresh -c conda-forge r-base4.2.3# 2. 激活新环境 conda activate ggmotif_freshRif (!require("BiocManager&q…...

半封闭螺杆压缩机的CAD图纸

半封闭螺杆压缩机作为制冷与空调系统的核心动力设备,其CAD图纸是工程设计与制造环节的关键依据。该图纸通过精确的几何建模与尺寸标注,完整呈现了压缩机的结构组成,涵盖螺杆转子、轴承组件、壳体及密封系统等关键部件。螺杆转子的型线设计直接…...

虚假新闻检测数据集中的隐藏偏见

在2021年欧洲计算语言学协会(EACL)会议上,我们的论文《虚假新闻检测数据集中的隐藏偏见》荣获最佳长篇论文提名。该论文研究了研究社区用于开发自动识别虚假新闻模型的数据集,发现这些数据集存在偏见,而这些偏见正是以…...

2026年必看!开源AI编程工具OpenCode全面解析

2026年必看!开源AI编程工具OpenCode全面解析 前言:AI编程工具的范式跃迁 2025年无疑是AI编程的"大航海"之年。从ChatGPT回答编程问题,到GitHub Copilot的代码补全,再到Cursor这样的AI原生IDE,最终演进到了终…...

17:无人机远程执行路径规划:A*算法与GPS精准打击

作者: HOS(安全风信子) 日期: 2026-03-15 主要来源平台: GitHub 摘要: 本文深入探讨了无人机远程执行的路径规划技术,重点分析了A*算法的应用和GPS精准定位的实现。通过详细的技术架构设计和代码实现,展示了…...

OpenClaw 爆火却没空折腾?构建 Skills 释放自己,玩转AI

引言 最近OpenClaw等新一代AI产品工具爆火,眼看着大家都在折腾各种高端的Agent玩法,自己想花时间去深度玩转,但工作又太忙,深陷在“每天帮业务查同一类报错”、“每天帮业务汇总同样的信息”等高频重复动作中,怎么办&a…...

2024 必看!分离焦虑与孩子刚上幼儿园哭闹的关联,至德幼儿园深度剖析

家中有孩子刚上幼儿园的家长们,是不是常常在想:“分离焦虑会导致孩子刚上幼儿园哭闹吗🧐?” 孩子初入幼儿园的哭闹,着实让家长们揪心。选对幼儿园,不仅能解答疑惑,还能提供专业应对方法。接下来…...

自定义UDP协议视频传输环形缓冲区重构(真正的一次分配,循环使用)

问题分析环形缓冲区需要注意的问题:数据复制:每次读写都调用 memcpy 复制数据内存浪费:每个元素独立存储,没有利用连续内存缺乏零拷贝:没有提供直接访问缓冲区的方法效率低下:不适合大量数据的循环使用解决…...

徐子崴罗姣《赴一场前世的约定》再续“歌坛知音”佳话

近日,青年歌唱家、词曲作家、音乐制作人徐子崴和知名民族女高音、“民歌网红”罗姣的全新单曲《赴一场前世的约定》全网上线!2025年,“歌坛知音”徐子崴与罗姣一路高歌。从年初的浪漫之作《终于把你遇见》,到端午时寄托乡愁的《我…...

城市级地下管网与海绵城市物联感知网建设全景指南:打造韧性城市的“数字神经”(WORD)

摘要 随着城市化进程的极速推进,城市地下管网作为维持城市运行的“生命线”,其安全稳定性与防涝能力直接关系到城市的韧性与居民的生命财产安全。面对极端天气频发、管网老化严重以及传统管理模式滞后等多重挑战,构建一套全域覆盖、实时感知、…...

QMetaObject::invokeMethod跨线程调用方法

创建工作类 #include <QObject>class Worker : public QObject {Q_OBJECT public:explicit Worker(QObject *parent nullptr);Q_INVOKABLE bool outputThread(const QString &text){qDebug()<<text << "thread "<<QThread::currentThr…...

串联构型混合动力汽车Simulink仿真模型建模:基于成熟软件架构与功率跟随控制策略的完整正向...

串联构型混合动力汽车Simulink仿真模型建模&#xff0c;正向仿真模型&#xff0c;采用成熟人车路软件架构&#xff0c;基于功率跟随控制策略&#xff0c;包含完整的初始化文件&#xff0c;整车模型&#xff0c;以及说明文档&#xff0c;可进行适当。 也可提供其他变种构型&…...

DynamicLake:为Mac带来灵动岛交互体验,支持应用与通知 | ProductHunt 今日热榜 - 03月16日

今日榜单登顶产品 DynamicLake 以 343 票登顶今日热榜&#xff01;这是一款为Mac移植灵动岛交互体验的工具&#xff0c;整合通知、快捷转换等多种功能&#xff0c;让桌面交互更直观高效。 本期亮点产品介绍 本期Product Hunt热榜AI相关产品占比超一半&#xff0c;围绕OpenCla…...

Thinkphp和Laravel框架微信小程序的健康管理系统医院挂号预约

目录技术选型与架构设计用户端功能实现医生管理后台支付与通知系统性能优化策略安全防护措施项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端框架选择ThinkPHP或Laravel&#…...

AI写论文必备!4款AI论文生成工具,高效解决论文写作难题!

学术论文写作难题与AI工具解决方案 在撰写学术论文时&#xff0c;无论是期刊论文、毕业论文还是职称论文&#xff0c;研究人员往往会遇到许多棘手的问题。面对海量的文献资料&#xff0c;寻找相关的信息如同大海捞针&#xff1b;而复杂的格式要求则常常让人苦不堪言&#xff1…...

开启外部中断的标准步骤

步骤1&#xff1a;初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; // 1. 开启GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 2. 配置GPIO为输入模式&#xff08;通常是浮空输入或上拉输入&#xff09; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_…...

无人机与手机照片POS信息提取工具|支持JPG批量读取与导出

温馨提示&#xff1a;文末有联系方式工具核心功能概述 本工具专为地理信息与航测工作者设计&#xff0c;可高效提取无人机航拍影像及普通智能手机拍摄的JPG照片中嵌入的POS&#xff08;Position and Orientation System&#xff09;元数据&#xff0c;涵盖经度、纬度、海拔、拍…...

7×24小时智能值守的企业微信AI智能客服系统源码

温馨提示&#xff1a;文末有资源获取方式为企业打造全天候、智能化的客户服务体系&#xff0c;基于PHP原创开发&#xff0c;源码获取方式在源码闪购网&#xff0c;深度集成企业微信&#xff0c;提供以下核心功能&#xff1a;全天候智能值守系统724小时自动响应客户咨询&#xf…...

罗克韦尔 1440-SCDB9FXM2通信电缆

1440-SCDB9FXM2 是罗克韦尔自动化旗下 Allen-Bradley 品牌&#xff0c;专为 1440 XM 系列设备状态监测模块设计的原厂专用串行通信电缆&#xff0c;是 XM 系统组态调试、现场运维的核心配件。一、产品特性专属原生适配&#xff1a;专为 XM 全系列设备状态监测模块&#xff08;X…...

AI教材生成工具推荐,低查重率为教材质量保驾护航!

教材格式的复杂性一直困扰着许多编写者。比如说&#xff0c;标题的字体大小应该设定为多少&#xff1f;参考文献是按照GB/T7714标准还是应该遵循某些出版机构的独特规范&#xff1f;习题的排版是选择单栏&#xff0c;还是双栏更合适&#xff1f;这些不同的要求让人眼花缭乱&…...

手把手拆解工业级ISP算法源码

ISP算法源码 资料最齐全&#xff0c;全网最低&#xff0c;包含Cmodel执行文件&#xff0c;可读源代码等等。 也有骗子搞成号称有Cmodel执行文件注意甄别&#xff0c;甚至宝贝描述都是抄我的 也可以在xilinx平台例化图形界面&#xff0c;方便使用 功能涵盖&#xff1a; DPC坏点缺…...

考虑集流体的 Comsol sofc固体氧化物燃料电池仿真(温度场分布,气体分布,极化曲线

考虑集流体的 Comsol sofc固体氧化物燃料电池仿真&#xff08;温度场分布&#xff0c;气体分布&#xff0c;极化曲线&#xff0c;性能曲线&#xff09;凌晨三点盯着屏幕上的温度云图&#xff0c;我手里的冰美式已经见底。集流体的边缘区域突然出现一块诡异的低温区&#xff0c;…...

N 3 串口

一、串口UART&#xff1a;Unervisal Async Recveiver Transimitter&#xff0c;通用异步收发器。&#xff08;全双工&#xff0c;串行&#xff09;RXD&#xff1a;接收信号线TXD&#xff1a;发送信号线CH340&#xff1a;电平转换芯片单工&#xff1a;通信时&#xff0c;数据接收…...

513. 找树左下角的值-day16

本地要找出树的最后一行找到最左边的值。此时大家应该想起用层序遍历是非常简单的了&#xff0c;反而用递归的话会比较难一点。我们依然还是先介绍递归法。咋眼一看&#xff0c;这道题目用递归的话就就一直向左遍历&#xff0c;最后一个就是答案呗&#xff1f;没有这么简单&…...

DO-254通读--11.0 附加考虑

11.0 附加考虑 本节提供了前几节未涵盖的设计保证附加考虑事项的指南。申请人可酌情使用这些附加考虑来满足第2节至第9节的部分目标。任何附加考虑的使用均应征得审定机构的同意。 11.1 使用先前已开发的硬件 本节讨论与使用先前已开发的硬件相关的问题。指南包括对硬件修改…...

AI写教材的秘密武器!实现低查重教材生成的实用工具推荐

撰写教材现状及 AI 工具的作用 撰写教材的进度总是会在“慢节奏”中踩到许多雷区。本来框架和资料都已经齐备&#xff0c;却在内容写作上遭遇瓶颈——一句话反复琢磨半天&#xff0c;依旧觉得表达不够准确&#xff1b;章节之间的衔接&#xff0c;总是绞尽脑汁也找不到合适的语…...

内窥镜加热器如何选择红外LED加热光源

内窥镜加热器在医疗和工业领域中扮演着关键角色&#xff0c;特别是在低温环境下需要确保内窥镜的正常工作。选择合适的红外LED加热光源对于提高内窥镜的性能和可靠性至关重要。本文将从内窥镜加热方式的发展、红外LED光源的选择、内窥镜加热器的应用案例和方案&#xff0c;以及…...

Vivado FPGA输入时钟约束

## 40mhz时钟输入 set_property PACKAGE_PIN F17 [get_ports f_clk40mhz] set_property IOSTANDARD LVCMOS33 [get_ports f_clk40mhz] create_clock -period 25.000 -name f_clk40mhz -waveform {0.000 12.500} [get_ports f_clk40mhz]前两行是引脚约束&#xff0c;后一行是时…...

昆仑通态触摸屏485通讯恒压供水程序(一拖二)

昆仑通态触摸屏485通讯ABB做的恒压供水程序&#xff0c;不需要PLC 恒压供水一拖二程序 1.触摸屏程序MCGpro版本&#xff0c;也有优盘格式文件 2.有ABB变频器一拖二设置参数及接线图纸&#xff0c;(可不用触摸屏) 3.有CAD图纸&#xff0c;二次图&#xff0c;昆仑通态的触摸屏直接…...

高德地图车机版9.1.0.600087美化包

资源编号235_高德地图车机版9.1.0.600087正式版。 更新自定义dex版本至20260311。 全新自定义修改脚本&#xff0c;修复已知bug&#xff0c;增加稳定性。 支持悬浮/原包/共存_鹰眼预警/ai预测/红绿灯播报/变灯提醒/超速提醒/天气播报等 点我下载 ❗关于系统版本&#xff1…...