Exemplo n.º 1
0
        public SendFrameFormat SetRegisterAddress(DDSRegisterAddress address)
        {
            setRegisterAddress = address;
            SendFrameFormat dsf = new SendFrameFormat();

            dsf.Id                 = 1;
            dsf.FunctionCode       = FunctionCode.ReadHoldingRegisters;
            dsf.StartingAddress[0] = 0x00;
            dsf.StartingAddress[1] = (byte)address;

            switch (address)
            {
            case DDSRegisterAddress.TotalkWh:
                dsf.Quantity = new byte[] { 0x00, 0x02 };
                break;

            case DDSRegisterAddress.ExportkWh:
                dsf.Quantity = new byte[] { 0x00, 0x02 };
                break;

            case DDSRegisterAddress.ImportkWh:
                dsf.Quantity = new byte[] { 0x00, 0x02 };
                break;

            case DDSRegisterAddress.Voltage:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            case DDSRegisterAddress.Current:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            case DDSRegisterAddress.ActivePower:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            case DDSRegisterAddress.PowerFactor:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            case DDSRegisterAddress.Frequency:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            case DDSRegisterAddress.ID_BaudRate:
                dsf.Quantity = new byte[] { 0x00, 0x01 };
                break;

            default:
                break;
            }
            return(dsf);
        }
Exemplo n.º 2
0
        private void Tarea()
        {
            while (_status)
            {
                for (int i = 0; i < 5; i++)
                {
                    DDSRegisterAddress registerAddress = DDSRegisterAddress.Voltage;
                    switch (i)
                    {
                    case 0:
                        registerAddress = DDSRegisterAddress.ActivePower;
                        break;

                    case 1:
                        registerAddress = DDSRegisterAddress.Current;
                        break;

                    case 2:
                        registerAddress = DDSRegisterAddress.Voltage;
                        break;

                    case 3:
                        registerAddress = DDSRegisterAddress.ExportkWh;
                        break;

                    case 4:
                        registerAddress = DDSRegisterAddress.ImportkWh;
                        break;

                    default:
                        break;
                    }


                    while (_ocupado)
                    {
                        Thread.Sleep(10);
                    }

                    EnviaSolicitud(registerAddress);

                    while (!_listoParaSolicitud)
                    {
                        Thread.Sleep(10);
                    }

                    PrintStatus(true);
                    Thread.Sleep(500);
                }
            }
        }
Exemplo n.º 3
0
        private void EnviaSolicitud(DDSRegisterAddress address)
        {
            _ocupado            = true;
            _listoParaSolicitud = false;
            _countTime          = 0;

            try
            {
                var dsf = SetRegisterAddress(address);

                if (_esSocket)
                {
                    if (_clientRs != null)
                    {
                        if (_clientRs.EsActivo)
                        {
                            _status = _clientRs.BinaryWriter(dsf.ToBytes());

                            while (!_listoParaSolicitud && _countTime < _timeOut)
                            {
                                Thread.Sleep(1);
                                _countTime++;
                            }
                            if (!_listoParaSolicitud && _countTime >= _timeOut)
                            {
                                LogChanged(this, "Medidor Timeout");
                                //_voltage = 0;
                                //_activePower = 0;
                                //_current = 0;
                                _listoParaSolicitud = true;
                            }
                        }
                        else
                        {
                            _listoParaSolicitud = true;
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
            _ocupado = false;
        }
Exemplo n.º 4
0
        private void Tarea(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (!_isBusy)
            {
                _isBusy = true;
                if (DateTime.Now.Second == 0)
                {
                    for (int i = 0; i < 5; i++)
                    {
                        switch (i)
                        {
                        case 0:
                            _registerAddress = DDSRegisterAddress.ActivePower;
                            break;

                        case 1:
                            _registerAddress = DDSRegisterAddress.Current;
                            break;

                        case 2:
                            _registerAddress = DDSRegisterAddress.Voltage;
                            break;

                        case 3:
                            _registerAddress = DDSRegisterAddress.ExportkWh;
                            break;

                        case 4:
                            _registerAddress = DDSRegisterAddress.ImportkWh;
                            break;

                        default:
                            break;
                        }
                        EnviaSolicitud();
                    }
                }
                else if (DateTime.Now.Second % 2 == 0)
                {
                    _registerAddress = DDSRegisterAddress.ActivePower;
                    EnviaSolicitud();
                }
                else if (DateTime.Now.Second % 15 == 0)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        switch (i)
                        {
                        case 0:
                            _registerAddress = DDSRegisterAddress.ActivePower;
                            break;

                        case 1:
                            _registerAddress = DDSRegisterAddress.Current;
                            break;

                        case 2:
                            _registerAddress = DDSRegisterAddress.Voltage;
                            break;
                        }

                        EnviaSolicitud();
                    }
                }
                _isBusy = false;
            }
        }