Exemplo n.º 1
0
            /// <summary>
            /// Считывает необходимый параметр с счётчика
            /// </summary>
            /// <param name="OBIS">Обис код параметра</param>
            /// <returns>Значение считываетмого параметра</returns>
            private string getCOSEMValue(byte[] OBIS)
            {
                byte[] classID_COSEM = new byte[] { 0x00, 0x03 };
                byte[] readAttribyte = new byte[] { 1, 2, 3 };

                XDLMS_Structure_C3 xDLMS_Structure_C3 = new XDLMS_Structure_C3();

                byte[] reguestData = xDLMS_Structure_C3.GetRequestWithList(
                    classID_COSEM,
                    OBIS,
                    readAttribyte);

                XDLMS_Structure_C4 xDLMS_Structure_C4 = new XDLMS_Structure_C4();

                //Порядковый номер передаваемого пакета
                hDLC_FrameManager.No_SendFrame++;

                //Ответ на команду запроса
                HDLC_Response hDLC_Response = hDLC_FrameManager.parseHDLCresponse(
                    HDLC_FrameManager.sendCommadToMeter(
                        hDLC_FrameManager.createFrame_I(hDLC_FrameManager.No_SendFrame, hDLC_FrameManager.No_ReseivedFrame, false, true, reguestData),
                        serialPort));

                COSEM_Object value = new Class_3_Ver_0();

                xDLMS_Structure_C4.GetResponseWithList(hDLC_Response.Data, ref value);

                string valuePhase = string.Format("{0:0.00000}", (((Class_3_Ver_0)value).Value * Math.Pow(10, ((Class_3_Ver_0)value).Scaler)));

                return(valuePhase);
            }
Exemplo n.º 2
0
            /// <summary>
            /// Закрывает соединение с счётчиком
            /// </summary>
            public void closeConnectWithMeter()
            {
                bool   disc        = false;
                string commandType = "";

                for (int i = 0; i < 3; i++)
                {
                    //отправляю команду DISC счётчику, если предыдущий сеанс завершился некоректно
                    HDLC_Response hDLC_Response = hDLC_FrameManager.parseHDLCresponse(
                        HDLC_FrameManager.sendCommadToMeter(
                            hDLC_FrameManager.createFrame_U(HDLC_FrameManager.U_Commands.DISC, false, true),
                            serialPort));

                    //Ответ командой
                    commandType = ((HDLC_Response_Frame_U)hDLC_Response).CommandName;

                    //Если ответ тот, который нужен
                    if (commandType.Equals("DM") || commandType.Equals("SARM") || commandType.Equals("UA"))
                    {
                        disc = true;
                        break;
                    }
                }

                if (!disc)
                {
                    throw new Exception("Не удалось закрыть соединение с счётчиком " + commandType);
                }

                //отправляю команду DISC счётчику, если предыдущий сеанс завершился некоректно
                HDLC_Response hDLC_Response_DISC = hDLC_FrameManager.parseHDLCresponse(
                    HDLC_FrameManager.sendCommadToMeter(
                        hDLC_FrameManager.createFrame_U(HDLC_FrameManager.U_Commands.DISC, false, true),
                        serialPort));
            }
Exemplo n.º 3
0
            /// <summary>
            /// Установка соединения с счётчиком электроэнергии
            /// </summary>
            public void getConnectToMeter()
            {
                //отправляю команду DISC счётчику, если предыдущий сеанс завершился некоректно
                HDLC_Response hDLC_Response_DISC = hDLC_FrameManager.parseHDLCresponse(
                    HDLC_FrameManager.sendCommadToMeter(
                        hDLC_FrameManager.createFrame_U(HDLC_FrameManager.U_Commands.DISC, false, true),
                        serialPort));

                //Ответ командой
                string commandType = ((HDLC_Response_Frame_U)hDLC_Response_DISC).CommandName;

                //Если ответ не тот, который нужен, то это ошибка DM?
                if (!(commandType.Equals("UA") || commandType.Equals("SARM")))
                {
                    throw new FormatException("Ответ счётчика на команду DISC " + commandType);
                }

                //SNRM
                HDLC_Response hDLC_Response_SNRM = hDLC_FrameManager.parseHDLCresponse(
                    HDLC_FrameManager.sendCommadToMeter(
                        hDLC_FrameManager.createFrame_U(HDLC_FrameManager.U_Commands.SNRM, false, true),
                        serialPort));

                commandType = ((HDLC_Response_Frame_U)hDLC_Response_SNRM).CommandName;

                //AARQ установка соединения
                HDLC_Response hDLC_Response_AARQ = hDLC_FrameManager.parseHDLCresponse(
                    HDLC_FrameManager.sendCommadToMeter(
                        hDLC_FrameManager.getAARQopenConnect(hDLC_FrameManager.No_SendFrame, hDLC_FrameManager.No_ReseivedFrame, passMeter),
                        serialPort));
            }