在STEP 7 Basic V10.5中如何使用本地错误处理查询出现的错误
STEP7 编程常见错误常见错误

STEP7 编程常见错误Mistakes in Programming with STEP7摘要本文档主要用于讨论以下相关问题:STEP7 编程中常见错误常见错误的分析及避免方法关键词Step7;梯形图;语句表;编程;错误Key WordsStep7;LAD;STL;Programming;Mistake目录STEP7编程常见错误 (1)1.前言 (5)2.STEP7编程常见的错误例子 (5)2.1.简单错误 (5)2.1.1.地址超范围 (5)2.1.2.对指令不熟悉 (6)2.1.3.地址重叠 (6)2.2.循环程序错误 (6)2.2.1.循环程序初始化 (7)2.2.2.循环程序执行时间 (8)2.2.3.循环程序累加控制 (9)2.3.数据类型匹配不严谨 (9)2.3.1.STL指令数据类型匹配 (9)2.3.2.数据类型匹配与浮点数运算 (10)2.3.3.浮点数运算与比较指令 (11)2.4.语句执行先后顺序 (11)2.5.上升(下降)沿不工作 (13)2.6.定时器不工作 (15)2.7.定时器的定时与程序扫描周期 (17)2.8.软定时器的使用 (18)2.9.计数器不工作 (18)2.10.数据块错误 (18)2.10.1.打开数据块错误 (18)2.10.2.数据块寻址长度错误 (19)2.10.3.数据块寻址不严谨错误 (19)2.10.4.数据块寄存器使用错误 (19)2.10.5.改变DB 寄存器和地址寄存器AR1 操作 (21)2.10.6.STRUCT数据类型作为FC 或FB 里的地址 (21)2.10.7.STRUCT数据类型作为FC 或FB 的实参被调用 (22)2.10.8.通常情况,DB寄存器不受影响 (23)2.10.9.数据块的完整引用方式的优缺点 (24)2.11.在FC的使用当中常见的错误 (25)2.11.1.ENO的误解 (25)2.11.2.停止对FC调用后引起的故障: (26)2.11.3.FC中临时变量的使用: (28)2.11.4.FC输出处理 (31)2.12.调用FB引起错误 (33)2.12.1.FB的输出处理 (33)2.12.2.在FB中使用AR2 (33)2.13.关于FC/FB使用的总结: (35)2.14.OB块引起错误 (35)2.14.1.OB 未装载 (35)2.14.2.调用中断程序引起的故障 (36)2.15.项目一致性检查(数据块,FB, FC更新) (36)2.16.例子程序的使用事项 (37)2.17.重要声明: (38)3.附录-推荐网址 (38)3.1.西门子自动化与驱动产品的在线技术支持 (38)重要提示:本文为技术交流文档,不能作为订货、选型等重要事宜的唯一依据,建议用户参考Siemens 的标准产品样本和技术手册进行产品的选型和订货。
程序调试与错误处理:常见错误的排查与修复技巧

程序调试与错误处理:常见错误的排查与修复技巧程序调试是软件开发过程中非常重要的一环,它帮助开发人员找出和修复代码中的错误,确保程序能够正常运行。
在本文中,我们将介绍常见错误的排查与修复技巧,帮助开发人员更有效地进行调试工作。
一、常见错误的排查技巧1.错误信息分析:在程序出现错误时,开发人员应该首先查看错误信息。
错误信息通常会提供一些有用的提示,例如错误的位置、错误的类型以及可能的原因等。
通过仔细分析错误信息,开发人员可以更快地定位到问题所在。
2.代码逐行排查:如果错误信息并不明确,开发人员应该逐行检查代码,查找潜在的错误。
这个过程需要细心和耐心,要注意一些常见的语法错误、拼写错误、变量命名错误、逻辑错误等。
3.使用日志:在调试过程中,开发人员可以在关键代码位置加入日志输出语句,以便了解程序的运行情况。
通过查看日志,开发人员可以追踪程序的执行路径,找出错误产生的原因。
4.分步调试:分步调试是调试过程中非常有用的工具。
开发人员可以在关键代码位置设置断点,然后一步一步地执行程序,观察变量的值和执行路径。
通过分步调试,开发人员可以更直观地了解程序的执行过程,找出错误所在。
5.利用调试工具:现代的集成开发环境通常提供了强大的调试工具,例如断点调试、变量监视、堆栈跟踪等。
开发人员可以利用这些工具来辅助调试,更快地定位和修复错误。
二、常见错误的修复技巧1.语法错误修复:语法错误是开发过程中常见的错误之一。
当编译器或解释器报告语法错误时,开发人员应该仔细检查错误所在位置的代码,并修正错误的语法。
2.逻辑错误修复:逻辑错误是开发过程中比较难以排查和修复的错误之一。
针对逻辑错误,开发人员通常需要分析程序的逻辑思路,反复检查条件语句、循环语句和逻辑运算符等,并进行相应的调整。
3.边界条件处理:边界条件是指程序在特定输入或特定情况下可能产生错误的条件。
开发人员应该针对各种可能的边界条件进行充分的测试,并修复可能产生的错误。
STEP7常见编程错误解析

STEP7 编程常见错误分析简单错误地址超范围A M3000.0= Q0.0对指令不熟悉A M 0.0FP M 0.0= Q 0.1地址重叠A M0.0= M11.0…………………L 0T MW10循环程序错误1,程序中没有 MW0 初始化的语句2,循环程序执行时间3,循环程序累加控制循环程序执行时间循环程序执行时需要的时间为 A, 用户其它程序执行需要的时间为 B。
那么,A*500+B 的时间总和一定要小于下图中的 Scan cycle monitoring time[ms],否则,就有可能由于程序扫描时间超出了 CPU 的监控时间而导致 CPU 停机数据类型匹配与浮点数运算1L MD0 //累计流量存储值L MD4 //流量瞬时值+RT MD 02 L MD 0L 1.000000e+001==R= Q 0.0语句执行先后顺序上升(下降)沿不工作123定时器不工作定时器的定时与程序扫描周期•在 S7 系列 CPU 中,定时器的最小时基为 10 毫秒。
也就是说,S7 系列 CPU 的最小定时时间为10 毫秒。
如果用户程序代码量比较大,程序扫描周期过了 10 毫秒,可能会出现如下情况:尽管定时时间已经到达,但 CPU 还没有执行到相关的程序逻辑。
•特别提示:当用户程序中需要非常短的定时功能时,需要考虑程序扫描周期对定时器状态读取的影响。
由于 CPU 中的定时中断是由硬件来保证的,并且有高于 OB1 的优先级, 所以在这种情况下,建议用户使用定时中断的功能来替代定时器的功能。
数据块错误•打开数据块错误•数据块寻址长度错误•数据块寻址不严谨错误•数据块寄存器使用错误数据块寄存器使用错误在 FC 的使用当中常见的错误ENO的使用ENO 的值取决于公式:ENO = EN 与非(error )•如果程序调用没有错误(error = 0),则 ENO = EN。
•如果程序调用有错误(error = 1),则 ENO = 0。
PLC编程中的异常处理和错误检测

超时检测
在PLC通信中,如果某个操作在规 定的时间内没有完成,可以认为 发生了超时错误。通过设定合理 的超时时间,可以检测并处理通 信故障或设备响应延迟等问题。
异常处理与错误检测综合实践
01
编写健壮的程序
在编写PLC程序时,应注重程序的健壮性,即程序应能够处理各种异常
情况而不崩溃。采用结构化编程和模块化设计可以提高程序的可维护性
错误检测技术应用案例
奇偶校验
奇偶校验是一种简单的错误检测 方法,通过在数据中添加一个额 外的位来确保数据中1的个数是偶 数(偶校验)或奇数(奇校验) 。接收方在接收数据时再次计算1 的个数,如果不匹配,则说明数 据在传输过程中发生了错误。
CRC校验
循环冗余校验(CRC)是一种更 强大的错误检测方法,通过在数 据块后添加校验码来确保数据的 完整性。发送方和接收方都使用 相同的CRC算法来计算校验码, 并进行比较以检测错误。
能和性能是否正常。
05
工具与资源推荐
PLC编程软件及调试工具介绍
Codesys
这是一款功能强大的PLC编程软件,支持多种PLC品牌, 提供直观的编程环境和丰富的调试工具,帮助开发者实现 高效的异常处理和错误检测。
Siemens TIA Portal
西门子TIA Portal是一款集成化的PLC编程和调试工具, 提供全面的诊断功能,支持实时监控和在线修改,方便开 发者快速定位和解决问题。
优化维护流程
通过异常和错误的记录与分析,为 PLC程序的维护和优化提供有力支 持。
PLC编程中的异常和错误概述
异常
指程序在运行过程中出现的非正常情 况,如输入信号异常、通信故障等。 这些情况可能会导致程序运行不稳定 或产生错误结果。
如何使用程序编辑器进行代码调试和错误排查

如何使用程序编辑器进行代码调试和错误排查在软件开发中,调试和错误排查是一个非常重要的过程。
代码的调试和错误排查可以帮助开发者找出程序的错误并进行修复,保证程序的正常运行。
本文将介绍如何使用程序编辑器进行代码调试和错误排查。
一、设置断点在进行代码调试和错误排查之前,我们需要先设置断点。
断点是程序中的一个标记点,当程序执行到该点时,程序会暂停执行,我们可以查看程序的状态、变量的值以及代码执行的顺序,从而帮助我们找出错误。
断点可以在程序编辑器中设置。
二、步进执行在程序暂停执行的状态下,我们可以逐行执行代码,这个过程称为步进执行。
步进执行有以下几种方式:1. 单步执行:每次执行一行代码,可以一步一步地查看代码执行的过程和变量的变化。
2. 跳过:跳过当前的函数或方法的执行,直接执行下一行代码。
3. 运行到光标处:将程序运行到鼠标所在的行,并停在该行上。
通过步进执行,我们可以逐步分析代码的执行情况,找出代码中的错误。
三、查看变量在程序中,变量的值是随着代码的执行而发生变化的。
如果程序的输出结果不符合预期,我们可以通过查看变量的值来判断程序中的错误。
在程序编辑器中,通常有一个变量窗口或者控制台窗口可以显示当前程序中的变量的值。
我们可以在程序执行的任何时候查看变量的值,从而帮助我们定位错误。
四、条件断点有些时候,在程序的某个特定条件下,我们希望程序能够暂停执行,这时就可以使用条件断点。
条件断点会在程序满足指定条件时暂停执行。
在程序编辑器中,我们可以设置条件断点,并指定条件,当程序执行到该点时,只有当条件满足时,程序才会暂停执行。
通过条件断点,我们可以定位那些只在特定条件下才会出现的错误。
五、日志输出除了使用断点进行调试外,我们还可以通过日志输出的方式来查找错误。
在代码中,我们可以在关键位置插入日志输出语句,用来输出一些关键变量的值或者程序执行到达某个位置。
通过查看日志输出,我们可以了解程序的执行流程和关键变量的取值情况,从而帮助我们找出错误。
在Visual Basic中处理错误

6
+ Resume Next也可用于发生在循环内的错误, 此时,需要重启动操作。还可使用Resume 行号,它把控件返回到指定的行号。
16
+ 使用On Error Resume Next时要特别小心,用户的错误处理程序 可能会忽略用户没有意识到的错误。
+ Raise方法引发一个错误。如果想避免复制错误捕获程序,可以 用Raise方法把错误传回调用过程,或检测错误处理程序。Visual Basic有足够的号码对应自己的错误,且有富余。如果用户想生 成并捕获自己的错误,可以使用32767以下的数字。
10
+ 通过调用列表后退搜索的效果很难预测, 因为这要取决于在成功处理错误的处理程 序中是否执行了Resume或Resume Next语句。 Resume把控件返回到刚执行过的过程调用, 而该过程包含错误处理程序。Resume Next 则把控件返回到最近一次执行过的过程调 用之后的任何语句之处,而且调用的过程 包含错误处理程序。
+ 如果Visual Basic查找到一个激活的错误处理例程,执行会在这个例程 中继续下去。如果在错误处理例程中执行Resume或Resume Next语句, 执行也继续下去。
+ 如果错误处理程序的错误范围不包括实际产生的错误,则在具有激活 的错误处理程序的过程内会产生意想不到的错误。这时过程可能会陷 入死循环,特别是如果错误处理程序还执行Resume语句时,情况更是 如此。为防止这种情况出现,在程序内的Case Else语句中使用Err对象 的Raise方法。这实际上是在错误处理程序内生成一条错误,从而迫使 Visual Basic通过调用列表搜索能够处理错误的处理程序。
学习如何使用调试工具找出代码中的错误

学习如何使用调试工具找出代码中的错误调试工具是程序员在开发过程中的得力工具,它们可以帮助我们找出代码中的错误和问题,提高我们的开发效率。
下面将介绍如何使用常见的调试工具来定位代码错误:一、日志输出工具日志输出工具是调试常用的工具之一,它可以输出程序运行时的信息,帮助我们了解程序的执行流程以及变量的值。
在代码中插入适当的日志输出语句,可以帮助我们追踪程序的执行路径,查找错误。
二、断点调试工具断点调试是调试工具的一项重要功能,通过设置断点,我们可以暂停程序的执行,在暂停的状态下查看变量的值、执行路径等信息,帮助我们找出问题所在。
在开发过程中,我们可以通过设置断点来定位代码中的问题,一步步查看程序的执行情况,找出错误。
三、单步调试工具单步调试工具可以让我们一步一步地执行代码,帮助我们追踪程序的执行路径,查看变量的值,找出程序中的错误。
通过单步调试工具,我们可以逐行查看代码的执行情况,帮助我们找出问题所在。
四、内存调试工具内存调试工具可以帮助我们检测程序中的内存泄漏、内存溢出等问题,帮助我们提高程序的性能和稳定性。
通过内存调试工具,我们可以监控程序运行时的内存分配和释放情况,帮助我们找出内存泄漏的问题,并加以解决。
五、性能分析工具性能分析工具可以帮助我们分析程序的性能瓶颈,并优化程序的性能。
通过性能分析工具,我们可以查看程序的执行时间、资源占用情况等信息,帮助我们找出程序中的性能问题,并进行相应的优化。
六、网络调试工具网络调试工具可以帮助我们分析网络请求、响应等信息,帮助我们找出网络请求中的问题。
通过网络调试工具,我们可以查看网络请求的详细信息,帮助我们找出网络请求中的错误,并进行相应的修复。
总结起来,调试工具是程序员在开发过程中的得力助手,它们可以帮助我们找出代码中的错误和问题,提高我们的开发效率。
在实际开发中,我们可以根据具体的情况选择合适的调试工具,结合日志输出、断点调试、单步调试、内存调试、性能分析和网络调试等工具,来帮助我们快速有效地定位和修复代码中的错误。
在S7-SCL中关于错误信息及警告的提示和技巧

在S7-SCL中关于错误信息及警告的提示和技巧编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(在S7-SCL中关于错误信息及警告的提示和技巧)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为在S7-SCL中关于错误信息及警告的提示和技巧的全部内容。
图01https://support.industry。
/cs/” l 消息:“Character strings have different lengths”在图02 示例中包含FC1 和FC2 带有字符串变量"name_1”与”name_2”,当FC1 被编译时,得到警告"Character strings have different lengths”。
在运行期间,在赋值的右侧(”name_1”)可能是一个比左侧所允许的STRING 变量(”name_2”)具有更长长度的STRING 字符串。
补救方法:建议为左边的变量“name_2”声明一个长度为254 字符的 STRING 字符串。
如果编译具有这个声明的功能块 FC2 ,上述警告将不会再出现。
句法错误”的错误消息,编译停止。
该规则也应用于 STL 源程序声明。
UDT 通常不能被装载到 S7 CPU 中,但总是存储于“离线”的 S7 用户程序中.背景对于数据块的情况,“UNLINKED” 属性意味着 DB 块关联.•在程序中非一体化的•仅存储于装载存储器中•不占据任何空间。
“UNLINKED” 属性在数据块头部声明(图 03)图03https://support.industry。
/cs/http://support。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面是几个上述的本地错误处理的例子。更多关于上述指令及其输出参数的信息可以在 STEP 7 Basic 在线帮助的以下主题中找到:
• • • •
本地错误处理的机制 GetError GetErrorID 使能块的本地错误处理
例子 1: I/O 访问错误 当模块不存在或模块有缺陷时直接访问 I/O,CPU 会进入停机模式。在程序代码中加入"GetError" 指令,在 I/O 访问错误时可以避免缺省的系统反应(进入停机模式)。当读错误时,程序使用替 代值 0 继续处理。 1. 错误数据传输至 DB15 ("Diagnostic")的结构体变量 "Error" 中。转换器读取结构体变量中 的 "Diagnostic.Error.AREA" ,并将其从 Byte 类型转换为 UInt 类型。 2. 第一个操作 "Same" 查询存储区 "AREA" 与 I/O 区是否一致。I/O 区具有识别符 "P" 和 16 进制代码 "16#80" (对应于无符号整数 128) 3. 第二个操作 "Same" 检查 I/O 模块的起始地址。结构体里的 "OFFSET" 包含相应地址的操 作数。所以此处对于输入地址 2,应与其相应的值 16 比较(OFFSET=2x8=16). 4. 如果两个 "Same" 操作都满足,标志位 M40.0 (I/O_Addr型:常问问题)
P2-4
Service & Support
图. 02 例子 3: 数据块的操作数超出有效区 图. 03 演示了对一个读错误的处理。与前两个例子一样,指令 "GetError" 将错误信息传到了 DB15 ("Diagnostic") 的结构体变量 "Error" 中。 1. 结构体内的 "DB_NUMBER" 包含出错 DB 块的块号 (例如对于 DB20,则该值为 20) ,将 该值用"MOVE" 指令传送给 MW30. 2. 结构体内的 "OFFSET" 包含相关的操作数的地址 (例如 DB 块中的第 40 位). 为得到 Byte 地址,使用"DIV"指令,把该值 除以 8(8 bits),结果 (DB 中的 Byte 地址) 存储在 MD32 中。
(填写文档类型:常问问题)
P3-4
Service & Support
3. 本例中,使用"Greater"指令查询 DB 访问地址是否超过了 2 字节,使用 "Same" 指令查询 DB 的存储区 (DB: 16#84)是否是相关的。在这之前,结构体中的 "AREA" 必须先从 Byte 类型转换为 Int 类型。 4. 如果"Greater" 和 "Same"两个条件都满足,标志位 M10.1 ("Activity") 置 1.
(填写文档类型:常问问题)
P4-4
图. 03 说明 只要将指令 "GetError" 和 "GetErrorID" 中的一个插入到网络并编译下载至 CPU 中,块的本地错 误处理就使能,系统响应(例如停机模式)被忽略。这两个指令可以在文件夹"Program Control Instructions" 的 "Extended instructions" 中找到。 实验环境 本 FAQ 中提到的图片由 STEP 7 Basic 版本 V10.5+SP2 生成。 条目号:43713352 日期:2010-10-29
"GetErrorID" 指令的输出参数 "ID"是 Word 数据类型,它包含第一条出现错误的 ID. "GetError" 指令的输出参数"ERROR"是 "ErrorStruct" 系统数据类型,它包含更多关于出 现的错误的信息。 当第一条错误被清除后,上面两条指令给出下一条错误的 ID 和错误数据。 可以在 OB、FB、FC 块中使用本地错误处理。 为了评估错误,必须将上述指令插入到可能出现错误的块里面。(例如 I/O 访问错误) 也可以使用上述指令将关于错误状态的信息传给调用它的块。要实现该功能,需要将上述 指令放在调用块的最后一句调用。
Service & Support
在 STEP 7 Basic V10.5 中如何使用本地错误处理查询出现的错误?
说明 使用扩展指令 "GetError" 和 "GetErrorID" 可以查询块中出现的错误并评估相关错误数据。这样可 以避免 CPU 进入停机模式并继续程序的运行。
• • • • • •
(填写文档类型:常问问题)
P1-4
Service & Support
图. 01 例子 2: 参数化的数据块在 CPU 中不存在 如图 02 中 MOVE 指令所示,作为参数的 DB22 在 CPU 中并不存在。T 错误数据传送到 DB15 ("Diagnostic")的结构体变量中。图 02 表示了 LAD 程序和 DB15 的在线视图。T 存储在 DB15 "Diagnostic" 中的结构体变量 "Error" (数据类型: ErrorStruct) 可以在不同的 FB, FC 或 OB 中进一 步编程处理。 DB15 的变量监视提供了如下信息: ERROR_ID: 16#253A REACTION: 16#01 BLOCK_TYPE: 3 CODE_BLOCK_NUMBER: 11 AREA: 16#84 DB_NUMBER: 22 FB11 中打开了并不存在于 CPU 中的 DB22. 全局数据块不存在 读错吴,程序利用替代值继续处理 FB"块的代码. 出现错误的程充块的块号 11. DB 的存储区. DB22 不存在