2
我正在开发一个应用程序,其中Lets表示50-60个Modbus支持设备(从站)连接到Com端口,这些Com端口与请求响应机制中的应用程序进行通信。与多个从站通信(基于Modbus协议)
我想每15分钟后。请求应发送到每个仪表并响应从仪表逐个接收。 与多个从站通信(基于Modbus协议)
为此,我正在使用System.Timers.timer调用方法让每隔15分钟后说ReadAllSlave()。 在ReadAllSlave()我已经使用For循环发送请求并接收响应并使用thread.sleep来保持延迟..!但它似乎没有工作和循环执行在该死的有线方式。
private void StartPoll()
{
double txtSampleRate = 15 * 60 * 1000;
timer.Interval = txtSampleRate;
timer.AutoReset = true;
timer.Start();
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
for(int index = 0; index<meterCount; Index++)
{
//Sending request to connected meter..
mb.SendFc3(m_slaveID[0], m_startRegAdd[0], m_noOfReg[0], ref value_meter);
if (mb.modbusStatus == "Read successful")
{
//Some code for writing the values in SQL Express database
}
//Wait for some time so that will not get timeout error for the next
//request..
Thread.Sleep(10000);
}
}
任何人都可以请我建议实施相同的最佳方法。
在此先感谢。
什么是真正的问题?第一次迭代后你没有得到任何值?如果我读到你的意图是正确的,那么你试图在慢速9600波特速度线上每隔15秒沟通50米。不确定它是否可能。 – Independent 2013-03-02 14:30:14
您的发送接收循环的代码或至少一个削减版本将有所帮助。听起来你正在尝试与我同步执行异步通信。 – 2013-03-02 14:35:07
我不好,你写了几分钟。代码示例确实会有所帮助。 – Independent 2013-03-02 14:41:56