2026-06-05 13:44:39 +09:00

143 lines
4.5 KiB
C#

using Aurora;
using Aurora.Api;
using System.Linq;
using System.Reactive.Linq;
using Aurora.View;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Aurora.Api.Manager;
using System.Windows.Threading;
using System.Windows.Data;
namespace AuroraACS.Views
{
public class ACSIOViewModel : NotifyPropertyChangedBase
{
public ICommand CMD_VisibleChanged { get; }
private List<AddrInfo> bitInputs = new List<AddrInfo>();
public List<AddrInfo> BitInputs { get => bitInputs; set => SetProperty(ref bitInputs, value); }
private List<AddrInfo> bitOutputs = new List<AddrInfo>();
public List<AddrInfo> BitOutputs { get => bitOutputs; set => SetProperty(ref bitOutputs, value); }
private int port;
public int Port { get => port; set => SetProperty(ref port, value); }
private int bit;
public int Bit { get => bit; set => SetProperty(ref bit, value); }
private int val;
public int Value { get => val; set => SetProperty(ref val, value); }
private DelegateCommand cmdGetValue;
private DelegateCommand cmdSetValue;
public ICommand CmdGetValue {
get {
if (cmdGetValue == null) {
cmdGetValue = new DelegateCommand(PerformCmdGetValue);
}
return cmdGetValue;
}
}
public ICommand CmdSetValue {
get {
if (cmdSetValue == null) {
cmdSetValue = new DelegateCommand(PerformCmdSetValue);
}
return cmdSetValue;
}
}
private void PerformCmdGetValue(object commandParameter)
{
Value = _acsIO.ReadOutputIO((Port * 8) + Bit) ? 1 : 0;
//Value = _acsIO.GetOutput(Port, Bit);
}
private void PerformCmdSetValue(object commandParameter)
{
if (Port < 0 || Port > 15 || Bit < 0 || Bit > 32)
return;
//_acsIO.SetOutput(Port, Bit, Value);
var ret = _acsIO.WriteOutputIO((Port * 8) + Bit, Value > 0 ? true : false);
}
//private readonly DispatcherTimer _monitorTimer;
private readonly IDeviceManager _DeviceManager;
ACSIO _acsIO;
IAuroraEnvironment _auroraEnv;
public ACSIOViewModel(string deviceId, IAuroraEnvironment aurora)
{
_DeviceManager = aurora.DeviceManager;
_acsIO = _DeviceManager[deviceId] as ACSIO;
_auroraEnv = aurora;
var config = _DeviceManager.GetDeviceConfig(_acsIO.DeviceId) as ACSIOConfig;
BitInputs = config.InputList;
BitOutputs = config.OutputList;
CMD_VisibleChanged = new DelegateCommand(VisibleChanged);
//_monitorTimer = new DispatcherTimer();
//_monitorTimer.Tick += OnMonitoring;
//_monitorTimer.Interval = TimeSpan.FromMilliseconds(300);
Observable.Merge(
aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_ACTIVATED),
aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_DEACTIVATED)
).Select(msg => msg.Param as string
).Where(x => x == deviceId
).ObserveOnDispatcher(
).Subscribe(x => DeviceActivated());
}
private void DeviceActivated()
{
if (_acsIO.IsActivated) {
var config = _DeviceManager.GetDeviceConfig(_acsIO.DeviceId) as ACSIOConfig;
BitInputs = config.InputList;
BitOutputs = config.OutputList;
}
}
private void VisibleChanged(object obj)
{
//bool visible = (bool)obj;
//if (visible) {
// _monitorTimer.Start();
//} else {
// _monitorTimer.Stop();
//}
}
private void OnMonitoring(object sender, EventArgs e)
{
//if (!_acsIO.IsActivated) {
// return;
//}
//CollectionViewSource.GetDefaultView(BitInputs).Refresh();
//CollectionViewSource.GetDefaultView(BitOutputs).Refresh();
//foreach (AddrInfo item in BitInputs) {
// item.Value = _acsIO.GetInput(item.Port, item.Bit);
//}
//foreach (AddrInfo item in BitOutputs) {
// item.Value = _acsIO.GetOutput(item.Port, item.Bit);
//}
}
}
}