简介针对西门子WinCC组态环境下利用VBS脚本读写变量并完成逻辑与数学运算的需求整理了一份以操作为导向的docx说明文档适合从事HMI画面开发、过程控制及数据处理的自动化工程师参考。内容围绕HMIRuntime.Tags对象讲解变量读取与写回覆盖二进制变量置位、复位、取反以及加减乘除、Math.Pow幂运算等常用数学处理并给出批量读取与写入多个变量的高效写法。所有代码均配有按钮事件中的具体填法方便直接套用到实际工程。资源为单文件docx格式大小489KB结构紧凑、示例清晰。目前已有2413人学习下载可作为WinCC脚本入门与日常排错的实用速查资料。1. WinCC脚本操作变量的入口所有读写都绕不开HMIRuntime.Tags在WinCC画面上放一个按钮想按下时把PLC里的电机启动标志置1、同时把累计运行时长加0.5秒。你翻遍按钮的对象属性发现能挂逻辑的地方只有事件页签里的动作入口没有一个现成的给变量赋值配置框。这就是WinCC的规则画面交互逻辑几乎全部靠脚本完成而VBS这边操作变量的唯一入口就是HMIRuntime.Tags。这份资料把单变量读写、置位复位取反、数学运算、批量读写一次讲透适合刚接手WinCC项目的电气工程师也适合从经典WinCC V7迁到博途Portal V16的调试人员——省去翻手册的时间照着写就能跑通。2. 读取变量的正确姿势对象引用、Read方法与Value属性的配合2.1 为什么脚本里不能直接操作变量名不少从组态软件转过来的工程师第一版脚本会写成Tag1 Tag1 1结果在WinCC里直接报错。原因在于运行系统Runtime把画面和通讯分成两层画面脚本运行在客户端上下文变量本体存放在运行系统后台的变量管理器里两边不共享内存。脚本真正能拿到手的是HMIRuntime.Tags(Tag1)返回的一个对象引用后续所有操作都靠这个引用去沟通。这个设计不是WinCC故意绕弯子。外部变量背后挂着通讯驱动每一次读取都可能触发一次与PLC的报文交互。如果把变量直接暴露给脚本时序和安全性都没法保证。Tags对象相当于代理层把读内存缓存和同步通讯数据封装在Read方法内部脚本只负责Set引用、Read同步、算完后Write回去具体走什么协议、报文怎么组全部由WinCC运行时处理脚本侧不用关心。2.2 单变量读取、计算加一并写回文档里给的第一个例子很典型把Tag1的值加1再写回去完整代码只有五行Dim objTag Set objTag HMIRuntime.Tags(Tag1) objTag.Read objTag.Value objTag.Value 1 objTag.Write逐行拆开看。Dim objTag声明一个脚本变量VBS里不区分变量类型但给对象赋值必须用Set这是VBS和VB .NET的一个明显区别。第二行把Tags集合里名为Tag1的成员取出来放进objTag如果变量名拼错这一行不会报编译错误而是运行时抛出找不到对象。第三行Read把变量当前值从运行系统同步到脚本侧这一步很容易漏尤其是脚本被重复触发时——不Read直接取Value拿到的可能是上一次执行留下的旧快照。第四行做算术加一第五行Write把新值回写。参数上值得注意的还有两点。第一变量名必须和变量管理器中完全一致区分大小写带空格或特殊字符也要原样填写比如HMIRuntime.Tags(My Tag_1)。第二Value属性的读写是纯内存操作速度很快真正耗时的是Read和Write背后隐藏的通讯往返。如果Tag1是外部变量按钮每点一次就产生一次和PLC的交互如果这个按钮被画面上的周期事件反复触发通讯报文量会成倍上涨所以要确认触发频率再决定是不是用这种方式。2.3 字符串索引与动态拼接变量名HMIRuntime.Tags(Tag1)括号里是字符串表达式双引号不能省。写成HMIRuntime.Tags(Tag1)时VBS会把Tag1当作脚本变量去求值而不是看作变量名字符串找不到就会报错。常见做法是先把名字放进脚本变量再通过拼接生成动态名称这样批量处理时会方便很多Dim strTagName Dim objTag strTagName TAG2_FLOAT1 Set objTag HMIRuntime.Tags(strTagName) objTag.Read MsgBox 当前值 objTag.Value是VBS的字符串连接符MsgBox用于调试弹出值。实际项目里用得更多的是在循环里动态拼名字比如一个配方有20个浮点变量依次叫RECIPE_01到RECIPE_20脚本可以这样组织Dim i Dim strName Dim objTag For i 1 To 20 strName RECIPE_ Right(0 i, 2) Set objTag HMIRuntime.Tags(strName) objTag.Read If objTag.Value 100 Then objTag.Value 0 objTag.Write End If Next这里Right(0 i, 2)的作用是把序号补成两位i等于1时生成01i等于12时生成12这样变量名长度固定和变量管理器里建的名称一一对应。这个小技巧在配方管理、批量参数下发这些场景里非常实用比手写20行重复代码干净得多。脚本可维护性主要靠这类小工具函数撑着变量一多拼接习惯直接决定后面排查效率。3. 逻辑运算与数学运算置位、取反、加法和幂运算的最稳写法3.1 二进制变量的置位、复位、取反文档里对二进制变量TAG1_BOOL1给了三种操作置位、复位、取反正好覆盖按钮控制里最常用的三种需求。代码分别如下 置位把布尔变量置为1 HMIRuntime.Tags(TAG1_BOOL1).Read HMIRuntime.Tags(TAG1_BOOL1).Value True 复位把布尔变量置为0 HMIRuntime.Tags(TAG1_BOOL1).Read HMIRuntime.Tags(TAG1_BOOL1).Value False 取反读一次取Not再写回 HMIRuntime.Tags(TAG1_BOOL1).Read HMIRuntime.Tags(TAG1_BOOL1).Value Not HMIRuntime.Tags(TAG1_BOOL1).Value布尔类型直接用True和False而不是写1和0可读性更好VBS也会自动转成对应数值。取反那行有个隐蔽问题Not作用于整个Value属性表达式所以要先Read一次把PLC侧或变量管理器的真实值同步进来否则连续点第二次时取反的是上一次Write后的内存值结果和预期完全对不上。置位和复位虽然理论上不需要Read但保持先读再写的习惯没有坏处——万一这个变量被PLC程序或其他画面脚本改过先读能避免直接覆盖掉最新状态。顺便提一下取反的另一种写法objTag.Value objTag.Value Xor True用异或实现翻转。效果和Not一样Not更直观Xor在需要和某个条件联动时更灵活比如只有条件成立才翻转。我一般习惯在联锁逻辑里用Not在切换开关状态时用Xor两种写法都建立在先Read的基础上离开这个前提都会翻车。3.2 浮点加法变量引用先取出来再计算数学运算部分文档先用32位浮点变量做了加法演示。把TAG2_FLOAT1和TAG2_FLOAT2相加结果写到TAG2_FLOAT3完整代码如下Dim tagF1, tagF2, tagF3 Set tagF1 HMIRuntime.Tags(TAG2_FLOAT1) Set tagF2 HMIRuntime.Tags(TAG2_FLOAT2) Set tagF3 HMIRuntime.Tags(TAG2_FLOAT3) tagF1.Read tagF2.Read tagF3.Value tagF1.Value tagF2.Value tagF3.Write一个细节值得说为什么先用Set把三个对象引用都取出来而不是直接在表达式里写HMIRuntime.Tags(TAG2_FLOAT1).Value功能上两者等价但每写一次HMIRuntime.Tags(xxx)VBS都要在Tags集合里做一次名称查找把引用放在变量里后续计算全部走内存地址脚本执行更快代码也短。这个习惯在循环里收益最明显等变量多到几十个时两种写法的执行时间能差出好几倍。类型方面VBS的加法和VB保持一致两个浮点相加得到浮点结果写入32位浮点变量没有问题。但要注意如果参与运算的是一个整数变量和一个浮点变量VBS会先把整数隐式转成浮点再运算结果写回时再根据目标变量类型做一次截断或舍入。文档强调不区分变量数据类型这是VBS相对C脚本的一个优势——C脚本里需要手动调用GetTagFloat、GetTagWord这类带类型后缀的函数写错类型直接拿不到值VBS在类型上宽容得多但宽容也意味着类型错误不会第一时间暴露后面排错时反而要多个心眼。3.3 幂运算VBS的^运算符与Math.Pow的坑文档里还演示了将两个32位有符号整数做X^Y次幂运算结果写到TAG2_INT3代码是这样HMIRuntime.Tags(TAG2_INT3).Read HMIRuntime.Tags(TAG2_INT3).Value HMIRuntime.Tags(TAG2_INT1).Value ^ HMIRuntime.Tags(TAG2_INT2).Value HMIRuntime.Tags(TAG2_INT3).Write这里有个很实际的区别要讲清楚VBScript里幂运算是^运算符对应数学里的X的Y次方。网上不少示例写的是Math.Pow(...)那是.NET的运行库写法VBS里没有Math对象直接照抄会报缺少对象或者类型不匹配。所以看到文档里的幂运算时第一反应应该确认用的是^而不是Math.Pow这个坑我踩过不止一次经常是群里发来一段运行不了的脚本十有八九是跨语言抄代码抄出来的问题。提示VBS里的幂运算符只有^没有Math.Pow。从C#或VB.NET代码里搬数学函数到WinCC VBS时先查一下这个函数在VBScript里有没有对应语法。顺序上因为是在按钮事件里执行先读一次TAG2_INT3其实不是必须的——反正接下来就要Write覆盖。如果这个脚本只是计算结果用于显示、不写回PLC那么Read就决定了初始显示是否为最新值。另一个容易忽略的点整数做幂运算结果仍然按整数处理。如果指数是负数VBS的整数幂运算结果会变成0因为整数除法直接截断想要精确的小数结果必须用浮点变量。需要这类场景时我一般把参与运算的变量类型全部设成浮点运算结果再按需取整避免脚本里绕来绕去的类型转换。3.4 逻辑组合And、Or、Not在联锁里的典型用法逻辑运算不只是单变量的置位复位实际工程里更多是组合判断。比如电机启动的联锁条件启动指令有效、没有急停、且不在故障状态三个条件同时满足才允许置位运行标志Dim bStart, bEStop, bFault bStart HMIRuntime.Tags(START_CMD).Value bEStop HMIRuntime.Tags(ESTOP_ACTIVE).Value bFault HMIRuntime.Tags(FAULT_STATE).Value If bStart And Not bEStop And Not bFault Then HMIRuntime.Tags(MOTOR_RUN).Value True Else HMIRuntime.Tags(MOTOR_RUN).Value False End If读三个布尔变量组合判断后写回运行标志。注意三个变量在赋值给脚本变量前都建议先Read如果画面刷新周期较长取到的可能是缓存值。在要求实时性的场合可以把这个脚本放到定时触发的全局脚本里而不是只在按钮事件里执行一次因为按钮触发依赖操作员主动点击联锁保护类逻辑不能交给人工去触发。4. 大量变量读写用数组与循环把几百个变量一次搬完4.1 一次读取多个变量数组装名字循环做索引WinCC的VBS脚本处理单个变量很轻松但当变量数量上到几十个甚至上百个时逐个写Set、Read、Write就不是累的问题了是脚本执行时间太长、画面刷新被拖慢。文档里给了批量方案先把变量名放进数组再用循环统一处理。一次读取多个变量的代码如下Dim arrTags(2) Dim i arrTags(0) TagA arrTags(1) TagB arrTags(2) TagC For i 0 To UBound(arrTags) HMIRuntime.Tags(arrTags(i)).Read NextDim arrTags(2)声明了一个固定大小数组下标从0开始所以数组能放3个元素。UBound(arrTags)返回数组上界也就是2循环会自动遍历全部名称。这种写法里数组元素是字符串变量名循环体内每次都用arrTags(i)作为索引去Tags集合里取对应对象读到的值仍存在各变量对象自己的Value属性里。如果变量数量在运行时才确定可以改用动态数组常见做法是先算出数量再ReDimDim arrTags() Dim i, nCount nCount 5 ReDim arrTags(nCount - 1) For i 0 To nCount - 1 arrTags(i) DATA_VALUE_ i Next For i 0 To UBound(arrTags) HMIRuntime.Tags(arrTags(i)).Read NextReDim根据运行时的数量重新分配数组空间nCount - 1是因为数组下标从0开始。这个场景适合配方数据配方有几组就建几组数组脚本逻辑不用改。注意ReDim会清空已有数据需要保留旧值时必须用ReDim Preserve不过这里存的是变量名字符串每次都是全新生成所以不需要。4.2 统一计算后一次性写回为什么读、算、写要拆成三个循环批量读完之后是批量运算和统一写回。文档把三个环节拆成三个循环全部读、全部算、全部写。以每个变量加1为例完整结构是这样的 所有变量先读取 For i 0 To UBound(arrTags) HMIRuntime.Tags(arrTags(i)).Read Next 统一加一 For i 0 To UBound(arrTags) HMIRuntime.Tags(arrTags(i)).Value HMIRuntime.Tags(arrTags(i)).Value 1 Next 统一写回 For i 0 To UBound(arrTags) HMIRuntime.Tags(arrTags(i)).Write Next为什么把运算放在读和写之间单开一个循环而不是边读边算边写关键在于通讯特性。Read和Write每调用一次都可能在底层触发一次与PLC的报文交互如果循环体里把读、算、写串在一起三个变量就是九次通讯十个变量就是三十次。把同类型操作归拢到各自的循环里每一轮只做一种动作运行时可以更有效地组织通讯画面也不会因为频繁同步刷新而出现卡顿。在红色区域累积显示、多台设备状态汇总这类画面里这个差异肉眼可见。实际项目里数组里装的变量名往往不是固定的TagA、TagB而是有规律的名称。配合第2章讲的动态拼接可以写出一个通用性很强的批量处理脚本Dim arrNames(9) Dim i, objTag For i 0 To 9 arrNames(i) Pump i _Speed Next For i 0 To UBound(arrNames) Set objTag HMIRuntime.Tags(arrNames(i)) objTag.Read If objTag.Value 1500 Then objTag.Value 1500 限幅 objTag.Write End If Next这组脚本按Pump0_Speed到Pump9_Speed的命名规律生成变量名读出来做限幅超限就写回1500。做限幅保护、报警阈值批量设置时这种写法可以把几十行重复代码压缩成一个循环。命名规律越统一这类脚本越好写所以建变量时就把前缀和序号定好后面能省很多事。4.3 什么情况下值得用批量处理两条判断标准批量处理不是银弹。脚本里每多一个循环就多一分维护成本变量名规律变化时还要同步改拼接逻辑。我一般遵循两个判断标准一是变量数量超过10个才考虑批量二是变量名必须能按统一规律命名。两者缺一宁可逐个写也不要为了看起来高效硬套循环。另一个判断维度是执行频率。放在按钮单击事件里的脚本哪怕变量再多用户点击频率有限不容易出问题但如果脚本绑定了画面打开事件、周期触发器或者变量触发器每秒执行一次甚至更快就必须走批量方式否则通讯负荷会非常难看。排查这类问题时可以在WinCC的诊断里看通讯报文数量也能在PLC侧监控通讯负载——脚本执行时间从几百毫秒降到几十毫秒往往就是这一处改动带来的。5. WinCC脚本常见问题排查五个真实翻车点5.1 脚本语句未结束换行和全角符号是重灾区现象脚本编辑器报语句未结束或者提示缺少End脚本根本保存不了。原因最常见的是长表达式换行时没写续行符其次是中文输入法下输出了全角分号和括号VBS不认识全角符号还有一类是字符串的引号没成对编辑器一路往后找直到行尾才意识到语句断了。解决VBS规定一条语句结束的标志是换行想折行必须在行尾加空格加下划线_而且_后面不能再有任何字符。以第3章那个加法为例折行写法是HMIRuntime.Tags(TAG2_FLOAT3).Value HMIRuntime.Tags(TAG2_FLOAT1).Value _ HMIRuntime.Tags(TAG2_FLOAT2).Value第一行结尾的_让VBS知道表达式还没结束下一行继续。注意_前面要有空格否则可能被当成变量名的一部分。排查全角符号相对简单把报错的脚本全选在编辑器里把中文输入法切成英文重新输入分号、括号、引号即可。赋值号被错打成全角等号也会触发同样的报错。提示遇到语句未结束先检查两件事——换行处有没有续行符、所有标点是不是半角。这两个原因占了九成以上。5.2 变量找不到拼写、大小写和创建顺序现象运行时脚本弹窗报找不到变量或下标越界脚本中断执行。原因变量名拼写不一致、变量还没有在变量管理器里创建、脚本运行时机早于变量初始化。第三个原因常在画面打开事件里出现——画面启动瞬间变量管理器还没完全就绪脚本却已经去Tags集合里找对象了。解决先在变量管理器中核对名称注意WinCC变量区分大小写tag1和Tag1是两个不同的名字。脚本侧确认引用正确可以用一行输出做实时检查MsgBox HMIRuntime.Tags(TAG2_INT1).Name 当前值 HMIRuntime.Tags(TAG2_INT1).ValueName属性返回变量的实际注册名如果这行能弹出来说明变量存在弹不出来说明名字不对或者时机太早。画面打开事件里的脚本如果报这个错常见做法是加一个延时重试或者把脚本挪到按钮和定时触发器里避开启动瞬间。5.3 取反后值不对缓存和真实值不是一回事现象按钮点一下布尔变量确实变了再点一下却变不回去有时连续点两次毫无反应。原因取反前没有Read脚本一直在对内存里的旧快照取反。第一次执行时PLC环境里这个变量是1脚本内存里是1取反写回0后内存里也是0第二次执行如果不Read直接对内存里的0取反又变成1写回——看起来正常但中间PLC侧逻辑可能已经把这个变量改过脚本完全没有察觉。解决取反操作前先Read一次把外界最新状态同步进来再做运算。置位和复位操作如果你关心变量当前的实时状态同样建议先Read。这个习惯能规避绝大多数值不对的灵异现象尤其是变量同时被PLC轮询和画面脚本操作的双写场景。5.4 脚本不报错但PLC值没变写权限、站侧扫描和通讯链路现象脚本执行了返回也正常可PLC里变量纹丝不动有时候过一会又自己变了。原因有三个方面要查。第一外部变量的属性里没勾选允许从HMI写入HMI侧写操作会被拒绝但脚本不一定报错。第二PLC程序里对同一个地址反复赋值每个扫描周期都把这段地址写为某个固定值HMI写进去的数据立刻被覆盖。第三HMI与PLC之间的通讯出现握手失败导致链路短暂断开写操作没有真正送达。解决先用内部变量做同样的置位读写测试内部变量能通说明脚本没问题再换成外部变量值没变就去查变量属性和PLC逻辑。区分站侧覆盖还是链路问题有个实测方法把PLC里相关逻辑暂时注释掉再让脚本写入一次如果能写成功说明是站侧程序覆盖脚本和通讯链路反而是好的。查完记得把注释还原。5.5 大批量写入卡画面Write频次和画面刷新互相拉扯现象脚本里循环写了上百个变量执行期间画面明显掉帧按钮点了没反应严重时整个运行画面白屏几秒。原因每个Write都触发通讯和画面同步刷新上百次Write串行执行画面主线程被挤占。WinCC的画面刷新和脚本执行跑在同一个进程里脚本不结束画面就腾不出手来响应操作。解决按第4章的方式把写入分批只写真正需要变化的变量避免把所有值无条件Write一遍。如果上位机逻辑允许可以先在内存里把中间结果全部算完最后一轮统一Write或者按传感器类型分组一组一组地写避免一次性把通讯队列打满。这个问题的根子在设计阶段——能减少写入量的画面逻辑就不要等到掉帧了再回头优化。6. 进阶用法时间触发器替代按钮事件配合IO域把验证前置6.1 时间触发器让脚本按周期自动执行前面所有例子都放在按钮单击事件里但数据累加、阈值判断、状态刷新这类任务不适合让操作员每次去点按钮。WinCC经典V7的全局脚本里可以新建VBS动作博途Portal V16的脚本对象里也可以加时间触发器把下面这类循环逻辑放进去设置每5秒执行一次Dim objTag Set objTag HMIRuntime.Tags(RUN_TIME_TOTAL) objTag.Read objTag.Value objTag.Value 0.5 objTag.Write这段脚本每5秒把运行总时长加0.5适合设备累计运行时间的统计。用时间触发而不是按钮触发最大的好处是操作员忘点按钮也不会丢数据脚本按固定周期自动执行不受画面切换影响——只要运行系统在跑触发器就会按时唤起脚本。6.2 用内部变量和IO域做无通讯验证我个人的调试习惯是先在画面放一个IO域绑定内部变量按钮触发脚本观察IO域数值变化来验证逻辑正确性确认无误后再把变量替换成外部变量连PLC在线调试。内部变量不经过通讯链路纯内存操作都能失败的话一定是脚本自身的问题能成功再怀疑通讯和PLC侧。这样做的价值是把问题分层脚本层面的错误和通讯层面的错误分开定位不会出现又怀疑脚本又怀疑网络又怀疑PLC程序的三方拉扯。从那以后我每次新建脚本都强制走一遍这个流程先内部变量验证、再换真实变量、最后看PLC侧监控确认写入生效三个环节各花不到两分钟省下的是断断续续一下午的排查时间。希望这个习惯对你有用。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
openFrameworks 路径转网格实战:用字体轮廓构建可交互的 3D 挤压文字 图形学音视频 【免费下载链接】openFrameworks openFrameworks is a community-developed cross platform toolkit for creative coding in C. 项目地址: https://gitcode.com/gh_mirrors/op/openFrameworks 点击查看 免费下载 本指南以 openFrameworks 仓库中的 p… · 2026/9/24 15:17:44
google-api-php-client 2.13–2.19 版本演进全解析:新特性、安全修复与升级实践 google-api-php-client 2.13–2.19 版本演进全解析:新特性、安全修复与升级实践 【免费下载链接】google-api-php-client A PHP client library for accessing Google APIs 项目地址: https://gitcode.com/gh_mirrors/go/google-api-php-client
本篇以官方仓… · 2026/9/24 15:17:44
Linux内存管理排查实战:free、top、pmap、vmstat命令行工具详解 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:17:37
能源能碳管理平台-能碳管理系统-源码:全链路数据采集与分析 基于 Vue3 / Spring Boot/Spring Cloud & Alibaba 微服务架构 仓库地址: https://gitee.com/guangdong122/energy-management
一、系统介绍
能源管理系统能源管理系统源码能源管理平台能源管理系统(EMS)能源监测能源管控能源系统能源监… · 2026/9/24 15:44:46
SeaORM 2.0.0 正式发布:新实体格式、RBAC 与同步版 ORM 核心变更全解析 SeaORM 2.0.0 正式发布:新实体格式、RBAC 与同步版 ORM 核心变更全解析 【免费下载链接】sea-orm 🐚 A powerful relational ORM for Rust 项目地址: https://gitcode.com/gh_mirrors/se/sea-orm
SeaORM 2.0 是 2.x 系列的第一个稳定版本… · 2026/9/24 15:44:46
IDC机房运维PPT如何变成可执行的自动化运维契约 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:44:46
深入 PRQL 的 Lezer 语法:prql-lezer 文法、高亮与测试体系全解析 后端 【免费下载链接】prql PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement 项目地址: https://gitcode.com/gh_mirrors/pr/prql 点击查看 免费下载 PRQL(Pipelined Relational Query Language&am… · 2026/9/24 15:44:46
mustache-cj 源码解析(下):渲染管线、空白折叠与HTML转义逐行精讲 mustache-cj 源码解析(下):渲染管线、空白折叠与HTML转义逐行精讲 【免费下载链接】mustache-cj 基于仓颉实现的mustache模板引擎 项目地址: https://gitcode.com/Cangjie-SIG/mustache-cj
mustache-cj 是一个基于仓颉(Can… · 2026/9/24 15:44:26
Dopamine JAX 序列化详解:NumpyEncoding 字典与 MessagePack 钩子实现 机器学习深度学习 【免费下载链接】dopamine Dopamine is a research framework for fast prototyping of reinforcement learning algorithms. 项目地址: https://gitcode.com/gh_mirrors/do/dopamine 点击查看 免费下载 Dopamine 的 JAX 后端在保存/恢复训练状态… · 2026/9/24 15:44:26
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44