Exemplo n.º 1
0
        public static void TreatTelegram(IMsgUart msg)
        {
            try
            {
                MsgTelegram100 tel = (MsgTelegram100)msg;

                LocalRepository localRepository = LocalRepository.GetInstance();

                if (tel.StatusPump != (int)localRepository.Pump.Status)
                {
                    if (tel.StatusPump == 1)
                    {
                        localRepository.Pump.TurnOnPump();
                    }
                    else
                    {
                        localRepository.Pump.TurnOffPump();
                    }
                }

                if (tel.OperationMode == (int)OperationMode.Automatic)
                {
                    localRepository.Pump.OperationMode = OperationMode.Automatic;
                }
                else
                {
                    localRepository.Pump.OperationMode = OperationMode.Manual;
                }
            }
            catch (Exception e)
            {
            }
        }
        private void Loop()
        {
            Task.Run(async delegate
            {
                try
                {
                    while (true)
                    {
                        ushort[] registers = _Master.ReadHoldingRegisters(_SlaveId, _StartAddress, _NumberOfPoints);

                        for (int i = 0; i < registers.Length; i++)
                        {
                            if (registers[i] != _Registers[i])
                            {
                                IMsgUart msg = CreateMsg((RegisterTypeByPosition)i, registers);
                                if (msg != null)
                                {
                                    Program.UartService.TreatMessage(msg);
                                }
                            }
                        }

                        _Registers = registers;

                        await Task.Delay(1000);
                    }
                }
                catch (Exception e)
                {
                }
            });
        }
        private IMsgUart CreateMsg(RegisterTypeByPosition registerType, ushort[] registers)
        {
            IMsgUart msg = null;

            switch (registerType)
            {
            case RegisterTypeByPosition.PumpStatus:
            case RegisterTypeByPosition.OperationMode:

                int pumpStauts    = registers[(int)RegisterTypeByPosition.PumpStatus];
                int operationMode = registers[(int)RegisterTypeByPosition.OperationMode];
                msg = new MsgTelegram100(pumpStauts, operationMode);

                break;

            case RegisterTypeByPosition.MinWaterTankLevel1:
            case RegisterTypeByPosition.MinWaterTankLevel2:

                int minWaterTankLevel1 = registers[(int)RegisterTypeByPosition.MinWaterTankLevel1];
                int minWaterTankLevel2 = registers[(int)RegisterTypeByPosition.MinWaterTankLevel2];
                msg = new MsgTelegram101(minWaterTankLevel1, minWaterTankLevel2);

                break;

            case RegisterTypeByPosition.WaterTankLevel1:
            case RegisterTypeByPosition.WaterTankLevel2:

                int waterTankLevel1 = registers[(int)RegisterTypeByPosition.WaterTankLevel1];
                int waterTankLevel2 = registers[(int)RegisterTypeByPosition.WaterTankLevel2];
                msg = new MsgTelegram102(waterTankLevel1, waterTankLevel2);

                break;
            }
            return(msg);
        }
Exemplo n.º 4
0
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                SerialPort serialPort   = (SerialPort)sender;
                string     dataReceived = serialPort.ReadExisting();

                string[] buffer = dataReceived?.Split(';');
                if (buffer != null && buffer.Length > 0)
                {
                    UartTelegram telegram = new UartTelegram(buffer);
                    IMsgUart     msg      = MsgUartFactory.CreateMsg(telegram.Header.ID);

                    PropertyInfo[] propsInfo = msg.GetType().GetProperties();
                    if ((propsInfo != null) && (propsInfo.Length == telegram.Data.Length))
                    {
                        for (int i = 0; i < propsInfo.Length; i++)
                        {
                            var converter = TypeDescriptor.GetConverter(propsInfo[i].PropertyType);
                            var result    = converter.ConvertFrom(telegram.Data[i]);
                            propsInfo[i].SetValue(msg, result);
                        }

                        Program.UartService.TreatMessage(msg);
                    }
                }
            }
            catch (Exception exc)
            {
            }
        }
Exemplo n.º 5
0
        internal static int GetID(this IMsgUart self)
        {
            string className       = self.GetType().Name;
            int    firstDigitIndex = className.IndexOfAny("0123456789".ToCharArray());

            if (firstDigitIndex < 0)
            {
                throw new IndexOutOfRangeException("Nome da classe com tamanho inválido.");
            }
            return(int.Parse(className.Substring(firstDigitIndex)));
        }
Exemplo n.º 6
0
 public void TreatMessage(IMsgUart msg)
 {
     if (m_Handlers.ContainsKey(msg.GetID()))
     {
         m_Handlers[msg.GetID()](msg);
     }
     else
     {
         throw new Exception(String.Format("Tratamento do telegrama {0} do PIC não foi inicializado", msg.GetID()));
     }
 }
        private short GetStartAddress(IMsgUart msg)
        {
            switch (msg.GetID())
            {
            case 200:
                return(0);

            case 201:
                return(2);

            default:
                return(-1);
            }
        }
Exemplo n.º 8
0
        public static void TreatTelegram(IMsgUart msg)
        {
            try
            {
                MsgTelegram102 tel = (MsgTelegram102)msg;

                LocalRepository localRepository = LocalRepository.GetInstance();

                WaterTank[] waterTanks = localRepository.Tanks;
                waterTanks[(int)WaterTankPosition.Tank1].Level = tel.LevelTank1;
                waterTanks[(int)WaterTankPosition.Tank2].Level = tel.LevelTank2;
            }
            catch (Exception e)
            {
            }
        }
Exemplo n.º 9
0
        internal static string ToString(this IMsgUart self)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("[{0}] ->", self.GetID());

            PropertyInfo[] propsInfo = self.GetType().GetProperties();
            if ((propsInfo != null) && (propsInfo.Length > 0))
            {
                foreach (PropertyInfo prop in propsInfo)
                {
                    sb.AppendFormat(" {0}:{1}", prop.Name, prop.GetValue(self, null));
                }
            }

            return(sb.ToString());
        }
 public void WriteRegisters(IMsgUart msg)
 {
     try
     {
         short startAddress = GetStartAddress(msg);
         if (startAddress != -1)
         {
             var propsInfo = msg.GetType().GetProperties();
             if ((propsInfo != null) && (propsInfo.Length > 0))
             {
                 for (int i = 0; i < propsInfo.Length; i++)
                 {
                     ushort data = Convert.ToUInt16(propsInfo[i].GetValue(msg, null));
                     _Master.WriteSingleRegister(_SlaveId, (ushort)(startAddress + i), data);
                 }
             }
         }
     }
     catch (Exception e)
     {
     }
 }
Exemplo n.º 11
0
        public void SendDataHandler(IMsgUart msg)
        {
            try
            {
                UartHeader header = null;
                string[]   data   = null;

                PropertyInfo[] propsInfo = msg.GetType().GetProperties();
                if ((propsInfo != null) && (propsInfo.Length > 0))
                {
                    header = new UartHeader
                    {
                        Size = propsInfo.Length,
                        ID   = msg.GetID()
                    };

                    data = new string[propsInfo.Length];
                    for (int i = 0; i < propsInfo.Length; i++)
                    {
                        data[i] = propsInfo[i].GetValue(msg, null).ToString();
                    }
                }

                if (header != null)
                {
                    UartTelegram telegram = new UartTelegram(header, data);
                    _SerialPort.WriteLine(string.Join(";", telegram.Buffer));
                }
                else
                {
                    throw new Exception("Impossível criar telegrama sem cabeçalho.");
                }
            }
            catch (Exception exc)
            {
            }
        }
Exemplo n.º 12
0
 public void SendMessage(IMsgUart msg)
 {
     Program.DriverUart.SendDataHandler(msg);
 }
Exemplo n.º 13
0
 public void TreatMessage(IMsgUart msg)
 {
     m_Handlers.TreatMessage(msg);
 }
Exemplo n.º 14
0
 public void SendMessage(IMsgUart msg)
 {
     Program.ModbusSerialRTUMasterDriver.WriteRegisters(msg);
 }