private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { var rtn = new PWRSTATUS(); byte[] recv = new byte[_PwrCom.BytesToRead]; _PwrCom.Read(recv, 0, _PwrCom.BytesToRead); RoportUpdateData(rtn); } catch (Exception err) { ReportLog(err.ToString(), false); } }
private async void _State_Elapsed(object sender, ElapsedEventArgs e) { if (false == _bConected) { return; } _StateChk.Stop(); PWRSTATUS status = new PWRSTATUS(); if (false == bUseModbus) { RequestData(); } else { status = await _PwrBus.ReadItemsAll(); } RoportUpdateData(status); _StateChk.Start(); }
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { var rtn = new PWRSTATUS(); byte[] recv = new byte[serialPort.BytesToRead]; serialPort.Read(recv, 0, serialPort.BytesToRead); recvStr.AddRange(recv); if (recvStr.Count > 300) { recvStr.Clear(); } for (int i = 0; i < recvStr.Count - 1; i++) { if (recvStr[i] == 0xAF && recvStr[i + 1] == 0xA0) { byte[] val1 = new byte[] { recvStr[7], recvStr[6] }; var Volt = BitConverter.ToInt16(val1, 0); byte[] val2 = new byte[] { recvStr[9], recvStr[8] }; var Curr = BitConverter.ToInt16(val2, 0); byte[] val3 = new byte[] { recvStr[11], recvStr[10] }; var interVal = BitConverter.ToInt16(val3, 0); rtn.volt = Volt * 0.01; rtn.curr = Curr * 0.01; rtn.soc = interVal; recvStr.RemoveRange(0, i + 2); if (rtn.soc <= 0 || rtn.soc >= 100) { rtn.soc = -999; } IsReceived = true; RoportUpdateData(rtn); } } } catch (Exception ex) { ReportLog(ex.ToString(), false); } }
private void RoportUpdateData(PWRSTATUS data) { var jsonLog = JCVT_PWR.Set(data); Evt_UpdateData?.Invoke(this, jsonLog); }
public async Task <PWRSTATUS> ReadItemsAll() { var rtn = new PWRSTATUS(); if (!modbusClnt.Connected) { return(rtn); } foreach (var item in _dicItems) { var src = item.Value as READITEM; if (src.add < 0) { continue; } switch (item.Key) { case ePWRREAD_ITEMS.Current: switch (type) { case ePWRTYPE.ElgenBattery: modbusClnt.UnitIdentifier = 170; break; case ePWRTYPE.ElgenCharger: modbusClnt.UnitIdentifier = 2; break; case ePWRTYPE.AutonicMeter: modbusClnt.UnitIdentifier = 1; break; default: return(new PWRSTATUS()); } break; case ePWRREAD_ITEMS.Voltage: switch (type) { case ePWRTYPE.ElgenBattery: modbusClnt.UnitIdentifier = 170; break; case ePWRTYPE.ElgenCharger: modbusClnt.UnitIdentifier = 2; break; case ePWRTYPE.AutonicMeter: modbusClnt.UnitIdentifier = 2; break; default: return(new PWRSTATUS()); } break; case ePWRREAD_ITEMS.Error: case ePWRREAD_ITEMS.State: case ePWRREAD_ITEMS.Ver: switch (type) { case ePWRTYPE.ElgenBattery: modbusClnt.UnitIdentifier = 1; break; case ePWRTYPE.ElgenCharger: modbusClnt.UnitIdentifier = 2; break; case ePWRTYPE.AutonicMeter: continue; default: return(new PWRSTATUS()); } break; case ePWRREAD_ITEMS.Temp_1st: case ePWRREAD_ITEMS.Temp_2nd: case ePWRREAD_ITEMS.Temp_3th: case ePWRREAD_ITEMS.Temp_4th: switch (type) { case ePWRTYPE.ElgenBattery: modbusClnt.UnitIdentifier = 2; break; case ePWRTYPE.ElgenCharger: modbusClnt.UnitIdentifier = 1; break; case ePWRTYPE.AutonicMeter: modbusClnt.UnitIdentifier = 2; break; default: return(new PWRSTATUS()); } break; } if (src.bEnb) { await Task.Run(() => { var val = 0; try { val = modbusClnt.ReadInputRegisters(src.add, 1).FirstOrDefault(); } catch (Exception ex) { Debug.WriteLine($"modbus read fail. add:{src.add}"); } switch (type) { case ePWRTYPE.ElgenBattery: switch (item.Key) { case ePWRREAD_ITEMS.Current: src.val = (val / 1000f).ToString("0.00"); break; case ePWRREAD_ITEMS.Voltage: src.val = (val / 100f).ToString("0.00"); break; case ePWRREAD_ITEMS.Temp_1st: case ePWRREAD_ITEMS.Temp_2nd: case ePWRREAD_ITEMS.Temp_3th: case ePWRREAD_ITEMS.Temp_4th: case ePWRREAD_ITEMS.Error: case ePWRREAD_ITEMS.State: case ePWRREAD_ITEMS.Ver: default: src.val = val.ToString(); break; } break; case ePWRTYPE.ElgenCharger: switch (item.Key) { case ePWRREAD_ITEMS.Current: case ePWRREAD_ITEMS.Voltage: src.val = (val / 100f).ToString("0.00"); break; case ePWRREAD_ITEMS.Temp_1st: case ePWRREAD_ITEMS.Temp_2nd: case ePWRREAD_ITEMS.Temp_3th: case ePWRREAD_ITEMS.Temp_4th: default: src.val = val.ToString(); break; } break; case ePWRTYPE.AutonicMeter: switch (item.Key) { case ePWRREAD_ITEMS.Current: case ePWRREAD_ITEMS.Voltage: src.val = (val / 10.0).ToString("0.00"); break; default: src.val = val.ToString(); break; } break; default: //return new PWRSTATUS(); break; } }); } else { src.val = "0"; } Debug.WriteLine($"{DateTime.Now.ToString("hh:mm:ss.fff")} read[{type}][{item.Key}][{src.add}] : {src.val}"); } double dTemp = 0; int nTemp = 0; switch (type) { case ePWRTYPE.AutonicMeter: case ePWRTYPE.ElgenBattery: case ePWRTYPE.ElgenCharger: default: if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Current].val, out dTemp)) { rtn.curr = dTemp; } if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Voltage].val, out dTemp)) { rtn.volt = dTemp; } break; } if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Temp_1st].val, out dTemp)) { rtn.temp_1st = dTemp; } if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Temp_2nd].val, out dTemp)) { rtn.temp_2nd = dTemp; } if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Temp_3th].val, out dTemp)) { rtn.temp_3th = dTemp; } if (double.TryParse(_dicItems[ePWRREAD_ITEMS.Temp_4th].val, out dTemp)) { rtn.temp_4th = dTemp; } if (int.TryParse(_dicItems[ePWRREAD_ITEMS.Error].val, out nTemp)) { rtn.errbit = nTemp; } if (int.TryParse(_dicItems[ePWRREAD_ITEMS.State].val, out nTemp)) { rtn.state = (ePWR_CHR_STATE)nTemp; } switch (type) { case ePWRTYPE.ElgenBattery: try { await Task.Run(() => { modbusClnt.UnitIdentifier = 170; var val = modbusClnt.ReadInputRegisters(44, 1).FirstOrDefault(); var volt = (int)(val / 100f); rtn.soc = volt; }); } catch (Exception) { Debug.WriteLine($"modbus read fail. add:{44}"); } break; default: if (0 < rtn.volt) { int maxvolt = 56; rtn.soc = Convert.ToInt32(rtn.volt / maxvolt * 100.0); } break; } return(rtn); }
public static void Get(string data, out PWRSTATUS arg) { arg = JsonConvert.DeserializeObject <PWRSTATUS>(data); }