我使用库nmodbus4并创建RTU连接。
public static IModbusSerialMaster Master { get; set; }
Master = ModbusSerialMaster.CreateRtu(SerialPort);
我有方法getclient()
返回了Master
和方法Registers()
如下:
public static ushort[] Registers(Func<IModbusSerialMaster,ushort[]> action)
{
ushort[] registers = new ushort[0];
var client = getclient();
if (client == null)
return registers;
//mutex.WaitOne();
try
{
registers = action.Invoke(client);
}
catch (Exception e)
{
log.Error("error");
}
finally
{
//mutex.ReleaseMutex();
}
return registers;
}
我试图使用System.Threading.Mutex
来确保一次仅发送一种帧。但是当In循环运行2/3任务大约一分钟后,它将锁定mutex.WaitOne();
并停止程序。
如果我不使用互斥锁。我没有看到任何错误。 nmodbus本身是否确保程序不会以这种方式崩溃?还是我应该找出原因,留下一个互斥体并修复错误?