更新
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user