Example #1
0
        private void button4_Click(object sender, EventArgs e)
        {
            DevConnection element = ConnList.FirstOrDefault(l => l.Name == "Соединение 0" && l.Name == "Соединение 0");

            if (element != null)
            {
                ConnList.Remove(element);
            }
        }
Example #2
0
        internal UDSHandler GetUDSHandler()
        {
            if (DevConnection == null)
            {
                return(null);
            }

            Envelope  env = DevConnection.SendRequest("UDSManagerService.ListContracts", new Envelope());
            XmlHelper h   = new XmlHelper(env.Body);

            return(new UDSHandler(this, h.GetElement(".")));
        }
Example #3
0
        internal UDTHandler GetUDT()
        {
            if (DevConnection == null)
            {
                return(null);
            }

            Envelope  env = DevConnection.SendRequest("UDTService.DDL.ListTableNames", new Envelope());
            XmlHelper h   = new XmlHelper(env.Body);

            return(new UDTHandler(this, h.GetElement(".")));
        }
Example #4
0
 internal Envelope SendRequest(string srvName, Envelope request)
 {
     try
     {
         return(this.DevConnection.SendRequest(srvName, request));
     }
     catch (DSAServerException ex)
     {
         if (ex.Status == "511")
         {
             ReConnect();
             return(DevConnection.SendRequest(srvName, request));
         }
         else
         {
             throw;
         }
     }
 }
Example #5
0
        int NoAnswerCounter = 0; //счетчик неполученных ответов

        internal int GetState(DevConnection DevConn)
        {
            GetStateCounter++;
            if (DevConn.PortState == 3)
            {
                if (Protocol == 0)//используется протокол DCON
                {
                    int BytesToRead = 0;
                    try
                    {
                        ByteBuff[0] = Convert.ToByte('#');;
                        string Rs485 = String.Format("{0:D2}", RS485Num);
                        ByteBuff[1]  = Convert.ToByte(Rs485[0]);
                        ByteBuff[2]  = Convert.ToByte(Rs485[1]);
                        ByteBuff[20] = 0;
                        for (int i = 0; i <= 2; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        string CRC = String.Format("{0:X2}", ByteBuff[20]);
                        ByteBuff[3] = Convert.ToByte(CRC[0]);
                        ByteBuff[4] = Convert.ToByte(CRC[1]);
                        ByteBuff[5] = 13;

                        DevConn._serialPort.Write(ByteBuff, 0, 6);
                        SendLettersCounter++;
                        Thread.Sleep(SleepTime);
                        BytesToRead = DevConn._serialPort.BytesToRead;
                        if (BytesToRead == 19)
                        {
                            Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            //проверяем CRC
                            ByteBuff[20] = 0;
                            for (int i = 0; i < BytesToRead - 3; i++)
                            {
                                ByteBuff[20] += ByteBuff[i];
                            }
                            if (ByteBuff[20] == Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 16, 2), 16))
                            {
                                StringBuilder sb = new StringBuilder();
                                for (int i = 0; i < 19; i++)
                                {
                                    sb.Append(Convert.ToChar(ByteBuff[i]));
                                }
                                if (DevConn.uiSep == ",")
                                {
                                    sb.Replace(".", ",");                      //заменяем точки если системный разделитель запятая
                                }
                                if ((float.TryParse(sb.ToString(1, 9), out float fResult1)) && (float.TryParse(sb.ToString(11, 5), out float fResult2)))
                                {
                                    A               = fResult1;
                                    Hz              = fResult2;
                                    StateMess       = "Ok";
                                    NoAnswerCounter = 0;
                                    RecieveLettersCounter++;
                                }
                                //else
                                //{
                                //    ErrConvertCounter++;
                                //    A = -999;
                                //    Hz = -99;
                                //}
                            }
                            else
                            {
                                ErrCRC++;
                            }
                        }
                        else
                        {
                            if (BytesToRead > 0)
                            {
                                DevConn._serialPort.DiscardInBuffer();
                            }
                        }

                        if (NoAnswerCounter < NoAnswerLimit)
                        {
                            NoAnswerCounter++;
                        }
                        if (NoAnswerCounter == NoAnswerLimit)//нет ответа определенное время
                        {
                            NoAnswerCounter++;
                            A         = -999;
                            Hz        = -999;
                            StateMess = "Нет связи с контроллером Owen 110 224.1T";
                            LostConnectionCounter++;
                        }
                    }
                    catch (Exception ex)
                    {
                        ErrGetStateDevice++;
                        //// Get stack trace for the exception with source file information
                        //var st = new StackTrace(ex, true);
                        //// Get the top stack frame
                        //var frame = st.GetFrame(0);
                        //// Get the line number from the stack frame
                        //var line = frame.GetFileLineNumber();
                        //ErrGetStateDeviceMess = ex.Message+" "+ line+""+ BytesToRead;
                        ErrGetStateDeviceMess = ex.Message;
                    }
                }
                return(SleepTime);
            }
            else
            {
                StateMess = "Ошибка открытия порта";
                A         = -999;
                Hz        = -999;
                return(0);
            }
        }
Example #6
0
        internal int GetSmartState(DevConnection DevConn)
        {
            int FuncSleepTime = 0;

            GetStateCounter++;
            if (isActivExchangeMode)//по запросу
            {
            }
            else      //постоянная передача с прибора
            {
                try
                {
                    int BytesToRead = DevConn._serialPort.BytesToRead;
                    if (BytesToRead > 0)
                    {
                        if (BytesToRead > 100)
                        {
                            DevConn.ErrManyBytes++;
                            DevConn._serialPort.DiscardInBuffer();
                        }
                        else
                        {
                            DevConn._serialPort.Read(AnswerByteBuff, storedBytes, BytesToRead);
                            StringBuilder sb = new StringBuilder();
                            for (int i = 0; i < BytesToRead + storedBytes; i++)
                            {
                                sb.Append(Convert.ToChar(AnswerByteBuff[i]));
                                if (AnswerByteBuff[i] == 10)
                                {
                                    if (sb.Length == 14)
                                    {
                                        if (uiSep == ",")
                                        {
                                            sb.Replace(".", ",");              //заменяем точки если системный разделитель запятая
                                        }
                                        if (float.TryParse(sb.ToString(2, 7), out float fResult))
                                        {
                                            ScaleResult = fResult;
                                            if (sb[1] == Convert.ToChar("-"))
                                            {
                                                ScaleResult = ScaleResult * (-1);                              //если число отрицательное
                                            }
                                            if (sb[11] == Convert.ToChar("O"))
                                            {
                                                IsOverload = true;
                                                IsStable   = IsInvalid = false;
                                            }
                                            else if (sb[11] == Convert.ToChar("I"))
                                            {
                                                IsInvalid = true;
                                                IsStable  = IsOverload = false;
                                            }
                                            else if (sb[11] == Convert.ToChar(" "))
                                            {
                                                IsStable  = true;
                                                IsInvalid = IsOverload = false;
                                            }
                                            else if (sb[11] == Convert.ToChar("M"))
                                            {
                                                IsStable = IsInvalid = IsOverload = false;
                                            }
                                            RecieveLettersCounter++;
                                            if (StateMess != "Ok")
                                            {
                                                StateMess = "Ok";
                                            }
                                            NoAnswerCounter = 0;
                                        }
                                        else
                                        {
                                            ErrConvertCounter++;
                                        }
                                    }
                                    else
                                    {
                                        ErrAnswerLenghtCounter++;
                                    }
                                    sb.Clear();
                                }
                            }
                            if (sb.Length != 0)
                            {
                                //storedBytes = sb.Length;
                                Array.Clear(AnswerByteBuff, 0, AnswerByteBuff.Length);
                                //for (int i = 0; i < sb.Length; i++)
                                //{
                                //    AnswerByteBuff[i] = Convert.ToByte(sb[i]);
                                //}
                            }
                        }
                    }
                    if (NoAnswerCounter < NoAnswerLimit)
                    {
                        NoAnswerCounter++;
                    }
                    if (NoAnswerCounter == NoAnswerLimit)//нет ответа определенное время
                    {
                        NoAnswerCounter++;
                        ScaleResult = -999;
                        IsStable    = IsInvalid = IsOverload = false;
                        StateMess   = "Нет связи с контроллером SMART";
                        LostConnectionCounter++;
                    }

                    Thread.Sleep(SleepTime);
                    FuncSleepTime += SleepTime;
                }
                catch (Exception)
                {
                    ErrGetStateDevice++;
                }
            }
            return(FuncSleepTime);
        }
Example #7
0
        int NoAnswerCounter = 0; //счетчик неполученных ответов

        internal int GetState(DevConnection DevConn)
        {
            GetStateCounter++;
            if (DevConn.PortState == 3)
            {
                try
                {
                    int    BytesToRead = 0;
                    string Rs485       = String.Format("{0:D2}", RS485Num);
                    string CRC         = string.Empty;

                    #region Проверка состояния
                    ByteBuff[0]  = 0x05;//начало пакета
                    ByteBuff[1]  = Convert.ToByte(Rs485[0]);
                    ByteBuff[2]  = Convert.ToByte(Rs485[1]);
                    ByteBuff[3]  = 0x37; //7
                    ByteBuff[4]  = 0x41; //A
                    ByteBuff[5]  = 0x30; //время ожидания
                    ByteBuff[20] = 0;
                    for (int i = 1; i <= 5; i++)
                    {
                        ByteBuff[20] += ByteBuff[i];
                    }
                    CRC         = String.Format("{0:X2}", ByteBuff[20]);
                    ByteBuff[6] = Convert.ToByte(CRC[0]);
                    ByteBuff[7] = Convert.ToByte(CRC[1]);
                    ByteBuff[8] = 13;
                    DevConn._serialPort.Write(ByteBuff, 0, 9);

                    SendLettersCounter++;
                    Thread.Sleep(SleepTime);

                    BytesToRead = DevConn._serialPort.BytesToRead;


                    if (BytesToRead == 9)
                    {
                        Array.Clear(ByteBuff, 0, ByteBuff.Length);
                        DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                        //проверяем CRC
                        ByteBuff[20] = 0;
                        for (int i = 1; i < BytesToRead - 4; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        int RecievedCRC = -1;
                        try
                        {
                            RecievedCRC = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, BytesToRead - 3, 2), 16);
                        }
                        catch (Exception)
                        {
                            ErrConvertCRC++;
                        }

                        if ((RecievedCRC != -1) && (ByteBuff[20] == RecievedCRC))
                        {
                            string BinState = Convert.ToString(Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 3, 2), 16), 2).PadLeft(8, '0');
                            fRun   = (BinState[7].Equals('1')) ? true : false;
                            fRunF  = (BinState[6].Equals('1')) ? true : false;
                            fRunB  = (BinState[5].Equals('1')) ? true : false;
                            fHzMax = (BinState[4].Equals('1')) ? true : false;
                            fOL    = (BinState[3].Equals('1')) ? true : false;
                            fHzOk  = (BinState[1].Equals('1')) ? true : false;
                            fErr   = (BinState[0].Equals('1')) ? true : false;

                            StateMess       = "Ok";
                            NoAnswerCounter = 0;
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (RecievedCRC != -1)
                            {
                                ErrCRC++;
                            }
                        }
                    }
                    else
                    {
                        if (BytesToRead > 0)
                        {
                            ErrAnswerLenghtCounter++;
                            //Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            //DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            DevConn._serialPort.DiscardInBuffer();
                        }
                    }
                    #endregion

                    #region Запрос текущей частоты
                    ByteBuff[0]  = 0x05;//начало пакета
                    ByteBuff[1]  = Convert.ToByte(Rs485[0]);
                    ByteBuff[2]  = Convert.ToByte(Rs485[1]);
                    ByteBuff[3]  = 0x36; //6
                    ByteBuff[4]  = 0x46; //F
                    ByteBuff[5]  = 0x30; //время ожидания
                    ByteBuff[20] = 0;
                    for (int i = 1; i <= 5; i++)
                    {
                        ByteBuff[20] += ByteBuff[i];
                    }
                    CRC         = String.Format("{0:X2}", ByteBuff[20]);
                    ByteBuff[6] = Convert.ToByte(CRC[0]);
                    ByteBuff[7] = Convert.ToByte(CRC[1]);
                    ByteBuff[8] = 13;
                    DevConn._serialPort.Write(ByteBuff, 0, 9);

                    SendLettersCounter++;
                    Thread.Sleep(SleepTime);

                    BytesToRead = DevConn._serialPort.BytesToRead;

                    if (BytesToRead == 11)
                    {
                        Array.Clear(ByteBuff, 0, ByteBuff.Length);
                        DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                        //проверяем CRC
                        ByteBuff[20] = 0;
                        for (int i = 1; i < BytesToRead - 4; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        int RecievedCRC = -1;
                        try
                        {
                            RecievedCRC = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, BytesToRead - 3, 2), 16);
                        }
                        catch (Exception)
                        {
                            ErrConvertCRC++;
                        }
                        if ((RecievedCRC != -1) && (ByteBuff[20] == RecievedCRC))
                        {
                            CurrentHz = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 3, 4), 16) / 100;

                            StateMess       = "Ok";
                            NoAnswerCounter = 0;
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (RecievedCRC != -1)
                            {
                                ErrCRC++;
                            }
                        }
                    }
                    else
                    {
                        if (BytesToRead > 0)
                        {
                            ErrAnswerLenghtCounter++;
                            DevConn._serialPort.DiscardInBuffer();
                        }
                    }
                    #endregion

                    #region Запрос текущего тока
                    ByteBuff[0]  = 0x05;//начало пакета
                    ByteBuff[1]  = Convert.ToByte(Rs485[0]);
                    ByteBuff[2]  = Convert.ToByte(Rs485[1]);
                    ByteBuff[3]  = 0x37; //7
                    ByteBuff[4]  = 0x30; //0
                    ByteBuff[5]  = 0x30; //время ожидания
                    ByteBuff[20] = 0;
                    for (int i = 1; i <= 5; i++)
                    {
                        ByteBuff[20] += ByteBuff[i];
                    }
                    CRC         = String.Format("{0:X2}", ByteBuff[20]);
                    ByteBuff[6] = Convert.ToByte(CRC[0]);
                    ByteBuff[7] = Convert.ToByte(CRC[1]);
                    ByteBuff[8] = 13;
                    DevConn._serialPort.Write(ByteBuff, 0, 9);

                    SendLettersCounter++;
                    Thread.Sleep(SleepTime);

                    BytesToRead = DevConn._serialPort.BytesToRead;

                    if (BytesToRead == 11)
                    {
                        Array.Clear(ByteBuff, 0, ByteBuff.Length);
                        DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                        //проверяем CRC
                        ByteBuff[20] = 0;
                        for (int i = 1; i < BytesToRead - 4; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        int RecievedCRC = -1;
                        try
                        {
                            RecievedCRC = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, BytesToRead - 3, 2), 16);
                        }
                        catch (Exception)
                        {
                            ErrConvertCRC++;
                        }
                        if ((RecievedCRC != -1) && (ByteBuff[20] == RecievedCRC))
                        {
                            CurrentA = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 3, 4), 16) / 10;

                            StateMess       = "Ok";
                            NoAnswerCounter = 0;
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (RecievedCRC != -1)
                            {
                                ErrCRC++;
                            }
                        }
                    }
                    else
                    {
                        if (BytesToRead > 0)
                        {
                            ErrAnswerLenghtCounter++;
                            DevConn._serialPort.DiscardInBuffer();
                        }
                    }
                    #endregion

                    #region Запрос текущего напряжения
                    ByteBuff[0]  = 0x05;//начало пакета
                    ByteBuff[1]  = Convert.ToByte(Rs485[0]);
                    ByteBuff[2]  = Convert.ToByte(Rs485[1]);
                    ByteBuff[3]  = 0x37; //7
                    ByteBuff[4]  = 0x31; //1
                    ByteBuff[5]  = 0x30; //время ожидания
                    ByteBuff[20] = 0;
                    for (int i = 1; i <= 5; i++)
                    {
                        ByteBuff[20] += ByteBuff[i];
                    }
                    CRC         = String.Format("{0:X2}", ByteBuff[20]);
                    ByteBuff[6] = Convert.ToByte(CRC[0]);
                    ByteBuff[7] = Convert.ToByte(CRC[1]);
                    ByteBuff[8] = 13;
                    DevConn._serialPort.Write(ByteBuff, 0, 9);

                    SendLettersCounter++;
                    Thread.Sleep(SleepTime);

                    BytesToRead = DevConn._serialPort.BytesToRead;

                    if (BytesToRead == 11)
                    {
                        Array.Clear(ByteBuff, 0, ByteBuff.Length);
                        DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                        //проверяем CRC
                        ByteBuff[20] = 0;
                        for (int i = 1; i < BytesToRead - 4; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        int RecievedCRC = -1;
                        try
                        {
                            RecievedCRC = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, BytesToRead - 3, 2), 16);
                        }
                        catch (Exception)
                        {
                            ErrConvertCRC++;
                        }
                        if ((RecievedCRC != -1) && (ByteBuff[20] == RecievedCRC))
                        {
                            CurrentV = Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 3, 4), 16) / 10;

                            StateMess       = "Ok";
                            NoAnswerCounter = 0;
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (RecievedCRC != -1)
                            {
                                ErrCRC++;
                            }
                        }
                    }
                    else
                    {
                        if (BytesToRead > 0)
                        {
                            ErrAnswerLenghtCounter++;
                            DevConn._serialPort.DiscardInBuffer();
                        }
                    }
                    #endregion

                    #region Старт/Стоп
                    if ((isNeedRun && !fRun) || (!isNeedRun && fRun))
                    {
                        ByteBuff[0] = 0x05;//начало пакета
                        ByteBuff[1] = Convert.ToByte(Rs485[0]);
                        ByteBuff[2] = Convert.ToByte(Rs485[1]);
                        ByteBuff[3] = 0x46; //F
                        ByteBuff[4] = 0x41; //A
                        ByteBuff[5] = 0x30; //время ожидания
                        ByteBuff[6] = 0x30; //
                        ByteBuff[7] = (isNeedRun) ? (Byte)0x32 : (Byte)0x30;


                        ByteBuff[20] = 0;
                        for (int i = 1; i <= 7; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        CRC          = String.Format("{0:X2}", ByteBuff[20]);
                        ByteBuff[8]  = Convert.ToByte(CRC[0]);
                        ByteBuff[9]  = Convert.ToByte(CRC[1]);
                        ByteBuff[10] = 13;
                        DevConn._serialPort.Write(ByteBuff, 0, 11);

                        SendLettersCounter++;
                        Thread.Sleep(SleepTime);

                        BytesToRead = DevConn._serialPort.BytesToRead;

                        if (BytesToRead == 4)
                        {
                            Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (BytesToRead > 0)
                            {
                                ErrAnswerLenghtCounter++;
                                DevConn._serialPort.DiscardInBuffer();
                            }
                        }
                    }
                    #endregion

                    #region Задание частоты

                    if (fRun && (CurrentHz != PresetHz))
                    {
                        String Hez = String.Format("{0:X4}", (int)PresetHz * 100);

                        ByteBuff[0] = 0x05;//начало пакета
                        ByteBuff[1] = Convert.ToByte(Rs485[0]);
                        ByteBuff[2] = Convert.ToByte(Rs485[1]);
                        ByteBuff[3] = 0x45;                   //E
                        ByteBuff[4] = 0x45;                   //E
                        ByteBuff[5] = 0x30;                   //время ожидания
                        ByteBuff[6] = Convert.ToByte(Hez[0]); //
                        ByteBuff[7] = Convert.ToByte(Hez[1]); //
                        ByteBuff[8] = Convert.ToByte(Hez[2]); //
                        ByteBuff[9] = Convert.ToByte(Hez[3]); //

                        ByteBuff[20] = 0;
                        for (int i = 1; i <= 9; i++)
                        {
                            ByteBuff[20] += ByteBuff[i];
                        }
                        CRC          = String.Format("{0:X2}", ByteBuff[20]);
                        ByteBuff[10] = Convert.ToByte(CRC[0]);
                        ByteBuff[11] = Convert.ToByte(CRC[1]);
                        ByteBuff[12] = 13;
                        DevConn._serialPort.Write(ByteBuff, 0, 13);

                        SendLettersCounter++;
                        Thread.Sleep(SleepTime);

                        BytesToRead = DevConn._serialPort.BytesToRead;

                        if (BytesToRead == 4)
                        {
                            Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            RecieveLettersCounter++;
                        }
                        else
                        {
                            if (BytesToRead > 0)
                            {
                                ErrAnswerLenghtCounter++;
                                DevConn._serialPort.DiscardInBuffer();
                            }
                        }
                    }
                    #endregion

                    if (NoAnswerCounter < NoAnswerLimit)
                    {
                        NoAnswerCounter++;
                    }
                    if (NoAnswerCounter == NoAnswerLimit)//нет ответа определенное время
                    {
                        NoAnswerCounter++;
                        StateMess = "Нет связи с Mitsubishi E5xx";
                        CurrentHz = 0;
                        CurrentA  = 0;
                        CurrentV  = 0;
                        fRun      = false;
                        fRunB     = false;
                        fRunF     = false;
                        LostConnectionCounter++;
                    }
                }
                catch (Exception e)
                {
                    //ErrGetStateDeviceMess = e.Message;
                    ErrGetStateDevice++;
                    // Get stack trace for the exception with source file information
                    var st = new StackTrace(e, true);
                    // Get the top stack frame
                    var frame = st.GetFrame(0);
                    // Get the line number from the stack frame
                    var line = frame.GetFileLineNumber();
                    ErrGetStateDeviceMess = e.Message + " " + line;
                }

                return(SleepTime);
            }
            else
            {
                StateMess = "Ошибка открытия порта";
                return(0);
            }
        }
Example #8
0
        internal int GetState(DevConnection DevConn)
        {
            GetStateCounter++;
            if (DevConn.PortState == 3)
            {
                #region  ежим обмена по запросу
                if (isActivExchangeMode)//по запросу
                {
                    try
                    {
                        Thread.Sleep(SleepTime);
                    }
                    catch (Exception e)
                    {
                        ErrGetStateDeviceMess = e.Message;
                        ErrGetStateDevice++;
                    }
                }
                #endregion
                else //постоянная передача с прибора
                {
                    try
                    {
                        int BytesToRead = DevConn._serialPort.BytesToRead;
                        if (BytesToRead > 0)
                        {
                            if (BytesToRead > 0)
                            {
                                if (BytesToRead > 100)
                                {
                                    DevConn.ErrManyBytes++;
                                    DevConn._serialPort.DiscardInBuffer();
                                }
                                else
                                {
                                    Array.Clear(ByteBuff, 0, ByteBuff.Length);
                                    DevConn._serialPort.Read(ByteBuff, storedBytes, BytesToRead);
                                    if ((BytesToRead == 9) && (ByteBuff[0] == 61))
                                    {
                                        StringBuilder sb = new StringBuilder();
                                        Array.Reverse(ByteBuff, 0, 9);
                                        for (int i = 0; i < 8; i++)
                                        {
                                            sb.Append(Convert.ToChar(ByteBuff[i]));
                                        }
                                        if (uiSep == ",")
                                        {
                                            sb.Replace(".", ",");              //заменяем точки если системный разделитель запятая
                                        }
                                        if (float.TryParse(sb.ToString(), out float fResult))
                                        {
                                            ScaleResult     = fResult;
                                            StateMess       = "Ok";
                                            NoAnswerCounter = 0;
                                            RecieveLettersCounter++;
                                            IsStable = true;
                                            if (ZeroRange == 0)//ноль весов
                                            {
                                                IsZero = (ScaleResult != 0) ? false : true;
                                            }
                                            else
                                            {
                                                IsZero = (Math.Abs(ScaleResult) <= ZeroRange) ? false : true;
                                            }
                                            ResultList.Add(new WeightResult(5, DateTime.Now));
                                            if (ResultList.Count > 20)
                                            {
                                                ResultList.RemoveAt(0);
                                            }
                                        }
                                        else
                                        {
                                            ErrConvertCounter++;
                                        }
                                    }
                                    else
                                    {
                                        ErrAnswerLenghtCounter++;
                                    }
                                }
                            }
                        }

                        if (NoAnswerCounter < NoAnswerLimit)
                        {
                            NoAnswerCounter++;
                        }
                        if (NoAnswerCounter == NoAnswerLimit)    //нет ответа определенное время
                        {
                            NoAnswerCounter++;
                            ScaleResult = -999;
                            IsStable    = false;
                            StateMess   = "Нет связи с терминалом МИ МДА/15Я";
                            LostConnectionCounter++;
                        }
                        Thread.Sleep(SleepTime);
                    }
                    catch (Exception e)
                    {
                        ErrGetStateDeviceMess = e.Message;
                        ErrGetStateDevice++;
                    }
                }
                return(SleepTime);
            }
            else
            {
                StateMess = "Ошибка открытия порта";
                return(0);
            }
        }
Example #9
0
        internal int GetState(DevConnection DevConn)
        {
            if (DevConn.PortState == 3)
            {
                int BytesToRead = 0;
                try
                {
                    #region Установка 8-ми выходов
                    bool ChangeFlag = false;
                    for (int i = 0; i < 8; i++)
                    {
                        if (OutputState[i] != _outputStateFact[i])
                        {
                            ChangeFlag = true;
                        }
                    }
                    if (ChangeFlag)//есть изменения в состоянии выходов
                    {
                        ByteBuff[0] = Convert.ToByte('@');
                        string Rs485 = String.Format("{0:D2}", _rs485Num);
                        ByteBuff[1] = Convert.ToByte(Rs485[0]);
                        ByteBuff[2] = Convert.ToByte(Rs485[1]);
                        StringBuilder sb = new StringBuilder();
                        for (int i = 7; i >= 0; i--)
                        {
                            sb.Append(OutputState[i]);
                        }
                        string OutputString = String.Format("{0:X2}", Convert.ToInt32(sb.ToString(), 2));
                        ByteBuff[3] = Convert.ToByte(OutputString[0]);
                        ByteBuff[4] = Convert.ToByte(OutputString[1]);
                        if (_cRCEnabled)
                        {
                            ByteBuff[20] = 0;
                            for (int i = 0; i <= 4; i++)
                            {
                                ByteBuff[20] += ByteBuff[i];
                            }
                            string CRC = String.Format("{0:X2}", ByteBuff[20]);
                            ByteBuff[5] = Convert.ToByte(CRC[0]);
                            ByteBuff[6] = Convert.ToByte(CRC[1]);
                            ByteBuff[7] = 13;

                            DevConn._serialPort.Write(ByteBuff, 0, 8);
                        }
                        else
                        {
                            ByteBuff[5] = 13;
                            DevConn._serialPort.Write(ByteBuff, 0, 6);
                        }

                        SendLettersCounter++;
                        Thread.Sleep(_sleepTime);
                        BytesToRead = DevConn._serialPort.BytesToRead;
                        if (BytesToRead > 0)
                        {
                            Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            bool AnswerOk = false;
                            if (_cRCEnabled && BytesToRead == 4)
                            {
                                if (ByteBuff[0] == Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 1, 2), 16))
                                {
                                    AnswerOk = true;
                                }
                                else
                                {
                                    ErrCRC++;
                                }
                            }
                            else if (!_cRCEnabled && BytesToRead == 2)
                            {
                                AnswerOk = true;
                            }
                            else
                            {
                                DevConn._serialPort.DiscardInBuffer();
                                ErrAnswerLenght++;
                            }

                            if (AnswerOk)
                            {
                                StateMess       = "Ok";
                                NoAnswerCounter = 0;
                                RecieveLettersCounter++;
                                Array.Copy(OutputState, _outputStateFact, 8);
                            }
                        }
                    }
                    #endregion

                    #region Опрос входов
                    if (_diEnabled)
                    {
                        ByteBuff[0] = Convert.ToByte('@');
                        string Rs485 = String.Format("{0:D2}", _rs485Num);
                        ByteBuff[1] = Convert.ToByte(Rs485[0]);
                        ByteBuff[2] = Convert.ToByte(Rs485[1]);
                        if (_cRCEnabled)
                        {
                            ByteBuff[20] = 0;
                            for (int i = 0; i <= 2; i++)
                            {
                                ByteBuff[20] += ByteBuff[i];
                            }
                            string CRC = String.Format("{0:X2}", ByteBuff[20]);
                            ByteBuff[3] = Convert.ToByte(CRC[0]);
                            ByteBuff[4] = Convert.ToByte(CRC[1]);
                            ByteBuff[5] = 13;

                            DevConn._serialPort.Write(ByteBuff, 0, 6);
                        }
                        else
                        {
                            ByteBuff[3] = 13;
                            DevConn._serialPort.Write(ByteBuff, 0, 4);
                        }

                        SendLettersCounter++;
                        Thread.Sleep(_sleepTime);
                        BytesToRead = DevConn._serialPort.BytesToRead;
                        if (BytesToRead > 0)
                        {
                            Array.Clear(ByteBuff, 0, ByteBuff.Length);
                            DevConn._serialPort.Read(ByteBuff, 0, BytesToRead);
                            bool AnswerOk = false;
                            if (_cRCEnabled && BytesToRead == 8)
                            {
                                ByteBuff[20] = 0;
                                for (int i = 0; i < BytesToRead - 3; i++)
                                {
                                    ByteBuff[20] += ByteBuff[i];
                                }
                                if (ByteBuff[20] == Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, BytesToRead - 3, 2), 16))
                                {
                                    AnswerOk = true;
                                }
                                else
                                {
                                    ErrCRC++;
                                }
                            }
                            else if (!_cRCEnabled && BytesToRead == 6)
                            {
                                AnswerOk = true;
                            }
                            else
                            {
                                DevConn._serialPort.DiscardInBuffer();
                                ErrAnswerLenght++;
                            }

                            if (AnswerOk)
                            {
                                string BinState = Convert.ToString(Convert.ToInt32(ASCIIEncoding.ASCII.GetString(ByteBuff, 3, 2), 16), 2).PadLeft(8, '0');
                                for (int i = 0; i < 8; i++)
                                {
                                    InputState[7 - i] = (BinState[i].Equals('1')) ? true : false;
                                }
                                StateMess       = "Ok";
                                NoAnswerCounter = 0;
                                RecieveLettersCounter++;
                            }
                        }
                    }
                    #endregion
                    if (NoAnswerCounter < _noAnswerLimit)
                    {
                        NoAnswerCounter++;
                    }
                    if (NoAnswerCounter == _noAnswerLimit)//нет ответа определенное время
                    {
                        NoAnswerCounter++;
                        StateMess = "Нет связи с модулем I7055";
                        LostConnectionCounter++;
                    }
                }
                catch (Exception ex)
                {
                    ErrGetStateDevice++;
                    //// Get stack trace for the exception with source file information
                    //var st = new StackTrace(ex, true);
                    //// Get the top stack frame
                    //var frame = st.GetFrame(0);
                    //// Get the line number from the stack frame
                    //var line = frame.GetFileLineNumber();
                    //ErrGetStateDeviceMess = ex.Message+" "+ line+""+ BytesToRead;
                    ErrGetStateDeviceMess = ex.Message;
                }
                return(_sleepTime);
            }
            else
            {
                StateMess = "Ошибка открытия порта";
                return(0);
            }
        }
Example #10
0
        internal int GetM06State(DevConnection DevConn)
        {
            GetStateCounter++;
            if (DevConn.PortState == 3)
            {
                #region  ежим обмена по запросу
                if (isActivExchangeMode)//по запросу
                {
                    try
                    {
                        byte SendCommandNum = 0;
                        AnswerByteBuff[0] = 0xFF;
                        AnswerByteBuff[1] = Convert.ToByte(0x20 + RS485Num);
                        AnswerByteBuff[2] = 0x20;

                        if (isNeedZero) //Если необходимо обнулить
                        {
                            isNeedZero        = false;
                            AnswerByteBuff[3] = 0x4B;
                            AnswerByteBuff[4] = 0x41;
                            SendCommandNum    = 1;
                        }
                        else //запрос состояния прибора
                        {
                            AnswerByteBuff[3] = 0x2E;
                            AnswerByteBuff[4] = 0x7F;
                            SendCommandNum    = 2;
                        }

                        //Считаем контрольную сумму
                        int crc = 0;
                        for (int i = 0; i <= 4; i++)
                        {
                            crc = crc ^ AnswerByteBuff[i];
                        }
                        AnswerByteBuff[5] = Convert.ToByte(crc);
                        AnswerByteBuff[6] = 0x3;
                        DevConn._serialPort.Write(AnswerByteBuff, 0, 7);
                        SendLettersCounter++;
                        Thread.Sleep(SleepTime);
                        BytesToRead = DevConn._serialPort.BytesToRead;
                        if ((BytesToRead > 0) && (BytesToRead > 30))
                        {
                            if (BytesToRead > 100)
                            {
                                DevConn.ErrManyBytes++;
                                DevConn._serialPort.DiscardInBuffer();
                            }
                            else
                            {
                                Array.Clear(AnswerByteBuff, 0, AnswerByteBuff.Length);
                                DevConn._serialPort.Read(AnswerByteBuff, 0, BytesToRead);

                                if (AnswerByteBuff[BytesToRead - 3] == 16) //проверяем контрольную сумму на предмет зарезервированного символа
                                {
                                    AnswerByteBuff[BytesToRead - 3] = Convert.ToByte(255 - AnswerByteBuff[BytesToRead - 2]);
                                    AnswerByteBuff[BytesToRead - 2] = AnswerByteBuff[BytesToRead - 1];
                                    BytesToRead--;
                                }
                                //проверяем контрольную сумму
                                int counter = 0;
                                crc = 0;

                                do
                                {
                                    if (AnswerByteBuff[counter] != 16)
                                    {
                                        crc = crc ^ AnswerByteBuff[counter];
                                    }
                                    else
                                    {
                                        counter++;
                                        crc = crc ^ (255 - AnswerByteBuff[counter]);
                                    }
                                    counter++;
                                } while (counter < (BytesToRead - 2));


                                if (AnswerByteBuff[BytesToRead - 2] == crc)
                                {
                                    //Убираем все резервированные символы
                                    int posSource = 0;
                                    int posDest   = 0;
                                    do
                                    {
                                        if (AnswerByteBuff[posSource] != 16)
                                        {
                                            AnswerByteBuff[posDest] = AnswerByteBuff[posSource];
                                            posDest++;
                                            posSource++;
                                        }
                                        else
                                        {
                                            AnswerByteBuff[posDest] = Convert.ToByte(255 - AnswerByteBuff[posSource + 1]);
                                            posDest++;
                                            posSource += 2;
                                        }
                                    } while (posSource <= BytesToRead);


                                    if (SendCommandNum == 2) //если посылали запрос на состояние
                                    {
                                        if ((posDest == 36) || (posDest == 35))
                                        {
                                            try
                                            {
                                                //состояние веса, считываем флаги
                                                string BinState = Convert.ToString(AnswerByteBuff[18], 2).PadLeft(8, '0');
                                                fNoLoadCell = (BinState[0].Equals('1')) ? true : false;
                                                fOverLoad   = (BinState[1].Equals('1')) ? true : false;
                                                fUnderLoad  = (BinState[2].Equals('1')) ? true : false;
                                                fMin20d     = (BinState[3].Equals('1')) ? true : false;
                                                fNearZero   = (BinState[4].Equals('1')) ? true : false;
                                                IsStable    = (BinState[5].Equals('1')) ? true : false;
                                                fZeroClb    = (BinState[6].Equals('1')) ? true : false;
                                                fClb        = (BinState[7].Equals('1')) ? true : false;
                                                //АЦП
                                                string ACPHex = Convert.ToString(AnswerByteBuff[6], 16).PadLeft(2, '0');
                                                ACPHex   += Convert.ToString(AnswerByteBuff[7], 16).PadLeft(2, '0');
                                                ACPHex   += Convert.ToString(AnswerByteBuff[8], 16).PadLeft(2, '0');
                                                ACPHex   += Convert.ToString(AnswerByteBuff[9], 16).PadLeft(2, '0');
                                                ACPResult = int.Parse(ACPHex, System.Globalization.NumberStyles.HexNumber);
                                                //определение позиции точки
                                                switch (AnswerByteBuff[23])
                                                {
                                                case 3: PointPosition = 3; break;

                                                case 4: PointPosition = 2; break;

                                                case 5: PointPosition = 1; break;

                                                case 6: PointPosition = 0; break;

                                                default: PointPosition = 0; break;
                                                }
                                                //текущее брутто
                                                double dTemp = (AnswerByteBuff[10] << 8) + AnswerByteBuff[11];
                                                if (AnswerByteBuff[10] > 127)
                                                {
                                                    dTemp -= 65536;
                                                }
                                                dTemp  = dTemp / (Math.Exp(PointPosition * Math.Log(10)));
                                                Brutto = (float)dTemp;
                                                //текущее нетто
                                                dTemp = (AnswerByteBuff[12] << 8) + AnswerByteBuff[13];
                                                if (AnswerByteBuff[12] > 127)
                                                {
                                                    dTemp -= 65536;
                                                }
                                                dTemp = dTemp / (Math.Exp(PointPosition * Math.Log(10)));
                                                Netto = (float)dTemp;
                                                //текущее тара
                                                dTemp = (AnswerByteBuff[14] << 8) + AnswerByteBuff[15];
                                                if (AnswerByteBuff[14] > 127)
                                                {
                                                    dTemp -= 65536;
                                                }
                                                dTemp = dTemp / (Math.Exp(PointPosition * Math.Log(10)));
                                                Tara  = (float)dTemp;
                                                //текущий ноль
                                                dTemp = (AnswerByteBuff[16] << 8) + AnswerByteBuff[17];
                                                if (AnswerByteBuff[16] > 127)
                                                {
                                                    dTemp -= 65536;
                                                }
                                                dTemp = dTemp / (Math.Exp(PointPosition * Math.Log(10)));
                                                Zero  = (float)dTemp;

                                                ScaleResult = Netto;

                                                StateMess       = "Ok";
                                                NoAnswerCounter = 0;
                                                RecieveLettersCounter++;
                                            }
                                            catch (Exception)
                                            {
                                                ErrConvertCounter++;
                                            }
                                        }
                                        else if (posDest == 9) //прибор занят и не может ответить
                                        {
                                            RecieveLettersCounter++;
                                        }
                                        else
                                        {
                                            ErrAnswerLenghtCounter++;
                                        }
                                    }
                                    else if (SendCommandNum == 1) //если посылали запрос на обнуление
                                    {
                                    }
                                }
                                else
                                {
                                    ErrCRC++;
                                }
                            }
                        }
                        if (NoAnswerCounter < NoAnswerLimit)
                        {
                            NoAnswerCounter++;
                        }
                        if (NoAnswerCounter == NoAnswerLimit)//нет ответа определенное время
                        {
                            NoAnswerCounter++;
                            ScaleResult = -999;
                            Tara        = -999;
                            Brutto      = -999;
                            Netto       = -999;
                            ACPResult   = -999;
                            Zero        = -999;
                            IsStable    = false;
                            StateMess   = "Нет связи с контроллером Микросим М06";
                            LostConnectionCounter++;
                        }
                    }
                    catch (Exception ex)
                    {
                        ErrGetStateDevice++;
                        //// Get stack trace for the exception with source file information
                        //var st = new StackTrace(ex, true);
                        //// Get the top stack frame
                        //var frame = st.GetFrame(0);
                        //// Get the line number from the stack frame
                        //var line = frame.GetFileLineNumber();
                        //ErrGetStateDeviceMess = ex.Message+" "+ line+""+ BytesToRead;
                    }
                }
                #endregion

                #region  ежим постоянной передачи
                else      //постоянная передача с прибора
                {
                    try
                    {
                        int BytesToRead = DevConn._serialPort.BytesToRead;
                        if (BytesToRead > 0)
                        {
                            if (BytesToRead > 100)
                            {
                                DevConn.ErrManyBytes++;
                                DevConn._serialPort.DiscardInBuffer();
                            }
                            else
                            {
                                DevConn._serialPort.Read(AnswerByteBuff, storedBytes, BytesToRead);
                                StringBuilder sb = new StringBuilder();
                                for (int i = 0; i < BytesToRead + storedBytes; i++)
                                {
                                    sb.Append(Convert.ToChar(AnswerByteBuff[i]));
                                    if (AnswerByteBuff[i] == 10)
                                    {
                                        if (sb.Length == 15)
                                        {
                                            if (uiSep == ",")
                                            {
                                                sb.Replace(".", ",");              //заменяем точки если системный разделитель запятая
                                            }
                                            if (float.TryParse(sb.ToString(3, 6), out float fResult))
                                            {
                                                ScaleResult = fResult;
                                                if (sb[2] == Convert.ToChar("-"))
                                                {
                                                    ScaleResult = ScaleResult * (-1);                              //если число отрицательное
                                                }
                                                IsStable = (sb[9] == Convert.ToChar("?")) ? false : true;
                                                if (ZeroRange == 0)//ноль весов
                                                {
                                                    IsZero = (ScaleResult != 0) ? false : true;
                                                }
                                                else
                                                {
                                                    IsZero = (Math.Abs(ScaleResult) <= ZeroRange) ? false : true;
                                                }
                                                StateMess       = "Ok";
                                                NoAnswerCounter = 0;
                                                RecieveLettersCounter++;
                                            }
                                            else
                                            {
                                                ErrConvertCounter++;
                                                ScaleResult = -999;
                                                StateMess   = sb.ToString(2, 6);
                                            }
                                        }
                                        else
                                        {
                                            ErrAnswerLenghtCounter++;
                                        }
                                        sb.Clear();
                                    }
                                }
                                if (sb.Length != 0)
                                {
                                    //storedBytes = sb.Length;
                                    Array.Clear(AnswerByteBuff, 0, AnswerByteBuff.Length);
                                    //for (int i = 0; i < sb.Length; i++)
                                    //{
                                    //    AnswerByteBuff[i] = Convert.ToByte(sb[i]);
                                    //}
                                }
                            }
                        }
                        if (NoAnswerCounter < NoAnswerLimit)
                        {
                            NoAnswerCounter++;
                        }
                        if (NoAnswerCounter == NoAnswerLimit)//нет ответа определенное время
                        {
                            NoAnswerCounter++;
                            ScaleResult = -999;
                            IsStable    = false;
                            StateMess   = "Нет связи с контроллером Микросим М06";
                            LostConnectionCounter++;
                        }
                        Thread.Sleep(SleepTime);
                    }
                    catch (Exception e)
                    {
                        ErrGetStateDeviceMess = e.Message;
                        ErrGetStateDevice++;
                    }
                }
                #endregion
                return(SleepTime);
            }
            else  //если порт не открылся
            {
                StateMess   = "Ошибка открытия порта";
                ScaleResult = -999;
                return(0);
            }
        }