更新2026
This commit is contained in:
@@ -105,6 +105,12 @@ namespace TabletTester2025.Services
|
||||
return registers[0];
|
||||
}
|
||||
|
||||
public async Task<int> ReadInt32Async(ushort startAddress)
|
||||
{
|
||||
var registers = await ReadHoldingRegistersAsync(startAddress, 2);
|
||||
return RegistersToInt32(registers[0], registers[1]);
|
||||
}
|
||||
|
||||
public Task WriteCoilAsync(ushort coilAddress, bool value)
|
||||
{
|
||||
return ExecuteAsync(master => master.WriteSingleCoilAsync(_config.SlaveId, coilAddress, value));
|
||||
@@ -121,6 +127,12 @@ namespace TabletTester2025.Services
|
||||
return ExecuteAsync(master => master.WriteSingleRegisterAsync(_config.SlaveId, registerAddress, value));
|
||||
}
|
||||
|
||||
public Task WriteInt32Async(ushort startAddress, int value)
|
||||
{
|
||||
ushort[] registers = Int32ToRegisters(value);
|
||||
return ExecuteAsync(master => master.WriteMultipleRegistersAsync(_config.SlaveId, startAddress, registers));
|
||||
}
|
||||
|
||||
public Task WriteFloatAsync(ushort startAddress, float value)
|
||||
{
|
||||
if (!float.IsFinite(value))
|
||||
@@ -178,6 +190,13 @@ namespace TabletTester2025.Services
|
||||
: WordsToFloat(secondRegister, firstRegister);
|
||||
}
|
||||
|
||||
private int RegistersToInt32(ushort firstRegister, ushort secondRegister)
|
||||
{
|
||||
return _config.FloatWordOrder == PlcFloatWordOrder.HighWordFirst
|
||||
? WordsToInt32(firstRegister, secondRegister)
|
||||
: WordsToInt32(secondRegister, firstRegister);
|
||||
}
|
||||
|
||||
private static float WordsToFloat(ushort highWord, ushort lowWord)
|
||||
{
|
||||
byte[] bytes =
|
||||
@@ -190,6 +209,11 @@ namespace TabletTester2025.Services
|
||||
return BitConverter.ToSingle(bytes, 0);
|
||||
}
|
||||
|
||||
private static int WordsToInt32(ushort highWord, ushort lowWord)
|
||||
{
|
||||
return (int)(((uint)highWord << 16) | lowWord);
|
||||
}
|
||||
|
||||
private ushort[] FloatToRegisters(float value)
|
||||
{
|
||||
byte[] bytes = BitConverter.GetBytes(value);
|
||||
@@ -201,6 +225,17 @@ namespace TabletTester2025.Services
|
||||
: new[] { lowWord, highWord };
|
||||
}
|
||||
|
||||
private ushort[] Int32ToRegisters(int value)
|
||||
{
|
||||
uint raw = unchecked((uint)value);
|
||||
ushort highWord = (ushort)(raw >> 16);
|
||||
ushort lowWord = (ushort)(raw & 0xFFFF);
|
||||
|
||||
return _config.FloatWordOrder == PlcFloatWordOrder.HighWordFirst
|
||||
? new[] { highWord, lowWord }
|
||||
: new[] { lowWord, highWord };
|
||||
}
|
||||
|
||||
private void CloseConnection()
|
||||
{
|
||||
try { _master?.Dispose(); } catch { }
|
||||
|
||||
Reference in New Issue
Block a user