我正在开发一个基于Shortbus dll RTU的项目。我设法读取了这些设备,但随着设备数量的增加,每次读取的延迟都会增加。
我正在为每个设备使用一个单独的计时器,但我没有到达任何地方,因为我必须将值写入数据库并比较旧值和新值以显示"工作"并且"不工作"状态。
我想要扫描227台设备,但是我没有达到只需要32台设备所需的响应。
我正在使用datagridview来存储端口和Modbus ID
http://postimage.org/'目标=' _blank'> HTTP://s2.postimg.org/x1gdrkug9/modbus.gif'边界=' 0' ALT =" MODBUS" />
http://postimage.org/index.php?lang=spanish'>share image
阅读每一行的代码
private void lectura(int numerofila)
{
try
{
Variables.fila_actual = numerofila + 1;
ushort err;
Variables.sb1.SetCOMPort(Convert.ToUInt16(gridConf.Rows[con].Cells[4].Value), 9600, 8, 'N', 2);
Variables.sb1.SetCOMPort(Convert.ToUInt16(gridConf.Rows[numerofila].Cells[4].Value), 9600, 8, 'N', 2);
err = Variables.sb1.ReadWords(Convert.ToUInt16(gridConf.Rows[numerofila].Cells[3].Value), 1004, 1, out Variables.read, type3x: true);
gridConf.Rows[numerofila].Cells[7].Value = Variables.read[0];
}
catch
{
MessageBox.Show("Error in row " + Variables.numero_filas);
}
}
扫描值的网格视图
http://postimage.org/'目标=' _blank'> HTTP://s11.postimg.org/7544cqyoj/modbus2.gif'边界=' 0' ALT =" modbus2" />
http://postimage.org/index.php?lang=spanish'>subir照片
在2秒的每个刻度线上,我根据行数
执行读数private void timer1_Tick(object sender, EventArgs e)
{
lectura(0);
}
我尝试了线程,但他们堵塞了应用程序。任何帮助将不胜感激。