public bool ReadMessage(uint NumStream, ref MessageHashtable.Message retMessage) { m_mutexGarbageMessage.WaitOne(); bool bOk = m_SentMessageTable.ReadMessage(NumStream, ref retMessage); m_mutexGarbageMessage.ReleaseMutex(); return(bOk); }
protected uint SendMessage(byte[] Datos, byte command, byte targetAddress, bool delayedResponse = false) { //Send message uint NumMessage = (uint)0; if (m_ComChannel != null) { NumMessage = m_ComChannel.Send(Datos, command, targetAddress, delayedResponse); //Save sended message MessageHashtable.Message MessageInt = new MessageHashtable.Message(); MessageInt.Datos = Datos; MessageInt.Command = command; MessageInt.Device = targetAddress; m_MessagesSentManager.PutMessage(NumMessage, MessageInt); } return(NumMessage); }
private void GarbageExpiredMessage() { while (m_ThreadGarbageMessageAlive) { m_mutexGarbageMessage.WaitOne(); List <uint> expiredMessage = new List <uint>(); foreach (DictionaryEntry Elemento in m_SentMessageTable.GetTable) { DateTime HoraActual = default(DateTime); DateTime HoraLimite = default(DateTime); MessageHashtable.Message Mensaje = new MessageHashtable.Message(); Mensaje = (MessageHashtable.Message)Elemento.Value; // 2014/06/13 edu no eliminar los ACK (fin transaction) if (Mensaje.Command == (byte)EnumCommandFrame.M_ACK) { continue; } HoraActual = DateTime.Now; HoraLimite = Mensaje.Hora.AddMilliseconds(TIME_WAIT_RESPONSE_SENT_MESSAGE); if (HoraActual > HoraLimite) { //mensaje a eliminar expiredMessage.Add((uint)Elemento.Key); } } //Eliminamos los mensajes expirados foreach (uint mess in expiredMessage) { m_SentMessageTable.RemoveMessage(mess); } m_mutexGarbageMessage.ReleaseMutex(); Thread.Sleep(TIME_GARBAGE_EXPIRED_MESSAGE); } }
public void ProcessMessageResponse(uint Numstream, byte[] Datos, byte Command, byte Origen) { // //Check source address // if (Origen != m_StationNumDevice) { //Para las sub estaciones sólo escuchamos a la siguiente dirección (DME(0x10) -> PSE(0x20) -> PSE (0x30)) if (m_StationData.Info.Features.SubStations && (m_StationNumDevice + (int)EnumAddress.NEXT_SUBSTATION_ADDRESS) == Origen) { //Las direcciones que vengan del mismo bloque de estación } else if ((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == m_StationNumDevice) { } else { return; } } // //Sent message // MessageHashtable.Message MessageInt = new MessageHashtable.Message(); int Puerto = 0; //Dim Tool As Integer string sDatos = ""; string[] aDatos = null; string sTemp = ""; //Recuperar mensaje if (m_MessagesSentManager.ReadMessage(Numstream, ref MessageInt)) { m_MessagesSentManager.RemoveMessage(Numstream); //La estación SF solo tiene un puerto y no viene especificado en el protocolo Puerto = 0; //Mensajes recibidos sin petición. (Firmware -> sub estación) //Para la DME touch enviamos las peticiones del modo continuo al dspic33 en vez de a la estación } else if (Command != (byte)EnumCommandFrame_02_SF.M_HS & Command != (byte)EnumCommandFrame_02_SF.M_NACK & Command != (byte)EnumCommandFrame_02_SF.M_FIRMWARE) { return; } // //Command // if (Command == (byte)EnumCommandFrame_02_SF.M_HS) { //Si se recibe una trama de handshake de otra dirección, es posible que se trate de otra estación if (Origen != m_StationNumDevice) { ReadDeviceVersions(Origen); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_EOT) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_ACK) { if (EndedTransactionEvent != null) { EndedTransactionEvent(Numstream); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_NACK) { Debug.Print("NACK Error: {0} Sent opcode: H{1:X2}", (Datos[0]).ToString(), Datos[1]); if (NACKTransactionEvent != null) { NACKTransactionEvent(Numstream); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_SYN) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_DEVICEID) { clsStationUID stationUUID = new clsStationUID(Datos); m_StationData.Info.UUID = stationUUID.UID; } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_DEVICEID) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_RESET) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_FIRMWARE) { if (Datos.Length == 0) { } string datosVersions = Encoding.UTF8.GetString(Datos); string[] arrayVersions = datosVersions.Split(':'); if (arrayVersions.Length < 4) { } //protocolo string protocolo = arrayVersions[0]; //modelo string model = arrayVersions[1]; string[] arrayModelData = arrayVersions[1].Split('_'); string modelModel = arrayModelData[0]; string modelType = ""; if (arrayModelData.Length > 1) { modelType = arrayModelData[1]; } int modelVersion = -1; if (arrayModelData.Length > 2) { if (Information.IsNumeric(arrayModelData[2])) { modelVersion = int.Parse(arrayModelData[2]); } } //soft y hard versions string versionSw = arrayVersions[2]; string versionHw = arrayVersions[3]; //La trama viene del micro principal if (Origen == m_StationNumDevice) { m_StationData.Info.Protocol = protocolo; m_StationData.Info.Model = modelModel; m_StationData.Info.ModelType = modelType; m_StationData.Info.ModelVersion = modelVersion; m_StationData.Info.Version_Software = versionSw; m_StationData.Info.Version_Hardware = versionHw; //La trama viene de una estación conectada a otra estación (p.e. DME -> PSE -> PSE -> PSE) } else if (((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == Origen) && CheckStationModel(model)) { CConnectionData connectionData = new CConnectionData(); //connectionData.Mode -> no es necesario por que será el mismo que el padre //connectionData.pSerialPort -> no es necesario por que será el mismo que el padre //connectionData.PCNumDevice -> no es necesario por que será el mismo que el padre connectionData.StationNumDevice = Origen; //connectionData.FrameProtocol = -> no es necesario por que será el mismo que el padre //connectionData.CommandProtocol -> no es necesario por que será el mismo que el padre connectionData.StationModel = model; connectionData.SoftwareVersion = versionSw; connectionData.HardwareVersion = versionHw; if (Detected_SubStationEvent != null) { Detected_SubStationEvent(connectionData); } } //Guardamos la información del micro if ((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == m_StationNumDevice) { //Guardar información del micro if (!m_StationData.Info.StationMicros.Contains(Origen)) { CFirmwareStation micro = new CFirmwareStation(); micro.Model = m_StationData.Info.Model; micro.HardwareVersion = versionHw; micro.SoftwareVersion = versionSw; m_StationData.Info.StationMicros.Add(Origen, micro); } } } else if (Command == (byte)EnumCommandFrame_02_SF.M_CLEARMEMFLASH) { if (ClearingFlashFinishedEvent != null) { ClearingFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_SENDMEMADDRESS) { if (AddressMemoryFlashFinishedEvent != null) { AddressMemoryFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_SENDMEMDATA) { if (DataMemoryFlashFinishedEvent != null) { DataMemoryFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_ENDPROGR) { if (EndProgFinishedEvent != null) { EndProgFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_DISPENSERMODE) { if (Datos.Length != 2) { return; } m_PortData[Puerto].ToolStatus.DispenserMode = (DispenserMode_SF)Datos[0]; if (m_PortData[Puerto].ToolStatus.DispenserMode == DispenserMode_SF.PROGRAM) { m_StationData.Settings.SelectedProgram = (Datos[1]); } } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_DISPENSERMODE) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_PROGRAM) { if (Datos.Length != 21) { return; } byte program = System.Convert.ToByte(Datos[0] - 1); //indexado 1-35 m_StationData.Settings.Programs[program].Name = Encoding.ASCII.GetString(Datos, 1, 8).Trim(); m_StationData.Settings.Programs[program].Length_1 = BitConverter.ToUInt16(Datos, 9); m_StationData.Settings.Programs[program].Speed_1 = BitConverter.ToUInt16(Datos, 11); m_StationData.Settings.Programs[program].Length_2 = BitConverter.ToUInt16(Datos, 13); m_StationData.Settings.Programs[program].Speed_2 = BitConverter.ToUInt16(Datos, 15); m_StationData.Settings.Programs[program].Length_3 = BitConverter.ToUInt16(Datos, 17); m_StationData.Settings.Programs[program].Speed_3 = BitConverter.ToUInt16(Datos, 19); if (m_StationData.Settings.Programs[program].Name == "--------" && m_StationData.Settings.Programs[program].Length_1 == 0 && m_StationData.Settings.Programs[program].Speed_1 == 0 && m_StationData.Settings.Programs[program].Length_2 == 0 && m_StationData.Settings.Programs[program].Speed_2 == 0 && m_StationData.Settings.Programs[program].Length_3 == 0 && m_StationData.Settings.Programs[program].Speed_3 == 0) { m_StationData.Settings.Programs[program].Enabled = OnOff._OFF; } else { m_StationData.Settings.Programs[program].Enabled = OnOff._ON; } } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_PROGRAM) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_PROGRAMLIST) { if (Datos.Length != 35) { return; } Array.Copy(Datos, m_StationData.Settings.ConcatenateProgramList, Datos.Length); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_PROGRAMLIST) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_SPEED) { if (Datos.Length != 2) { return; } //decimas de milimetro m_PortData[Puerto].ToolStatus.Speed.InMillimetersPerSecond(System.Convert.ToDouble((double)BitConverter.ToUInt16(Datos, 0) / 10)); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_SPEED) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_LENGTH) { if (Datos.Length != 2) { return; } //decimas de milimetro m_PortData[Puerto].ToolStatus.Length.InMillimeters(System.Convert.ToDouble((double)BitConverter.ToUInt16(Datos, 0) / 10)); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_LENGTH) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_STARTFEEDING) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_STOPTFEEDING) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_FEEDING) { if (Datos.Length != 5) { return; } m_PortData[Puerto].ToolStatus.FeedingState = (OnOff)(Datos[0]); if (m_PortData[Puerto].ToolStatus.DispenserMode == DispenserMode_SF.CONTINUOUS) { m_PortData[Puerto].ToolStatus.FeedingPercent = System.Convert.ToUInt16(0); m_PortData[Puerto].ToolStatus.FeedingLength.InMillimeters(BitConverter.ToUInt16(Datos, 1)); } else if (m_PortData[Puerto].ToolStatus.DispenserMode == DispenserMode_SF.DISCONTINUOUS) { m_PortData[Puerto].ToolStatus.FeedingPercent = BitConverter.ToUInt16(Datos, 1); m_PortData[Puerto].ToolStatus.FeedingLength.InMillimeters(0); } else if (m_PortData[Puerto].ToolStatus.DispenserMode == DispenserMode_SF.PROGRAM) { m_PortData[Puerto].ToolStatus.FeedingPercent = BitConverter.ToUInt16(Datos, 1); m_PortData[Puerto].ToolStatus.FeedingLength.InMillimeters(0); m_StationData.Settings.SelectedProgram = (Datos[3]); } else if (m_PortData[Puerto].ToolStatus.DispenserMode == DispenserMode_SF.CONCATENATION) { m_PortData[Puerto].ToolStatus.FeedingPercent = BitConverter.ToUInt16(Datos, 1); m_PortData[Puerto].ToolStatus.FeedingLength.InMillimeters(0); m_StationData.Settings.SelectedProgram = (Datos[3]); } m_PortData[Puerto].ToolStatus.CurrentProgramStep = Datos[0]; } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_BACKWARDMODE) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_BACKWARDMODE) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_RESETSTATION) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_PIN) { if (Datos.Length != 4) { return; } m_StationData.Settings.PIN = Encoding.UTF8.GetString(Datos); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_PIN) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_STATIONLOCKED) { if (Datos.Length != 1) { return; } m_StationData.Settings.StationLocked = (OnOff)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_STATIONLOCKED) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_BEEP) { if (Datos.Length != 1) { return; } m_StationData.Settings.Beep = (OnOff)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_BEEP) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_LENGTHUNIT) { if (Datos.Length != 1) { return; } m_StationData.Settings.LengthUnit = (CLength.LengthUnit)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_LENGTHUNIT) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_STATERROR) { if (Datos.Length != 1) { return; } m_StationData.Status.ErrorStation = (StationError)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_RESETERROR) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_DEVICENAME) { string TextoName = Encoding.UTF8.GetString(Datos); m_StationData.Settings.Name = TextoName; } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_DEVICENAME) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_COUNTERS) { if (Datos.Length != 20) { return; } m_PortData[Puerto].Counters.ContTinLength = (long)(BitConverter.ToUInt64(Datos, 0)); m_PortData[Puerto].Counters.ContPlugMinutes = BitConverter.ToInt32(Datos, 8); m_PortData[Puerto].Counters.ContWorkMinutes = BitConverter.ToInt32(Datos, 12); m_PortData[Puerto].Counters.ContWorkCycles = BitConverter.ToInt32(Datos, 16); } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_RESETCOUNTERS) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_COUNTERSP) { if (Datos.Length != 20) { return; } m_PortData[Puerto].PartialCounters.ContTinLength = (long)(BitConverter.ToUInt64(Datos, 0)); m_PortData[Puerto].PartialCounters.ContPlugMinutes = BitConverter.ToInt32(Datos, 8); m_PortData[Puerto].PartialCounters.ContWorkMinutes = BitConverter.ToInt32(Datos, 12); m_PortData[Puerto].PartialCounters.ContWorkCycles = BitConverter.ToInt32(Datos, 16); } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_RESETCOUNTERSP) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_USB_CONNECTSTATUS) { if (Datos.Length == 0) { return; } sDatos = Encoding.UTF8.GetString(Datos); if (sDatos.IndexOf(':') >= 0) { aDatos = sDatos.Split(':'); sTemp = aDatos[1].Trim(); } else { sTemp = sDatos.Trim(); } if (sTemp.ToUpper() == "C") { m_StationData.Status.ControlMode = ControlModeConnection.CONTROL; } else { m_StationData.Status.ControlMode = ControlModeConnection.MONITOR; } } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_USB_CONNECTSTATUS) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_RBT_CONNCONFIG) { if (Datos.Length != 7) { return; } sDatos = Encoding.UTF8.GetString(Datos); m_StationData.Settings.Robot.Speed = (CRobotData.RobotSpeed)Datos[0]; //Data bits in ASCII or number if (Datos[1] >= 0 && Datos[1] <= 9) { m_StationData.Settings.Robot.DataBits = System.Convert.ToUInt16(Datos[1]); } else { m_StationData.Settings.Robot.DataBits = System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[1] - 48)); } switch (sDatos.Substring(2, 1)) { case "E": case "e": m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.Even; break; case "O": case "o": m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.Odd; break; default: m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.None; break; } if (Datos[3] == 2 || sDatos.Substring(3, 1) == "2") { m_StationData.Settings.Robot.StopBits = CRobotData.RobotStop.bits_2; } else { m_StationData.Settings.Robot.StopBits = CRobotData.RobotStop.bits_1; } if (Datos[4] == 1 || sDatos.Substring(4, 1) == "1") { m_StationData.Settings.Robot.Protocol = CRobotData.RobotProtocol.RS485; } else { m_StationData.Settings.Robot.Protocol = CRobotData.RobotProtocol.RS232; } //big endian ushort nID = default(ushort); //ID in ASCII or number if (Datos[5] >= 0 && Datos[5] <= 9) { nID = System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[5] * 10)); nID += System.Convert.ToUInt16(Datos[6]); } else { nID = System.Convert.ToUInt16(System.Convert.ToUInt16((Datos[5] - 48) * 10)); nID += System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[6] - 48)); } //UInt16.TryParse(sDatos.Substring(5, 2), nID) m_StationData.Settings.Robot.Address = nID; } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_RBT_CONNCONFIG) { } else if (Command == (byte)EnumCommandFrame_02_SF.M_R_RBT_CONNECTSTATUS) { if (Datos.Length != 1) { return; } sDatos = Encoding.UTF8.GetString(Datos); switch (sDatos) { case "C": case "c": m_StationData.Settings.Robot.Status = OnOff._ON; break; default: m_StationData.Settings.Robot.Status = OnOff._OFF; break; } } else if (Command == (byte)EnumCommandFrame_02_SF.M_W_RBT_CONNECTSTATUS) { } else { //No hacer nada } }
public void PutMessage(uint NumStream, MessageHashtable.Message NewMessage) { m_mutexGarbageMessage.WaitOne(); m_SentMessageTable.PutMessage(NumStream, NewMessage); m_mutexGarbageMessage.ReleaseMutex(); }
public void ProcessMessageResponse(uint Numstream, byte[] Datos, byte Command, byte Origen) { // //Check source address // if (Origen != m_StationNumDevice) { //Para las sub estaciones sólo escuchamos a la siguiente dirección (DME(0x10) -> PSE(0x20) -> PSE (0x30)) if (m_StationData.Info.Features.SubStations && (m_StationNumDevice + (int)EnumAddress.NEXT_SUBSTATION_ADDRESS) == Origen) { //Las direcciones que vengan del mismo bloque de estación } else if ((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == m_StationNumDevice) { } else { return; } } // //Sent message // MessageHashtable.Message MessageInt = new MessageHashtable.Message(); int Puerto = 0; int Intake = 0; string sDatos = ""; string[] aDatos = null; string sTemp = ""; //Recuperar mensaje if (m_MessagesSentManager.ReadMessage(Numstream, ref MessageInt)) { m_MessagesSentManager.RemoveMessage(Numstream); //Mensajes recibidos sin petición. (Firmware -> sub estación) //Para la DME touch enviamos las peticiones del modo continuo al dspic33 en vez de a la estación } else if (Command != (byte)EnumCommandFrame_02_FE.M_HS & Command != (byte)EnumCommandFrame_02_FE.M_NACK & Command != (byte)EnumCommandFrame_02_FE.M_FIRMWARE) { return; } // //Command // if (Command == (byte)EnumCommandFrame_02_FE.M_HS) { //Si se recibe una trama de handshake de otra dirección, es posible que se trate de otra estación if (Origen != m_StationNumDevice) { ReadDeviceVersions(Origen); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_EOT) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_ACK) { if (EndedTransactionEvent != null) { EndedTransactionEvent(Numstream); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_NACK) { Debug.Print("NACK Error: {0} Sent opcode: H{1:X2}", (Datos[0]).ToString(), Datos[1]); if (NACKTransactionEvent != null) { NACKTransactionEvent(Numstream); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_SYN) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_DEVICEID) { clsStationUID stationUUID = new clsStationUID(Datos); m_StationData.Info.UUID = stationUUID.UID; } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_DEVICEID) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_RESET) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_FIRMWARE) { if (Datos.Length == 0) { } string datosVersions = Encoding.UTF8.GetString(Datos); string[] arrayVersions = datosVersions.Split(':'); if (arrayVersions.Length < 4) { } //protocolo string protocolo = arrayVersions[0]; //modelo string model = arrayVersions[1]; string[] arrayModelData = arrayVersions[1].Split('_'); string modelModel = arrayModelData[0]; string modelType = ""; if (arrayModelData.Length > 1) { modelType = arrayModelData[1]; } int modelVersion = -1; if (arrayModelData.Length > 2) { if (Information.IsNumeric(arrayModelData[2])) { modelVersion = int.Parse(arrayModelData[2]); } } //soft y hard versions string versionSw = arrayVersions[2]; string versionHw = arrayVersions[3]; //La trama viene del micro principal if (Origen == m_StationNumDevice) { m_StationData.Info.Protocol = protocolo; m_StationData.Info.Model = modelModel; m_StationData.Info.ModelType = modelType; m_StationData.Info.ModelVersion = modelVersion; m_StationData.Info.Version_Software = versionSw; m_StationData.Info.Version_Hardware = versionHw; //La trama viene de una estación conectada a otra estación (p.e. DME -> PSE -> PSE -> PSE) } else if (((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == Origen) && CheckStationModel(model)) { CConnectionData connectionData = new CConnectionData(); //connectionData.Mode -> no es necesario por que será el mismo que el padre //connectionData.pSerialPort -> no es necesario por que será el mismo que el padre //connectionData.PCNumDevice -> no es necesario por que será el mismo que el padre connectionData.StationNumDevice = Origen; //connectionData.FrameProtocol = -> no es necesario por que será el mismo que el padre //connectionData.CommandProtocol -> no es necesario por que será el mismo que el padre connectionData.StationModel = model; connectionData.SoftwareVersion = versionSw; connectionData.HardwareVersion = versionHw; if (Detected_SubStationEvent != null) { Detected_SubStationEvent(connectionData); } } //Guardamos la información del micro if ((Origen & (byte)EnumAddress.MASK_STATION_ADDRESS) == m_StationNumDevice) { //Guardar información del micro if (!m_StationData.Info.StationMicros.Contains(Origen)) { CFirmwareStation micro = new CFirmwareStation(); micro.Model = m_StationData.Info.Model; micro.HardwareVersion = versionHw; micro.SoftwareVersion = versionSw; m_StationData.Info.StationMicros.Add(Origen, micro); } } } else if (Command == (byte)EnumCommandFrame_02_FE.M_CLEARMEMFLASH) { if (ClearingFlashFinishedEvent != null) { ClearingFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_SENDMEMADDRESS) { if (AddressMemoryFlashFinishedEvent != null) { AddressMemoryFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_SENDMEMDATA) { if (DataMemoryFlashFinishedEvent != null) { DataMemoryFlashFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_ENDPROGR) { if (EndProgFinishedEvent != null) { EndProgFinishedEvent(); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_SUCTIONLEVEL) { if (Datos.Length != 1) { return; } //valor común para todos los puertos for (int i = 0; i <= m_PortData.Length - 1; i++) { m_PortData[i].ToolStatus.SuctionLevel = (SuctionLevel_FE)(Datos[0]); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_SUCTIONLEVEL) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_FLOW) { if (Datos.Length != 2) { return; } //valor común para todos los puertos for (int i = 0; i <= m_PortData.Length - 1; i++) { m_PortData[i].ToolStatus.Flow = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_SPEED) { if (Datos.Length != 2) { return; } //valor común para todos los puertos for (int i = 0; i <= m_PortData.Length - 1; i++) { m_PortData[i].ToolStatus.Speed = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_SELECTFLOW) { if (Datos.Length != 2) { return; } //valor común para todos los puertos for (int i = 0; i <= m_PortData.Length - 1; i++) { m_PortData[i].ToolStatus.SelectedFlow_x_Mil = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_SELECTFLOW) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_STANDINTAKES) { if (Datos.Length != 1) { return; } m_PortData[Puerto].ToolStatus.StandIntakes = Datos[0]; } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_STANDINTAKES) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_INTAKEACTIVATION) { if (Datos.Length != 1) { return; } if (Intake == (int)ToolStatus_FE.WORK) { m_PortData[Puerto].ToolStatus.IntakeActivationWork = (OnOff)(Datos[0]); } else if (Intake == (int)ToolStatus_FE.STAND) { m_PortData[Puerto].ToolStatus.IntakeActivationStand = (OnOff)(Datos[0]); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_INTAKEACTIVATION) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_SUCTIONDELAY) { if (Datos.Length != 4) { return; } if (Intake == (int)ToolStatus_FE.WORK) { m_PortData[Puerto].ToolStatus.SuctionDelayWork = BitConverter.ToUInt16(Datos, 0); } else if (Intake == (int)ToolStatus_FE.STAND) { m_PortData[Puerto].ToolStatus.SuctionDelayStand = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_SUCTIONDELAY) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_DELAYTIME) { if (Datos.Length != 4) { return; } if (Intake == (int)ToolStatus_FE.WORK) { m_PortData[Puerto].ToolStatus.TimeToStopSuctionWork = BitConverter.ToUInt16(Datos, 0); } else if (Intake == (int)ToolStatus_FE.STAND) { m_PortData[Puerto].ToolStatus.TimeToStopSuctionStand = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_ACTIVATIONPEDAL) { if (Datos.Length != 2) { return; } if (Datos[0] == 0) { m_PortData[Puerto].ToolStatus.PedalActivation = PedalAction.HOLD_DOWN; } else if (Datos[0] == 1) { m_PortData[Puerto].ToolStatus.PedalActivation = PedalAction.PULSE; } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_ACTIVATIONPEDAL) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_PEDALMODE) { if (Datos.Length != 2) { return; } m_PortData[Puerto].ToolStatus.PedalMode = (PedalMode)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_PEDALMODE) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_FILTERSTATUS) { if (Datos.Length != 2) { return; } //valor común para todos los puertos for (int i = 0; i <= m_PortData.Length - 1; i++) { m_PortData[i].ToolStatus.FilterStatus = BitConverter.ToUInt16(Datos, 0); } } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_RESETFILTER) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_RESETSTATION) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_PIN) { if (Datos.Length != 4) { return; } m_StationData.Settings.PIN = Encoding.UTF8.GetString(Datos); } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_PIN) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_BEEP) { if (Datos.Length != 1) { return; } m_StationData.Settings.Beep = (OnOff)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_BEEP) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_CONTINUOUSSUCTION) { if (Datos.Length != 1) { return; } m_StationData.Settings.ContinuousSuction = (OnOff)(Datos[0]); } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_CONTINUOUSSUCTION) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_STATERROR) { if (Datos.Length != 2) { return; } m_StationData.Status.ErrorStation = (StationError)(BitConverter.ToInt16(Datos, 0)); } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_DEVICENAME) { string TextoName = Encoding.UTF8.GetString(Datos); m_StationData.Settings.Name = TextoName; } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_DEVICENAME) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_COUNTERS) { if (Datos.Length != 40) { return; } m_PortData[0].Counters.ContPlugMinutes = BitConverter.ToInt32(Datos, 0); m_PortData[1].Counters.ContPlugMinutes = BitConverter.ToInt32(Datos, 4); m_PortData[0].Counters.ContIdleMinutes = BitConverter.ToInt32(Datos, 8); m_PortData[1].Counters.ContIdleMinutes = BitConverter.ToInt32(Datos, 12); m_PortData[0].Counters.ContWorkIntakeMinutes = BitConverter.ToInt32(Datos, 16); m_PortData[1].Counters.ContWorkIntakeMinutes = BitConverter.ToInt32(Datos, 20); m_PortData[0].Counters.ContStandIntakeMinutes = BitConverter.ToInt32(Datos, 24); m_PortData[1].Counters.ContStandIntakeMinutes = BitConverter.ToInt32(Datos, 28); m_PortData[0].Counters.ContWorkCycles = BitConverter.ToInt32(Datos, 32); m_PortData[1].Counters.ContWorkCycles = BitConverter.ToInt32(Datos, 36); } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_RESETCOUNTERS) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_COUNTERSP) { if (Datos.Length != 40) { return; } m_PortData[0].PartialCounters.ContPlugMinutes = BitConverter.ToInt32(Datos, 0); m_PortData[1].PartialCounters.ContPlugMinutes = BitConverter.ToInt32(Datos, 4); m_PortData[0].PartialCounters.ContIdleMinutes = BitConverter.ToInt32(Datos, 8); m_PortData[1].PartialCounters.ContIdleMinutes = BitConverter.ToInt32(Datos, 12); m_PortData[0].PartialCounters.ContWorkIntakeMinutes = BitConverter.ToInt32(Datos, 16); m_PortData[1].PartialCounters.ContWorkIntakeMinutes = BitConverter.ToInt32(Datos, 20); m_PortData[0].PartialCounters.ContStandIntakeMinutes = BitConverter.ToInt32(Datos, 24); m_PortData[1].PartialCounters.ContStandIntakeMinutes = BitConverter.ToInt32(Datos, 28); m_PortData[0].PartialCounters.ContWorkCycles = BitConverter.ToInt32(Datos, 32); m_PortData[1].PartialCounters.ContWorkCycles = BitConverter.ToInt32(Datos, 36); } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_RESETCOUNTERSP) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_USB_CONNECTSTATUS) { if (Datos.Length == 0) { return; } sDatos = Encoding.UTF8.GetString(Datos); if (sDatos.IndexOf(':') >= 0) { aDatos = sDatos.Split(':'); sTemp = aDatos[1].Trim(); } else { sTemp = sDatos.Trim(); } if (sTemp.ToUpper() == "C") { m_StationData.Status.ControlMode = ControlModeConnection.CONTROL; } else { m_StationData.Status.ControlMode = ControlModeConnection.MONITOR; } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_USB_CONNECTSTATUS) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_RBT_CONNCONFIG) { if (Datos.Length != 7) { return; } sDatos = Encoding.UTF8.GetString(Datos); m_StationData.Settings.Robot.Speed = ((CRobotData.RobotSpeed)(Datos[0])); //Data bits in ASCII or number if (Datos[1] >= 0 && Datos[1] <= 9) { m_StationData.Settings.Robot.DataBits = System.Convert.ToUInt16(Datos[1]); } else { m_StationData.Settings.Robot.DataBits = System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[1] - 48)); } switch (sDatos.Substring(2, 1)) { case "E": case "e": m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.Even; break; case "O": case "o": m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.Odd; break; default: m_StationData.Settings.Robot.Parity = CRobotData.RobotParity.None; break; } if (Datos[3] == 2 || sDatos.Substring(3, 1) == "2") { m_StationData.Settings.Robot.StopBits = CRobotData.RobotStop.bits_2; } else { m_StationData.Settings.Robot.StopBits = CRobotData.RobotStop.bits_1; } if (Datos[4] == 1 || sDatos.Substring(4, 1) == "1") { m_StationData.Settings.Robot.Protocol = CRobotData.RobotProtocol.RS485; } else { m_StationData.Settings.Robot.Protocol = CRobotData.RobotProtocol.RS232; } //big endian ushort nID = default(ushort); //ID in ASCII or number if (Datos[5] >= 0 && Datos[5] <= 9) { nID = System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[5] * 10)); nID += System.Convert.ToUInt16(Datos[6]); } else { nID = System.Convert.ToUInt16(System.Convert.ToUInt16((Datos[5] - 48) * 10)); nID += System.Convert.ToUInt16(System.Convert.ToUInt16(Datos[6] - 48)); } //UInt16.TryParse(sDatos.Substring(5, 2), nID) m_StationData.Settings.Robot.Address = nID; } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_RBT_CONNCONFIG) { } else if (Command == (byte)EnumCommandFrame_02_FE.M_R_RBT_CONNECTSTATUS) { if (Datos.Length != 1) { return; } sDatos = Encoding.UTF8.GetString(Datos); switch (sDatos) { case "C": case "c": m_StationData.Settings.Robot.Status = OnOff._ON; break; default: m_StationData.Settings.Robot.Status = OnOff._OFF; break; } } else if (Command == (byte)EnumCommandFrame_02_FE.M_W_RBT_CONNECTSTATUS) { } else { //No hacer nada } }