public bool BatchRead(DeviceType type, CommandIO_Link command, out string data) { lock (_lockerSocket) { string aa; data = ""; bool ret = false; byte[] bsSend = {}; int recvRigLen = 30; int recvErrLen = 0; byte[] recvBytes = {}; string sss; bsSend = IO_LinkMasterModbusCommand.GetSendCommandBytes(type, command, ref recvRigLen).ToArray(); recvBytes = new byte[recvRigLen]; sss = byteToHexStr(bsSend); int reSendCount = 0; while (true) { reSendCount++; if (reSendCount > 3) { break; } try { aa = byteToHexStr(bsSend); _clientSocket.Send(bsSend); string bb; if (ReceiveData(ref recvRigLen, ref recvErrLen, out recvBytes)) { bb = byteToHexStr(recvBytes); ret = IO_LinkMasterModbusCommand.GetReadAnalysisReceiveByte(type, command, recvBytes, out data); break; } } catch (Exception ex) { } } if (!ret) { NetStatus = NetStatus.Cutoff; string error = ""; Connect(out error); } else { if (reSendCount == 1) { NetStatus = NetStatus.Good; } else { NetStatus = NetStatus.Block; } } return(ret); } }
public static List<byte> GetSendCommandBytes(DeviceType type, CommandIO_Link command, ref int recvRigLen) { List<byte> res = new List<byte> { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03 }; switch (command) { case CommandIO_Link.DiagnosisDataPort1 : case CommandIO_Link.DiagnosisDataPort2: case CommandIO_Link.DiagnosisDataPort3: case CommandIO_Link.DiagnosisDataPort4: case CommandIO_Link.DiagnosisDataPort5: case CommandIO_Link.DiagnosisDataPort6: case CommandIO_Link.DiagnosisDataPort7: case CommandIO_Link.DiagnosisDataPort8: res.AddRange(new byte[] { (byte)((int)command / 256), (byte)((int)command % 256), (byte)((int)234/ 256), (byte)((int)234 % 256) }); break; case CommandIO_Link.PDIPort1: case CommandIO_Link.PDIPort2: case CommandIO_Link.PDIPort3: case CommandIO_Link.PDIPort4: case CommandIO_Link.PDIPort5: case CommandIO_Link.PDIPort6: case CommandIO_Link.PDIPort7: case CommandIO_Link.PDIPort8: res.AddRange(new byte[] { (byte)((int)command / 256), (byte)((int)command % 256), (byte)((int)36 / 256), (byte)((int)36 % 256) }); break; case CommandIO_Link.PDOPort1: case CommandIO_Link.PDOPort2: case CommandIO_Link.PDOPort3: case CommandIO_Link.PDOPort4: case CommandIO_Link.PDOPort5: case CommandIO_Link.PDOPort6: case CommandIO_Link.PDOPort7: case CommandIO_Link.PDOPort8: res.AddRange(new byte[] { (byte)((int)command / 256), (byte)((int)command % 256), (byte)((int)36 / 256), (byte)((int)36 % 256) }); break; }; return res; }
public static string GetPort(CommandIO_Link command) { switch (command) { case CommandIO_Link.DiagnosisDataPort1: return "port1"; case CommandIO_Link.DiagnosisDataPort2: return "port2"; case CommandIO_Link.DiagnosisDataPort3: return "port3"; case CommandIO_Link.DiagnosisDataPort4: return "port4"; case CommandIO_Link.DiagnosisDataPort5: return "port5"; case CommandIO_Link.DiagnosisDataPort6: return "port6"; case CommandIO_Link.DiagnosisDataPort7: return "port7"; case CommandIO_Link.DiagnosisDataPort8: return "port8"; } return "?"; }
public static bool GetReadAnalysisReceiveByte(DeviceType type, CommandIO_Link command, byte[] receive, out string data) { data = ""; switch (command) { case CommandIO_Link.DiagnosisDataPort1: case CommandIO_Link.DiagnosisDataPort2: case CommandIO_Link.DiagnosisDataPort3: case CommandIO_Link.DiagnosisDataPort4: case CommandIO_Link.DiagnosisDataPort5: case CommandIO_Link.DiagnosisDataPort6: case CommandIO_Link.DiagnosisDataPort7: case CommandIO_Link.DiagnosisDataPort8: string VendorName = Encoding.ASCII.GetString(receive.GetBytes(9, 64)).Replace("\0", ""); string VendorText = Encoding.ASCII.GetString(receive.GetBytes(73, 64)).Replace("\0", ""); string ProductName = Encoding.ASCII.GetString(receive.GetBytes(137, 64)).Replace("\0", ""); string ProductID =Encoding.ASCII.GetString(receive.GetBytes(201, 64)).Replace("\0", ""); string ProductText = Encoding.ASCII.GetString(receive.GetBytes(265, 64)).Replace("\0", ""); string SerialNumber = Encoding.ASCII.GetString(receive.GetBytes(329, 16)).Replace("\0", ""); string HardwareRevision = Encoding.ASCII.GetString(receive.GetBytes(345, 64)).Replace("\0", ""); string FirmwareRevision = Encoding.ASCII.GetString(receive.GetBytes(409, 64)).Replace("\0", ""); string PDILength = Encoding.ASCII.GetString(receive.GetBytes(473, 2)).Replace("\0", ""); string PDOLength = Encoding.ASCII.GetString(receive.GetBytes(474, 2)).Replace("\0", ""); IO_Link_DiagnosisInfo info = new IO_Link_DiagnosisInfo() { Port = GetPort(command), VendorName = VendorName, VendorText = VendorText, ProductName = ProductName, ProductID = ProductID, ProductText = ProductText, SerialNumber = SerialNumber, HardwareRevision = HardwareRevision, FirmwareRevision = FirmwareRevision, PDILength = PDILength, PDOLength = PDOLength }; data = info.ToJSON(); break; case CommandIO_Link.PDIPort1: case CommandIO_Link.PDIPort2: case CommandIO_Link.PDIPort3: case CommandIO_Link.PDIPort4: case CommandIO_Link.PDIPort5: case CommandIO_Link.PDIPort6: case CommandIO_Link.PDIPort7: case CommandIO_Link.PDIPort8: data = ""; new DivceCategory(type).ReadDataAnalysis(receive, out data); return true; case CommandIO_Link.PDOPort1: case CommandIO_Link.PDOPort2: case CommandIO_Link.PDOPort3: case CommandIO_Link.PDOPort4: case CommandIO_Link.PDOPort5: case CommandIO_Link.PDOPort6: case CommandIO_Link.PDOPort7: case CommandIO_Link.PDOPort8: break; }; return true; }