/// <summary> /// /// </summary> /// <param name="pr"></param> /// <param name="xd2300"></param> private static void ProcessReadRecordIndex(XD2300Device xd2300, ParseResult pr) { // process read record index // UInt16 index = Convert.ToUInt16(pr.NameObjects.GetObject("RecordIndex")); // create new read record task // if (xd2300.IsLastRecordIndexValid()) { int readedIndex = xd2300.LastRecordIndex; for (int i = readedIndex + 1; i <= index; i++) { Opera readRecordOpera = xd2300.DeviceDefine.CreateOpera(XD2300OperaNames.ReadRecord); readRecordOpera.SendPart["RecordIndex"] = i; Task t = new Task(xd2300, readRecordOpera, new ImmediateStrategy()); YeHeCommuniServerApp.Default.CommuniSoft.TaskManager.Tasks.Add(t); } } else { // down // AddDownTask(xd2300); } // set new record index // xd2300.LastRecordIndex = index; }
/// <summary> /// /// </summary> /// <param name="task"></param> /// <param name="wl1"></param> /// <param name="wl2"></param> /// <param name="voltage"></param> private static void SetAndSaveDitchData(XD2300Device xd2300, DateTime dt, int wl1, int wl2, int voltage) { float instantFlux = CalcInstantFlux(xd2300.ID, dt, wl1, wl2); uint usedAmount = 0; //DitchDevice ditchDevice = task.Device as DitchDevice; xd2300.DitchData = new DitchData(dt, wl1, wl2, instantFlux, usedAmount, voltage); DB.DitchDataDBI.Insert(xd2300, dt, instantFlux, wl1, wl2, usedAmount, voltage); }
/// <summary> /// /// </summary> /// <param name="task"></param> private static void AddDownTask(XD2300Device xd2300) { log.Debug("add xd2300 down task"); // add down command // Opera downOP = xd2300.DeviceDefine.CreateOpera(XD2300OperaNames.Down); Task downTask = new Task(xd2300, downOP, new ImmediateStrategy()); YeHeCommuniServerApp.Default.CommuniSoft.TaskManager.Tasks.Add(downTask); }
/// <summary> /// /// </summary> /// <param name="task"></param> private void ProcessFail(Task task) { XD2300Device xd2300 = task.Device as XD2300Device; if (StringHelper.Equal(task.Opera.Name, XD2300OperaNames.ReadRecord)) { int recordIndex = Convert.ToInt32(task.Opera.SendPart["RecordIndex"]); if (recordIndex >= xd2300.LastRecordIndex) { AddDownTask(xd2300); } } }
/// <summary> /// /// </summary> /// <param name="task"></param> /// <param name="pr"></param> private static void ProcessSucess(Task task, ParseResult pr) { XD2300Device xd2300 = task.Device as XD2300Device; if (StringHelper.Equal(task.Opera.Name, OperaNames.ReadReal)) { ProcessReadReal(xd2300, pr); } else if (StringHelper.Equal(task.Opera.Name, XD2300OperaNames.ReadRecordIndex)) { ProcessReadRecordIndex(xd2300, pr); } else if (StringHelper.Equal(task.Opera.Name, XD2300OperaNames.ReadRecord)) { ProcessReadRecord(pr, xd2300); } }
/// <summary> /// /// </summary> /// <param name="task"></param> /// <param name="pr"></param> private static void ProcessReadReal(XD2300Device xd2300, ParseResult pr) { int wl1 = (Int16)pr.NameObjects.GetObject("WD1"); int wl2 = (Int16)pr.NameObjects.GetObject("WD2"); wl1 = wl1 / 10; wl2 = wl2 / 10; object objTemp = pr.NameObjects.GetObject("voltage"); int voltage = Convert.ToInt32(objTemp); voltage = voltage / 100; DateTime dt = DateTime.Now; SetAndSaveDitchData(xd2300, dt, wl1, wl2, voltage); //AddDownTask(xd2300); }
/// <summary> /// /// </summary> /// <param name="pr"></param> /// <param name="xd2300"></param> private static void ProcessReadRecord(ParseResult pr, XD2300Device xd2300) { int recordIndex = Convert.ToInt32(pr.NameObjects.GetObject("RecordIndex")); DateTime dt = Convert.ToDateTime(pr.NameObjects.GetObject("DT")); // 11 -> 2011 // dt = FixDateTime(dt); int wl1 = Convert.ToInt32(pr.NameObjects.GetObject("WL1")); int wl2 = Convert.ToInt32(pr.NameObjects.GetObject("WL2")); wl1 = wl1 / 10; wl2 = wl2 / 10; //DitchData d = new DitchData(wl1, wl2, instantFlux, 0, 0); SetAndSaveDitchData(xd2300, dt, wl1, wl2, 0); //XD2300Device xd2300 = task.Device as XD2300Device ; if (recordIndex >= xd2300.LastRecordIndex) { AddDownTask(xd2300); } }
static public XD2300Device Create(DeviceDefine dd, string name, int address) { XD2300Device d = new XD2300Device(dd, name, address); return(d); }