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); }
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); } } }
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; }
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; } }