tag

本文探讨了如何使用PHP处理URL请求并获取类型信息的方法。同时介绍了前端弹出分享面板的功能,包括设置标题、链接等参数,并实现了点击分享的效果。此外,还提到了成功或失败提示的弹出框设计。
1,send php url ,get type info
2,popup share panel, include title,link,type, click share
3,popup success or fail
本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
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 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值