private void UpdateMemoryBlock() { //PortMemory for (int i = 0; i < registeredDevices.Count; i++) { PortMemoryBlock pmb = ActiveMemoryBlock.GetPortMemory(i + 1); if (pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.AnalogIn]) { MemoryBlock.PortMemoryUpdateEvent.OnInDataAnalogUpdated.Invoke(i + 1, pmb.AnalogIn); pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.AnalogIn] = false; } if (pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.AnalogOut]) { MemoryBlock.PortMemoryUpdateEvent.OnOutDataAnalogUpdated.Invoke(i + 1, pmb.AnalogOut); pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.AnalogOut] = false; } if (pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.DigitalIn]) { MemoryBlock.PortMemoryUpdateEvent.OnInDataDigitalUpdated.Invoke(i + 1, pmb.DigitalIn); pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.DigitalIn] = false; } if (pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.DigitalOut]) { MemoryBlock.PortMemoryUpdateEvent.OnOutDataDigitalUpdated.Invoke(i + 1, pmb.DigitalOut); pmb.DirtyTypes[(int)PortMemoryBlock.DirtyTypeEnum.DigitalOut] = false; } } }
private void GetDevices() { string workDir = Path.GetDirectoryName(System.Environment.CommandLine); string targetLibDir = workDir + Path.DirectorySeparatorChar + "sensors"; // Console.WriteLine(workDir); Console.WriteLine("Scanning new devices in " + targetLibDir); if (!Directory.Exists(targetLibDir)) { return; } string[] files = Directory.GetFiles(targetLibDir, "*.dll"); foreach (var file in files) { var DLL = Assembly.LoadFile(file); foreach (Type type in DLL.GetExportedTypes()) { if (!registeredDevicesType.Contains(type)) { IDeviceStatus c = Activator.CreateInstance(type) as IDeviceStatus; if (c != null) { int availablePort = registeredDevices.Count + 1; ActiveMemoryBlock.RegisterPortMemory(availablePort); c.Start(ActiveMemoryBlock.GetPortMemory(availablePort)); registeredDevices.Add(c); registeredDevicesType.Add(type); Console.WriteLine("Lib " + file); OnNewDeviceRegistered.Invoke(availablePort); break; } } } } }