This commit is contained in:
GukSang.Jin
2026-02-04 12:51:01 +08:00
parent 343370cacc
commit 85d16f02f9
2 changed files with 207 additions and 55 deletions

View File

@@ -75,41 +75,86 @@ namespace 全自动水压检测仪
public void BtnClickFunctionForNew(ButtonType buttonType, ushort address)
{
try
int maxRetries = 3;
int retryCount = 0;
while (retryCount < maxRetries)
{
switch (buttonType)
try
{
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, true);
Thread.Sleep(100);
modbusMaster.WriteSingleCoil(1, address, false);
Thread.Sleep(100);
break;
case ButtonType.:
if (modbusMaster.ReadCoils(1, address, 1)[0])
{
modbusMaster.WriteSingleCoil(1, address, false); Thread.Sleep(100);
}
else
{ modbusMaster.WriteSingleCoil(1, address, true); Thread.Sleep(100); }
break;
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, true);
Thread.Sleep(100);
break;
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, false);
Thread.Sleep(100);
break;
default:
break;
switch (buttonType)
{
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, true);
Thread.Sleep(100);
modbusMaster.WriteSingleCoil(1, address, false);
Thread.Sleep(100);
break;
case ButtonType.:
bool currentState = false;
try
{
// 尝试读取当前状态
bool[] coils = modbusMaster.ReadCoils(1, address, 1);
if (coils != null && coils.Length > 0)
{
currentState = coils[0];
}
}
catch (Exception readEx)
{
// 如果读取失败默认写入true开启状态
System.Diagnostics.Debug.WriteLine($"[Function] 读取地址{address}失败,使用默认值: {readEx.Message}");
}
// 写入相反的状态
modbusMaster.WriteSingleCoil(1, address, !currentState);
Thread.Sleep(100);
break;
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, true);
Thread.Sleep(100);
break;
case ButtonType.:
modbusMaster.WriteSingleCoil(1, address, false);
Thread.Sleep(100);
break;
default:
break;
}
// 操作成功,退出重试循环
return;
}
catch (SlaveException slaveEx)
{
retryCount++;
System.Diagnostics.Debug.WriteLine($"[Function] Modbus从站异常 (尝试 {retryCount}/{maxRetries}): {slaveEx.Message}");
if (retryCount >= maxRetries)
{
MessageBox.Show($"操作失败!\n\nModbus从站错误: {slaveEx.SlaveExceptionCode}\n{slaveEx.Message}", "错误");
return;
}
// 等待后重试
Thread.Sleep(200);
}
catch (Exception ex)
{
retryCount++;
System.Diagnostics.Debug.WriteLine($"[Function] 操作失败 (尝试 {retryCount}/{maxRetries}): {ex.Message}");
if (retryCount >= maxRetries)
{
MessageBox.Show("操作失败!" + "\n" + "\n" + ex.Message, "错误");
return;
}
// 等待后重试
Thread.Sleep(200);
}
}
catch (Exception ex)
{
MessageBox.Show("操作失败!" + "\n" + "\n" + ex.Message, "错误");
}
}
public void WriteToPLC(string inPutValue, ushort address, DataType dataType)
{