西门子: LED、GET_DIAG、RDREC、RALRM、Gen_UsrMsg诊断指令的使用(二)
发布时间:2024-11-26
读取数据记录1. 读取数据记录指令的调用,如图10所示。图10. 读取数据记录指令2. 读取数据记录指令的使用。说明:RDREC读取数据记录指令,可以从使用ID寻址的模块中读取编号为INDEX的数据记录。模块必须是位于分布式模块(PROFIBUS DP、PROFINET IO、AS-i)。使用参数 ID 选择从中读取数据记录的模块,使用模块的硬件标识符,在"PLC 变量 -> 系统常量“中。例如:ET200SP分布式IO 的 DQ模块,将显示为数据类型为"Hw_SubModule"的 IO_device_1~DQ_16x24VDC_0_5A_ST_1。使用 INDEX 参数,可选择模块待读取的数据记录。例如:”16#E00A“,表示读取 IO 设备的诊断数据记录。使用 MLEN 指定要读取的最大数据记录字节数。如果参数 MLEN 选择了长度”0“,则会在参数 RECORD 中写入完整的数据记录。目标区域 RECORD用来保存数据记录,在参数 RECORD 中使用的结构(例如:组态、数据类型和长度)取决于由哪个模块读取哪条数据记录。输出参数 VALID 的值为 TRUE,表示数据记录已成功传送到目标区域 RECORD 中。此时,输出参数 LEN 包含所读取数据的字节长度。如果在数据记录的传送过程中发生错误,输出参数 ERROR 置 ”1“。输出参数 STATUS 中包含错误信息。示例:本例中,IO控制器为S7-1200 CPU1215C,带有 DQ 模块的 IO 设备 (ET 200SP IM 155-6 PN HF) 导致线路断路。使用该 IO 设备前端模块的硬件 ID,使用数据记录16#E00A 进行通道诊断。在全局DB中创建七个变量和一个数组,用来保存数据。 如图11所示:图11. 在全局DB中创建变量在OB1中调用RDREC指令,连接参数,在"PLC变量->系统常量"中的 <IO_Device~Head> 条目,读取 IO 设备前端模块的硬件 ID(数据类型为“Hw_SubModule”),使用数据记录16#E00A 进行通道诊断,如图12所示:图12. 在OB1中调用RDREC指令当RDREC指令出错时要存储错误状态,可连接MW100("Status")变量,如图13所示:图13. 在OB1中调用MOVE指令诊断数据记录的结构16#E00A,版本号BlockVersion=16#0100,如表4所示:表4 数据记录结构一名称长度BlockType2 bytesBlockLength2 bytesBlockVersion2 bytesSlotNumber2 bytesSubslotNumber2 bytesChannelNumber2 bytesChannelProperties2 bytesUSI2 bytesUSI=16#8000ChannelNumber2 bytesChannelProperties2 bytesChannelErrorType2 bytesUSI=16#8002ChannelNumber2 bytesChannelProperties2 bytesChannelErrorType2 bytesExtChannelErrorType2 bytesExtChannelAddValue4 bytesUSI=16#0000-16#7FFFvendor-specificX bytes诊断数据记录的结构16#E00A,版本号BlockVersion=16#0101,如表5所示:表5 数据记录结构二名称长度BlockType2 bytesBlockLength2 bytesBlockVersion2 bytesAPI4 bytesSlotNumber2 bytesSubslotNumber2 bytesChannelNumber2 bytesChannelProperties2 bytesUSI2 bytesUSI=16#8000ChannelNumber2 bytesChannelProperties2 bytesChannelErrorType2 bytesUSI=16#8002ChannelNumber2 bytesChannelProperties2 bytesChannelErrorType2 bytesExtChannelErrorType2 bytesExtChannelAddValue4 bytesUSI=16#0000-16#7FFFvendor-specificX bytes输入参数 REQ("Req")返回信号状态"TRUE"时,启动指令RDREC。RDREC指令将通过输入参数ID(本例中为"283",表示 IO 设备前端模块的硬件 ID),调用该模块。通过输入参数INDEX(本例中为"16#E00A"),系统将使用数据记录16#E00A 进行通道诊断,并通过参数RECORD("RecordDiag")进行保存。通过输出参数LEN("Len"),可存储所读取数据记录的长度。根据输入参数MLEN("Mlen")的值,值为"0"时,待读取的数据记录信息将不受限制。在执行过程中,输出参数BUSY("Busy")将置位为"TRUE";VALID("Valid")将置位为"FALSE"。在执行完成后,将输出成功读取的结果("Valid"到"TRUE")。并在输出参数STATUS("Status")处,显示该块的状态,如果值为"16#0000_0000",表示过程成功执行且无任何错误。如图14所示:图14. RDREC指令执行结果此外,数据记录16#E00A中包含以下信息:BlockType("RecordDiag[0]"):16#0010,表示诊断记录;BlockLength("RecordDiag[1]"):16#0016,表示包含诊断记录的连续字节数为22个字节;BlockVersion("RecordDiag[2]"):16#0101,表示版本号为16#0101;API("RecordDiag[3]和RecordDiag[4]"):0,表示应用程序进程标识符,标准API为0;SlotNumber("RecordDiag[5]"):16#0002,表示插槽号为2;SubslotNumber("RecordDiag[6]"):16#0001,表示子模块为1;ChannelNumber("RecordDiag[7]"):16#8000,表示子模块级别上的诊断;ChannelProperties("RecordDiag[8]"):16#0800,表示诊断未决;USI("RecordDiag[9]"):16#8000,表示用户结构标识符;ChannelNumber("RecordDiag[10]"):16#0003,表示通道3发生故障。ChannelProperties("RecordDiag[11]"):16#4801,表示输出位信号诊断未决。ChannelErrorType("RecordDiag[12]"):16#0006,表示断路故障。参数RECORD("RecordDiag")中显示了数据记录信息,如图15所示:图15. RDREC指令执行结果(数据记录信息"RecordDiag")接收中断1. 接收中断指令的调用,如图16所示。图16. 接收中断指令2. 接收中断指令的使用。说明:RALRM接收中断指令,可以从I/O模块(集中式组态)或DP从站/PROFINET IO设备的模块中接收带有所有相关信息的中断,并在输出参数中输出该信息。输出参数中的信息包括所调用 OB 的信息。例如:输出信息包含诊断错误中断OB82的启动信息和管理信息。目标范围 AINFO 中的数据结构包含标头信息和附加中断信息。附加中断信息取决于格式标识符,例如:格式标识符16#8000表示通道诊断。RALRM指令可以在三种操作模式中调用(MODE 参数),如表6所示:表6 RALRM指令的参数MODEMODERALRM0表示输出参数 ID 中触发中断并将输出参数 NEW 设置为 TRUE 的组件。1写入所有输出参数,而不考虑触发中断的组件。2检查输入参数 F_ID 中指定的组件是否已触发中断。如果没有触发,则 NEW = FALSE如果已触发,则 NEW = TRUE 且已写入所有其它输出参数。示例:创建一个输入模块,在"PLC变量->系统常量"中,读取输入模块的硬件标识符。并通过输入参数F_ID("F_ID")存储该硬件标识符。为了产生一个中断,该输入通道需选择"断路"选项。该选项位于"模块参数->通道模板->输入"中。如图17所示:图17 组态输入模块的诊断信息在全局DB中创建七个变量,和结构"Tinfo"和"Ainfo"进行数据存储,创建数据类型为"TI_DiagnosticInterrupt"的结构"Tinfo",如图18所示:图18. 在全局DB中创建变量创建诊断错误中断OB82,如图19所示:图19. 创建OB82在OB82中调用RALRM指令,并连接参数,如图20所示:图20. 在OB82中调用RALRM指令发生断路故障时,输入模块将生成一个中断。之后,将调用诊断错误中断OB82,并启动指令RALRM。RALRM指令将通过输入参数F_ID("F_ID")调用该输入模块。指令RALRM将根据输入参数MODE("Mode")的值"2",检查中断是否由该输入模块产生。如果中断来自该输入模块("F_ID"和"ID"相同),则输出参数NEW("New")将置位为"TRUE",并通过参数TINFO("Tinfo")和AINFO("Ainfo")保存该中断信息。生成该中断的模块硬件标识符将显示在输出参数ID("ID")处。已接收到的中断信息长度将记录在输出参数LEN("Len")中。根据输入参数MLEN("Mlen")的值,值为"0"时,待读取AINFO("Ainfo")的信息将不受限制。并在输出参数STATUS("Status")处,显示该块的状态,如果值为"16#0000_0000",表示过程成功执行且无任何错误。如图21所示:图21.RALRM指令执行结果OB82的启动信息和管理信息均存储在参数TINFO("Tinfo")中。生成的中断包含以下信息:OB82启动信息:OB82使用优化启动信息("SI_Format"和值"254")。OB82管理信息:读取状态为"错误"(参见"IO_State"的值)的输入模块(参见"LADDR")。最近记录的通道"0"的中断(参见"Channel"的值)。最近记录的站"1"的中断(参见"address"的值)。从站的配置文件(参见"slv_prfl"的值)。由组态的分布式模块触发的中断(参见"intr_type"的值)。如图22所示:图22.TINFO参数的详细信息有关中断的标头信息和附加信息,均存储在参数AINFO("Ainfo")中。生成的中断包含以下信息:所用OB是一个诊断中断OB("InterruptType",值为"1")。系统报告模块在插槽"2"("SlotNumber")处和子模块插槽"1"处发生中断("SubSlotNumber")。对于子模块("InterruptSpecifier",值为"16#A89C"),为中断指示符。在本示例中,使用通道诊断的结构("FormatIdentifier",值为"16#8000")。触发该中断的组件通道编号将分配给该子模块("ChannelNumber",值为"16#0000")。诊断输入通道的一个到达错误("ChannelErrorType",值为"16#28")。所用的数据格式为一个位("DataFormat",值为"16#01")。诊断一个断路故障("ErrorCode",值为"16#0006")。如图23所示:图23.AINFO参数的详细信息注:AINFO变量建议使用非优化数据块,如使用优化块,需要使用BYTE类型的数组,以免数据发生错乱。生成用户诊断报警1. 生成用户诊断报警指令的调用,如图24所示。图24. 生成用户诊断报警指令2. 生成用户诊断报警指令的使用。说明:Gen_UsrMsg生成用户诊断报警指令,可以生成在诊断缓冲区中输入的报警。可以使用 Mode 参数选择生成到达的报警还是离去的报警。当 Mode = 1 时:创建到达的报警。当 Mode = 2 时:创建离去的报警。无论生成到达的报警还是离去的报警,报警始终具有”仅信息“属性。条目在诊断缓冲区中同时创建,而报警将进行异步传送。如果指令在执行过程中出错,则将在参数 RET_VAL 处输出错误信息。示例:在全局DB中创建五个变量和一个"AssocValues"结构(数据类型为AssocValues),用来保存数据,如图25所示:图25. 在全局DB中创建变量在OB1中调用Gen_UsrMsg指令,并连接参数,如图26所示:图26. 在OB1中调用Gen_UsrMsg指令使用"PLC报警文本列表->文本列表"条目为报警创建文本列表和文本列表条目。在参数TextListID("TextListID")中应用文本列表的ID。在参数TextID("TextID")中应用文本列表条目的ID(范围...)。分配报警参数,如图27所示:图27. 分配报警参数如果常开触点("En")的信号状态为"TRUE",则执行"Gen_UsrMsg"指令。根据参数Mode("Mode")的值,生成到达的报警。使用参数TextListID("TextListID")和TextID("TextID")使指令指向待输出的报警。使用参数AssocValues("AssocValues")传送报警的关联值。生成报警时,将按下列方式解释报警文本中包含的字符串"@7I%5d@":编号为"7"的关联值以INT数据类型读取。该编号对应于"AssocValues"结构的参数Value[5]。关联值将作为一个十进制数输出。十进制数被限制为五位数。通过输出参数 Ret_Val("ReturnValue"),值为"0",指示该指令的处理无错误。如图28所示:图28. Gen_UsrMsg指令执行结果要输出报警,对于S7-1200系列的CPU,请打开条目"在线与诊断->诊断缓冲区",如图29所示:图29. 诊断缓冲区中输入的报警注:关于诊断指令的更多信息请参考TIA STEP7 V16软件中的帮助文档。常见问题 通过"LED"指令读取扩展模块的指示灯状态报错?在设备视图中组态S7-1200的扩展模块SM1231 AI4(订货号:6ES7 231-4HD32-0XB0),硬件标识符为279。通过"LED"指令诊断扩展模块SM1231 AI4的DIAG指示灯的状态,输出参数RET_VAL("ReturnValue")为-32622,如图30所示。该输出对应16#8092,表示由参数LADDR寻址的硬件组件不会返回所需信息。因此,无法通过"LED"指令诊断扩展模块SM1231 AI4。图30. "LED"指令执行结果 S7-1200 CPU可以同时激活多少个RDREC/WRREC指令?最多可以同时使用四条RDREC指令和四条WRREC指令。 RALRM指令必须要在中断OB中调用吗?由于要检查的I/O中断,因此仅在CPU操作系统启动的中断OB内调用RALRM指令。如果在启动事件不是I/O中断的OB中调用RALRM指令,则该指令将在其输出中提供相应精简的信息。需要确保在不同OB中调用RALRM指令时使用不同的背景数据块。 使用Gen_UsrMsg指令如何定义文本列表中的相关值?在文本列表条目中,可通过添加以下信息定义相关值:@<关联值的数量><元素类型><格式规范>@,如图31所示:图31. 文本列表中定义相关值相关值中的<元素类型>可以通过下表定义,如图32所示:图32. 相关值中的<元素类型>相关值中的<格式规范>可以通过下表定义,如图33所示:图33. 相关值中的<格式规范>
展开全文
其他新闻
- 西门子: LED、GET_DIAG、RDREC、RALRM、Gen_UsrMsg诊断指令的使用 2024-11-26
- 怎样进行PLC调试 2024-11-26
- 实例S7-1200 “ 运动” 控制,插入工艺对象“ 轴” 2024-11-26
- 10kV高压开关柜柜体设计注意要点 2024-11-26
- 西门子S120变频器的硬件配置 2024-11-26
- PLC控制系统中PROFIBUS-DP从站掉站的故障分析及处理 2024-11-26
- 如何设置西门子CPU系统执行时间 2024-11-26
- 如何实现S7-1500F安全PLC和 S120 的安全通信 2024-11-26
- S7-200 SMART PLC如何实现PID自动/手动调节切换? 2024-11-26
- 博途中S7-1200F CPU和S7-1500F CPU实现PN/PN Coupler 通信 2024-11-26