public DataGatewaySampleGateway(DataGatewaySampleSettings settings) : base(settings)
        {
            Random random;

            random    = new Random();
            _settings = settings;

            _numberGeneratorSet = this.DataPortSet.Where(dataPort => dataPort.DataDirection == DataDirection.Input).ToList().Select(dataPort =>
            {
                Type type;

                type = typeof(DataGatewaySampleNumberGenerator <>).MakeGenericType(OneDasUtilities.GetTypeFromOneDasDataType(dataPort.DataType));

                return((DataGatewaySampleNumberGeneratorBase)Activator.CreateInstance(type, dataPort, random));
            }).ToList();
        }
Пример #2
0
        /* improvements:
         * - make reading big endian values easier
         * - FrameRateDivider should not be set as it is not used in this example
         */

        static void Main(string[] args)
        {
            var services = new ServiceCollection();

            ConfigureServices(services);

            var provider         = services.BuildServiceProvider();
            var extensionFactory = provider.GetRequiredService <IExtensionFactory>();

            extensionFactory.Add(typeof(DataGatewaySampleGateway));

            var settings = new DataGatewaySampleSettings();

            settings.ModuleSet.Add(new OneDasModule(OneDasDataType.FLOAT32, DataDirection.Input, Endianness.LittleEndian, 10));
            settings.Validate();

            Console.CursorVisible = false;

            Task.Run(() =>
            {
                using (var gateway = extensionFactory.BuildLogic <DataGatewaySampleGateway>(settings))
                {
                    gateway.Configure(new DataGatewayContext());

                    while (true)
                    {
                        gateway.UpdateIo(DateTime.Now);

                        var values = MemoryMarshal.Cast <byte, float>(gateway.GetInputBuffer());

                        Console.Clear();

                        for (int i = 0; i < 10; i++)
                        {
                            Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0,6:F2}", values[i]));
                        }

                        Thread.Sleep(1000);
                    }
                }
            });

            Console.ReadKey(true);
        }