Example #1
0
        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);
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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);
            }
        }
Example #4
0
        private void RoportUpdateData(PWRSTATUS data)
        {
            var jsonLog = JCVT_PWR.Set(data);

            Evt_UpdateData?.Invoke(this, jsonLog);
        }
Example #5
0
        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);
 }