@正怒月神
/// <summary>
/// 定时任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void myTask()
{
if (!opc_connected) return;
if (th != null && th.IsAlive) return;
th = new Thread(
() =>
{
keys.Clear();
ids.Clear();
//初始化节点信息
lblStatus.Invoke(new Action(
() => { lblStatus.Text = "正在加载节点数据......"; }
));
string sql = "select id,key from tm_di_items t";
DataRowCollection rows = DB.DbHelperOra.Query(sql).Tables[0].Rows;
for (int i = 0; i < rows.Count; i++)
{
DataRow dr = rows[i];
keys.Add(dr.ItemArray[1] + "");
ids.Add(Convert.ToInt64(dr.ItemArray[0]));
}
//将所有的item添加到组
AddAllItems();
btnRead.Invoke(new Action(
() => { btnRead.Enabled = true; }
));
lblStatus.Invoke(new Action(
() => { lblStatus.Text = "程序将于" + getWaitTime() + "分后开始运行!"; }
));
Thread.Sleep(getWaitTime() * 60 * 1000);
while (opc_connected)
{
try
{
lblStatus.Invoke(new Action(
() => { lblStatus.Text = "正在进行第" + count + "次读取"; }
));
List<String> dataItemsValues = new List<string>();
List<OracleParameter[]> paramArrays = new List<OracleParameter[]>();
for (int i = 0, j = ids.Count; i < j; i++)
{
try
{
if (!opcItems.ContainsKey(ids[i]))
{
continue;
}
lblcurr.Text = keys[i];
OPCDataItemValue opcItem = GetDataItemValue(opcItems[ids[i]]);
if (opcItem != null)
{
String value = "insert into tm_di_data(id,item_id,TIMESTAMP,DATAVALUE,QUALITY,cdate) values(seq_tm_di_data.nextval,:itemId,:timestamp,:value,:quality,:cdate)";
dataItemsValues.Add(value);
OracleParameter p1 = new OracleParameter("itemId", ids[i]);
OracleParameter p2 = new OracleParameter("timestamp", opcItem.TimeStamp);
OracleParameter p3 = new OracleParameter("quality", opcItem.Quality);
OracleParameter p4 = new OracleParameter("value", opcItem.DataValue);
OracleParameter p5 = new OracleParameter("cdate", DateTime.Now);
OracleParameter[] ps = new OracleParameter[] { p1, p2, p3, p4, p5 };
paramArrays.Add(ps);
}
}
catch (Exception ex)
{
LogHelper.WriteErrorLog(ex.Message);
}
}
lblcurr.Text = "";
DB.DbHelperOra.ExecuteSql(dataItemsValues, paramArrays);
lblStatus.Invoke(new Action(
() =>
{
lblStatus.Text = "读取第" + count + "次成功";
}
));
lblcurr.Invoke(new Action(
() =>
{
lblcurr.Text = "";
}
));
LogHelper.WriteLog("读取第" + count + "次成功");
count++;
//if (count == 200)
//{
//BreakAll();
//}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
LogHelper.WriteErrorLog("行[" + ex.StackTrace + "]" + ex.Message);
}
Thread.Sleep(getWaitTime() * 60 * 1000);
}
}
);
th.IsBackground = true;
th.Start();
}