コード例 #1
0
        public void GetStationType()
        {
            eStationType type = jbc_api.GetStationType(station_id);

            Trace.WriteLine("STATION: " + station_id + " TYPE: " + type.ToString());
            Assert.AreNotEqual(eStationType.UNKNOWN, type);
        }
コード例 #2
0
ファイル: PLCSystem_SRM.cs プロジェクト: 13TT/TEST2
        public string GetConNodeID(string pLinkLine, string pStnNo, eStationType pStnType)
        {
            var v = this.Where((e) => e.LinkLine == pLinkLine && e.StnNo == pStnNo && e.StnType == pStnType).ToList();

            if (v == null & v.Count < 1)
            {
                return("");
            }
            return(v[0].ConNodeID);
        }
コード例 #3
0
        /// <summary>
        /// Devuelve en 3 variables de la clase la siguiente información:
        /// TypeStation --> el tipo de estación
        /// NumPort --> número de puertos
        /// ToolSoportadas() --> herramientas soportadas
        /// </summary>
        /// <remarks></remarks>
        internal void InitializeStationPortsToolsType(string model)
        {
            CStationsConfiguration confStation = new CStationsConfiguration(model);
            int          iPorts      = confStation.Ports;
            eStationType stationType = confStation.StationType;

            m_StationData.Info.StationType = stationType;
            m_PortData = new CPortData_SF[iPorts - 1 + 1];

            //Recorremos todos los puertos de la estación
            for (int idxPort = 0; idxPort <= m_PortData.Length - 1; idxPort++)
            {
                m_PortData[idxPort] = new CPortData_SF();
            }
        }
コード例 #4
0
        /// <summary>
        /// Search timer handler. Discover stations
        /// </summary>
        /// <param name="sender">Objeto que lanza el evento</param>
        /// <param name="e">Parámetros asociados al evento</param>
        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //buscar stations controllers
            List <EndpointAddress> endpointsList = m_searcherServices.GetDiscoveredServices();

            foreach (EndpointAddress endpoint in endpointsList)
            {
                BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);

                try
                {
                    JBCStationControllerServiceClient JBC_StationControllerService = new JBCStationControllerServiceClient(binding, endpoint);
                    JBC_StationControllerService.Open();

                    //notificar de un station controller encontrado
                    if (DiscoveredStationControllerEvent != null)
                    {
                        DiscoveredStationControllerEvent(ref JBC_StationControllerService);
                    }

                    string[] lista = JBC_StationControllerService.GetStationList();
                    for (var i = 0; i <= lista.Length - 1; i++)
                    {
                        //notificar de una estación encontrada
                        dc_Station_Sold_Info stationInfo = JBC_StationControllerService.GetStationInfo(lista[(int)i]);
                        eStationType         stationType = (eStationType)((eStationType)stationInfo.StationType);
                        if (DiscoveredStationEvent != null)
                        {
                            DiscoveredStationEvent(ref JBC_StationControllerService, lista[(int)i], stationType);
                        }
                    }
                }
                catch (Exception ex)
                {
                    //Este error sucede al desconectar un Station Controller ya que se intenta acceder a un Endpoint donde nadie escucha
                    Debug.WriteLine(System.Reflection.MethodInfo.GetCurrentMethod().Name + ". Error: " + ex.Message);
                }
            }

            if (m_isSearching)
            {
                m_Timer.Start();
            }
        }
コード例 #5
0
ファイル: Cstation.cs プロジェクト: damaro05/JenkingsTest
        //Public functions
        public void init(ulong stationID, eStationType _stationType, JBC_API_Remote _jbc)
        {
            jbc = _jbc;
            //setting the ID
            ID                = stationID;
            StationType       = _stationType;
            uiContModeQueueID = UInt32.MaxValue;

            //initializing the port's structures
            for (int cnt = 0; cnt <= MAX_PORTS - 1; cnt++)
            {
                portList[cnt].I         = 0;
                portList[cnt].number    = Port.NO_PORT;
                portList[cnt].P         = 0;
                portList[cnt].F         = 0; // hadesold flow
                portList[cnt].status    = ToolStatus.NONE;
                portList[cnt].status_HA = ToolStatus_HA.NONE;
                portList[cnt].T         = new int[TEMP_FILTER_SIZE];
                for (int i = 0; i <= TEMP_FILTER_SIZE - 1; i++)
                {
                    portList[cnt].T[i] = 0;
                }
                portList[cnt].nTrans = 0;
                portList[cnt].tool   = GenericStationTools.NO_TOOL;
            }

            // Setting station control mode
            //JBC.SetControlMode(ID, JBC_API.OnOff._ON)

            // Setting the station in continuous mode for all of its ports
            // 13/01/2014 relocated to CPlot class
            // 25/03/2015 relocated here again due to multiples queues managing (see startStationContinuousMode)
            //Dim count As Integer = jbc.GetPortCount(ID)
            //Dim a As Integer = JBC_API.Port.NO_PORT
            //Dim b As Integer = JBC_API.Port.NO_PORT
            //Dim c As Integer = JBC_API.Port.NO_PORT
            //Dim d As Integer = JBC_API.Port.NO_PORT
            //If count >= 1 Then a = JBC_API.Port.NUM_1
            //If count >= 2 Then b = JBC_API.Port.NUM_2
            //If count >= 3 Then c = JBC_API.Port.NUM_3
            //If count >= 4 Then d = JBC_API.Port.NUM_4
            //jbc.SetContinuousMode(ID, JBC_API.SpeedContinuousMode.T_10mS, a, b, c, d)
        }
コード例 #6
0
        private void BuildPortsTypeTools(string model)
        {
            m_Ports       = 0;
            m_StationType = eStationType.UNKNOWN;

            //Standarize model name
            model = model.Replace("/", "");

            //Buscamos la configuración para el modelo de estación
            foreach (string StationUnit in System.Enum.GetNames(typeof(StationPortsToolsConfiguration)))
            {
                // 31/01/2014 Buscar con guión bajo ("DD_") porque varias pueden empezar igual y ser distintas
                if (StationUnit.ToString().IndexOf(model + "_") == 0)
                {
                    string[] arrStationConf = StationUnit.ToString().Split('_');
                    if (arrStationConf.Length >= 4)
                    {
                        // ports
                        m_Ports = System.Convert.ToInt32(arrStationConf[1]);
                        // station type
                        m_StationType = (eStationType)((eStationType)(System.Convert.ToInt32(arrStationConf[2])));
                        //supported tools
                        for (var idxTool = 0; idxTool <= arrStationConf.Length - 4; idxTool++)
                        {
                            string sTool = arrStationConf[idxTool + 3];
                            //Guardamos la tool
                            if (System.Enum.IsDefined(typeof(GenericStationTools), sTool))
                            {
                                m_listSupportedTools.Add((GenericStationTools)(System.Enum.Parse(typeof(GenericStationTools), sTool)));
                            }
                        }
                    }

                    break;
                }
            }
        }
コード例 #7
0
        private void TraceData()
        {
            ArrayList listStationsUUID = new ArrayList();
            stContinuousModeData_SOLD contData_SOLD   = default(stContinuousModeData_SOLD);  // solder data
            stContinuousModeData_HA   contData_HA     = new stContinuousModeData_HA();       // hot air data
            stContinuousModePort_SOLD contDataPort    = new stContinuousModePort_SOLD();     // solder data
            stContinuousModePort_HA   contDataPort_HA = new stContinuousModePort_HA();       // hot air data

            while (m_IsAliveThreadTraceData)
            {
                // update stations list
                listStationsUUID.Clear();
                listStationsUUID.AddRange(m_htStationUUID2QueueID.Keys);

                //Iteramos en todas las estaciones
                foreach (string stationUUID in listStationsUUID)
                {
                    uint queueID = (uint)(m_htStationUUID2QueueID[stationUUID]);

                    try
                    {
                        if (DLLConnection.jbc.StationExists(stationUUID))
                        {
                            eStationType stationType = DLLConnection.jbc.GetStationType(stationUUID);
                            int          dataLength  = DLLConnection.jbc.GetContinuousModeDataCount(stationUUID, queueID);

                            //Iteramos en todos los datos recogidos
                            for (int i = 0; i <= dataLength - 1; i++)
                            {
                                bool bDataExists = false;
                                switch (stationType)
                                {
                                case eStationType.SOLD:
                                    contData_SOLD = DLLConnection.jbc.GetContinuousModeNextData_SOLD(stationUUID, queueID);
                                    if (contData_SOLD.data != null)
                                    {
                                        bDataExists = true;
                                    }
                                    break;

                                case eStationType.HA:
                                    contData_HA = DLLConnection.jbc.GetContinuousModeNextData_HA(stationUUID, queueID);
                                    if (contData_HA.data != null)
                                    {
                                        bDataExists = true;
                                    }
                                    break;
                                }

                                if (bDataExists)
                                {
                                    Hashtable portJSONData = new Hashtable();

                                    foreach (Port port in m_mdhtStationUUID2PortData.RowKeys(stationUUID))
                                    {
                                        portJSONData[port] = "";

                                        //Cabecera de datos si secuencia es cero
                                        if (System.Convert.ToInt32(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, port)) == 0)
                                        {
                                            // obtener la velocidad de la cola
                                            SpeedContinuousMode queueCaptureSpeed = DLLConnection.jbc.GetContinuousModeDeliverySpeed(stationUUID, queueID);
                                            CSpeedContMode      speedcm           = new CSpeedContMode();
                                            int frequency = speedcm.SpeedFromEnum(queueCaptureSpeed);

                                            portJSONData[port] = "{" + "\r\n" + "\"uuid\":\"" + stationUUID + "\"," +
                                                                 "\r\n" + "\"port\":" + System.Convert.ToString(port) + "," +
                                                                 "\r\n" + "\"time\":\"" + DateTime.Now.ToString(TRACE_TIME_FORMAT) + "\"," +
                                                                 "\r\n" + "\"name\":\"" + DLLConnection.jbc.GetStationName(stationUUID) + "\"," +
                                                                 "\r\n" + "\"type\":\"" + stationType.ToString() + "\"," +
                                                                 "\r\n" + "\"model\":\"" + DLLConnection.jbc.GetStationModel(stationUUID) + "\"," +
                                                                 "\r\n" + "\"modeltype\":\"" + DLLConnection.jbc.GetStationModelType(stationUUID) + "\"," +
                                                                 "\r\n" + "\"modelversion\":\"" + DLLConnection.jbc.GetStationModelVersion(stationUUID).ToString() + "\"," +
                                                                 "\r\n" + "\"software\":\"" + DLLConnection.jbc.GetStationSWversion(stationUUID) + "\"," +
                                                                 "\r\n" + "\"hardware\":\"" + DLLConnection.jbc.GetStationHWversion(stationUUID) + "\"," +
                                                                 "\r\n" + "\"interval\":" + System.Convert.ToString(frequency) + "," +
                                                                 "\r\n" + "\"data\":[";
                                        }
                                    }

                                    // cantidad de puertos
                                    int iDataPortCount = 0;
                                    switch (stationType)
                                    {
                                    case eStationType.SOLD:
                                        iDataPortCount = contData_SOLD.data.Length;
                                        break;

                                    case eStationType.HA:
                                        iDataPortCount = contData_HA.data.Length;
                                        break;
                                    }

                                    // datos de los puertos
                                    for (var x = 0; x <= iDataPortCount - 1; x++)
                                    {
                                        Port readingPort = Port.NO_PORT;

                                        switch (stationType)
                                        {
                                        case eStationType.SOLD:
                                            contDataPort = contData_SOLD.data[x];
                                            readingPort  = contDataPort.port;
                                            break;

                                        case eStationType.HA:
                                            contDataPort_HA = contData_HA.data[x];
                                            readingPort     = contDataPort_HA.port;
                                            break;
                                        }

                                        //Copiamos los datos del registro anterior para comparar al crear el json
                                        Hashtable antListPortData = new Hashtable();

                                        foreach (Port port in m_mdhtStationUUID2PortData.RowKeys(stationUUID))
                                        {
                                            antListPortData.Add(port, ((TracePortData)(m_mdhtStationUUID2PortData.Item(stationUUID, port))).Clone());
                                        }

                                        //Si el puerto lo estamos trazando
                                        if (m_mdhtStationUUID2PortData.Contains(stationUUID, readingPort))
                                        {
                                            TracePortData portData = default(TracePortData);

                                            switch (stationType)
                                            {
                                            case eStationType.SOLD:
                                                portData             = (TracePortData)(m_mdhtStationUUID2PortData.Item(stationUUID, readingPort));
                                                portData.port        = readingPort;
                                                portData.temperature = System.Convert.ToInt32(contDataPort.temperature.UTI);
                                                portData.power       = System.Convert.ToInt32(contDataPort.power);
                                                portData.status      = System.Convert.ToByte(contDataPort.status);
                                                portData.tool        = DLLConnection.jbc.GetPortToolID(stationUUID, portData.port);
                                                break;

                                            case eStationType.HA:
                                                portData             = (TracePortData)(m_mdhtStationUUID2PortData.Item(stationUUID, readingPort));
                                                portData.port        = readingPort;
                                                portData.temperature = contDataPort_HA.temperature.UTI;
                                                portData.power       = contDataPort_HA.power;
                                                portData.status      = System.Convert.ToByte(contDataPort_HA.status);
                                                portData.tool        = DLLConnection.jbc.GetPortToolID(stationUUID, portData.port);
                                                // HA
                                                portData.flow       = contDataPort_HA.flow;
                                                portData.tempTC1    = contDataPort_HA.externalTC1_Temp.UTI;
                                                portData.tempTC2    = contDataPort_HA.externalTC2_Temp.UTI;
                                                portData.timetostop = contDataPort_HA.timeToStop;
                                                break;
                                            }

                                            //Coma separador de entradas
                                            if (System.Convert.ToInt32(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, readingPort)) != 0)
                                            {
                                                portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + "," + "\r\n";
                                            }

                                            //Escribimos número de secuencia
                                            portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + "{\"n\":" + System.Convert.ToString(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, readingPort));

                                            //Notificar tool en la primera entrada de datos o cada vez que haya un cambio
                                            if (m_mdhtStationUUID2PortNumSequence.Item(stationUUID, readingPort) == 0 |
                                                portData.tool != ((TracePortData)(antListPortData[readingPort])).tool)
                                            {
                                                portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"o\":" + System.Convert.ToString(portData.tool);
                                            }

                                            //Si no hay tool, no notificar el status, temperatura ni power
                                            if (portData.tool != GenericStationTools.NO_TOOL)
                                            {
                                                //Notificar status en la primera entrada de datos o cada vez que haya un cambio
                                                if (System.Convert.ToInt32(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, readingPort)) == 0 |
                                                    portData.status != ((TracePortData)(antListPortData[readingPort])).status)
                                                {
                                                    portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"s\":" + System.Convert.ToString(portData.status);
                                                }

                                                // temperature
                                                portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"t\":" + System.Convert.ToString(portData.temperature);

                                                //Si status es extractor o hibernation no notificar el power
                                                if (portData.status != (byte)ToolStatus.EXTRACTOR &
                                                    portData.status != (byte)ToolStatus.HIBERNATION)
                                                {
                                                    portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"w\":" + System.Convert.ToString(portData.power);
                                                }

                                                // HA
                                                if (stationType == eStationType.HA)
                                                {
                                                    // flow
                                                    portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"f\":" + System.Convert.ToString(portData.flow);

                                                    // time to stop
                                                    portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"ts\":" + System.Convert.ToString(portData.timetostop);

                                                    if (portData.tempTC1 > 0)
                                                    {
                                                        portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"x1\":" + System.Convert.ToString(portData.tempTC1);
                                                    }

                                                    if (portData.tempTC2 > 0)
                                                    {
                                                        portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + ", \"x2\":" + System.Convert.ToString(portData.tempTC2);
                                                    }
                                                }
                                            }

                                            portJSONData[readingPort] = (portJSONData[readingPort]).ToString() + "}";
                                            (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(TempPathFilename(m_folderData, queueID, readingPort), (portJSONData[readingPort]).ToString(), true);
                                        }
                                    }

                                    //Incrementar numero de secuencia
                                    ArrayList listPorts = new ArrayList();
                                    listPorts.AddRange(m_mdhtStationUUID2PortNumSequence.RowKeys(stationUUID));

                                    foreach (Port port in listPorts)
                                    {
                                        m_mdhtStationUUID2PortNumSequence.Add(stationUUID, port, (System.Convert.ToInt32(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, port))) + 1);

                                        //Final de fichero
                                        if (System.Convert.ToInt32(m_mdhtStationUUID2PortNumSequence.Item(stationUUID, port)) == FILE_MAX_SEQUENCE)
                                        {
                                            m_mdhtStationUUID2PortNumSequence.Add(stationUUID, port, 0);

                                            //Cierre y renombre del fichero con id único
                                            (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(TempPathFilename(m_folderData, queueID, port), "]}", true);
                                            (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(TempPathFilename(m_folderData, queueID, port),
                                                                                                                     TracePathFilename(m_folderData, queueID, port, DateTime.Now));
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            // Stop trace data
                            m_htStationUUID2QueueID.Remove(stationUUID);
                            m_mdhtStationUUID2PortData.RemoveRow(stationUUID);
                            m_mdhtStationUUID2PortNumSequence.RemoveRow(stationUUID);

                            ArrayList listPorts = new ArrayList();
                            listPorts.AddRange(m_mdhtStationUUID2PortNumSequence.RowKeys(stationUUID));

                            foreach (Port port in listPorts)
                            {
                                //close and rename file with unique name
                                if (File.Exists(TempPathFilename(m_folderData, queueID, port)))
                                {
                                    (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(TempPathFilename(m_folderData, queueID, port), "]}", true);
                                }
                                if (File.Exists(TempPathFilename(m_folderData, queueID, port)))
                                {
                                    (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(TempPathFilename(m_folderData, queueID, port),
                                                                                                             TracePathFilename(m_folderData, queueID, port, DateTime.Now));
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        // error
                        //Stop trace data
                        m_htStationUUID2QueueID.Remove(stationUUID);
                        m_mdhtStationUUID2PortData.RemoveRow(stationUUID);
                        m_mdhtStationUUID2PortNumSequence.RemoveRow(stationUUID);

                        ArrayList listPorts = new ArrayList();
                        listPorts.AddRange(m_mdhtStationUUID2PortNumSequence.RowKeys(stationUUID));

                        foreach (Port port in listPorts)
                        {
                            //close and rename file with unique name
                            if (File.Exists(TempPathFilename(m_folderData, queueID, port)))
                            {
                                (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(TempPathFilename(m_folderData, queueID, port), "]}", true);
                                (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(TempPathFilename(m_folderData, queueID, port),
                                                                                                         TracePathFilename(m_folderData, queueID, port, DateTime.Now));
                            }
                        }
                    }
                }

                Thread.Sleep(THREAD_SLEEP_TRACE_DATA);
            }
        }
コード例 #8
0
ファイル: CTraceData.cs プロジェクト: damaro05/JenkingsTest
        private void TraceData()
        {
            ArrayList listStationUID                  = new ArrayList();
            Hashtable listPortData                    = default(Hashtable);
            ArrayList listPortDataKey                 = new ArrayList();
            Hashtable antListPortData                 = new Hashtable();
            stContinuousModeData_SOLD contData        = new stContinuousModeData_SOLD(); // solder data
            stContinuousModeData_HA   contData_HA     = new stContinuousModeData_HA();   // hot air data
            stContinuousModePort_SOLD contDataPort    = new stContinuousModePort_SOLD(); // solder data
            stContinuousModePort_HA   contDataPort_HA = new stContinuousModePort_HA();   // hot air data

            do
            {
                // update stations
                listStationUID.Clear();
                listStationUID.AddRange(m_htStationQueue.Keys);

                //Iteramos en todas las estaciones
                foreach (string stationUID in listStationUID)
                {
                    long stationID = -1;
                    //Dim stationType As dc_EnumConstJBC.dc_StationType = dc_EnumConstJBC.dc_StationType.UNKNOWN
                    eStationType stationType = eStationType.UNKNOWN;

                    try
                    {
                        stationID   = DLLConnection.jbc.GetStationID(stationUID);
                        stationType = DLLConnection.jbc.GetStationType(stationID);

                        if (stationID >= 0)
                        {
                            string JSONData = "";

                            //Listado de puertos que estamos trazando para la estación
                            listPortData = (Hashtable)(m_htStationPortsData[stationUID]);
                            listPortDataKey.Clear();
                            listPortDataKey.AddRange(listPortData.Keys);

                            int dataLength = DLLConnection.jbc.GetContinuousModeDataCount(stationID, (uint)(m_htStationQueue[stationUID]));
                            evlogWrite("Data records to process:" + dataLength.ToString(), stationUID);
                            for (int i = 0; i <= dataLength - 1; i++)
                            {
                                bool bDataExists = false;
                                switch (stationType)
                                {
                                case eStationType.SOLD:
                                    contData = DLLConnection.jbc.GetContinuousModeNextData_SOLD(stationID, (uint)(m_htStationQueue[stationUID]));
                                    if (contData.data != null)
                                    {
                                        bDataExists = true;
                                    }
                                    break;

                                case eStationType.HA:
                                    contData_HA = DLLConnection.jbc.GetContinuousModeNextData_HA(stationID, (uint)(m_htStationQueue[stationUID]));
                                    if (contData_HA.data != null)
                                    {
                                        bDataExists = true;
                                    }
                                    break;
                                }

                                if (bDataExists)
                                {
                                    JSONData = "";

                                    //Cabecera de datos si secuencia es cero
                                    if (System.Convert.ToInt32(m_htStationNumSequence[stationUID]) == 0)
                                    {
                                        // obtener la velocidad de la cola
                                        SpeedContinuousMode queueCaptureSpeed = DLLConnection.jbc.GetContinuousModeDeliverySpeed(stationID, (uint)(m_htStationQueue[stationUID]));
                                        // convertirla a integer
                                        CSpeedContMode speedcm   = new CSpeedContMode();
                                        int            frequency = speedcm.SpeedFromEnum(queueCaptureSpeed);
                                        // obtener datos identificativos
                                        string stnName         = DLLConnection.jbc.GetStationName(stationID);
                                        string stnModel        = DLLConnection.jbc.GetStationModel(stationID);
                                        string stnModelType    = DLLConnection.jbc.GetStationModelType(stationID);
                                        string stnModelVersion = DLLConnection.jbc.GetStationModelVersion(stationID).ToString();
                                        string stnSW           = DLLConnection.jbc.GetStationSWversion(stationID);
                                        string stnHW           = DLLConnection.jbc.GetStationHWversion(stationID);

                                        JSONData = "{" + "\r\n" + "\"id\":\"" + stationUID + "\"," +
                                                   "\r\n" + "\"time\":\"" + DateTime.Now.ToString(TRACE_TIME_FORMAT) + "\"," +
                                                   "\r\n" + "\"name\":\"" + stnName + "\"," +
                                                   "\r\n" + "\"type\":\"" + stationType.ToString() + "\"," +
                                                   "\r\n" + "\"model\":\"" + stnModel + "\"," +
                                                   "\r\n" + "\"modeltype\":\"" + stnModelType + "\"," +
                                                   "\r\n" + "\"modelversion\":\"" + stnModelVersion + "\"," +
                                                   "\r\n" + "\"software\":\"" + stnSW + "\"," +
                                                   "\r\n" + "\"hardware\":\"" + stnHW + "\"," +
                                                   "\r\n" + "\"interval\":" + System.Convert.ToString(frequency);
                                    }

                                    //Por cada puerto del modo continuo
                                    bool bComma = false;

                                    //Escribimos número de secuencia y datos
                                    JSONData += "," + "\r\n" + "\"" + System.Convert.ToString(m_htStationNumSequence[stationUID]) + "\":[";

                                    // datos de los puertos

                                    // cantidad de puertos
                                    int iDataPortCount = 0;
                                    switch (stationType)
                                    {
                                    case eStationType.SOLD:
                                        iDataPortCount = contData.data.Length;
                                        break;

                                    case eStationType.HA:
                                        iDataPortCount = contData_HA.data.Length;
                                        break;
                                    }

                                    // datos de los puertos
                                    //For Each contDataPort As stContinuousModePort In contData.data
                                    for (var x = 0; x <= iDataPortCount - 1; x++)
                                    {
                                        Port readingPort = Port.NO_PORT;
                                        switch (stationType)
                                        {
                                        case eStationType.SOLD:
                                            contDataPort = contData.data[x];
                                            readingPort  = contDataPort.port;
                                            break;

                                        case eStationType.HA:
                                            contDataPort_HA = contData_HA.data[x];
                                            readingPort     = contDataPort_HA.port;
                                            break;
                                        }

                                        //Copiamos los datos del registro anterior para comparar al crear el json
                                        TracePortData portData = new TracePortData();
                                        antListPortData.Clear();
                                        foreach (Port portDataKey in listPortDataKey)
                                        {
                                            portData = (TracePortData)(listPortData[portDataKey]);
                                            antListPortData.Add(portDataKey, portData.Clone());
                                        }

                                        //Si el puerto lo estamos trazando
                                        if (listPortData.Contains(readingPort))
                                        {
                                            switch (stationType)
                                            {
                                            case eStationType.SOLD:
                                                portData             = (TracePortData)(((TracePortData)(listPortData[contDataPort.port])).Clone());
                                                portData.port        = contDataPort.port;
                                                portData.temperature = contDataPort.temperature.UTI;
                                                portData.power       = contDataPort.power;
                                                portData.status      = System.Convert.ToByte(contDataPort.status);
                                                portData.tool        = DLLConnection.jbc.GetPortToolID(stationID, portData.port);
                                                break;

                                            case eStationType.HA:
                                                portData             = (TracePortData)(((TracePortData)(listPortData[contDataPort_HA.port])).Clone());
                                                portData.port        = contDataPort_HA.port;
                                                portData.temperature = contDataPort_HA.temperature.UTI;
                                                portData.power       = contDataPort_HA.power;
                                                portData.status      = System.Convert.ToByte(contDataPort_HA.status);
                                                portData.tool        = DLLConnection.jbc.GetPortToolID(stationID, portData.port);
                                                // HA
                                                portData.flow       = contDataPort_HA.flow;
                                                portData.tempTC1    = contDataPort_HA.externalTC1_Temp.UTI;
                                                portData.tempTC2    = contDataPort_HA.externalTC2_Temp.UTI;
                                                portData.timetostop = contDataPort_HA.timeToStop;
                                                break;
                                            }

                                            if (bComma)
                                            {
                                                JSONData += ",";
                                            }
                                            bComma = true;

                                            JSONData += "\r\n" + "{\"p\":" + System.Convert.ToString(portData.port);

                                            //Notificar tool en la primera entrada de datos o cada vez que haya un cambio
                                            // LA TOOL en TEXTO
                                            if (System.Convert.ToInt32(m_htStationNumSequence[stationUID]) == 0 | portData.tool != ((TracePortData)(antListPortData[portData.port])).tool)
                                            {
                                                JSONData += ", \"o\":" + System.Convert.ToString(portData.tool) + "";
                                            }

                                            //Si no hay tool, no notificar de status, temperatura ni power
                                            if (portData.tool != GenericStationTools.NO_TOOL)
                                            {
                                                //Notificar status en la primera entrada de datos o cada vez que haya un cambio
                                                if (System.Convert.ToInt32(m_htStationNumSequence[stationUID]) == 0 | portData.status != ((TracePortData)(antListPortData[portData.port])).status)
                                                {
                                                    JSONData += ", \"s\":" + System.Convert.ToString(portData.status);
                                                }

                                                // temperature
                                                JSONData += ", \"t\":" + System.Convert.ToString(portData.temperature);

                                                //Si status es extractor o hibernation no notificar el power
                                                if (portData.status != (byte)ToolStatus.EXTRACTOR & portData.status != (byte)ToolStatus.HIBERNATION)
                                                {
                                                    JSONData += ", \"w\":" + System.Convert.ToString(portData.power);
                                                }

                                                // HA
                                                if (stationType == eStationType.HA)
                                                {
                                                    // flow
                                                    JSONData += ", \"f\":" + System.Convert.ToString(portData.flow);

                                                    // time to stop (en décimas de segundo)
                                                    JSONData += ", \"ts\":" + System.Convert.ToString(portData.timetostop);

                                                    // viene &HFF si no hay termopar externo
                                                    if (portData.tempTC1 > 0 & portData.tempTC1 < 0xFF)
                                                    {
                                                        JSONData += ", \"x1\":" + System.Convert.ToString(portData.tempTC1);
                                                    }

                                                    // viene &HFF si no hay termopar externo
                                                    if (portData.tempTC2 > 0 & portData.tempTC2 < 0xFF)
                                                    {
                                                        JSONData += ", \"x2\":" + System.Convert.ToString(portData.tempTC2);
                                                    }
                                                }
                                            }

                                            JSONData += "}";
                                        }
                                    } // For Each contDataPort As stContinuousModePort In contData.data

                                    JSONData += "\r\n" + "]";
                                    (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(tempPathFilename(m_folderData, stationID), JSONData, true);

                                    //Incrementar numero de secuencia
                                    m_htStationNumSequence[stationUID] = (System.Convert.ToInt32(m_htStationNumSequence[stationUID])) + 1;

                                    //Final de fichero
                                    if (System.Convert.ToInt32(m_htStationNumSequence[stationUID]) == m_MaxNumSequence)
                                    {
                                        m_htStationNumSequence[stationUID] = 0;

                                        //Cierre y renombre del fichero con id único
                                        (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(tempPathFilename(m_folderData, stationID), "}", true);
                                        (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(tempPathFilename(m_folderData, stationID), tracePathFilename(m_folderData, stationID, DateTime.Now));
                                    }
                                } // If contData.data IsNot Nothing Then
                            }     // For i As Integer = 0 To dataLength
                        }
                        else
                        {
                            // station ID not found (disconnected?)
                            // Stop trace data
                            m_htStationQueue.Remove(stationUID);
                            m_htStationID.Remove(stationUID);
                            m_htStationPortsData.Remove(stationUID);
                            m_htStationNumSequence.Remove(stationUID);
                            m_htStationSpeed.Remove(stationUID);

                            //close and rename file with unique name
                            if (File.Exists(tempPathFilename(m_folderData, stationID)))
                            {
                                (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(tempPathFilename(m_folderData, stationID), "}", true);
                            }
                            if (File.Exists(tempPathFilename(m_folderData, stationID)))
                            {
                                (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(tempPathFilename(m_folderData, stationID), tracePathFilename(m_folderData, stationID, DateTime.Now));
                            }

                            evlogWrite("Station ID not found. Station disconnected?", stationUID);
                        }
                    }
                    catch (Exception ex)
                    {
                        // error
                        //Stop trace data
                        m_htStationQueue.Remove(stationUID);
                        m_htStationID.Remove(stationUID);
                        m_htStationPortsData.Remove(stationUID);
                        m_htStationNumSequence.Remove(stationUID);
                        m_htStationSpeed.Remove(stationUID);

                        //close and rename file with unique name
                        if (File.Exists(tempPathFilename(m_folderData, stationID)))
                        {
                            (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.WriteAllText(tempPathFilename(m_folderData, stationID), "}", true);
                            (new Microsoft.VisualBasic.Devices.ServerComputer()).FileSystem.MoveFile(tempPathFilename(m_folderData, stationID), tracePathFilename(m_folderData, stationID, DateTime.Now));
                        }

                        evlogWrite(System.Reflection.MethodBase.GetCurrentMethod().Name + ". Error: " + ex.Message, stationUID);
                    }
                }

                Thread.Sleep(frequencyTrace);
            } while (true);
        }