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

87 lines
3.1 KiB
C#

using Aurora.View;
using CoreUnit.Control.UserControl.Canvas;
using PropertyTools.DataAnnotations;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WeldingCommon.Settings;
using WeldingCommon.Utils;
namespace WeldingCommon.Data
{
public class PLCReportData : ReportData
{
public int Address { get => _Address; set => SetProperty(ref _Address, value); }
private int _Address;
public bool IsUpdate { get => _IsUpdate; set => SetProperty(ref _IsUpdate, value); }
private bool _IsUpdate;
public bool IsDoubleWord { get => _IsDoubleWord; set => SetProperty(ref _IsDoubleWord, value); }
private bool _IsDoubleWord;
public int PlacePoint { get => _PlacePoint; set => SetProperty(ref _PlacePoint, value); }
private int _PlacePoint;
public bool IsThrow { get => _IsThrowValue; set => SetProperty(ref _IsThrowValue, value); }
private bool _IsThrowValue;
public int ThrowAddress { get => _ThrowAddress; set => SetProperty(ref _ThrowAddress, value); }
private int _ThrowAddress;
public int getValue() => (int)(Value * Math.Pow(10, PlacePoint));
public T readValue<T>(T fallback = default) where T : IConvertible
{
if (!IsUpdate)
return fallback;
var scaled = ConvertHelper.DownScaleDecimal(Value, PlacePoint);
if (typeof(T) == typeof(int)) return (T)(object)Decimal.ToInt32(Math.Round(scaled, 0, MidpointRounding.AwayFromZero));
if (typeof(T) == typeof(long)) return (T)(object)Decimal.ToInt64(Math.Round(scaled, 0, MidpointRounding.AwayFromZero));
//Debug.WriteLine($"Scaled Value >> {scaled}");
return (T)Convert.ChangeType(scaled, typeof(T), CultureInfo.InvariantCulture);
}
public PLCReportData(string uploadName) : base(uploadName)
{
}
public override object Clone()
{
var item = new PLCReportData(DataName);
item.Address = Address;
item.IsUpdate = IsUpdate;
item.PlacePoint = PlacePoint;
item.IsDoubleWord = IsDoubleWord;
item.DataName = DataName;
item.Value = Value;
item.IsThrow = IsThrow;
item.ThrowAddress = ThrowAddress;
return item;
}
}
//public class PLCReportDataList : List<PLCReportData>, ICloneable
//{
// //public PLCReportData this[eUploadData index] {
// // get => base[Convert.ToInt32(index)];
// //}
// public PLCReportData this[string name] {
// get => this.FirstOrDefault(t => t.DataName == name);
// }
// public object Clone()
// {
// var newItem = new PLCReportDataList();
// foreach (var item in this) {
// newItem.Add(item.Clone() as PLCReportData);
// }
// return newItem;
// }
//}
}