tag

本文详细介绍了织梦CMS中常用的网站变量标签及其用途,包括网站名称、会员中心地址等,并深入解析了Channel标签的参数及应用示例。
1 网站变量标签
{dede:global.cfg_webname/}
这就是网站的名字。(系统-系统设置-系统基本参数-网站名称这一项里我们就能够清楚看到这个变量名称。)

他的链接地址是{dede:global.cfg_basehost/}同样是一个变量标签也是主页的位置
2 向导rlink

这部分是指:会员中心、TAG标签、网站地图、等。。。

这一部分也比较简单,我们只要知道几个链接的地址变量标签就可以了。

{dede:global.cfg_memberurl/} 会员中心地址

{dede:global.cfg_cmsurl/} 站点实际url

{dede:global.cfg_dataurl/}站点data目录地址

3. Channel标签的参数:

标签名称:channel
标记简介:织梦常用标记,通常用于网站顶部以获取站点栏目信息,方便网站会员分类浏览整站信息
功能说明:用于获取栏目列表
适用范围:全局使用

基本语法:
{dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a> </li>"}
<li><a href='[field:typelink/]'>[field:typename/]</a> </li>
{/dede:channel}
参数说明:
typeid = '0' 栏目ID
reid = '0' 上级栏目ID
row = '100' 调用栏目数
col = '1' 分多少列显示(默认为单列)
type = 'son | sun' son表示下级栏目,self表示同级栏目,top顶级栏目
currentstyle = '' 应用样式
底层模板字段:
ID(同 id),typeid, typelink, typename, typeurl,typedir(仅表示栏目的网址)
例:
{dede:channel type='top'}
<a href='[field:typelink /]'>[field:typename/]</a>
{/dede:channel}

注:在没有指定typeid的情况下,type标记与模板的环境有关,如,模板生成到栏目一,那么type='son'就表示栏目一的所有子类。
内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) Dim tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19 Dim tag1,tag2,tag3,tag4,tag5,tag9,PreTemp,PreTemp2,PreTemp3,RT,PreTemp4,PreTemp5,PreTemp6 Dim tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29 Dim tag30,tag31,tag32,tag33,tag34,tag35,tag36,tag37,tag38,tag39 Set tag20 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-1功率偏移")'入口CV_編輯_DB_加熱區_CA1-1功率偏移 Set tag21 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-2功率偏移") Set tag22 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-3功率偏移") Set tag23 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-4功率偏移") Set tag24 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-5功率偏移") Set tag25 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-6功率偏移") Set tag26 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-7功率偏移") Set tag27 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-8功率偏移") Set tag28 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-9功率偏移") Set tag29 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-10功率偏移") Set tag10 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_1") Set tag11 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_2") Set tag12 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_3") Set tag13 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_4") Set tag14 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_5") Set tag15 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_6") Set tag16 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_7") Set tag17 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_8") Set tag18 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_9") Set tag19 = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_10") Set tag9 = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_STEP5上功率") Set tag30 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_1") 'rcp_HOT_PowerSet_Up_1_1 Set tag31 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_2") Set tag32 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_3") Set tag33 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_4") Set tag34 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_5") Set tag35 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_6") Set tag36 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_7") Set tag37 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_8") Set tag38 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_9") Set tag39 = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_10") Set tag1 = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_NDS_1") Set tag2 = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_AM_Z1") Set tag4 = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_SEC1") Set tag5 = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_DS_1") tag30.Read tag31.Read tag32.Read tag33.Read tag34.Read tag35.Read tag36.Read tag37.Read tag38.Read tag39.Read tag1.Read '上變 tag2.Read '手,自 tag4.Read '基本值 tag5.Read '下變 tag9.Read If tag2.Value = 1 Then PreTemp=CDbl((1-tag1.Value) * 0.67) PreTemp2=CDbl((1-tag1.Value)* 0.33) PreTemp4=CDbl((1-tag5.Value) * 0.67) PreTemp5=CDbl((1-tag5.Value)* 0.33) tag2.Value=0 tag10.Value = CDbl(tag4.Value * tag1.Value) * CDbl(tag9.Value) tag11.Value = CDbl(tag4.Value * (1-PreTemp) * CDbl(tag9.Value)) tag12.Value = CDbl(tag4.Value * (1-PreTemp2) * (CDbl(tag9.Value))) tag13.Value = CDbl(tag4.Value * CDbl(tag9.Value)) tag14.Value = CDbl(tag4.Value * CDbl(tag9.Value)) tag15.Value = CDbl(tag4.Value * (1-PreTemp5) * (CDbl(tag9.Value))) tag16.Value = CDbl(tag4.Value * (1-PreTemp4)) * (CDbl(tag9.Value)) tag17.Value = CDbl(tag4.Value * tag5.Value) * (CDbl(tag9.Value)) tag20.Value = (tag4.Value * tag1.Value) * 100 tag21.Value = (tag4.Value)* (1-PreTemp) * 100 tag22.Value = (tag4.Value)*(1-PreTemp2) * 100 tag23.Value = (tag4.Value * 100) tag24.Value = (tag4.Value * 100) tag25.Value = (tag4.Value)*(1-PreTemp5) * 100 tag26.Value = (tag4.Value * (1-PreTemp4) * 100) tag27.Value = ((tag4.Value * tag5.Value) * 100) ' tag28.Value = (tag4.Value * (1-PreTemp4) * 100) ' tag29.Value = ((tag4.Value * tag5.Value) * 100) Else tag2.Value=1 tag10.Value = CInt(tag4.Value * tag30.Value * CDbl(tag9.Value)) tag11.Value = CInt(tag4.Value * tag31.Value * CDbl(tag9.Value)) tag12.Value = CInt(tag4.Value * tag32.Value * CDbl(tag9.Value)) tag13.Value = CInt(tag4.Value * tag33.Value * CDbl(tag9.Value)) tag14.Value = CInt(tag4.Value * tag34.Value * CDbl(tag9.Value)) tag15.Value = CInt(tag4.Value * tag35.Value * CDbl(tag9.Value)) tag16.Value = CInt(tag4.Value * tag36.Value * CDbl(tag9.Value)) tag17.Value = CInt(tag4.Value * tag37.Value * CDbl(tag9.Value)) ' tag18.Value = CInt(tag4.Value * tag38.Value * CDbl(tag9.Value)) ' tag19.Value = CInt(tag4.Value * tag39.Value * CDbl(tag9.Value)) ' tag20.Value = CDbl(tag4.Value * tag30.Value ) * 100 tag21.Value = CDbl(tag4.Value * tag31.Value ) * 100 tag22.Value = CDbl(tag4.Value * tag32.Value ) * 100 tag23.Value = CDbl(tag4.Value * tag33.Value ) * 100 tag24.Value = CDbl(tag4.Value * tag34.Value ) * 100 tag25.Value = CDbl(tag4.Value * tag35.Value ) * 100 tag26.Value = CDbl(tag4.Value * tag36.Value ) * 100 tag27.Value = CDbl(tag4.Value * tag37.Value ) * 100 ' tag28.Value = CDbl(tag4.Value * tag38.Value ) * 100 ' tag29.Value = CDbl(tag4.Value * tag39.Value ) * 100 End If tag2.Write tag10.Write tag11.Write tag12.Write tag13.Write tag14.Write tag15.Write tag16.Write tag17.Write ' tag18.Write ' tag19.Write tag20.Write tag21.Write tag22.Write tag23.Write tag24.Write tag25.Write tag26.Write tag27.Write ' tag28.Write ' tag29.Write End Sub
10-11
<think>我们分析的代码是VBScript,用于西门子WinCC的脚本。这段脚本是处理鼠标左键按下事件(OnLButtonDown)的,主要功能是根据条件计算一组标签(Tags)的值并写入。 代码结构: 1. 声明变量:主要是Dim语句声明了一系列变量,这些变量用于存储标签对象和中间计算结果。 2. 使用Set语句将变量与WinCC中的标签(Tags)关联起来。这些标签代表了过程值或参数。 3. 读取一些标签的值(使用.Read方法)。 4. 根据条件(tag2.Value的值)进行不同的计算,并设置其他标签的值。 5. 最后将计算得到的值写入标签(使用.Write方法)。 具体逻辑: 条件判断依赖于tag2.Value(代表某个状态,可能是手动/自动模式): - 如果tag2.Value为1(手动模式?),则进入If块,计算一组值,并将tag2.Value设置为0(切换到自动模式?),然后计算tag10到tag17以及tag20到tag27的值。 - 否则(即tag2.Value不为1,可能是自动模式),进入Else块,将tag2.Value设置为1(切换到手动模式?),然后根据另一组标签(tag30到tag37)计算tag10到tag17以及tag20到tag27的值。 注意:在Else块中,tag18和tag19以及tag28和tag29的计算被注释掉了,所以当前不处理这些标签。 问题点: 1. 代码中使用了较多的硬编码,可读性和可维护性较差。 2. 存在一些未使用的变量(如tag3, tag6, tag7, tag8等,但声明了,不过没有使用)。 3. 计算逻辑中,If块和Else块中分别使用不同的公式,但都依赖于tag4.Value(基本值)和tag9.Value(一个系数)。 4. 在If块中,使用PreTemp, PreTemp2, PreTemp4, PreTemp5等中间变量,这些变量由tag1.Value和tag5.Value计算得到。 改进建议: 1. 使用数组和循环来减少重复代码,这样可以使代码更简洁、更易于维护。 2. 删除未使用的变量。 3. 添加注释,说明每个标签的作用和计算逻辑的含义。 但是,由于WinCC VBScript的限制,我们可能不能使用动态数组或一些高级特性,但我们可以使用数组来存储标签引用,然后通过循环来操作。 下面我们将尝试重构代码,使用数组和循环。 步骤: 1. 将需要操作的标签按照索引顺序放入数组中。 2. 根据条件分支,分别计算每个数组元素对应的值。 3. 使用循环进行读取和写入。 注意:原始代码中,If块和Else块中分别有10个标签(但实际上只操作了8个,因为tag18、tag19、tag28、tag29被注释了),但我们看到tag30到tag39有10个标签。所以我们需要确定到底要操作多少个标签。从代码看,只有8个(索引0到7)。 重构后的代码: 定义数组: - 输入标签数组:srcTags1(对应tag30到tag37,共8个) - 输出标签数组1:outTags1(对应tag10到tag17,共8个?但实际代码中tag10到tag17有8个,但tag18,tag19被注释,所以实际只用到前8个) - 输出标签数组2:outTags2(对应tag20到tag27,共8个) 另外,我们注意到在If块中,计算方式不是直接使用输入标签数组,而是根据一组公式计算。因此,我们需要在If块中根据索引位置使用不同的公式。 具体公式: 在If块中(原手动模式): 索引0: tag10 = tag4.Value * tag1.Value * tag9.Value 索引1: tag11 = tag4.Value * (1-PreTemp) * tag9.Value 索引2: tag12 = tag4.Value * (1-PreTemp2) * tag9.Value 索引3: tag13 = tag4.Value * tag9.Value 索引4: tag14 = tag4.Value * tag9.Value 索引5: tag15 = tag4.Value * (1-PreTemp5) * tag9.Value 索引6: tag16 = tag4.Value * (1-PreTemp4) * tag9.Value 索引7: tag17 = tag4.Value * tag5.Value * tag9.Value 而在Else块中(原自动模式): 每个输出标签的值计算公式为:tag4.Value * 对应输入标签数组的值 * tag9.Value 另外,输出标签数组2(outTags2)的值就是输出标签数组1(outTags1)的值乘以100(因为outTags2是百分比?),但在原代码中,If块和Else块中对outTags2的计算是独立写的,但观察发现,outTags2的值其实就是outTags1的值除以tag9.Value(如果有)再乘以100?但是注意在If块中,outTags1和outTags2是分别计算的,但公式类似,只是outTags2没有乘tag9.Value?不对,我们看: If块中: tag10.Value = CDbl(tag4.Value * tag1.Value) * CDbl(tag9.Value) tag20.Value = (tag4.Value * tag1.Value) * 100 -> 注意这里没有乘以tag9.Value 所以,tag20的值并不是tag10的值乘以100,而是少了tag9.Value因子。因此,我们不能直接通过outTags1来得到outTags2。 重新审视:tag20到tag27是“功率偏移”值,而tag10到tag17是“功率设定”值。所以它们的计算公式不同。 在If块中,tag20的计算公式与tag10不同(没有乘以tag9.Value),而在Else块中,tag20的计算公式是tag4.Value * tag30.Value * 100,同样没有tag9.Value。 因此,我们需要分别计算两组输出。 重构思路: 1. 定义需要用到的输入标签(除了数组外,还有tag1, tag4, tag5, tag9等)。 2. 定义两个输出数组:一个用于功率设定(outPowerSet),一个用于功率偏移(outPowerOffset)。 3. 定义输入数组(srcPowerWeights)用于在Else块中的权重系数(即tag30到tag37)。 由于两个分支的计算公式不同,我们需要在分支内部循环计算每个输出。 重构代码: </think>根据提供的代码,这是一个用于西门子 WinCC 系统的 VBScript 脚本,主要用于处理加热区功率设置的逻辑。我将详细分析代码并提供优化建议: ### 代码功能分析 1. **主要功能**:根据`tag2`的值(手动/自动模式)计算不同加热区的功率设定值 2. **操作模式**: - **手动模式**(`tag2.Value=1`时):根据预设算法计算功率偏移 - **自动模式**(`tag2.Value=0`时):直接使用预设的功率系数 3. **数据处理**: - 读取多个标签值作为输入参数 - 进行浮点数计算(使用`CDbl`) - 将计算结果写入输出标签 4. **标签类型**: - 控制模式切换标签(tag2) - 功率系数标签(tag4, tag9) - 偏移参数标签(tag1, tag5) - 输入权重标签(tag30-tag39) - 输出功率标签(tag10-tag19) - 功率偏移显示标签(tag20-tag29) ### 优化建议和代码重构 ```vbscript Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) ' 读取核心参数 Set tagBase = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_SEC1") ' 基本功率 Set tagMode = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_AM_Z1") ' 模式切换 Set tagFactor = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_STEP5上功率") ' 功率系数 ' 参数读取 tagBase.Read tagMode.Read tagFactor.Read ' 定义输出标签数组 Dim outTags(9), dispTags(9) For i = 0 To 9 Set outTags(i) = HMIRuntime.Tags("rcp_HOT_PowerSet_HU1_" & (i+1)) Set dispTags(i) = HMIRuntime.Tags("入口CV_編輯_DB_加熱區_CA1-" & (i+1) & "功率偏移") Next ' 模式切换逻辑 If tagMode.Value = 1 Then ' 手动模式 ' 读取偏移参数 Set tagUp = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_NDS_1") Set tagDown = HMIRuntime.Tags("rcp_HOT_PowerOfSet_UP_DS_1") tagUp.Read tagDown.Read ' 计算偏移系数 Dim coeff(7) coeff(0) = tagUp.Value coeff(1) = 1 - (1 - tagUp.Value) * 0.67 coeff(2) = 1 - (1 - tagUp.Value) * 0.33 coeff(3) = 1.0 coeff(4) = 1.0 coeff(5) = 1 - (1 - tagDown.Value) * 0.33 coeff(6) = 1 - (1 - tagDown.Value) * 0.67 coeff(7) = tagDown.Value ' 计算输出值 (前8个区域) For i = 0 To 7 outTags(i).Value = CDbl(tagBase.Value * coeff(i) * tagFactor.Value) dispTags(i).Value = tagBase.Value * coeff(i) * 100 Next tagMode.Value = 0 ' 切换到自动模式 Else ' 自动模式 ' 读取权重系数 Dim inTags(9) For i = 0 To 9 Set inTags(i) = HMIRuntime.Tags("rcp_HOT_PowerSet_Up_1_" & (i+1)) inTags(i).Read Next ' 计算输出值 (前8个区域) For i = 0 To 7 outTags(i).Value = CInt(tagBase.Value * inTags(i).Value * tagFactor.Value) dispTags(i).Value = CDbl(tagBase.Value * inTags(i).Value) * 100 Next tagMode.Value = 1 ' 切换到手动模式 End If ' 写入所有修改的标签 tagMode.Write For i = 0 To 7 outTags(i).Write dispTags(i).Write Next End Sub ``` ### 优化说明: 1. **使用循环替代重复代码**: - 通过数组循环处理10个加热区标签 - 使用动态标签名构造(`"tag_" & (i+1)`) 2. **代码结构优化**: - 分离核心参数读取和模式判断逻辑 - 使用中间变量存储计算结果 - 删除未使用的冗余变量 3. **可维护性提升**: - 明确定义系数计算数组 - 添加注释说明关键参数作用 - 统一处理标签读写操作 4. **数据处理改进**: - 显式声明变量类型(使用`CDbl`保证精度) - 规范数值转换(`CInt`处理整型输出) 5. **扩展性增强**: - 易调整加热区数量(修改循环范围即可) - 系数计算逻辑集中管理 ### 关键改进点: 1. **动态标签处理**:使用循环构造标签名代替硬编码 2. **模式切换优化**:清晰的状态机切换逻辑(1=手动→0,0=自动→1) 3. **内存管理**:减少不必要的变量声明 4. **计算精度**:确保浮点运算使用`CDbl` 5. **注释完善**:关键步骤添加说明注释 ### 性能建议: 1. 考虑将`tagFactor`移出循环(避免重复读取) 2. 对于实时性要求高的场景,可添加错误处理: ```vbscript On Error Resume Next '...标签操作... If Err.Number <> 0 Then HMIRuntime.Trace "Error: " & Err.Description End If ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值