using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OmronFinsTCP.Net { class ErrorCode { /// /// (若返回的头指令为3)检查命令头中的错误代码 /// /// 错误代码 /// 指示程序是否可以继续进行 internal static bool CheckHeadError(byte Code) { switch (Code) { case 0x00: return true; case 0x01: return false;//RaiseException("the head is not 'FINS'"); case 0x02: return false;//RaiseException("the data length is too long"); case 0x03: return false;//RaiseException("the command is not supported"); } //no hit return false;//RaiseException("unknown exception"); } /// /// 检查命令帧中的EndCode /// /// 主码 /// 副码 /// 指示程序是否可以继续进行 internal static bool CheckEndCode(byte Main, byte Sub) { switch (Main) { case 0x00: switch (Sub) { case 0x00: return true;//the only situation of success case 0x40: return true;//错误码64,是因为PLC中产生了报警,但是数据还是能正常读到的,屏蔽64报警或清除plc错误可解决 case 0x01: return false;//RaiseException("service canceled"); } break; case 0x01: switch (Sub) { case 0x01: return false;//RaiseException("local node not in network"); case 0x02: return false;//RaiseException("token timeout"); case 0x03: return false;//RaiseException("retries failed"); case 0x04: return false;//RaiseException("too many send frames"); case 0x05: return false;//RaiseException("node address range error"); case 0x06: return false;//RaiseException("node address duplication"); } break; case 0x02: switch (Sub) { case 0x01: return false;//RaiseException("destination node not in network"); case 0x02: return false;//RaiseException("unit missing"); case 0x03: return false;//RaiseException("third node missing"); case 0x04: return false;//RaiseException("destination node busy"); case 0x05: return false;//RaiseException("response timeout"); } break; case 0x03: switch (Sub) { case 0x01: return false;//RaiseException("communications controller error"); case 0x02: return false;//RaiseException("CPU unit error"); case 0x03: return false;//RaiseException("controller error"); case 0x04: return false;//RaiseException("unit number error"); } break; case 0x04: switch (Sub) { case 0x01: return false;//RaiseException("undefined command"); case 0x02: return false;//RaiseException("not supported by model/version"); } break; case 0x05: switch (Sub) { case 0x01: return false;//RaiseException("destination address setting error"); case 0x02: return false;//RaiseException("no routing tables"); case 0x03: return false;//RaiseException("routing table error"); case 0x04: return false;//RaiseException("too many relays"); } break; case 0x10: switch (Sub) { case 0x01: return false;//RaiseException("command too long"); case 0x02: return false;//RaiseException("command too short"); case 0x03: return false;//RaiseException("elements/data don't match"); case 0x04: return false;//RaiseException("command format error"); case 0x05: return false;//RaiseException("header error"); } break; case 0x11: switch (Sub) { case 0x01: return false;//RaiseException("area classification missing"); case 0x02: return false;//RaiseException("access size error"); case 0x03: return false;//RaiseException("address range error"); case 0x04: return false;//RaiseException("address range exceeded"); case 0x06: return false;//RaiseException("program missing"); case 0x09: return false;//RaiseException("relational error"); case 0x0a: return false;//RaiseException("duplicate data access"); case 0x0b: return false;//RaiseException("response too long"); case 0x0c: return false;//RaiseException("parameter error"); } break; case 0x20: switch (Sub) { case 0x02: return false;//RaiseException("protected"); case 0x03: return false;//RaiseException("table missing"); case 0x04: return false;//RaiseException("data missing"); case 0x05: return false;//RaiseException("program missing"); case 0x06: return false;//RaiseException("file missing"); case 0x07: return false;//RaiseException("data mismatch"); } break; case 0x21: switch (Sub) { case 0x01: return false;//RaiseException("read-only"); case 0x02: return false;//RaiseException("protected , cannot write data link table"); case 0x03: return false;//RaiseException("cannot register"); case 0x05: return false;//RaiseException("program missing"); case 0x06: return false;//RaiseException("file missing"); case 0x07: return false;//RaiseException("file name already exists"); case 0x08: return false;//RaiseException("cannot change"); } break; case 0x22: switch (Sub) { case 0x01: return false;//RaiseException("not possible during execution"); case 0x02: return false;//RaiseException("not possible while running"); case 0x03: return false;//RaiseException("wrong PLC mode"); case 0x04: return false;//RaiseException("wrong PLC mode"); case 0x05: return false;//RaiseException("wrong PLC mode"); case 0x06: return false;//RaiseException("wrong PLC mode"); case 0x07: return false;//RaiseException("specified node not polling node"); case 0x08: return false;//RaiseException("step cannot be executed"); } break; case 0x23: switch (Sub) { case 0x01: return false;//RaiseException("file device missing"); case 0x02: return false;//RaiseException("memory missing"); case 0x03: return false;//RaiseException("clock missing"); } break; case 0x24: switch (Sub) { case 0x01: return false;//RaiseException("table missing"); } break; case 0x25: switch (Sub) { case 0x02: return false;//RaiseException("memory error"); case 0x03: return false;//RaiseException("I/O setting error"); case 0x04: return false;//RaiseException("too many I/O points"); case 0x05: return false;//RaiseException("CPU bus error"); case 0x06: return false;//RaiseException("I/O duplication"); case 0x07: return false;//RaiseException("CPU bus error"); case 0x09: return false;//RaiseException("SYSMAC BUS/2 error"); case 0x0a: return false;//RaiseException("CPU bus unit error"); case 0x0d: return false;//RaiseException("SYSMAC BUS No. duplication"); case 0x0f: return false;//RaiseException("memory error"); case 0x10: return false;//RaiseException("SYSMAC BUS terminator missing"); } break; case 0x26: switch (Sub) { case 0x01: return false;//RaiseException("no protection"); case 0x02: return false;//RaiseException("incorrect password"); case 0x04: return false;//RaiseException("protected"); case 0x05: return false;//RaiseException("service already executing"); case 0x06: return false;//RaiseException("service stopped"); case 0x07: return false;//RaiseException("no execution right"); case 0x08: return false;//RaiseException("settings required before execution"); case 0x09: return false;//RaiseException("necessary items not set"); case 0x0a: return false;//RaiseException("number already defined"); case 0x0b: return false;//RaiseException("error will not clear"); } break; case 0x30: switch (Sub) { case 0x01: return false;//RaiseException("no access right"); } break; case 0x40: switch (Sub) { case 0x01: return false;//RaiseException("service aborted"); } break; } //no hit return false;//RaiseException("unknown exception"); } } }