207 lines
7.4 KiB
C#
207 lines
7.4 KiB
C#
using ACS.SPiiPlusNET;
|
|
using Aurora;
|
|
using Aurora.Api;
|
|
using Aurora.Api.DataType;
|
|
using Aurora.View;
|
|
using Hermes.Functional;
|
|
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Data;
|
|
using System.Windows.Input;
|
|
using System.Windows.Threading;
|
|
|
|
namespace AuroraACS.Views
|
|
{
|
|
public class UCACSDeviceViewModel : NotifyPropertyChangedBase
|
|
{
|
|
private IAuroraEnvironment _env;
|
|
private ACSDevice _dev;
|
|
|
|
private string _settingId;
|
|
private ACSDeviceSetting _setting;
|
|
|
|
public ICommand CMD_VisibleChanged { get; }
|
|
public ICommand CMD_BufferStart { get; }
|
|
public ICommand CMD_BufferStop { get; }
|
|
|
|
//public ICommand CMD_BufferAdd { get; }
|
|
//public ICommand CMD_BufferDelete { get; }
|
|
//public ICommand CMD_BufferSave { get; }
|
|
//public ICommand CMD_BufferLoad { get; }
|
|
|
|
public ICommand CMD_VariableValueWrite { get; }
|
|
//public ICommand CMD_VariableValueAdd { get; }
|
|
//public ICommand CMD_VariableValueDelete { get; }
|
|
//public ICommand CMD_VariableValueSave { get; }
|
|
//public ICommand CMD_VariableValueLoad { get; }
|
|
|
|
public ObservableCollection<BufferInfo> BufferInfoList { get => _BufferInfoList; set => SetProperty(ref _BufferInfoList, value); }
|
|
private ObservableCollection<BufferInfo> _BufferInfoList;
|
|
public BufferInfo SelectedBufferInfo {
|
|
get => _SelectedBufferInfo;
|
|
set {
|
|
|
|
if(SetProperty(ref _SelectedBufferInfo, value))
|
|
UpdateSelectedReference();
|
|
}
|
|
}
|
|
private BufferInfo _SelectedBufferInfo;
|
|
|
|
public VariableValueCollection VariableValueList { get => _VariableValueList; set => SetProperty(ref _VariableValueList, value); }
|
|
private VariableValueCollection _VariableValueList;
|
|
public VariableValue SelectedVariableValue { get => _SelectedVariableValue; set => SetProperty(ref _SelectedVariableValue, value); }
|
|
private VariableValue _SelectedVariableValue;
|
|
|
|
public string WriteText { get => _WriteText; set => SetProperty(ref _WriteText, value); }
|
|
private string _WriteText;
|
|
|
|
public string HelpImagePath { get => _HelpImagePath; set => SetProperty(ref _HelpImagePath, value); }
|
|
private string _HelpImagePath;
|
|
|
|
private readonly DispatcherTimer _monitorTimer;
|
|
|
|
public UCACSDeviceViewModel(IAuroraEnvironment aurora, string deviceId, string settingId)
|
|
{
|
|
_env = aurora;
|
|
_dev = aurora.DeviceManager[deviceId] as ACSDevice;
|
|
|
|
_settingId = settingId;
|
|
_setting = aurora.SettingEntry[settingId] as ACSDeviceSetting;
|
|
|
|
HelpImagePath = $"file:///{_setting.HelpImagePath}";
|
|
|
|
_monitorTimer = new DispatcherTimer();
|
|
_monitorTimer.Tick += OnMonitoring;
|
|
_monitorTimer.Interval = TimeSpan.FromMilliseconds(100);
|
|
|
|
CMD_VisibleChanged = new DelegateCommand(VisibleChanged);
|
|
|
|
CMD_BufferStart = new DelegateCommand(OnBufferStart);
|
|
CMD_BufferStop = new DelegateCommand(OnBufferStop);
|
|
|
|
CMD_VariableValueWrite = new DelegateCommand(OnVariableValueWrite);
|
|
|
|
BufferInfoList = new BufferInfoCollection(_setting.BufferInfoList.Where(item => item.BufferNo != -1));
|
|
VariableValueList = new VariableValueCollection(_setting.VariableValueList.Where(item => item.VariableValueName != string.Empty));
|
|
|
|
for(int i = 0; i < VariableValueList.Count; i++)
|
|
_setting.VariableValueList[i].Index = VariableValueList[i].Index = i;
|
|
|
|
aurora.SettingEntry.Save(settingId, _setting, "IndexUpdator");
|
|
}
|
|
|
|
|
|
private void UpdateSelectedReference()
|
|
{
|
|
if (SelectedBufferInfo == null)
|
|
return;
|
|
|
|
// 초기화 값이면 리턴
|
|
int selectedBufferNo = SelectedBufferInfo.BufferNo;
|
|
if (selectedBufferNo == -1)
|
|
return;
|
|
|
|
// 버퍼와 연결된 데이터 UI 하이라이트
|
|
foreach (var value in VariableValueList)
|
|
value.IsSelectReference = (value.ReferenceBuffer == selectedBufferNo);
|
|
|
|
CollectionViewSource.GetDefaultView(VariableValueList).Refresh();
|
|
}
|
|
private void OnBufferStart(object obj)
|
|
{
|
|
if (_dev == null)
|
|
return;
|
|
|
|
if (obj is BufferInfo info) {
|
|
if (info == null || info.BufferNo == -1)
|
|
return;
|
|
|
|
if (MessageUtil.ShowYesNoMessageDialog("실행", "실행하시겠습니까?")) {
|
|
_dev.RunBuffer((ProgramBuffer)info.BufferNo, info.Label);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnBufferStop(object obj)
|
|
{
|
|
if (_dev == null)
|
|
return;
|
|
|
|
if (obj is BufferInfo info) {
|
|
if (info == null || info.BufferNo == -1)
|
|
return;
|
|
|
|
if (MessageUtil.ShowYesNoMessageDialog("실행", "실행하시겠습니까?")) {
|
|
_dev.StopBuffer((ProgramBuffer)info.BufferNo);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnVariableValueWrite(object obj)
|
|
{
|
|
if (SelectedVariableValue == null) {
|
|
MessageBox.Show("선택된 셀이 없습니다.");
|
|
return;
|
|
}
|
|
|
|
if(string.IsNullOrEmpty(WriteText)) {
|
|
MessageBox.Show("입력된 Text가 없습니다.");
|
|
return;
|
|
}
|
|
|
|
if (!SelectedVariableValue.Authority.Contains("W")) {
|
|
MessageBox.Show("쓰기 권한이 없습니다.");
|
|
return;
|
|
}
|
|
|
|
if (MessageUtil.ShowYesNoMessageDialog("입력", $"'{WriteText}'을 입력하시겠습니까?")) {
|
|
double.TryParse(WriteText, out double write);
|
|
_dev.WriteVariable(SelectedVariableValue.VariableValueName, write, ProgramBuffer.ACSC_NONE);
|
|
WriteText = string.Empty;
|
|
}
|
|
}
|
|
|
|
private void OnMonitoring(object sender, EventArgs e)
|
|
{
|
|
if (!_dev.IsActivated)
|
|
return;
|
|
|
|
foreach (var item in VariableValueList) {
|
|
if(item.VariableValueName == string.Empty)
|
|
continue;
|
|
|
|
item.Value = (int)_dev.ReadVariableInt(item.VariableValueName);
|
|
}
|
|
}
|
|
|
|
public void UpdateGlobalParameter(object data)
|
|
{
|
|
if(data is VariableValue select) {
|
|
if (MessageUtil.ShowYesNoMessageDialog("업데이트", $"상태를 업데이트하시겠습니까?")) {
|
|
if(select.DataType.Contains("I"))
|
|
select.Value = (int)_dev.ReadVariable(select.VariableValueName);
|
|
if (select.DataType.Contains("R"))
|
|
select.Value = (double)_dev.ReadVariable(select.VariableValueName);
|
|
//select.Value = (int)_dev.ReadVariableInt(select.VariableValueName);
|
|
CollectionViewSource.GetDefaultView(VariableValueList).Refresh();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void VisibleChanged(object obj)
|
|
{
|
|
//bool visible = (bool)obj;
|
|
//if (visible) {
|
|
// _monitorTimer.Start();
|
|
//} else {
|
|
// _monitorTimer.Stop();
|
|
//}
|
|
}
|
|
|
|
}
|
|
}
|