添加 MX-PD-盘古 项目文件

将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
Shi.Ji
2026-05-18 11:43:09 +08:00
parent 03632a379d
commit e31d3560bb
739 changed files with 99783 additions and 0 deletions

View File

@@ -0,0 +1,533 @@
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);
}
}
}