/// <summary> /// 获得数据列表 /// </summary> public List <Scada.Model.IO_DEVICE> DataTableToList(DataTable dt, string strWhere) { List <Scada.Model.SCADA_DEVICE_DRIVER> drivers = driverBLL.GetModelList(""); List <Scada.Model.IO_PARA> allParas = paraBll.GetModelList(strWhere); List <Task> tasks = new List <Task>(); List <Scada.Model.IO_DEVICE> modelList = new List <Scada.Model.IO_DEVICE>(); int rowsCount = dt.Rows.Count; if (rowsCount > 0) { int sid = dt.Rows.Count % 100 == 0 ? (dt.Rows.Count / 100) : (dt.Rows.Count / 100 + 1); for (int a = 1; a <= sid; a++) { object aa = a.ToString() + "," + sid.ToString(); tasks.Add(Task.Run(() => { int startindex = Convert.ToInt32(aa.ToString().Split(',')[0]); int limitstep = Convert.ToInt32(aa.ToString().Split(',')[1]); for (int i = (startindex > 1 ? ((startindex - 1) * 100) : 0); i < (startindex == limitstep ? (dt.Rows.Count) : startindex * 100); i++) { Scada.Model.IO_DEVICE model = dal.DataRowToModel(dt.Rows[i], drivers); if (model != null) { model.IOParas = allParas.FindAll(x => x != null && x.IO_DEVICE_ID == model.IO_DEVICE_ID && x.IO_COMM_ID == model.IO_COMM_ID && x.IO_SERVER_ID == model.IO_SERVER_ID); lock (modelList) { modelList.Add(model); } lock (allParas) { for (int c = 0; c < model.IOParas.Count; c++) { allParas.Remove(model.IOParas[c]);//删除已经搜索到的 } } } } })); } } Task.WaitAll(tasks.ToArray()); tasks.Clear(); return(modelList); }
public int Interval = 3; //默认是3秒 /// <summary> /// 启动模拟器 /// </summary> /// <param name="form"></param> public void InitSimulator(int mInterval) { Task.Run(() => { Scada.Business.SCADA_DRIVER DriverBll = new Scada.Business.SCADA_DRIVER(); Scada.Business.SCADA_DEVICE_DRIVER DeviceDriverBll = new Scada.Business.SCADA_DEVICE_DRIVER(); Scada.Business.IO_DEVICE deviceBll = new Scada.Business.IO_DEVICE(); Scada.Business.IO_COMMUNICATION commBll = new Scada.Business.IO_COMMUNICATION(); Scada.Business.IO_SERVER serverBll = new Scada.Business.IO_SERVER(); List <Scada.Model.SCADA_DRIVER> CommDrivers = null; List <Scada.Model.SCADA_DEVICE_DRIVER> DeviceDrivers = null; Interval = mInterval;//获取时间间隔 Servers = serverBll.GetModelList(""); Communications = commBll.GetModelList(""); Devices = deviceBll.GetModelList(""); CommDrivers = DriverBll.GetModelList(""); DeviceDrivers = DeviceDriverBll.GetModelList(""); for (int i = 0; i < Communications.Count; i++) { Communications[i].DriverInfo = CommDrivers.Find(x => x.Id == Communications[i].IO_COMM_DRIVER_ID); if (Communications[i].DriverInfo != null) { Communications[i].CommunicateDriver = DriverAssembly.CreateCommunicateDriver(Communications[i].DriverInfo); } Communications[i].Devices = Devices.FindAll(x => x.IO_COMM_ID == Communications[i].IO_COMM_ID && x.IO_SERVER_ID == Communications[i].IO_SERVER_ID); for (int j = 0; j < Communications[i].Devices.Count; j++) { Communications[i].Devices[j].DriverInfo = DeviceDrivers.Find(x => x.Id == Communications[i].Devices[j].DEVICE_DRIVER_ID); if (Communications[i].Devices[j].DriverInfo != null) { Communications[i].Devices[j].DeviceDrive = DriverAssembly.CreateDeviceDrive(Communications[i].Devices[j].DriverInfo); } } } }); }