|
@@ -31,6 +31,10 @@ namespace UAS_PLCDataReader
|
|
|
List<string> SQL = new List<string>();
|
|
|
//存放所有的设备返回的数据,用于比较
|
|
|
public static Dictionary<string, Entity.Device> ReturnData = new Dictionary<string, Entity.Device>();
|
|
|
+ /// <summary>
|
|
|
+ /// 需要更新的设备列表
|
|
|
+ /// </summary>
|
|
|
+ public static Queue<Entity.Device> QueueUpdateDevice = new Queue<Entity.Device>();
|
|
|
|
|
|
#region 初始化代码
|
|
|
public Main()
|
|
@@ -124,6 +128,8 @@ namespace UAS_PLCDataReader
|
|
|
ButtonAddNetConfig.Grid = GridDeviceNetSetting;
|
|
|
ButtonSaveNetConfig.Grid = GridDeviceNetSetting;
|
|
|
|
|
|
+ TimerUpdateDevice.Start();
|
|
|
+
|
|
|
Ptime = new Dictionary<int, PollingTimer>();
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -276,6 +282,32 @@ namespace UAS_PLCDataReader
|
|
|
}
|
|
|
e.Handled = true;
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 设备数据更新列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ private void TimerUpdateDevice_Tick(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ Console.WriteLine("Begin" + QueueUpdateDevice.Count);
|
|
|
+ while (QueueUpdateDevice.Count > 0)
|
|
|
+ {
|
|
|
+ Entity.Device item = QueueUpdateDevice.Dequeue();
|
|
|
+ SQL.Clear();
|
|
|
+ //更新轮询状态
|
|
|
+ sql.Clear();
|
|
|
+ sql.Append("update DEVICEPOLLINGCONFIG set dpc_status='Running' where dpc_decode='" + item.Decode + "' and dpc_dccode='" + item.Dccode + "'");
|
|
|
+ dh.ExecuteSql(sql.ToString(), "update");
|
|
|
+ //更新轮询日志状态
|
|
|
+ sql.Clear();
|
|
|
+ sql.Append("update DEVICEPOLLINGLOG set dpg_status='Running',dpg_senddatasize=nvl(dpg_senddatasize,0)+" + item.SendDataSize);
|
|
|
+ sql.Append(",dpg_receivedatasize=nvl(dpg_receivedatasize,0)+" + item.ReceiveDataSize + ",dpg_count=nvl(dpg_count,0)+1 ");
|
|
|
+ sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + item.Decode + "')");
|
|
|
+ dh.ExecuteSql(sql.ToString(), "update");
|
|
|
+ }
|
|
|
+ Console.WriteLine("End" + QueueUpdateDevice.Count);
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region PageCommandSet业务代码(指令设置)
|
|
@@ -428,6 +460,27 @@ namespace UAS_PLCDataReader
|
|
|
}
|
|
|
//发送指令
|
|
|
mbt.Send(IP, SendCoding, ReceiveCoding, Command);
|
|
|
+ //如果不包含该项数据则在键值对中添加
|
|
|
+ if (!ReturnData.ContainsKey(Decode))
|
|
|
+ {
|
|
|
+ //添加本地数据内容
|
|
|
+ Entity.Device device = new Entity.Device();
|
|
|
+ device.Decode = pl.DeviceCode;
|
|
|
+ device.Dename = pl.DeviceName;
|
|
|
+ device.StartTime = DateTime.Now;
|
|
|
+ device.RunStatus = "Running";
|
|
|
+ device.SendDataSize += SendCommandByteSize;
|
|
|
+ device.SendCount += 1;
|
|
|
+ device.Dccode = pl.CommandCode;
|
|
|
+ ReturnData.Add(Decode, device);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //每次更新轮询的数据
|
|
|
+ ReturnData[Decode].SendDataSize += SendCommandByteSize;
|
|
|
+ ReturnData[Decode].SendCount += 1;
|
|
|
+ //检测键值对是否发生变化,发生变化时赋予新值
|
|
|
+ }
|
|
|
//成功返回了信息
|
|
|
if (mbt.Returnvalue.ContainsKey(IP))
|
|
|
{
|
|
@@ -439,7 +492,6 @@ namespace UAS_PLCDataReader
|
|
|
{
|
|
|
ItemData.Add("Item" + i, Arr[i].ToString());
|
|
|
}
|
|
|
- //如果不包含该项数据则在键值对中添加
|
|
|
if (!ReturnData.ContainsKey(Decode))
|
|
|
{
|
|
|
//添加本地数据内容
|
|
@@ -449,20 +501,24 @@ namespace UAS_PLCDataReader
|
|
|
device.StartTime = DateTime.Now;
|
|
|
device.RunStatus = "Running";
|
|
|
device.ReceiveDataSize += ReceiveCommandByteSize;
|
|
|
- device.SendDataSize += SendCommandByteSize;
|
|
|
- device.SendCount += 1;
|
|
|
+ device.Dccode = pl.CommandCode;
|
|
|
device.ItemData = ItemData;
|
|
|
ReturnData.Add(Decode, device);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ if (ReturnData[Decode].ItemData == null)
|
|
|
+ {
|
|
|
+ ReturnData[Decode].ItemData = ItemData;
|
|
|
+ }
|
|
|
+ //每次更新轮询的数据
|
|
|
ReturnData[Decode].ReceiveDataSize += ReceiveCommandByteSize;
|
|
|
- ReturnData[Decode].SendDataSize += SendCommandByteSize;
|
|
|
- ReturnData[Decode].SendCount += 1;
|
|
|
//检测键值对是否发生变化,发生变化时赋予新值
|
|
|
if ((BaseUtil.CheckDicDiff(ReturnData[Decode].ItemData, ItemData)))
|
|
|
{
|
|
|
ReturnData[Decode].ItemData = ItemData;
|
|
|
+ QueueUpdateDevice.Enqueue(ReturnData[Decode]);
|
|
|
+ LogicHandler.DoDeviceDataDiffLog(pl.DeviceCode, pl.DeviceName, pl.CommandCode, User.UserName);
|
|
|
}
|
|
|
}
|
|
|
mbt.Returnvalue.Remove(IP);
|