Пример #1
0
        private bool getRecordValueByParam(Params param, List<Record> records, out float value)
        {
            if (records == null && records.Count == 0)
            {
                WriteToLog("getRecordValueByParam: список записей пуст");
                value = 0f;
                return false;
            }

            if ((int)param >= records.Count)
            {
                WriteToLog("getRecordValueByParam: параметра не существует в списке записей: " + param.ToString());
                value = 0f;
                return false;
            }

            Record record = records[(int)param];
            byte[] data = record.dataBytes.ToArray();
            Array.Reverse(data);
            string hex_str = BitConverter.ToString(data).Replace("-", string.Empty);

            int COEFFICIENT = 1;
            switch (param)
            {
                case Params.FACTORY_NUMBER:
                    {
                        break;
                    }
                case Params.ENERGY:
                    {
                        //коэффициент, согласно документации MBUS, после применения дает значение в KCal
                        COEFFICIENT = 10;
                        //однако, согласно документации elf, требуется представить в GCal
                        COEFFICIENT *= (int)Math.Pow(10, 6);
                        break;
                    }
                case Params.POWER:
                    {
                        COEFFICIENT = 10;
                        break;
                    }
                case Params.VOLUME:
                case Params.VOLUME_IMP1:
                case Params.VOLUME_IMP2:
                case Params.VOLUME_IMP3:
                case Params.VOLUME_IMP4:
                case Params.VOLUME_FLOW:
                    {
                        COEFFICIENT = 1000;
                        break;
                    }
                case Params.TEMP_INP:
                case Params.TEMP_OUTP:
                    {
                        COEFFICIENT = 10;
                        break;
                    }
                case Params.TIME_ON:
                case Params.TIME_ON_ERR:
                    {
                        break;
                    }
                default:
                    {
                        break;
                    }
            }

            if (!float.TryParse(hex_str, out value))
            {
                value = 0f;

                string mgs = String.Format("Ошибка преобразования параметра {0} во float, исходная строка: {1}", param.ToString(), hex_str);
                WriteToLog(mgs);

                return false;
            }
            else
            {
                value /= COEFFICIENT;
                return true;
            }
        }