|
@@ -22,6 +22,9 @@ namespace CyberX8_Simulator.Devices
|
|
|
private const short POWER_CONTROL_ADDRESS = 0x0113;
|
|
|
private const short STEP_PERIOD_ADDRESS = 0x1400;
|
|
|
private const short STEP_PERIOD_START_ADDRESS = 0x1640;
|
|
|
+ private const short GOLD_CURRENT_SETTING_ADDRESS = 0x6102;
|
|
|
+ private const short GOLD_STEP_PERIOD_ADDRESS = 0x77D0;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 电源状态(00-cv输出,01-cc输出)
|
|
|
/// </summary>
|
|
@@ -39,6 +42,7 @@ namespace CyberX8_Simulator.Devices
|
|
|
private DateTime _currentTime = DateTime.Now;
|
|
|
|
|
|
private System.Timers.Timer _timer;
|
|
|
+ private byte[] _powerSupplierSetPoint = new byte[4];//记录每次设置的电流值
|
|
|
|
|
|
public PowerSupplierSocketSimulator(int port):base(port)
|
|
|
{
|
|
@@ -134,6 +138,11 @@ namespace CyberX8_Simulator.Devices
|
|
|
OnWriteMessage(CreateReadResponse(flag, channel, command, registerCount, bytes));
|
|
|
return;
|
|
|
}
|
|
|
+ else if(startAddress == GOLD_CURRENT_SETTING_ADDRESS)
|
|
|
+ {
|
|
|
+ OnWriteMessage(CreateReadResponse(flag, channel, command, registerCount, _powerSupplierSetPoint));
|
|
|
+ return;
|
|
|
+ }
|
|
|
else if (startAddress == 0X80)
|
|
|
{
|
|
|
byte[] bytes = new byte[2];
|
|
@@ -237,6 +246,14 @@ namespace CyberX8_Simulator.Devices
|
|
|
_timer.Start();
|
|
|
OnWriteMessage(CreateWriteResponse(flag, channel, command, startAddress, length));
|
|
|
}
|
|
|
+ else if(startAddress == GOLD_CURRENT_SETTING_ADDRESS)
|
|
|
+ {
|
|
|
+ byte[] vauleData = new byte[4]; //0,1是高位,2,3是低位
|
|
|
+ Array.Copy(data, 13, vauleData, 0, 4);
|
|
|
+ _powerSupplierSetPoint = vauleData;
|
|
|
+ int count = byteTransform.TransInt32(vauleData, 0);
|
|
|
+ UpdateChannelGoldCurrent(flag, channel, command, (short)count);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -260,12 +277,16 @@ namespace CyberX8_Simulator.Devices
|
|
|
Array.Copy(values,0,bytes, 9, values.Length);
|
|
|
return bytes;
|
|
|
}
|
|
|
-
|
|
|
private void UpdateChannelCurrent(short flag,byte channel, byte command, short startAddress, short value)
|
|
|
{
|
|
|
_powerSupplierDic[channel].CurrentSetting = value;
|
|
|
OnWriteMessage(CreateWriteResponse(flag, channel, command, startAddress, value));
|
|
|
}
|
|
|
+ private void UpdateChannelGoldCurrent(short flag, byte channel, byte command, short count)
|
|
|
+ {
|
|
|
+ _powerSupplierDic[channel].CurrentSetting = count;
|
|
|
+ OnWriteMessage(CreateMultiWriteResponse(flag, channel, command, 2));
|
|
|
+ }
|
|
|
private void UpdateChannelEnabled(short flag,byte channel, byte command, short startAddress, short value)
|
|
|
{
|
|
|
_powerSupplierDic[channel].OutputSwitchControl = (byte)value;
|
|
@@ -306,7 +327,7 @@ namespace CyberX8_Simulator.Devices
|
|
|
return byt;
|
|
|
}
|
|
|
|
|
|
- private byte[] CreateMultiWriteResponse(short flag, byte channel, byte command, short startAddress, short count)
|
|
|
+ private byte[] CreateMultiWriteResponse(short flag, byte channel, byte command,byte registerCount)
|
|
|
{
|
|
|
byte[] byt = new byte[12];
|
|
|
Array.Copy(byteTransform.GetBytes(flag), 0, byt, 0, 2);
|
|
@@ -316,10 +337,12 @@ namespace CyberX8_Simulator.Devices
|
|
|
byt[5] = 0x06;
|
|
|
byt[6] = channel;
|
|
|
byt[7] = command;
|
|
|
- byte[] addressByt = byteTransform.GetBytes(startAddress);
|
|
|
- Array.Copy(addressByt, 0, byt, 8, 2);
|
|
|
- byte[] valueByt = byteTransform.GetBytes(count);
|
|
|
- Array.Copy(valueByt, 0, byt, 10, 2);
|
|
|
+ byt[8] = 0x00;
|
|
|
+ byt[9] = registerCount;
|
|
|
+ //byte[] addressByt = byteTransform.GetBytes(startAddress);
|
|
|
+ //Array.Copy(addressByt, 0, byt, 8, 2);
|
|
|
+ //byte[] valueByt = byteTransform.GetBytes(count);
|
|
|
+ //Array.Copy(valueByt, 0, byt, 10, 2);
|
|
|
return byt;
|
|
|
}
|
|
|
|