Files
test_demo/MX-PD-盘古 - new/PanGu.DieBonderApp/MainShell/DeviceMaintance/ViewModel/IoTestViewModel.cs
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

534 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using MainShell.Hardware;
using MainShell.Log;
using MainShell.Models;
using MwFramework.Device.Delta;
using Stylet;
using System;
using System.Globalization;
namespace MainShell.DeviceMaintance.ViewModel
{
public class IoTestViewModel : BaseScreen
{
public class DeltaBitTestState : PropertyChangedBase
{
private int _cardNo;
public int CardNo
{
get { return _cardNo; }
set { SetAndNotify(ref _cardNo, value); }
}
private int _node;
public int Node
{
get { return _node; }
set { SetAndNotify(ref _node, value); }
}
private int _slot;
public int Slot
{
get { return _slot; }
set { SetAndNotify(ref _slot, value); }
}
private int _index;
public int Index
{
get { return _index; }
set { SetAndNotify(ref _index, value); }
}
private int _subIndex;
public int SubIndex
{
get { return _subIndex; }
set { SetAndNotify(ref _subIndex, value); }
}
private int _bitNo;
public int BitNo
{
get { return _bitNo; }
set { SetAndNotify(ref _bitNo, value); }
}
private int _ioType = 1;
public int IoType
{
get { return _ioType; }
set { SetAndNotify(ref _ioType, value); }
}
private int _readIoType = 1;
public int ReadIoType
{
get { return _readIoType; }
set { SetAndNotify(ref _readIoType, value); }
}
private bool _writeValue;
public bool WriteValue
{
get { return _writeValue; }
set { SetAndNotify(ref _writeValue, value); }
}
private bool _readValue;
public bool ReadValue
{
get { return _readValue; }
set { SetAndNotify(ref _readValue, value); }
}
private ushort _returnCode;
public ushort ReturnCode
{
get { return _returnCode; }
set { SetAndNotify(ref _returnCode, value); }
}
private string _resultMessage = string.Empty;
public string ResultMessage
{
get { return _resultMessage; }
set { SetAndNotify(ref _resultMessage, value); }
}
}
public class DeltaDaTestState : PropertyChangedBase
{
private int _cardNo;
public int CardNo
{
get { return _cardNo; }
set { SetAndNotify(ref _cardNo, value); }
}
private int _node;
public int Node
{
get { return _node; }
set { SetAndNotify(ref _node, value); }
}
private int _slot;
public int Slot
{
get { return _slot; }
set { SetAndNotify(ref _slot, value); }
}
private int _index;
public int Index
{
get { return _index; }
set { SetAndNotify(ref _index, value); }
}
private int _subIndex;
public int SubIndex
{
get { return _subIndex; }
set { SetAndNotify(ref _subIndex, value); }
}
private int _byteSize = 2;
public int ByteSize
{
get { return _byteSize; }
set { SetAndNotify(ref _byteSize, value); }
}
private bool _signed = true;
public bool Signed
{
get { return _signed; }
set { SetAndNotify(ref _signed, value); }
}
private int _ioType = 1;
public int IoType
{
get { return _ioType; }
set { SetAndNotify(ref _ioType, value); }
}
private int _writeRawValue;
public int WriteRawValue
{
get { return _writeRawValue; }
set { SetAndNotify(ref _writeRawValue, value); }
}
private int _readRawValue;
public int ReadRawValue
{
get { return _readRawValue; }
set { SetAndNotify(ref _readRawValue, value); }
}
private ushort _returnCode;
public ushort ReturnCode
{
get { return _returnCode; }
set { SetAndNotify(ref _returnCode, value); }
}
private string _resultMessage = string.Empty;
public string ResultMessage
{
get { return _resultMessage; }
set { SetAndNotify(ref _resultMessage, value); }
}
}
private readonly HardwareManager _hardwareManager;
private string _cardStatusText;
public string CardStatusText
{
get { return _cardStatusText; }
set { SetAndNotify(ref _cardStatusText, value); }
}
public DeltaBitTestState BitState { get; private set; }
public DeltaDaTestState DaState { get; private set; }
public IoTestViewModel(HardwareManager hardwareManager)
{
if (hardwareManager == null)
{
throw new ArgumentNullException(nameof(hardwareManager));
}
_hardwareManager = hardwareManager;
BitState = BuildBitState();
DaState = BuildDaState();
RefreshCardStatus();
}
protected override void OnViewLoaded()
{
base.OnViewLoaded();
RefreshCardStatus();
}
public void RefreshCardStatus()
{
IDeltaIoExtend deltaIoExtend;
bool available = _hardwareManager.TryGetDeltaIoExtend(out deltaIoExtend);
CardStatusText = available ? $"Delta卡已连接{_hardwareManager.TdCard.GetType().FullName}" : "Delta卡未初始化或未实现 IDeltaIoExtend";
}
public void ReadBit()
{
try
{
IDeltaIoExtend deltaIoExtend;
if (!TryGetDeltaIoExtend(out deltaIoExtend))
{
return;
}
ushort cardNo;
ushort node;
ushort slot;
ushort index;
ushort subIndex;
byte bitNo;
ushort ioType;
if (!TryGetBitReadParameters(out cardNo, out node, out slot, out index, out subIndex, out bitNo, out ioType))
{
return;
}
bool value;
ushort result = deltaIoExtend.ReadBit(cardNo, node, slot, index, subIndex, bitNo, out value, ioType);
BitState.ReadValue = value;
BitState.ReturnCode = result;
BitState.ResultMessage = $"ReadBit 返回码:{result},结果:{value}";
}
catch (Exception ex)
{
HandleException(ex, BitState, "ReadBit 执行异常");
}
}
public void WriteBit()
{
try
{
IDeltaIoExtend deltaIoExtend;
if (!TryGetDeltaIoExtend(out deltaIoExtend))
{
return;
}
ushort cardNo;
ushort node;
ushort slot;
ushort index;
ushort subIndex;
byte bitNo;
ushort readIoType;
if (!TryGetBitWriteParameters(out cardNo, out node, out slot, out index, out subIndex, out bitNo, out readIoType))
{
return;
}
ushort result = deltaIoExtend.WriteBit(cardNo, node, slot, index, subIndex, bitNo, BitState.WriteValue, readIoType);
BitState.ReturnCode = result;
BitState.ResultMessage = $"WriteBit 返回码:{result},写入值:{BitState.WriteValue}";
}
catch (Exception ex)
{
HandleException(ex, BitState, "WriteBit 执行异常");
}
}
public void ReadDa()
{
try
{
IDeltaIoExtend deltaIoExtend;
if (!TryGetDeltaIoExtend(out deltaIoExtend))
{
return;
}
ushort cardNo;
ushort node;
ushort slot;
ushort index;
ushort subIndex;
ushort byteSize;
ushort ioType;
if (!TryGetDaReadParameters(out cardNo, out node, out slot, out index, out subIndex, out byteSize, out ioType))
{
return;
}
int rawValue;
ushort result = deltaIoExtend.ReadDA(cardNo, node, slot, index, subIndex, out rawValue, byteSize, DaState.Signed, ioType);
DaState.ReadRawValue = rawValue;
DaState.ReturnCode = result;
DaState.ResultMessage = $"ReadDA 返回码:{result},结果:{rawValue}";
}
catch (Exception ex)
{
HandleException(ex, DaState, "ReadDA 执行异常");
}
}
public void WriteDa()
{
try
{
IDeltaIoExtend deltaIoExtend;
if (!TryGetDeltaIoExtend(out deltaIoExtend))
{
return;
}
ushort cardNo;
ushort node;
ushort slot;
ushort index;
ushort subIndex;
ushort byteSize;
if (!TryGetDaWriteParameters(out cardNo, out node, out slot, out index, out subIndex, out byteSize))
{
return;
}
ushort result = deltaIoExtend.WriteDA(cardNo, node, slot, index, subIndex, DaState.WriteRawValue, byteSize);
DaState.ReturnCode = result;
DaState.ResultMessage = $"WriteDA 返回码:{result},写入值:{DaState.WriteRawValue}";
}
catch (Exception ex)
{
HandleException(ex, DaState, "WriteDA 执行异常");
}
}
private DeltaBitTestState BuildBitState()
{
DeltaBitTestState state = new DeltaBitTestState();
state.CardNo = 0;
state.Node = 0;
state.Slot = 0;
state.Index = 0;
state.SubIndex = 0;
state.BitNo = 0;
state.IoType = 1;
state.ReadIoType = 1;
return state;
}
private DeltaDaTestState BuildDaState()
{
DeltaDaTestState state = new DeltaDaTestState();
state.CardNo = 0;
state.Node = 0;
state.Slot = 0;
state.Index = 0;
state.SubIndex = 0;
state.ByteSize = 2;
state.IoType = 1;
return state;
}
private bool TryGetDeltaIoExtend(out IDeltaIoExtend deltaIoExtend)
{
RefreshCardStatus();
if (_hardwareManager.TryGetDeltaIoExtend(out deltaIoExtend))
{
return true;
}
BitState.ResultMessage = "Delta卡未初始化或未实现 IDeltaIoExtend";
DaState.ResultMessage = BitState.ResultMessage;
return false;
}
private bool TryGetBitReadParameters(out ushort cardNo, out ushort node, out ushort slot, out ushort index, out ushort subIndex, out byte bitNo, out ushort ioType)
{
cardNo = 0;
node = 0;
slot = 0;
index = 0;
subIndex = 0;
bitNo = 0;
ioType = 0;
bool isValid = TryGetUInt16(BitState.CardNo, "CardNo", out cardNo) &&
TryGetUInt16(BitState.Node, "Node", out node) &&
TryGetUInt16(BitState.Slot, "Slot", out slot) &&
TryGetHexUInt16(BitState.Index, "Index", out index) &&
TryGetHexUInt16(BitState.SubIndex, "SubIndex", out subIndex) &&
TryGetByte(BitState.BitNo, "BitNo", out bitNo) &&
TryGetUInt16(BitState.IoType, "IoType", out ioType);
return isValid;
}
private bool TryGetBitWriteParameters(out ushort cardNo, out ushort node, out ushort slot, out ushort index, out ushort subIndex, out byte bitNo, out ushort readIoType)
{
cardNo = 0;
node = 0;
slot = 0;
index = 0;
subIndex = 0;
bitNo = 0;
readIoType = 0;
bool isValid = TryGetUInt16(BitState.CardNo, "CardNo", out cardNo) &&
TryGetUInt16(BitState.Node, "Node", out node) &&
TryGetUInt16(BitState.Slot, "Slot", out slot) &&
TryGetHexUInt16(BitState.Index, "Index", out index) &&
TryGetHexUInt16(BitState.SubIndex, "SubIndex", out subIndex) &&
TryGetByte(BitState.BitNo, "BitNo", out bitNo) &&
TryGetUInt16(BitState.ReadIoType, "ReadIoType", out readIoType);
return isValid;
}
private bool TryGetDaReadParameters(out ushort cardNo, out ushort node, out ushort slot, out ushort index, out ushort subIndex, out ushort byteSize, out ushort ioType)
{
cardNo = 0;
node = 0;
slot = 0;
index = 0;
subIndex = 0;
byteSize = 0;
ioType = 0;
bool isValid = TryGetUInt16(DaState.CardNo, "CardNo", out cardNo) &&
TryGetUInt16(DaState.Node, "Node", out node) &&
TryGetUInt16(DaState.Slot, "Slot", out slot) &&
TryGetHexUInt16(DaState.Index, "Index", out index) &&
TryGetHexUInt16(DaState.SubIndex, "SubIndex", out subIndex) &&
TryGetUInt16(DaState.ByteSize, "ByteSize", out byteSize) &&
TryGetUInt16(DaState.IoType, "IoType", out ioType);
return isValid;
}
private bool TryGetDaWriteParameters(out ushort cardNo, out ushort node, out ushort slot, out ushort index, out ushort subIndex, out ushort byteSize)
{
cardNo = 0;
node = 0;
slot = 0;
index = 0;
subIndex = 0;
byteSize = 0;
bool isValid = TryGetUInt16(DaState.CardNo, "CardNo", out cardNo) &&
TryGetUInt16(DaState.Node, "Node", out node) &&
TryGetUInt16(DaState.Slot, "Slot", out slot) &&
TryGetHexUInt16(DaState.Index, "Index", out index) &&
TryGetHexUInt16(DaState.SubIndex, "SubIndex", out subIndex) &&
TryGetUInt16(DaState.ByteSize, "ByteSize", out byteSize);
return isValid;
}
private bool TryGetHexUInt16(int sourceValue, string parameterName, out ushort value)
{
string hexText = sourceValue.ToString(CultureInfo.InvariantCulture);
return ushort.TryParse(hexText, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value)
? true
: SetHexUInt16Error(parameterName, out value);
}
private bool SetHexUInt16Error(string parameterName, out ushort value)
{
value = 0;
string message = $"参数 {parameterName} 超出十六进制 ushort 范围。";
BitState.ResultMessage = message;
DaState.ResultMessage = message;
return false;
}
private bool TryGetUInt16(int sourceValue, string parameterName, out ushort value)
{
if (sourceValue < ushort.MinValue || sourceValue > ushort.MaxValue)
{
value = 0;
string message = $"参数 {parameterName} 超出 ushort 范围。";
BitState.ResultMessage = message;
DaState.ResultMessage = message;
return false;
}
value = (ushort)sourceValue;
return true;
}
private bool TryGetByte(int sourceValue, string parameterName, out byte value)
{
if (sourceValue < byte.MinValue || sourceValue > byte.MaxValue)
{
value = 0;
string message = $"参数 {parameterName} 超出 byte 范围。";
BitState.ResultMessage = message;
return false;
}
value = (byte)sourceValue;
return true;
}
private void HandleException(Exception ex, DeltaBitTestState state, string operationName)
{
state.ResultMessage = operationName;
LogManager.LogSysError(ex, true);
}
private void HandleException(Exception ex, DeltaDaTestState state, string operationName)
{
state.ResultMessage = operationName;
LogManager.LogSysError(ex, true);
}
}
}