Exemple #1
0
        private void FrameReceived(object sender, CanFrame frame)
        {
            Debug.WriteLine(frame);

            //if(_parsers.ContainsKey(frame.Id))
            try
            {
                _parsers[frame.Id].Update(frame);
            }
            catch (KeyNotFoundException ex)
            {
                logger.Info("Exciter frame received failed: ", ex);
            }
            catch (Exception ex)
            {
                logger.Info("Exciter frame received failed: ", ex);
            }

            if (Updated == null)
            {
                return;
            }

            Updated(this, frame);
        }
Exemple #2
0
        static async Task RunCanLoopAsync(CancellationToken cancellationToken)
        {
            var factory = new SocketCanFactory();

            var incomingBuffer = new byte[16];
            var incomingFrame  = new CanFrame();

            using (var socket = factory.CreateSocket("can0"))
            {
                while (true)
                {
                    await socket.ReceiveAsync(incomingBuffer, SocketFlags.None, CancellationToken.None).ConfigureAwait(false);

                    incomingFrame.Reinitialize(incomingBuffer);

                    try
                    {
                        await socket.SendAsync(new CanFrame { IsExtendedFrame = true, Id = incomingFrame.Id - 1, DataLength = 4 }.FrameBytes, SocketFlags.None).ConfigureAwait(false);
                    }
                    catch (SocketException se) when(se.SocketErrorCode == SocketError.NoBufferSpaceAvailable)
                    {
                        Console.WriteLine("No buffer space available waiting a few ms");
                        await Task.Delay(TimeSpan.FromMilliseconds(10), cancellationToken).ConfigureAwait(false);
                    }
                }
            }
        }
Exemple #3
0
 private void ModulatorStep(CanFrame frame)
 {
     _stepFreq0 = frame[0];
     _stepFreq1 = frame[1];
     _stepFreq2 = frame[2];
     _stepFreq3 = frame[3];
 }
 public void Post(CanFrame frame)
 {
     using (CanRaw can = new CanRaw())
     {
         can.WriteFrame(frame);
     }
 }
Exemple #5
0
 private void ModulatorStatus(CanFrame frame)
 {
     _warningFlag = frame[0];
     _errorFlag   = frame[1];
     _vforEq      = frame[2];
     _vrefEq      = frame[3];
 }
Exemple #6
0
        public void SendTest()
        {
            const int dataLength = 4000;

            UInt16 descriptorA = CanFrame.GetDescriptorFor(r.Next(0, CanFrame.IdMaxValue), 8);
            UInt16 descriptorB;

            do
            {
                descriptorB = CanFrame.GetDescriptorFor(r.Next(0, CanFrame.IdMaxValue), 8);
            }while (descriptorB == descriptorA);

            Byte[] data = new byte[dataLength];
            r.NextBytes(data);

            var flows = ChainedCanFlow.Take(2, descriptorA, descriptorB);

            var recieveAction =
                Task <TpReceiveTransaction> .Factory.StartNew(() => IsoTp.Receive(flows[0], descriptorA, descriptorB));

            IsoTp.Send(flows[1], descriptorA, descriptorB, data);

            recieveAction.Wait(1000);
            CollectionAssert.AreEqual(data, recieveAction.Result.Data, "Данные были повреждены в ходе передачи");
        }
Exemple #7
0
 /// <summary>Отправляет Can-сообщение в поток</summary>
 public void Send(CanFrame Frame, bool ClearBeforeSend = false)
 {
     foreach (var brother in Brothers)
     {
         brother.Enqueue(Frame);
     }
 }
        public override void Write(CanFrame Frame, Stream DataStream)
        {
            string str   = string.Format(OutFormat, Frame.Descriptor, string.Join(" ", Frame.Data.Select(b => b.ToString("X2"))), Frame.Time.ToString(System.Globalization.CultureInfo.InvariantCulture));
            var    sBuff = Encoding.Default.GetBytes(str + Environment.NewLine);

            DataStream.Write(sBuff, 0, sBuff.Length);
        }
        /// <summary>
        /// Get string representation of CAN message.
        /// </summary>
        /// <returns>CAN message as string representation</returns>
        public static string ToString(CanFrame frame)
        {
            var flags    = frame.Id.Flags;
            var rtr      = (flags & CanIdFlags.RTR) != 0;
            var id       = frame.Id.Value & CanId.CanExtendedIdMask;
            var extended = id > 0x7ff;

            var prefix = (extended, rtr) switch
            {
                (true, true) => "R",
                (true, false) => "T",
                (false, true) => "r",
                (false, false) => "t"
            };

            var idString = id.ToString(extended ? "X8" : "X3");

            var result = $"{prefix}{idString}{frame.DataLength:X1}";

            if (!rtr)
            {
                var sb = new StringBuilder(result, result.Length + frame.DataLength * 2);
                for (int i = 0; i < frame.DataLength; i++)
                {
                    sb.Append(frame.Data[frame.DataOffset + i].ToString("X2"));
                }

                result = sb.ToString();
            }

            return(result);
        }
Exemple #10
0
        public void Update(CanFrame frame)
        {
            switch (frame.Id)
            {
            case ID_MODULATOR_SOURCE:
                ModulatorSource(frame);
                break;

            case ID_MODULATOR_FREQUENCY:
                ModulatorFrequency(frame);
                break;

            case ID_MODULATOR_SWEEP:
                ModulatorSweep(frame);
                break;

            case ID_MODULATOR_STATUS:
                ModulatorStatus(frame);
                break;

            case ID_MODULATOR_STEP:
                ModulatorStep(frame);
                break;
            }
        }
Exemple #11
0
 /// <summary>
 /// Отправляет одно сообщение в канал
 /// </summary>
 /// <param name="Frame">CAN-Сообщение</param>
 /// <param name="Line">Канал связи</param>
 internal void SendFrame(CanFrame Frame, AppiLine Line)
 {
     SendFrames(new List <CanFrame>()
     {
         Frame
     }, Line);
 }
Exemple #12
0
 public void Send(CanFrame frame)
 {
     Debug.WriteLine("Sent: {0}", frame);
     logger.Info(string.Format("Sent: {0}", frame));
     _device.Send((ushort)frame.Id, frame.Rtr, frame.Data());
     Thread.Sleep(50);
 }
Exemple #13
0
        public CanFrame Translate(CanFrame rawData, bool noUnit)
        {
            //Check if format is correct
            if (string.IsNullOrEmpty(rawData.PayloadCanData) || rawData.PayloadCanData.Length != 14)
            {
                Console.WriteLine("Data is not lenght of 14: {0}", rawData.PayloadCanData);
                return(rawData);
            }

            //0 000 - direkt
            //3 180 - Kessel
            //  280 - atez
            //6 300, 301 ... - Control Unit / Bedienmodule(bei mir 301, 302 und 303)
            //  400 - Raumfernfühler
            //9 480 - Manager
            //A 500 - Heizmodul
            //  580 - Buskoppler
            //C 600, 601 ... -  Mischermodule(bei mir 601, 602, 603) (wpwm controller)
            //D 680 - PC(ComfortSoft) (6A1, 6A2)
            //  700 - Fremdgerät
            //  780 - DCF-Modul


            //- ModulType auf der Basis des ComfortSoft-Protokolls, 2. Byte (siehe robots, haustechnikdialog):
            //0 - write
            //1 - read
            //2 - response
            //3 - ack
            //4 - write ack
            //5 - write respond
            //6 - system
            //7 - system respond
            //20/21 (hex.) - write/read large telegram

            var payloadIndex = Convert.ToInt32(rawData.PayloadCanData.Substring(6, 4), 16);
            var payloadData  = rawData.PayloadCanData.Substring(10);

            //Get IndexData
            var indexData = ElsterIndex.ElsterTable.FirstOrDefault(x => x.Index == payloadIndex);

            //Index not available
            if (indexData == null)
            {
                return(rawData);
            }

            rawData.MqttTopicExtention = indexData.MqttTopic;

            if (!noUnit)
            {
                rawData.MqttValue = indexData.Converter.ConvertValue(payloadData) + indexData.Unit;
            }
            else
            {
                rawData.MqttValue = indexData.Converter.ConvertValue(payloadData);
            }

            return(rawData);
        }
Exemple #14
0
 private void HandleDlc1Frame(CanFrame frame, Message message)
 {
     switch (frame.Data[0])
     {
     case 0xFF:
         break;
     }
 }
Exemple #15
0
 protected override void InfoGeneralStatus(CanFrame frame)
 {
     _powerLsb = frame[0];
     _powerMsb = frame[1];
     _vswrLsb  = frame[2];
     _vswrMsb  = frame[3];
     _status   = frame[4];
 }
Exemple #16
0
        public override CanFrame GetCanFrame(int WithDescriptor)
        {
            Byte[] buff = new Byte[8];

            buff[0] = (byte)(((byte)FrameType & 0x0f) << 4 | Data.Length & 0x0f);
            Buffer.BlockCopy(Data, 0, buff, 1, Data.Length);

            return(CanFrame.NewWithDescriptor(WithDescriptor, buff));
        }
Exemple #17
0
 public void Send(CanFrame canmsg)
 {
     MessageTransmitted?.Invoke(
         this,
         new CanMessageEventArgs
     {
         Message = canmsg
     });
 }
Exemple #18
0
 private void RfcuTemp(CanFrame frame)
 {
     Module1Temp   = frame[0];
     Module2Temp   = frame[1];
     Module3Temp   = frame[2];
     Module4Temp   = frame[3];
     PreDrive1Temp = frame[4];
     CombinerTemp  = frame[5];
 }
Exemple #19
0
        /// <summary>
        /// Собирает байты для буфера АППИ
        /// </summary>
        /// <returns>10 байт: 2 байта дескриптор + 8 байт данных</returns>
        public static Byte[] ToBufferBytes(this CanFrame Frame)
        {
            Byte[] buff = new Byte[10];

            BitConverter.GetBytes((UInt16)Frame.Descriptor).Reverse().ToArray().CopyTo(buff, 0);
            Frame.Data.CopyTo(buff, 2);

            return(buff);
        }
Exemple #20
0
        public CanFrameInfo(CanFrame frame)
        {
            var tailByte = frame.Data[frame.DataOffset + frame.DataLength - 1];

            TransferId        = (byte)(tailByte & 0x1F);
            IsStartOfTransfer = ((tailByte >> 7) & 1) == 1;
            IsEndOfTransfer   = ((tailByte >> 6) & 1) == 1;
            ToggleBit         = ((tailByte >> 5) & 1) == 1;
        }
Exemple #21
0
 protected override void InfoWarning(CanFrame frame)
 {
     _tempWarning        = frame[0];
     _ovRefWarning       = frame[1];
     _vswrWarning        = frame[2];
     _overCurrentWarning = frame[3];
     _fuseWarning        = frame[4];
     _globalWarning      = frame[5];
 }
Exemple #22
0
        protected void OnRecieved(CanFrame frame)
        {
            if (Received == null)
            {
                return;
            }

            Received(this, frame);
        }
Exemple #23
0
        public async Task I2cScanAsync(CanDevice device)
        {
            var frame = new CanFrame();

            frame.Address       = device.CanId;
            frame.DLC           = (byte)(1);
            frame.RemoteRequest = true;

            await SendFrameAsync(frame);
        }
Exemple #24
0
 private void ModulatorFrequency(CanFrame frame)
 {
     _freq0      = frame[0];
     _freq1      = frame[1];
     _freq2      = frame[2];
     _freq3      = frame[3];
     _modulation = frame[4];
     _vfLsb      = frame[5];
     _vfMsb      = frame[6];
 }
Exemple #25
0
        public override void Write(CanFrame Frame, Stream DataStream)
        {
            int length = Frame.Data.Length + 2 + 8;
            var buff = new Byte[length];
            Buffer.BlockCopy(BitConverter.GetBytes(Frame.Time.ToBinary()), 0, buff, 0, 8);
            Buffer.BlockCopy(BitConverter.GetBytes((UInt16)Frame.Descriptor), 0, buff, 8, 2);
            Buffer.BlockCopy(Frame.Data, 0, buff, 8 + 2, Frame.Data.Length);

            DataStream.Write(buff, 0, buff.Length);
        }
Exemple #26
0
        public override CanFrame GetCanFrame(int WithDescriptor)
        {
            var buff = new Byte[8];

            buff[0] = (byte)(((byte)FrameType & 0x0f) << 4 | (byte)Flag & 0x0f);
            buff[1] = BlockSize;
            buff[2] = SeparationCodeFromTime(SeparationTime);

            return(CanFrame.NewWithDescriptor(WithDescriptor, buff));
        }
Exemple #27
0
 protected void OnFrameReceived(CanFrame frame)
 {
     EventHandler<FrameReceivedEventArgs> handler = FrameReceived;
     if (handler != null)
     {
         FrameReceivedEventArgs e = new FrameReceivedEventArgs();
         e.Frame = frame;
         handler(this, e);
     }
 }
Exemple #28
0
        /// <summary>
        /// Восстанавливает CAN-сообщение из буфера АППИ
        /// </summary>
        /// <param name="Buff">10 байт буфера</param>
        public static CanFrame FromBufferBytes(Byte[] Buff)
        {
            int id  = (int)BitConverter.ToUInt16(Buff.Take(2).Reverse().ToArray(), 0) >> 4;
            int len = Buff[1] & 0x0f;

            if (len > 8)
            {
                throw new AppiBufferDecodeException("Расшифрована неправильная длина CAN-сообщения ({0} байт)", len);
            }
            return(CanFrame.NewWithId(id, Buff, 2, len));
        }
Exemple #29
0
 private void RfcuAnalog0_7(CanFrame frame)
 {
     A0Reserve   = frame[0];
     A1VforMod2  = frame[1];
     A2VrefMod2  = frame[2];
     A3RfSamMod2 = frame[3];
     A4CurMod2   = frame[4];
     A5VrefEq    = frame[5];
     A6RfSamMod3 = frame[6];
     A7VforMod4  = frame[7];
 }
Exemple #30
0
 private void RfcuAnalog8_15(CanFrame frame)
 {
     A8VrefMod1   = frame[0];
     A9VforEq     = frame[1];
     A10Reserve   = frame[2];
     A11CurMod4   = frame[3];
     A12CurPrD    = frame[4];
     A13VforMod1  = frame[5];
     A14VrefMod4  = frame[6];
     A15RfSamMod1 = frame[7];
 }
Exemple #31
0
 private void RfcuAnalog16_23(CanFrame frame)
 {
     A16Reserve    = frame[0];
     A17RfSamPrD   = frame[1];
     A18Reserve    = frame[2];
     A19VforMod3   = frame[3];
     A20VrefMod3   = frame[4];
     A21RfSameMod4 = frame[5];
     A22CurMod3    = frame[6];
     A23CurMod1    = frame[7];
 }
Exemple #32
0
        public override void Write(CanFrame Frame, Stream DataStream)
        {
            int length = Frame.Data.Length + 2 + 8;
            var buff   = new Byte[length];

            Buffer.BlockCopy(BitConverter.GetBytes(Frame.Time.ToBinary()), 0, buff, 0, 8);
            Buffer.BlockCopy(BitConverter.GetBytes((UInt16)Frame.Descriptor), 0, buff, 8, 2);
            Buffer.BlockCopy(Frame.Data, 0, buff, 8 + 2, Frame.Data.Length);

            DataStream.Write(buff, 0, buff.Length);
        }
 public abstract void Write(CanFrame Frame, Stream DataStream);
Exemple #34
0
 public override void Write(CanFrame Frame, Stream DataStream)
 {
     string str = string.Format(OutFormat, Frame.Descriptor, string.Join(" ", Frame.Data.Select(b => b.ToString("X2"))), Frame.Time.ToString(System.Globalization.CultureInfo.InvariantCulture));
     var sBuff = Encoding.Default.GetBytes(str + Environment.NewLine);
     DataStream.Write(sBuff, 0, sBuff.Length);
 }