小编Rea*_*ter的帖子

Nmodbus Tcpclient 连接因启用 modbus 的设备出现超时错误而关闭

我正在使用 nmodbus 库(从 Google 代码下载)通过 TCP 进行 modbus rtu 通信。

我正在使用硬件(RS485 到以太网转换器)将我的 modbus over RTU 请求转换为 TCP,反之亦然。

如果我发送请求并且 modbus 设备处于活动状态,则一切正常,但是如果我发送请求并且 modbus 设备未处于活动状态,则我的 tcpclient 连接会自动关闭,我希望它保持打开状态并抛出超时异常,但这没有发生。

我已经正确设置了超时值,但仍然没有结果。

我的示例伪代码如下

using (TcpClient _client = new TcpClient(ipAdd, 1025))
{
_client.NoDelay = true;
ModbusSerialMaster _device = ModbusSerialMaster.CreateRtu(tcpObj);
_device.Transport.ReadTimeout = 1000;
_device.Transport.WriteTimeout = 1000;
_device.ReadInputRegisters(meterID, startAdd, register);
}
Run Code Online (Sandbox Code Playgroud)

我已经使用modbus模拟器(Pollscan,modbus poll)验证了转换器和modbus硬件的功能

我相信我在设置 tcpclient 的属性时犯了一些错误,但不确定到底是什么。

任何建议、意见都非常值得赞赏。

c# modbus tcpclient

5
推荐指数
0
解决办法
2114
查看次数

在队列中添加数据时通知线程

我有一个线程正在队列中添加数据,现在我希望在添加数据时通知另一线程,以便它可以开始处理队列中的数据。

一种选择是线程将连续轮询队列以查看计数是否大于零,但我认为这不是好方法,任何其他建议将不胜感激

关于如何实现此目标的任何建议,我正在使用.net framework 3.5。

如果我有两个线程在做 q.Enqueue(data)而另一个在做q.dequeue(),那么在这种情况下我需要管理锁吗?

c# queue multithreading thread-safety

3
推荐指数
1
解决办法
2516
查看次数

标签 统计

c# ×2

modbus ×1

multithreading ×1

queue ×1

tcpclient ×1

thread-safety ×1