简介这份文档面向使用 WonderWare Intouch 2014 R2 搭建 SCADA 人机界面的工程人员与自动化学习者围绕 Intouch 与 SQL Server 2012 的数据存取及 Excel 报表制作梳理从数据库配置到报表呈现的完整实现思路。包内仅含 1 个 doc 文件约 2.48MB以图文步骤形式组织适合按章节查阅和现场对照。已有 533 人学习下载具备一定的参考与复用价值。内容涉及 SQL Server 身份验证与登录名设置、数据库及表单新建、Intouch 标记名字典和绑定列表配置以及 SQLConnect、SQLInsert、SQLDisconnect 等脚本的编写后半部分还讲到 Excel 报表模板、控制面板与参数日报页面、VBA 引用设置并说明数据库 mdf/ldf 文件的恢复操作便于读者理解实时监控数据写入数据库并生成报表的流程。1. 从夜班一张空白报表说起Intouch 2014 R2 写进 SQL Server 2012 的那条链路夜班交接班长点开 Excel 那份“参数日报”日期选昨天刷新表格一片空白电话直接打到值班室问是不是报表程序坏了。远程连上去看Excel 本身没毛病SQL Server 2012 里的表也有数据但最后一条记录停在三天前。再往下翻Intouch 2014 R2 侧那个连接号还是个负数——数据库连接从那次工控机重启之后就没成功过只是没人发现。在 Intouch 2014 R2 这类 HMI 平台做 SQL Server 2012 落库、再用 Excel 出报表绝大多数故障不是出在脚本写得多复杂而是出在连接串、绑定列表、时间条件这些看着最不起眼的地方。这套组合的价值也很直接现场实时数据进库、历史可查、班报日报用 Excel 出不额外上报表组件。适合做 SCADA 组态、要把数据落进关系库、又得给生产端交付报表的开发者。2. 工程结构与运行环境Intouch 工程、SQL 库、Excel 模板三者的角色划分先把这套系统的“骨架”摆清楚后面看脚本才不容易迷路。整套东西其实是三段式Intouch 负责采集和触发SQL Server 负责存Excel 负责读和呈现。三段之间只有两个契约——一个是绑定列表到表列的字段契约一个是连接串到库权限的账号契约。这两处只要有一处对不上表现出来都是“报表没数据”但根因完全不在同一层。我一般接手这类现场第一件事不是看脚本而是把这三段的边界画出来哪台机器跑 Intouch哪台机器跑库Excel 模板放在谁的电脑上、由谁打开。因为这三者可能分布在不同的机器上网络、账号、防火墙、区域设置全都不一样任何一个不一致都能让链路断掉。2.1 三个组件的分工与数据流向按最小可跑通的配置一台操作站运行 Intouch 2014 R2 的 IDE 和运行时同时承担采集和写库一台数据库服务器跑 SQL Server 2012报表端可以是任意一台装了 Excel 的办公机或者工程师站通过局域网连库读数据。数据流向是单向的Intouch 标记名 → 绑定列表 → SQLInsert → 数据库表 → Excel 查询 → 单元格。反方向没有回写这一点很重要意味着报表端可以给一个只读账号不需要写权限权限收敛之后现场安全性会好很多。工程目录上Intouch 这一侧的核心资产就三块标记名字典定义所有变量、绑定列表定义变量到表列的映射、应用程序脚本与条件脚本定义连接、插入、断开的时机。Excel 那一侧的核心资产是模板文件本身里面包含三个工作表页和一份 VBA 工程。数据库那一侧是库文件、表结构和账号。常见做法是把这些资产分开管理Intouch 工程目录定期整体备份数据库的 .mdf / .ldf 单独放在固定盘符的数据目录下Excel 模板放在共享盘的模板目录里每次发布新版本用版本号后缀区分不要覆盖原文件。2.2 数据库侧的准备身份验证模式、登录名与库表建立第一步是让库“能连”。进 SQL Server Management Studio在实例上右键属性左侧选“安全性”右侧服务器身份验证选“SQL Server 和 Windows 身份验证模式”。这一步改完必须重启数据库服务才生效很多人改完就直接去连发现还是连不上白折腾半小时。接着建登录名。在“安全性 → 登录名”上右键新建给一个专用账号比如scada_w给 Intouch 写库用scada_r给 Excel 读库用。不要图省事直接用sa一是权限过大二是密码一旦变更所有连接串全要改三是审计上说不清楚。给scada_w只授db_datawriter给scada_r只授db_datareader这是最小权限的底线。库和表建好之后表结构要和绑定列表严格对齐-- 报表主表一行对应一个采样时刻的一批工艺参数 CREATE TABLE dbo.TDays ( RecID INT IDENTITY(1,1) PRIMARY KEY, -- 自增主键避免重复行无主键 RecTime DATETIME NOT NULL, -- 采样时刻由 Intouch 侧写入 NodeName NVARCHAR(32) NOT NULL, -- 采集站计算机名多站共库时用于区分 P01 FLOAT NULL, -- 1# 泵出口压力 T01 FLOAT NULL, -- 1# 罐温度 F01 FLOAT NULL, -- 主流量 BatchNo NVARCHAR(16) NULL -- 班次号报表按班次分组用 ); -- 报表几乎全是按时间范围查这个索引不建数据量一上来查询会明显变慢 CREATE INDEX IX_TDays_RecTime ON dbo.TDays(RecTime);RecID用自增主键是为了让每一行可唯一定位后面 Excel 端要按行号回查或者做增量拉取时有用。RecTime建索引是因为所有报表查询都带时间范围条件几千行看不出差别几十万行的时候差别就是几秒和几十秒。字段类型上Intouch 的实型对应FLOAT内存消息字符串对应NVARCHAR时间建议直接用DATETIME而不是字符串否则后面 Excel 里做时间聚合会很别扭。提示建表时把列名和顺序记下来绑定列表里的变量顺序要和这里完全一致不是“差不多”就行。2.3 标记名字典规划Connid1、WSQLS、NodeName 各管什么标记名字典是整个 Intouch 工程的变量总账。这套落库逻辑最少需要四个辅助标记都是内存型不占 I/O 点标记名类型作用初值Connid1内存整型保存 SQLConnect 返回的连接号负值代表连接失败0WSQLS内存离散写入完成标志防止同一周期重复写库0NodeName内存消息存放本机计算机名多站共库时用来区分数据来源空GetDateTimeS内存消息存放本次落库的时间戳字符串便于调试对账空Connid1是关键它不是一个“配置项”而是一个运行时状态量。脚本里所有 SQLInsert、SQLDisconnect 的第一个参数都是它一旦它是负值后面所有操作都不会生效而且 Intouch 不会主动报错弹窗数据就是静默地不写。所以常见做法是在画面上做一个小的连接状态指示灯颜色绑到Connid1 0让操作员一眼能看出来。WSQLS是防重复写的闸门。它的语义是“本周期已经写过了”写之前判断为 0写完立刻置 1进入下一个周期或者离开写入窗口时复位。这个标记如果不建条件脚本每个触发周期都会插一行一天下来表里能多出几万条重复记录报表里全是脏数据。NodeName在单站项目里看起来多余但只要现场有两台以上的操作站写同一个库它就是唯一的区分手段。GetNodeName(NodeName, 131)里的 131 是取计算机名的功能码这个参数不要随手改。3. Intouch 侧数据落库链路从绑定列表到 SQLInsert 的脚本拆解这一段是整个项目的核心。Intouch 侧要做的事就四件连上库、把变量绑到表列、在正确的时机插一行、退出时断开。四件事分别对应四个地方应用程序脚本、SQL 访问管理器的绑定列表、条件脚本、应用程序的“关闭时”脚本。搞混了执行顺序就会出现“连上了但没数据”或者“数据重复写入”这类玄学问题。3.1 绑定列表与数据库表列的对应关系绑定列表在左侧工具视图的 SQL 访问管理器里选“绑定列表”。它的作用是告诉 Intouch这一组变量对应数据库里的哪张表、哪些列。规则很死板——变量名要和列名一一对应变量数据类型要和列的数据类型一一对应顺序也要对得上。比如前面建的TDays表绑定列表里就按RecTime、NodeName、P01、T01、F01、BatchNo的顺序放六个标记名。少放一个SQLInsert 会报错多放一个同样报错顺序错了但类型巧合能对上数据就会错位写进别的列这种最恶心因为表面上一切正常等发现的时候历史数据已经污染了。绑定列表本身不产生任何动作它只是一个映射声明。真正触发写入的是SQLInsert(Connid1, TDays, TDays)第一个字符串是数据库里的表名第二个字符串是绑定列表的名字。这两个名字我一般刻意设成一样减少现场维护时的心智负担但要知道它们在概念上是两回事——一个是库里的物理表一个是 Intouch 工程里的逻辑组。注意改了表结构加列、改类型、调顺序之后绑定列表必须同步改而且改完要重新编译工程、重启运行时只保存不生效。3.2 应用程序脚本SQLConnect 连接串参数逐个拆连接放在应用程序脚本的“启动时”里。我习惯先断一次再连防止上一次异常退出比如直接断电留下悬挂的会话句柄{ 应用程序脚本 - 启动时 } SQLDisconnect(Connid1); { 先断一次清掉可能残留的连接 } Connid1 SQLConnect(providersqloledb;Data SourceOP01;Initial CatalogPlantDB;UserIDscada_w;PasswordYourPass;); IF Connid1 0 THEN LogMessage(SQL Connect Failed, Code Text(Connid1, #)); ENDIF;SQLConnect的返回值就是连接号成功是大于等于 0 的整数失败是负值。很多人写脚本不接收返回值直接用常量当连接号结果库一改密码就全军覆没还查不出原因。接收返回值并且判断是这个脚本里唯一不能省的两行。连接串是分号分隔的键值对五个片段各有各的坑片段含义现场怎么填provider数据访问提供程序SQL Server 用sqloledb不要写成sqloledb.1之外的变体Data Source数据库所在计算机名或实例名有命名实例要写主机名\实例名只写主机名连不上Initial Catalog默认连接的库名写库名不要写 .mdf 文件路径User ID登录名用专用写账号不要用 saPassword密码明文写在这里所以工程目录权限必须收紧Data Source是最容易翻车的一项。现场改了计算机名、或者换了网段、或者用了 SQL Server 的命名实例这里不跟着改连接号就一直是负的。脚本里那个LogMessage是给后人留的黑匣子出问题时去 Intouch 的日志查看器里翻这条记录比猜快得多。退出时的断开放在应用程序脚本的“关闭时”里{ 应用程序脚本 - 关闭时 } SQLDisconnect(Connid1); Connid1 -1; { 置为无效值下次启动时状态明确 }不写SQLDisconnect的后果不是立刻可见的而是数据库那边会话数慢慢堆积几天后连接数打满所有新连接全部失败。这种问题排查起来特别费劲因为症状是“突然就连不上了”而根因在几天前。3.3 条件脚本与 WSQLS 标志位一次写入为什么只写一次写入动作放在条件脚本里。Intouch 的条件脚本由“条件表达式 条件类型”驱动条件类型选“为真时”意思是表达式从假变真的那一瞬间执行一次脚本体。{ 条件脚本$Second 3条件类型为真时 } GetNodeName(NodeName, 131); { 取本机计算机名用于多站区分 } IF NodeName OP01 THEN { 只有指定的采集站才写库避免多站重复写 } IF ($Minute 58) AND (WSQLS 0) THEN GetDateTimeS Text($Date, yyyy-MM-dd) Text($Time, HH:mm:ss); SQLInsert(Connid1, TDays, TDays); { 按绑定列表整组写入一行 } WSQLS 1; { 置位本小时已写过 } ENDIF; IF $Minute 58 THEN WSQLS 0; { 离开写入窗口后复位为下一个小时做准备 } ENDIF; ENDIF;这段逻辑的核心是把“触发时机”和“写入窗口”拆成两层。$Second 3只负责让脚本每分钟被唤醒一次真正决定写不写的是$Minute 58这个窗口条件。也就是说脚本每分钟都在跑但只有整点前那两分钟、且本小时还没写过的时候才真正插一行。WSQLS的复位位置是这段脚本里最见功力的地方。如果复位写在SQLInsert后面紧跟着那同一分钟内只要触发两次就会插两行写在$Minute 58的分支里则是等整点过了、进入下一个小时的普通时段才复位逻辑上“一小时一行”就被严格保证了。我在现场见过因为复位位置写错一张日报表里同一个小数出现七八行的案例查了两天才定位到这两行代码。GetNodeName放在最外层每周期执行是为了防止有人中途改了计算机名而脚本还拿着旧值。这个调用开销很小没必要省。SQLInsert的参数前面已经说过这里再强调一次执行前提调用它之前必须已经用SQLConnect拿到有效连接号并存进Connid1否则函数直接返回失败而且失败是静默的。所以工程上线前我一般会手动在画面里点一次“测试写入”按钮看表里有没有新行这是最笨也最有效的验证。4. Excel 报表端模板页设计、VBA 引用与 ADO 取数Excel 这一侧很多人以为就是“连上库、拉个透视表”实际做下来会发现坑一点不比 Intouch 少。核心原因是 Excel 是给办公场景设计的它的日期格式、宏安全策略、ADO 版本都和工控现场的习惯对不上。4.1 三个页面的职责划分控制面板、参数日报、数据区模板我一般拆成三个工作表页职责严格分开页面职责谁用控制面板选起止日期、选班次、点“生成报表”、显示查询状态操作员/班长参数日报最终呈现的报表页固定表头、固定打印区域打印/归档数据区承接查询结果隐藏或半隐藏供报表页引用不直接使用“控制面板”上只放最少的输入控件两个日期选择器、一个班次下拉、一个按钮、一个状态标签。状态标签用来显示“查询中 / 共 N 行 / 连接失败”这是给现场人员的唯一反馈没有它按钮点下去没反应就会被当成程序坏了。“数据区”单独一页的意义在于解耦。查询结果先落到数据区报表页用公式引用数据区这样即使查询结果行数变化报表页的格式、打印区域、汇总公式都不用动。把查询结果直接写到报表页行数一变格式全乱这是血泪经验。4.2 VBA 工程引用与 ADO 连接模板建好之后在“参数日报”页签上右键 →“查看代码”进入 VBA 编辑器。第一步不是写代码是勾引用工具 → 引用至少勾上Microsoft ActiveX Data Objects 2.8 Library或者更高版本、Microsoft Excel 16.0 Object Library、Microsoft Office 16.0 Object Library。少勾 ADO 那一项代码写到CreateObject(ADODB.Connection)那行就会报“要求对象”新手很容易在这里卡半天。连接封装成一个函数方便所有查询复用Option Explicit Private Function OpenConn() As Object Dim conn As Object Set conn CreateObject(ADODB.Connection) 用只读账号连库与 Intouch 侧写账号分开 conn.ConnectionString ProviderSQLOLEDB;Data SourceOP01;Initial CatalogPlantDB; _ User IDscada_r;PasswordYourPass; conn.CommandTimeout 30 数据量大时给足超时默认 30 秒有时不够 conn.Open Set OpenConn conn End FunctionCommandTimeout这一行是我加上去的。数据量上万行之后默认超时会让查询中断报一个很模糊的“一般性网络错误”实际只是超时。设成 30 秒之后这类假故障基本消失。报表端用只读账号不只是权限规范还有个实际好处万一 VBA 里写错了 SQL 语句也不会误伤生产数据。4.3 按时间段查询与刷新SQL 拼接与日期格式查询逻辑写在按钮的点击事件里核心是把两个日期拼成 WHERE 条件Public Sub QueryDaily(ByVal dStart As Date, ByVal dEnd As Date) Dim conn As Object, rs As Object, sql As String Dim r As Long, c As Long Set conn OpenConn() 日期统一用 ISO 格式拼避免区域设置把 2024/1/5 解析成 5 月 1 日 sql SELECT RecTime, NodeName, P01, T01, F01, BatchNo FROM dbo.TDays _ WHERE RecTime Format(dStart, yyyy-mm-dd hh:nn:ss) _ AND RecTime Format(dEnd, yyyy-mm-dd hh:nn:ss) _ ORDER BY RecTime Set rs conn.Execute(sql) 结果落到数据区从第 2 行开始写第 1 行留表头 ThisWorkbook.Worksheets(数据区).Cells.ClearContents For c 0 To rs.Fields.Count - 1 ThisWorkbook.Worksheets(数据区).Cells(1, c 1).Value rs.Fields(c).Name Next c r 2 Do While Not rs.EOF For c 0 To rs.Fields.Count - 1 ThisWorkbook.Worksheets(数据区).Cells(r, c 1).Value rs.Fields(c).Value Next c r r 1 rs.MoveNext Loop rs.Close: Set rs Nothing conn.Close: Set conn Nothing ThisWorkbook.Worksheets(控制面板).Range(B2).Value 共 (r - 2) 行 End Sub这里有两个非直觉点。一是Format的分钟占位符是nn不是mmmm在 VBA 里是月份写成hh:mm:ss会把分钟挤成月份拼出来的时间是错的查询结果自然不对。二是时间范围用和而不是BETWEEN因为BETWEEN是闭区间结束时间那一秒的数据会被重复计入下一天边界日的数据对不上账。写完数据区之后报表页用引用公式比如INDEX/MATCH或者直接引用区域来拼报表这部分用 Excel 自身的函数能力就够了不需要再写 VBA。查询和呈现分开改报表格式的时候不用碰代码这是我最满意的一处设计。5. 避坑与排查这套落库链路最常翻车的 5 个点现场跑过的项目里真正因为“脚本写不出来”失败的极少绝大多数问题集中在下面这几处。每一条我都按现象、原因、解决三段记照着对号入座比翻文档快。第一坑条件脚本被当成定时器写入频率完全不对。现象是表里的记录密度和预期差一个数量级本来想做小时数据结果一分钟一条。原因是把$Second 5理解成了“每 5 秒执行一次”。实际上$Second是 0 到 59 的秒值$Second 5只会在每分钟的第 5 秒为真也就是每分钟执行一次。解决办法是先想清楚要什么频率每分钟一次就写$Second 5每 5 秒一次就写($Second MOD 5) 0同时配合WSQLS这类标志位把单次动作锁住避免同一个秒值内被多次触发。第二坑日期时间格式不匹配写入的 RecTime 变成乱值或者直接失败。现象是表里RecTime列出现1900-01-01或者 NULL。原因是操作系统的日期时间格式是yyyy/M/d之类的区域设置Intouch 侧用Text($Date, ...)转字符串时格式跟着系统走而 SQL Server 期望的是明确的 ISO 格式两者对不上就解析失败或者解析成错误日期。解决办法是在操作系统“日期和时间”设置里把短日期改成yyyy-MM-dd长日期和短时间也统一更稳妥的做法是在脚本里显式用格式化函数输出yyyy-MM-dd HH:mm:ss不依赖系统默认格式。第三坑绑定列表和表列对不上SQLInsert 静默失败。现象是脚本执行了、连接号也正常但表里一行都没有。原因通常是绑定列表里少放或多放了一个变量或者变量类型和列类型不兼容比如把实型变量绑到NVARCHAR列上。SQLInsert失败不抛异常只是返回一个失败码而很多人不接收返回值。解决办法是给SQLInsert的返回值赋一个临时标记在画面或日志里显示出来同时在改表结构之后逐列核对绑定列表顺序、名称、类型三项一起对。第四坑连接号有效但连接实际已断写库静默停止。现象是白天一切正常某次网络抖动或者数据库重启之后数据就不写了界面上也没有任何提示。原因是Connid1保存的是建立连接时的返回值链路断了它不会自动变成负数脚本依然认为自己是“已连接”状态。解决办法是加一个心跳逻辑定时用SQLSelect做一次极轻量的查询失败就置Connid1 -1并尝试重连同时在画面上做连接状态灯让操作员能看见。第五坑Excel 模板换了机器就打不开宏报表一片空白。现象是模板在工程师电脑上好好的拷到操作员电脑上按钮点不动。原因是 Excel 的宏安全策略来自网络位置的 .xlsm 文件会被静默禁用宏或者被标记为“受保护的视图”。解决办法是把模板放到一个受信任位置Excel 选项 → 信任中心 → 受信任位置里加共享模板目录并且把文件属性里的“解除锁定”勾上发布时统一用受信任位置分发不要让大家从邮件附件里点开。另外提醒一句改完 VBA 之后一定要在目标机器上实测一次完整流程工程师站能跑不等于现场机能跑。6. 二次开发把一次性交付改造成可复制模板做过两三个同类项目之后最省时间的做法不是把脚本写得更巧而是把它拆成“可配置的部分”和“不变的部分”。这套东西里不变的部分是连接串的五段结构、绑定列表的映射规则、WSQLS的防重写逻辑、Excel 的三个页签职责划分。可变的部分是库地址、库名、账号、表名、采集站名、采样频率、报表列。把可变项全部提到一处后面每上一个新现场改的只是那一处。我一般的做法是在 Intouch 里建一组“配置标记”用内存消息类型值写在初始化脚本里或者从一个文本文件读进来{ 应用程序脚本 - 启动时所有可变项集中在这里 } CfgDbHost OP01; { 库服务器计算机名 } CfgDbName PlantDB; { 库名 } CfgDbUser scada_w; { 写库账号 } CfgDbPass YourPass; { 密码工程目录权限必须收紧 } CfgStation OP01; { 本站计算机名用于写入判断 } Connid1 SQLConnect(providersqloledb;Data Source CfgDbHost _ ;Initial Catalog CfgDbName _ ;UserID CfgDbUser _ ;Password CfgDbPass ;);这样一来换现场只改这五行SQLConnect那一长串不用每次重新拼也就不容易拼错分号或者漏掉provider。同理条件脚本里的NodeName OP01换成NodeName CfgStation多站部署时只改配置不改逻辑。Excel 端做同样的事把库地址、库名、账号、表名放到“控制面板”页的一组单元格里VBA 从单元格读值拼连接串和 SQL。这样交付时运维自己就能改不用每次都找开发。可变项Intouch 侧位置Excel 侧位置库服务器CfgDbHost控制面板 B5库名CfgDbName控制面板 B6账号/密码CfgDbUser / CfgDbPass控制面板 B7 / B8表名SQLInsert 第二参数控制面板 B9采样频率条件脚本表达式不涉及验证方法上我习惯在交付前跑一遍“三查”一查连接在 Intouch 画面点测试按钮看Connid1是否为正、日志里有没有失败记录二查数据手动触发一次写入直接去 SSMS 里SELECT TOP 10 * FROM TDays ORDER BY RecID DESC看时间、站名、各参数是否对得上三查报表在目标操作员机器上打开 Excel 模板选一个已知有数据的日期区间确认行数、汇总值和库里一致。这三步走完七八成的现场问题能在交付前拦住。还有一个技巧值得单独说给数据库表加一个“来源标记”列值由脚本写入比如SRCINTExcel 端每次查询前先跑一句SELECT COUNT(*) FROM TDays WHERE SRC INT如果结果不为 0说明有人手动往表里插过数据报表口径可能被污染。这行检查几乎零成本但能在数据对不上账的时候第一时间排除掉“人为干预”这个方向省下的时间远超写它的成本。从那以后我每次交付这类 Intouch 落库项目都会强制自己走一遍“断开连接再重连”的演练——把网线拔了再插上、把数据库服务重启一次看脚本能不能自己恢复。凡是没做这个演练就上线的基本都在半夜被叫起来过。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
SpringBoot+微信小程序公考系统开发实践 1. 项目概述:基于SpringBoot微信小程序的公考宝典系统作为一名长期从事教育类应用开发的程序员,我最近完成了一个面向公务员考试备考群体的微信小程序项目——"公考宝典"。这个项目采用SpringBoot后端微信小程序的架构模式,旨在为考… · 2026/11/4 9:12:02
SQLAlchemy ORM:Python数据库操作全解析与实战 1. Python数据库操作利器:SQLAlchemy ORM深度解析 作为Python开发者,数据库操作是我们日常工作中不可或缺的一部分。SQLAlchemy作为Python生态中最强大的ORM工具之一,它完美地平衡了灵活性与易用性。我在多个生产项目中深度使用SQLAlchemy后&… · 2026/11/4 9:12:02
Qwen3-ASR-0.6B企业级离线部署与推理调优实战 上个月帮一个做客服质检的团队收拾烂摊子:他们原本把通话录音往外送,做转写再抽检,后来合规口径一收紧,整条链路必须搬回内网,而且要在完全没有外网的环境里跑起来。他们选型时把目光放在Qwen3-ASR-0.6B上——0.6B 这个… · 2026/11/4 9:12:02
skill-from-scars:从反复踩过的坑,到可复用的 Agent Skill 使用 AI Coding 工具开发项目时,经常会遇到一种情况:某个错误花了很长时间才解决,相关经验整理到笔记之后,过了一段时间又在另一个项目中遇到类似问题。虽然 AI 能够帮助我们快速修复 Bug,但很多有价值的排查方法并没有… · 2026/11/4 16:17:01
Tiled 地形刷实战:30 分钟让 40×30 地图的过渡瓦片自动铺满 Tiled 地形刷实战:30 分钟让 4030 地图的过渡瓦片自动铺满 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled
做 2D 关卡的开发者,Tiled 替你把"手挑过渡砖"这活接走了。4030 的地图有… · 2026/11/4 16:17:01
5分钟装好 GitHub 汉化插件:从安装到自定义词库的完整指南 5分钟装好 GitHub 汉化插件:从安装到自定义词库的完整指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese
早上打开 GitHu… · 2026/11/4 16:17:01
读懂EVIE-8B基准成绩单:4大榜单138任务nDCG、Recall、MAP、MRR指标完全解读 读懂EVIE-8B基准成绩单:4大榜单138任务nDCG、Recall、MAP、MRR指标完全解读 【免费下载链接】EVIE-8B 项目地址: https://ai.gitcode.com/tencent_hunyuan/EVIE-8B
EVIE-8B 是腾讯开源的视觉文档检索模型(Visual Document Retrieval)… · 2026/11/4 16:17:01
如何快速加载Qwen-Image-2512到ComfyUI:GGUF量化模型完整实战指南 如何快速加载Qwen-Image-2512到ComfyUI:GGUF量化模型完整实战指南 【免费下载链接】Qwen-Image-2512-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen-Image-2512-GGUF
🎯 一句话先看懂:Qwen-Image-2512-GGUF 是阿里… · 2026/11/4 16:17:01
TranslationPlugin 快速翻译指南 TranslationPlugin 快速翻译指南 【免费下载链接】TranslationPlugin Translation plugin for IntelliJ-based IDEs/Android Studio. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslationPlugin
TranslationPlugin 是一款为 IntelliJ 系列 IDE(Intelli… · 2026/11/4 16:16:01
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38