广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
西门子: LED、GET_DIAG、RDREC、RALRM、Gen_UsrMsg诊断指令的使用
发布时间:2024-11-26

在TIA STEP7 V16版本中,可以通过相应的诊断指令去实现对S7-1200 CPU(固件版本V4.4)和扩展模块的诊断操作。读取LED状态的操作。(LED)读取诊断信息的操作。(GET_DIAG)读取数据记录的操作。(RDREC)接收中断的操作。 (RALRM)生成用户诊断报警的操作。 (Gen_UsrMsg)常见问题本文将详细介绍上述各个指令的使用。读取LED状态1. 读取LED状态指令的调用,如图1所示。图1. 读取LED状态指令2. 读取LED状态指令的使用。说明:可以使用“LED”指令,读取CPU上面LED的状态。通过LADDR参数,可以寻址CPU。通过LED参数,可以选择要通过该指令读取当前状态的模块LED指示灯。调用该指令时,RET_VAL参数将输出所选LED的状态。根据所选的LED,将仅显示指定的状态信息。如表1所示:表1 "LED"指令的参数参数声明数据类型说明LEDInputUINTLED 的标识号:1:STOP/RUN2:ERROR3:MAINT(维护)5:Link(绿色)6:Rx/Tx(黄色)RET_VALReturnINTLED 的状态:0 = LED 不存在或状态信息不可用1 = yongjiu关闭2 = 颜色 1(例如,对于 LED STOP/RUN:绿色)yongjiu点亮3 = 颜色 2(例如,对于 LED STOP/RUN: 橙色) yongjiu点亮4 = 颜色 1 将以 2 Hz 的频率闪烁5 = 颜色 2 将以 2 Hz 的频率闪烁6 = 颜色 1 和 2 将以 2 Hz 的频率交替闪烁7 = LED 正在运行,颜色 18 = LED 正在运行,颜色 29 = LED 不存在或状态信息不可用示例:下面的示例中,显示了如何读取CPU上面的LED状态。在全局DB中创建两个变量,用来保存数据,如图2所示:图2. 在全局DB中创建变量在OB1中调用"LED"指令,并连接参数,其中参数LADDR指向CPU的硬件标识符(在"PLC变量->系统常量"中,名称为"Local~Common"),如图3所示:图3. 在OB1中调用"LED"指令通过参数LED("LED")指向待监视CPU的LED。示例一中参数LED("LED"=1)表示查询CPU的LED(STOP/RUN)状态。如果CPU的操作模式从STOP转入RUN,则在输出参数RET_VAL("ReturnValue")中的值为"6"(绿色和橙色交替闪烁)。如图4所示:图4. "LED"指令执行结果(示例一)通过参数LED("LED")指向待监视CPU的LED。示例二中参数LED("LED"=2)表示查询CPU的LED(ERROR)状态。如果CPU中发生错误,则在输出参数RET_VAL("ReturnValue")中的值为"4"(红色闪烁)。如图5所示:图5. "LED"指令执行结果(示例二)读取诊断信息1. 读取诊断信息指令的调用,如图6所示。图6. 读取诊断信息指令2.读取诊断信息指令的使用。说明:GET_DIAG指令可以用来读取硬件组件的诊断信息。例如:读取S7-1200 CPU的诊断信息。通过LADDR参数,来选择硬件组件。通过MODE参数,可以选择要读取的诊断信息。通过DIAG参数,根据不同的MODE参数,输出不同的诊断信息。如表2所示:表2 GET_DIAG指令的MODE参数和DIAG参数对应关系MODE说明DIAGCNT_DIAG0以 DWORD 格式输出硬件组件所有支持的诊断信息,其中位 X=1 表示支持模式 X。DWORD 数据类型的位:位 0 = 1:支持 MODE 0。位 1 = 1:支持 MODE 1。位 2 = 1:支持 MODE 2。位 3 到 31:不相关MODE=0 时,S7-1200 CPU 将忽略参数 LADDR。01输出所寻址硬件组件的诊断状态。结构 DIS:MaintenanceStateComponentStateDetailOwnStateIOStateOperatingState02输出所寻址硬件对象中所有从属组件的状态。结构 DNN:SubordinateStateSubordinateIOStateDNNmode0当参数MODE=1时,参数DIAG以结构 DIS 输出诊断信息。此时,在变量声明中输入系统数据类型“DIS”作为数据类型。结构DIS的内容如表3所示:表3 结构DIS中各参数的含义参数数据类型值说明参数构成规则MaintenanceStateDWORD枚举MaintenanceState 取决于 ComponentStateDetail。0良好ComponentStateDetail 的位 15 始终为 1。ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。ComponentStateDetail 的位 3 可以是 1。ComponentStateDetail 的所有其它位均为 0。1硬件组件已禁用。如果 ComponentStateDetail 的位 16 为 1如果 ComponentStateDetail 的位 17 为 12--3--4--5需要维护如果 ComponentStateDetail 的位 4 为 16要求维护如果 ComponentStateDetail 的位 5 为 17错误如果 ComponentStateDetail 的位 6 为 18上一级硬件组件的状态为“未知/错误”如果 ComponentStateDetail 的位 11 到 14 的值为 3如果 ComponentStateDetail 的位 7 到 10 的值为 3 或 49--10输入/输出不可用。如果 ComponentStateDetail 的位 11 到 14 的值为 2如果 ComponentStateDetail 的位 7 到 10 的值为 1 或 2如果 ComponentStateDetail 的位 18 为 1如果 ComponentStateDetail 的位 19 为 1ComponentStateDetailDWORD位数组状态:位 0 到 15:硬件组件的状态位 16 到 31:CPU 的状态-0 到 2(枚举)其它信息:0:无其它信息1:不允许传送-3位 3 = 1:至少一个合格诊断可用-4位 4 = 1:至少一个通道或组件需要维护-5位 5 = 1:至少一个通道或组件需要维护-6位 6 = 1:至少一个通道或组件错误-7 到 10(枚举)0:硬件组件可用1:无 I/O 访问2:硬件组件不可访问3:硬件组件不可访问4:硬件组件不可访问-11 到 14(枚举)0:元素正确。1:该元素将替代为一个兼容元素。2:该元素将替代为一个非兼容元素(该元素可访问,但尚未就绪无法操作)。3:该元素不存在。-15预留(始终为“1”)。-16 到 31CPU 生成的模块状态信息:第 16 位 = 1:子模块或模块已禁用第 17 位 = 1:激活 CiR 操作第 18 位 = 1:输入不可用第 19 位 = 1:输出不可用第 20 位 = 1:诊断缓冲区溢出第 21 位 = 1:诊断不可用第 22 位 = 1: 部分设备故障(带有 PNIO,可用于共享设备)第 23 到 31 位 :预留(始终为 0)-OwnStateUINT枚举维护状态OwnState 取决于 MaintenanceState。0良好如果 MaintenanceState 的值为 0。1禁用如果 MaintenanceState 的值为 1。2需要维护如果 MaintenanceState 的值为 5。3要求维护如果 MaintenanceState 的值为 6。4错误如果 MaintenanceState 的值为 7。5不可访问如果 MaintenanceState 的值为 8。6诊断状态未知未返回诊断事件的组件的默认值。7输入/输出不可用。如果 MaintenanceState 的值为 10。IOStateWORD位数组硬件组件的 I/O 状态可设置一个或多个位。IOState 取决于 ComponentStateDetail。位 0 = 1良好ComponentStateDetail 的位 15 始终为 1。ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。ComponentStateDetail 的位 3 可以是 1。ComponentStateDetail 的所有其它位均为 0。如果位 0 = 1,则位 1 到 5 和位 7 = 0。位 1 = 1禁用如果 ComponentStateDetail 的位 16 为 1如果 ComponentStateDetail 的位 17 为 1如果位 1 = 1,则所有其它位均为 0。位 2 = 1需要维护如果 ComponentStateDetail 的位 4 为 1位 3 = 1要求维护如果 ComponentStateDetail 的位 5 为 1位 4 = 1错误如果 ComponentStateDetail 的位 6 为 1位 5 = 1硬件组件无法访问。如果 ComponentStateDetail 的位 11 到 14 的值为 3如果 ComponentStateDetail 的位 7 到 10 的值为 3 或 4如果位 5 = 1,则所有其它位均为 0。位 6 = 1:至少一个合格诊断可用如果 ComponentStateDetail 的位 3 为 1。在这种情况下,将位 0、2 或 3 置位。位 7 = 1:I/O 数据不可用如果 ComponentStateDetail 的位 11 到 14 的值为 2如果 ComponentStateDetail 的位 7 到 10 的值为 1 或 2如果 ComponentStateDetail 的位 18 为 1如果 ComponentStateDetail 的位 19 为 1位 8 到 15预留(始终为“0”)-OperatingStateUINT枚举-0不支持 - 对于 I/O 模块,OperatingState 的值始终为“0”。-1STOP / 固件更新-2STOP / 存储器复位-3STOP / 自启动-4STOP-5存储器复位-6启动-7--8RUN-9RUN-Redundant-10HOLD-11--12--13DEFECT(注:仅在诊断缓冲区条目中可见)-14--15断电(注:仅在诊断缓冲区条目中可见)-16CiR-17STOP,且无 ODIS-18RUN ODIS-19PgmTest-20RunPgmTest(备用 CPU 处于测试模式时主 CPU 的状态)-21Run-Syncup(只有主 CPU 处于SYNCUP 系统状态)-22SYNCUP(仅备用 CPU 处于 SYNCUP 系统状态)-31伙伴 CPU 的状态未知(如,伙伴 CPU 不可用)-32--33STOP 系统状态-34预留-35STARTUP 系统状态-36预留-37RUN-Solo 系统状态-38SYNCUP 系统状态-39预留-40RUN-Redundant 系统状态-示例:在全局DB中创建三个变量和一个"Diag"结构(数据类型为DIS),用来保存数据,如图7所示:图7. 在全局DB中创建变量在OB1中调用GET_DIAG指令,并连接参数,其中参数LADDR指向CPU的硬件标识符(在"PLC变量->系统常量"中,名称为"Local~Common"),如图8所示:图8. 在OB1中调用GET_DIAG指令根据参数MODE("Mode")的值"1",有以下几点说明:指令将读取(CPU的)所寻址硬件对象的状态。在参数DIAG("Diag")中,诊断信息将在结构(DIS数据类型)中输出。要了解诊断信息,必须将十六进制值转换为二进制代码。通过参数DIAG("Diag"),指示以下信息:MaintenanceState:根据值"6",表示CPU要求维护。ComponentStateDetail:根据十六进制值"0000_8020",位15已激活(预留,始终为"1"),位5已激活(至少一个通道或组件需要维护)。OwnState:根据值"3",要求维护。IOState:根据十六进制值"0008",要求维护。OperatingState:输出"0"。输出参数RET_VAL("ReturnValue")用于指示处理无错误。通过输出参数CNT_DIAG("CNT_DIAG"),指示参数DETAIL的"0"诊断详情已输出。 如图9所示:图9. GET_DIAG指令执行结果
展开全文
拨打电话 微信咨询 发送询价