public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { try { using (SqlCommand cmd = new SqlCommand(_rtcmd, _con)) using (SqlDataAdapter dad = new SqlDataAdapter(cmd)) using (DataTable dtbl = new DataTable()) { dad.Fill(dtbl); using (DataView dvw = new DataView(dtbl, "", "T_TAG", DataViewRowState.CurrentRows)) { for (int i = 0; i < nNum; ++i) { int idx = dvw.Find(nrst[i].srcId); if (-1 == idx) continue; nrst[i].val = Convert.ToSingle(dvw[idx][1]); nrst[i].dtm = Convert.ToDateTime(dvw[idx][2]); } for (int i = 0; i < sNum; ++i) { int idx = dvw.Find(srst[i].srcId); if (-1 == idx) continue; srst[i].val = dvw[idx][1].ToString(); srst[i].dtm = Convert.ToDateTime(dvw[idx][2]); } } } return true; } catch (Exception ex) { err.WrtMsg(ex.Message); return false; } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { for (int i = 0; i < nNum; ++i) { float rval = 0; int istat = 0, timedate = 0; int ret = pisn_getsnapshot(numID[i], out rval, out istat, out timedate); if (0 == ret) { switch (numT[i]) { case 'R': nrst[i].val = rval; break; case 'I': case 'D': nrst[i].val = (float)istat; break; default: err.WrtMsg(string.Format("测点{0}类型不匹配.", nrst[i].srcId)); break; } nrst[i].dtm = GetSysTime(timedate); } } return true; }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { numID = new int[nNum]; strID = new int[sNum]; numT = new char[nNum]; strT = new char[sNum]; int i = 0; foreach (numInf nr in nrst) { pipt_findpoint(nr.srcId, ref numID[i]); if (-5 != numID[i]) pipt_pointtype(numID[i], ref numT[i]); else err.WrtMsg(string.Format("测点{0}不存在.", nr.srcId)); ++i; } i = 0; foreach (strInf sr in srst) { pipt_findpoint(sr.srcId, ref strID[i]); if (-5 != strID[i]) pipt_pointtype(strID[i], ref strT[i]); else err.WrtMsg(string.Format("测点{0}不存在.", sr.srcId)); ++i; } }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { string[] pt = new string[nNum]; DateTime[] dt = new DateTime[nNum]; uint[] stat = new uint[nNum]; float[] val = new float[nNum]; int i = 0; foreach (numInf nr in nrst) { pt[i] = nr.dstId; dt[i] = nr.dtm; stat[i] = 0; val[i] = nr.val; ++i; } HSApi.CS_UpdateValueByName(RTDBApi.HSApi.ConnStr + "@" + RTDBApi.HSApi.CurrentInstance, pt, dt, stat, val, 0); pt = new string[sNum]; dt = new DateTime[sNum]; stat = new uint[sNum]; string[] sval = new string[sNum]; i = 0; foreach (strInf sr in srst) { pt[i] = sr.dstId; dt[i] = sr.dtm; stat[i] = 0; sval[i] = sr.val; ++i; } HSApi.CS_UpdateValueByName_S(pt, dt, stat, sval); }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { byte[] pack = rtVal.PutData(nNum, nrst, sNum, srst); try {stSend.Send(pack);} catch (Exception) {} }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { SqlCommand cmd = new SqlCommand(string.Format("TRUNCATE TABLE {0}", _tblName), _con); try { cmd.ExecuteNonQuery(); } catch (Exception ex) { err.WrtMsg(ex.Message); _connected = false; } using (DataTable dtbl = new DataTable()) { dtbl.Columns.Add("tag", typeof(string)); dtbl.Columns.Add("val", typeof(string)); dtbl.Columns.Add("dtm", typeof(DateTime)); DataRow drow; foreach (numInf nr in nrst) { drow = dtbl.NewRow(); drow["tag"] = nr.dstId; drow["val"] = nr.val.ToString(); drow["dtm"] = nr.dtm; dtbl.Rows.Add(drow); } foreach (strInf sr in srst) { drow = dtbl.NewRow(); drow["tag"] = sr.dstId; drow["val"] = sr.val; drow["dtm"] = sr.dtm; dtbl.Rows.Add(drow); } using (SqlBulkCopy bcp = new SqlBulkCopy(_con)) { bcp.DestinationTableName = _tblName; bcp.ColumnMappings.Add("tag", _tagField); bcp.ColumnMappings.Add("val", _valField); bcp.ColumnMappings.Add("dtm", _dtmField); try { bcp.WriteToServer(dtbl); } catch (Exception ex) { err.WrtMsg(ex.Message); _connected = false; } } } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { try { using (SqlCommand cmd = new SqlCommand("SELECT a.TAG,a.VALUE,a.TIME FROM REALVALUE a INNER JOIN TAGCONFIG b ON b.TYPE=0 AND a.TAG=b.TAG ORDER BY b.ID_KEY", _con)) using (SqlDataAdapter dad = new SqlDataAdapter(cmd)) using (DataTable dtbl = new DataTable()) { dad.Fill(dtbl); using (DataView dvw = new DataView(dtbl, "", "TAG", DataViewRowState.CurrentRows)) { for (int i = 0; i < nrst.Length; ++i) { int idx = dvw.Find(nrst[i].srcId); if (-1 != idx) { nrst[i].val = Convert.ToSingle(dvw[idx][1]); nrst[i].dtm = Convert.ToDateTime(dvw[idx][2]); } } } } using (SqlCommand cmd = new SqlCommand("SELECT a.TAG,a.VALUE,a.TIME FROM REALVALUE a INNER JOIN TAGCONFIG b ON b.TYPE=1 AND a.TAG=b.TAG ORDER BY b.ID_KEY", _con)) using (SqlDataAdapter dad = new SqlDataAdapter(cmd)) using (DataTable dtbl = new DataTable()) { dad.Fill(dtbl); using (DataView dvw = new DataView(dtbl, "", "TAG", DataViewRowState.CurrentRows)) { for (int i = 0; i < srst.Length; ++i) { int idx = dvw.Find(srst[i].srcId); if (-1 != idx) { srst[i].val = dvw[idx][1].ToString(); srst[i].dtm = Convert.ToDateTime(dvw[idx][2]); } } } } return true; } catch (Exception ex) { DisConnect(); Connect(); err.WrtMsg(ex.Message); return false; } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { for (int i = 0; i < nNum; ++i) { double dval = 0; int time = 0; ushort stat = 0; int ret = RealTime.DNAGetRTShort(nrst[i].srcId, out dval, out time,out stat); if (0 == ret) { nrst[i].val = (float)dval; nrst[i].dtm = Utility.GetDateTime(time); } } return true; }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { SqlCommand cmd; cmd = new SqlCommand(string.Format("SELECT COUNT(*) FROM TAGCONFIG WHERE INTERFACE={0} AND TYPE=0 AND SENDFLAG=1", _interface), _con); rtNnum = (int)cmd.ExecuteScalar(); rtNid = new int[rtNnum]; cmd = new SqlCommand(string.Format("SELECT COUNT(*) FROM TAGCONFIG WHERE INTERFACE={0} AND TYPE=1 AND SENDFLAG=1", _interface), _con); rtSnum = (int)cmd.ExecuteScalar(); rtSid = new int[rtSnum]; cmd = new SqlCommand(string.Format("SELECT ID_KEY,TAG,DSC,SENDFLAG FROM TAGCONFIG WHERE INTERFACE={0} AND TYPE=0 ORDER BY ID_KEY", _interface), _con); using (SqlDataReader dtr = cmd.ExecuteReader()) { int iN = 0; int i = 0; while (dtr.Read()) { nrst[i].sn = i; nrst[i].srcId = dtr.GetString(1); nrst[i].dstId = dtr.GetString(1); nrst[i].desc = dtr.GetString(2); if (1 == dtr.GetByte(3)) rtNid[iN++] = i; ++i; } } cmd = new SqlCommand(string.Format("SELECT ID_KEY,TAG,DSC,SENDFLAG FROM TAGCONFIG WHERE INTERFACE={0} AND TYPE=1 ORDER BY ID_KEY", _interface), _con); using (SqlDataReader dtr = cmd.ExecuteReader()) { int iS = 0; int i = 0; while (dtr.Read()) { srst[i].sn = nNum + i; srst[i].srcId = dtr.GetString(1); srst[i].dstId = dtr.GetString(1); srst[i].desc = dtr.GetString(2); if (1 == dtr.GetByte(3)) rtSid[iS++] = i; ++i; } } cmd.Dispose(); }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { int i = 0; foreach (numInf nr in nrst) { int ret = 0; switch (numT[i]) { case 'R': ret = pisn_putsnapshot(numID[i], nr.val, 0, GetIntTime(nr.dtm)); break; case 'I': case 'D': ret = pisn_putsnapshot(numID[i], 0, (int)nr.val, GetIntTime(nr.dtm)); break; default: break; } if (0 != ret) err.WrtMsg(string.Format("测点{0}写入失败,错误号:{1}.", nr.dstId,ret.ToString())); ++i; } }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { SqlCommand cmd; cmd = new SqlCommand("SELECT ID_KEY,TAG,DSC FROM TAGCONFIG WHERE TYPE=0 AND SENDFLAG=1 ORDER BY ID_KEY", _con); using (SqlDataReader dtr = cmd.ExecuteReader()) { int i = 0; while (dtr.Read()) { nrst[i].sn = i; nrst[i].srcId = dtr.GetString(1); nrst[i].dstId = dtr.GetString(1); nrst[i].desc = dtr.GetString(2); ++i; } } cmd = new SqlCommand("SELECT ID_KEY,TAG,DSC FROM TAGCONFIG WHERE TYPE=1 AND SENDFLAG=1 ORDER BY ID_KEY", _con); using (SqlDataReader dtr = cmd.ExecuteReader()) { int i = 0; while (dtr.Read()) { srst[i].sn = nNum + i; srst[i].srcId = dtr.GetString(1); srst[i].dstId = dtr.GetString(1); srst[i].desc = dtr.GetString(2); ++i; } } cmd.Dispose(); }
/// <summary> /// 对二进制串解报 /// </summary> /// <param name="bytetemp"></param> /// <param name="con"></param> public int UnpackReceive(byte[] bytetemp, Control con,ref ASDUClass.FunType ft, ref ASDUClass.TransRes tr) { try { if ((bytetemp.Length == 1) && (bytetemp[0] == 0xe5)) { //收到 E5 return 1; } if ((bytetemp.Length == 5) && (bytetemp[0] == 0x10) && (bytetemp[4] == 0x16)) { Frame_101 temp = new Frame_101(bytetemp); if (temp.GetControl().PRM == false) { con.Copy(con, temp.GetControl()); Console.WriteLine("RX: ACD:{0} DFC:{1} FUNCTION:{2}\r\n", temp.GetControl().ACD, temp.GetControl().DFC, temp.GetControl().function_0); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: ACD:{0} DFC:{1} FUNCTION:{2}\r\n", temp.GetControl().ACD, temp.GetControl().DFC, temp.GetControl().function_0); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } //收到固定长度帧 return 2; } } if (bytetemp.Length > 5) { Frame_101 vtemp = new Frame_101(bytetemp); if ((vtemp != null) && (vtemp.GetControl().PRM == false)) { Console.WriteLine("RX: ACD:{0} DFC:{1} FUNCTION:{2} Time:{3} ASDUType:{4} Res:{5}", vtemp.GetControl().ACD, vtemp.GetControl().DFC, vtemp.GetControl().function_0, DateTime.Now, vtemp.GetAsduType(), vtemp.Res); //Console.WriteLine("RX: {0}", vtemp.ToString()); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: ACD:{0} DFC:{1} FUNCTION:{2} ASDUType:{3} Res:{4}", vtemp.GetControl().ACD, vtemp.GetControl().DFC, vtemp.GetControl().function_0, vtemp.GetAsduType(), vtemp.Res); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } con.Copy(con, vtemp.GetControl()); ft = vtemp.GetAsduType(); tr = vtemp.Res; var datas = vtemp.GetData(); foreach (var data in datas) { //if (data.Addr == 0) continue; Console.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString() + " " + "time:" + data.Time.ToString()); //try //{ // sw = File.AppendText(logfile); // sw.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + // "data:" + data.Data.ToString() + " " + // "time:" + data.Time.ToString()); // sw.Close(); //} //catch (Exception ex) //{ // Console.WriteLine(ex.Message.ToString()); //} numInf numtemp = new numInf(); if (find.TryGetValue(data.Addr, out numtemp)) { numtemp.val = Convert.ToSingle(data.Data); if (data.Time != null) { numtemp.dtm = Convert.ToDateTime(data.Time); } else numtemp.dtm = DateTime.Now; find.Remove(data.Addr); find.Add(data.Addr, numtemp); } else { numtemp.val = Convert.ToSingle(data.Data); if (data.Time != null) { numtemp.dtm = Convert.ToDateTime(data.Time); } else numtemp.dtm = DateTime.Now; find.Add(data.Addr, numtemp); } } Console.WriteLine("\n"); try { sw = File.AppendText(logfile); sw.WriteLine("\r\n"); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } //收到可变长度帧 return 3; } } //收到错误帧 return 4; } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); return 4; } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { return rtVal.GetData(nNum, nrst, sNum, srst); }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { if (find.Count < 1) return false; int index = 0; numInf numtemp = new numInf(); for (int i = 0; i < nrst.Length; i++) { try { index = int.Parse(nrst[i].srcId); if (find.TryGetValue(index, out numtemp)) { float rat = 1.0f, dev = 0.0f; if (nrst[i].ratio.Contains("+")) { string[] ss = nrst[i].ratio.Split('+'); rat = float.Parse(ss[0]); dev = float.Parse(ss[1]); } else if (nrst[i].ratio.Contains("-")) { string[] ss = nrst[i].ratio.Split('-'); rat = float.Parse(ss[0]); dev = float.Parse(ss[1]) * (-1); } else { rat = float.Parse(nrst[i].ratio); dev = 0.0f; } nrst[i].val = numtemp.val * rat + dev; if (numtemp.dtm.Year == 1) nrst[i].dtm = DateTime.Now; else nrst[i].dtm = numtemp.dtm; } } catch (Exception e) { try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + e.ToString()); sw.Close(); } catch { } continue; } } return true; }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { try { MyItems = MyGroup.OPCItems; MyItem = new OPCItem[nNum + sNum]; numinf = new numInf[nNum]; strinf = new strInf[sNum]; numNum = nNum; strNum = sNum; int i = 0; foreach (numInf nn in nrst) { try { MyItem[i] = MyItems.AddItem(nn.srcId, i);//byte i++; } catch { try { sw = File.AppendText(logfile); sw.WriteLine("初始化点" + nn.srcId + "失败!"); sw.Close(); } catch { } //MyItem[i] = MyItems.AddItem(nrst[i - 1].srcId, i); MyItem[i] = MyItem[i - 1]; i++; continue; } } foreach (strInf ss in srst) { try { MyItem[i] = MyItems.AddItem(ss.srcId, i);//byte i++; } catch { try { sw = File.AppendText(logfile); sw.WriteLine("初始化点" + ss.srcId + "失败!"); sw.Close(); } catch { } MyItem[i] = MyItem[i - 1]; i++; continue; } } object ItemValuestemp; object Qualities; object TimeStamps;//同步读的临时变量:值、质量、时间戳 for (int ii = 0; ii < nNum + sNum; ii++) { MyItem[ii].Read(1, out ItemValuestemp, out Qualities, out TimeStamps);//同步读,第一个参数只能为1或2 if (ii < nNum) { numinf[ii].val = Convert.ToSingle(ItemValuestemp);//转换后获取item值 numinf[ii].dtm = Convert.ToDateTime(TimeStamps); } else { strinf[ii - numNum].val = Convert.ToString(ItemValuestemp);//转换后获取item值 strinf[ii - numNum].dtm = Convert.ToDateTime(TimeStamps); } } MyGroup.IsSubscribed = true;//使用订阅功能,即可以异步,默认false try { sw = File.AppendText(logfile); sw.WriteLine("初始化点成功!"); sw.Close(); } catch { } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
/// <summary> /// 后台线程提交数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { try { FileInfo file = new FileInfo(logfile); long size = file.Length;//文件大小。byte if (size > 1024000) { StreamWriter sw1 = new StreamWriter(logfile); string w = ""; sw1.Write(w); sw1.Close(); } } catch { } if (e.ProgressPercentage == -1) { APDUClass temp = new APDUClass(e.UserState as byte[]); APCIClass.UISFormat dataFormat = temp.GetApciType(); if (temp != null) { try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " TX: " + "Type:" + temp.GetAsduType().ToString() + " Res:" + temp.Res.ToString() + " SR:" + temp.GetSR().ToString() + " NR:" + temp.GetNR().ToString() + "\r\n" + temp.ApciToString() + temp.AsduToString() + "\r\n"); sw.Close(); } catch {} Console.WriteLine(DateTime.Now.ToString() + " TX: " + "Type:" + temp.GetAsduType().ToString() + " Res:" + temp.Res.ToString() + " SR:" + temp.GetSR().ToString() + " NR:" + temp.GetNR().ToString() + "\n" + temp.ApciToString() + temp.AsduToString() + "\r\n"); } } else if (e.ProgressPercentage > 0) { byte[] receive = new byte[e.ProgressPercentage]; Array.Copy(e.UserState as byte[], receive, e.ProgressPercentage); if (receive[0] == 0x68) { int i = 0; while (i < receive.Length) { try { int recevlen = receive[i + 1]; byte[] receivetemp = new byte[recevlen +2]; Array.Copy(receive, i, receivetemp, 0, receivetemp.Length); i = i + receivetemp.Length; APDUClass temp = new APDUClass(receivetemp); APCIClass.UISFormat dataFormat = temp.GetApciType(); //if (dataFormat == APCIClass.UISFormat.I && !(nr > temp.GetSR())) if (dataFormat == APCIClass.UISFormat.I) { nr = (short)temp.GetSR(); if (nr > short.MaxValue) { nr = 0; } nrflag = true; if (((nr % m_config_104.m_AckNW) == m_config_104.m_AckNW - 1)||(sr == 0)) { SendList.Enqueue(new APDUClass(new APCIClassSFormat(nr), null)); for (int id = 0; id < SendList.Count - 1; id++) { APDUClass tempsend = SendList.Dequeue(); SendList.Enqueue(tempsend); } nrflag = false; } if ((temp.GetAsduType() == ASDUClass.FunType.CalAll) && (temp.Res == ASDUClass.TransRes.ActiveEnd)) { ASDUClass calymBuffer = new ASDUClass(); calymBuffer.Pack(ASDUClass.TransRes.Active, ASDUClass.FunType.CalEnergyPulse, m_config_104.m_PublicAddress); SendList.Enqueue(new APDUClass(new APCIClassIFormat(sr++, nr), calymBuffer)); ASDUClass readymBuffer = new ASDUClass(); readymBuffer.SetData_QCC(0x05, m_config_104.m_PublicAddress); SendList.Enqueue(new APDUClass(new APCIClassIFormat(sr++, nr), readymBuffer)); } } if (dataFormat == APCIClass.UISFormat.U) { if ((APCIClassUFormat.UFormatType)temp.GetApci().GetControlByte() == APCIClassUFormat.UFormatType.StartSet) SendList.Enqueue(new APDUClass(new APCIClassUFormat(APCIClassUFormat.UFormatType.StartConfirm), null)); if ((APCIClassUFormat.UFormatType)temp.GetApci().GetControlByte() == APCIClassUFormat.UFormatType.TestSet) SendList.Enqueue(new APDUClass(new APCIClassUFormat(APCIClassUFormat.UFormatType.TestConfirm), null)); if ((APCIClassUFormat.UFormatType)temp.GetApci().GetControlByte() == APCIClassUFormat.UFormatType.StopSet) SendList.Enqueue(new APDUClass(new APCIClassUFormat(APCIClassUFormat.UFormatType.StopConfirm), null)); if ((APCIClassUFormat.UFormatType)temp.GetApci().GetControlByte() == APCIClassUFormat.UFormatType.StartConfirm) { ASDUClass calBuffer = new ASDUClass(); calBuffer.Pack(ASDUClass.TransRes.Active, ASDUClass.FunType.CalAll, m_config_104.m_PublicAddress); SendList.Enqueue(new APDUClass(new APCIClassIFormat(sr++, nr), calBuffer)); } } ////对方发来确认帧,在核实确认序号等于或小于本分的I帧发送序号,再次发送I帧 ////此部分在“实现发送控制命令”时,给以完成。 //else if (dataFormat == APCIClass.UISFormat.S) //{ // if (nr > short.MaxValue) // { // nr = 0; // } // Console.WriteLine(dataFormat.ToString()); // SendList.Enqueue(new APDUClass(new APCIClassSFormat(nr++), null)); //} if (temp != null) { try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: " + "Type:" + temp.GetAsduType().ToString() + " Res:" + temp.Res.ToString() + " SR:" + temp.GetSR().ToString() + " NR:" + temp.GetNR().ToString() + "\r\n" + BitConverter.ToString(receivetemp, 0).Replace("-", " ")); sw.Close(); } catch { } Console.WriteLine(DateTime.Now.ToString() + " RX: " + "Type:" + temp.GetAsduType().ToString() + " Res:" + temp.Res.ToString() + " SR:" + temp.GetSR().ToString() + " NR:" + temp.GetNR().ToString() + "\n" + BitConverter.ToString(receivetemp, 0).Replace("-", " ")); var datas = temp.GetData(); foreach (var data in datas) { if (data.Addr == 0) continue; try { sw = File.AppendText(logfile); sw.WriteLine("RX " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString() + " " + "time:" + data.Time.ToString()); sw.Close(); } catch { } //Console.WriteLine("RX " + "addr:" + data.Addr.ToString() + " " + // "data:" + data.Data.ToString() + " " + // "time:" + data.Time.ToString()); numInf numtemp = new numInf(); if (find.TryGetValue(data.Addr, out numtemp)) { numtemp.val = Convert.ToSingle(data.Data); if (data.Time != null) { numtemp.dtm = Convert.ToDateTime(data.Time); } else numtemp.dtm = DateTime.Now; find.Remove(data.Addr); find.Add(data.Addr, numtemp); } else { numtemp.val = Convert.ToSingle(data.Data); if (data.Time != null) { numtemp.dtm = Convert.ToDateTime(data.Time); } else numtemp.dtm = DateTime.Now; find.Add(data.Addr, numtemp); } } try { sw = File.AppendText(logfile); sw.WriteLine("\r\n"); sw.Close(); } catch { } Console.WriteLine("\r\n"); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } } } } }
public void SetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { SqlCommand cmd = new SqlCommand(string.Format("DELETE t1 FROM REALVALUE t1 INNER JOIN TAGCONFIG t2 ON t1.TAG=t2.TAG AND t2.INTERFACE={0}", _interface), _con); try { cmd.ExecuteNonQuery(); } catch (Exception ex) { DisConnect(); Connect(); err.WrtMsg(ex.Message); } using (DataTable dtbl = new DataTable()) { dtbl.Columns.Add("tag", typeof(string)); dtbl.Columns.Add("val", typeof(string)); dtbl.Columns.Add("dtm", typeof(DateTime)); foreach (int id in rtNid) { DataRow drow = dtbl.NewRow(); drow["tag"] = nrst[id].dstId; drow["val"] = nrst[id].val.ToString(); drow["dtm"] = nrst[id].dtm; dtbl.Rows.Add(drow); } foreach (int id in rtSid) { DataRow drow = dtbl.NewRow(); drow["tag"] = srst[id].dstId; drow["val"] = srst[id].val; drow["dtm"] = srst[id].dtm; dtbl.Rows.Add(drow); } using (SqlBulkCopy bcp = new SqlBulkCopy(_con)) { bcp.DestinationTableName = "REALVALUE"; bcp.ColumnMappings.Add("tag", "TAG"); bcp.ColumnMappings.Add("val", "VALUE"); bcp.ColumnMappings.Add("dtm", "TIME"); try { bcp.WriteToServer(dtbl); } catch (Exception ex) { DisConnect(); Connect(); err.WrtMsg(ex.Message); } } } if (0 == frmMain.bufMod / 2) return; using (DataTable dtbl = new DataTable()) { dtbl.Columns.Add("tag", typeof(string)); dtbl.Columns.Add("val", typeof(string)); dtbl.Columns.Add("dtm", typeof(DateTime)); foreach (numInf nr in nrst) { DataRow drow = dtbl.NewRow(); drow["tag"] = nr.dstId; drow["val"] = nr.val.ToString(); drow["dtm"] = nr.dtm; dtbl.Rows.Add(drow); } foreach (strInf sr in srst) { DataRow drow = dtbl.NewRow(); drow["tag"] = sr.dstId; drow["val"] = sr.val; drow["dtm"] = sr.dtm; dtbl.Rows.Add(drow); } using (SqlBulkCopy bcp = new SqlBulkCopy(_con)) { bcp.DestinationTableName = "HISTVALUE"; bcp.ColumnMappings.Add("tag", "TAG"); bcp.ColumnMappings.Add("val", "VALUE"); bcp.ColumnMappings.Add("dtm", "TIME"); try { bcp.WriteToServer(dtbl); } catch (Exception ex) { DisConnect(); Connect(); err.WrtMsg(ex.Message); } } } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { try { for (int i = 0; i < nNum; i++) { try { nrst[i].val = numinf[i].val * Convert.ToSingle(nrst[i].ratio); nrst[i].dtm = numinf[i].dtm.AddHours(add_hours); } catch (Exception e) { try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + e.ToString()); sw.Close(); } catch { } continue; } } for (int j = 0; j < sNum; j++) { try { if (strinf[j].val == null) { srst[j].val = "0"; srst[j].dtm = DateTime.Now; } else { srst[j].val = strinf[j].val; srst[j].dtm = strinf[j].dtm.AddHours(add_hours); } } catch (Exception e) { try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + e.ToString()); sw.Close(); } catch { } continue; } } } catch (Exception e) { Console.WriteLine(e.ToString()); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + e.ToString()); sw.Close(); } catch { } return false; } try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString()+"\tUpdate Value!"); sw.Close(); } catch { } return true; }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { dataType.Clear(); for (int i = 0; i < nrst.Length; i++) { string[] arry = nrst[i].srcId.Split('_'); dataType.Add(arry[0]+int.Parse(arry[1]).ToString("d4"), nrst[i].datatype); if (nrst[i].srcId.StartsWith("0")) { if (startCoilAddr > int.Parse(arry[1])) startCoilAddr = int.Parse(arry[1]); numCoil++; } if (nrst[i].srcId.StartsWith("1")) { int itemp = int.Parse(arry[1]); if (startInputAddr > itemp) startInputAddr = itemp; numInput++; } if (nrst[i].srcId.StartsWith("3")) { int itemp = int.Parse(arry[1]); if (startInputRegAddr > itemp) startInputRegAddr = itemp; switch (nrst[i].datatype) { case 1: case 5: numInputReg += 1; break; case 2: case 3: case 6: case 7: case 9: case 10: numInputReg += 2; break; case 4: case 8: numInputReg += 4; break; } } if (nrst[i].srcId.StartsWith("4")) { int itemp = int.Parse(arry[1]); if (startHoldRegAddr > itemp) startHoldRegAddr = itemp; switch (nrst[i].datatype) { case 1: case 5: numHoldReg += 1; break; case 2: case 3: case 6: case 7: case 9: case 10: numHoldReg += 2; break; case 4: case 8: numHoldReg += 4; break; } } } }
public bool GetRtValue(int nNum, numInf[] nrst, int sNum, strInf[] srst) { if (0 == DateTime.Now.Second % 20 && flag) { for (int i = 0; i < fileName.Length; ++i) { if (DownLoad(i)) { GetFileData(i); cfg.SetVal("Data", "LastTime", string.Join(";", lastDT)); } } try { for (int i = 0; i < nrst.Length; ++i) { int idx = nrst[i].sn; float.TryParse(unit[fno[idx]][rno[idx]][cno[idx]], out nrst[i].val); nrst[i].dtm=DateTime.Now; } } catch (Exception ex) { err.WrtMsg(ex.Message); } flag = false; return true; } else { flag = (0 != DateTime.Now.Second % 20); return false; } }
public byte[] PutData(int nNum, numInf[] nrst, int sNum, strInf[] srst) { int nlen = 10 * nNum; byte[] numbyt = new byte[nlen]; int numidx = 0; foreach (numInf nr in nrst) { Buffer.BlockCopy(BitConverter.GetBytes((short)nr.sn), 0, numbyt, numidx, 2); Buffer.BlockCopy(BitConverter.GetBytes((int)(nr.dtm - new DateTime(1970, 1, 1)).TotalSeconds), 0, numbyt, numidx + 2, 4); Buffer.BlockCopy(BitConverter.GetBytes(nr.val), 0, numbyt, numidx + 6, 4); numidx += 10; } int slen = 0; slen = 8 * sNum; byte[][] bval = new byte[sNum][]; int i = 0; foreach (strInf sr in srst) { bval[i] = Encoding.Default.GetBytes(sr.val); slen += bval[i++].Length; } byte[] strbyt = new byte[slen]; int stridx = 0; i = 0; foreach (strInf sr in srst) { Buffer.BlockCopy(BitConverter.GetBytes((short)sr.sn), 0, strbyt, stridx, 2); Buffer.BlockCopy(BitConverter.GetBytes((int)(sr.dtm - new DateTime(1970, 1, 1)).TotalSeconds), 0, strbyt, stridx + 2, 4); Buffer.BlockCopy(BitConverter.GetBytes((short)bval[i].Length), 0, strbyt, stridx + 6, 2); Buffer.BlockCopy(bval[i], 0, strbyt, stridx + 8, bval[i].Length); stridx += 8 + bval[i++].Length; } byte[] data = new byte[4 + nlen + slen]; Buffer.BlockCopy(BitConverter.GetBytes((short)nNum), 0, data, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)sNum), 0, data, 2, 2); Buffer.BlockCopy(numbyt, 0, data, 4, nlen); Buffer.BlockCopy(strbyt, 0, data, 4 + nlen, slen); Compress(ref data); _packSize = 8 + data.Length + 2; _pack = new byte[_packSize]; Buffer.BlockCopy(_head, 0, _pack, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(_packSize), 0, _pack, 2, 4); _pack[6] = frmMain.bufMod; Buffer.BlockCopy(data, 0, _pack, 8, data.Length); Buffer.BlockCopy(BitConverter.GetBytes(CRC16(_pack, 8, _packSize - 10)), 0, _pack, _packSize - 2, 2); return _pack; }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { fno = new int[nNum + sNum]; rno = new int[nNum + sNum]; cno = new int[nNum + sNum]; string[] tmp; foreach (numInf nr in nrst) { tmp = nr.srcId.Split('_'); int.TryParse(tmp[0], out fno[nr.sn]); int.TryParse(tmp[1], out rno[nr.sn]); int.TryParse(tmp[2], out cno[nr.sn]); } foreach (strInf sr in srst) { tmp = sr.srcId.Split('_'); int.TryParse(tmp[0], out fno[sr.sn]); int.TryParse(tmp[1], out rno[sr.sn]); int.TryParse(tmp[2], out cno[sr.sn]); } }
/// <summary> /// 对二进制串解报 /// </summary> public void UnpackReceive(byte[] bytetemp, int startAddr, int len) { try { //if (tvar is RTU) if (m_config_Modbus.m_ModbusType == "RTU") { if (bytetemp[2] + 5 == bytetemp.Length) { RTU vtemp = new RTU(bytetemp, len, startAddr,m_type); if ((vtemp.Responseread != null) && (vtemp.Responseread.ByteNum != 0)) { Console.WriteLine("RX: FC:{0} ", vtemp.Responseread.FC); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: FC:{0} ", vtemp.Responseread.FC); sw.Close(); } catch { } var datas = vtemp.GetData(); foreach (var data in datas) { //if (data.Addr == 0) continue; Console.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); try { sw = File.AppendText(logfile); sw.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); sw.Close(); } catch { } numInf numtemp = new numInf(); if (find.TryGetValue(data.Addr, out numtemp)) { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Remove(data.Addr); find.Add(data.Addr, numtemp); } else { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Add(data.Addr, numtemp); } } Console.WriteLine("\n"); try { sw = File.AppendText(logfile); sw.WriteLine("\r\n"); sw.Close(); } catch { } }//end if ((vtemp.Responseread != null) && (vtemp.Responseread.ByteNum != 0)) }//end if (bytetemp[2] + 5 == bytetemp.Length) }//end if (tvar is RTU) //if (tvar is ASCII) if (m_config_Modbus.m_ModbusType == "ASCII") { ASCII vtemp = new ASCII(bytetemp, len, startAddr, m_type); if ((vtemp.AscRtu.Responseread != null) && (vtemp.AscRtu.Responseread.ByteNum != 0)) { Console.WriteLine("RX: FC:{0} ", vtemp.AscRtu.Responseread.FC); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: FC:{0} ", vtemp.AscRtu.Responseread.FC); sw.Close(); } catch { } var datas = vtemp.AscRtu.GetData(); foreach (var data in datas) { //if (data.Addr == 0) continue; Console.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); try { sw = File.AppendText(logfile); sw.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); sw.Close(); } catch { } numInf numtemp = new numInf(); if (find.TryGetValue(data.Addr, out numtemp)) { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Remove(data.Addr); find.Add(data.Addr, numtemp); } else { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Add(data.Addr, numtemp); } } Console.WriteLine("\n"); try { sw = File.AppendText(logfile); sw.WriteLine("\r\n"); sw.Close(); } catch { } } }//if (tvar is ASCII) }// end try catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); //异常处理 throw ex; } }
public bool GetData(int nNum, numInf[] nrst, int sNum, strInf[] srst) { byte[] tmp = null; if (null == (tmp = Ring[iget])) return false; Ring[iget++] = null; iget %= MAX_LEN; int _size = tmp.Length; frmMain.bufMod = tmp[6]; byte[] data = new byte[_size - 8]; Buffer.BlockCopy(tmp, 8, data, 0, _size - 10); Uncompress(ref data); try { int idx = 4; for (int i = 0; i < nrst.Length; ++i) { nrst[i].sn = BitConverter.ToInt16(data, idx); nrst[i].dtm = new DateTime(1970, 1, 1).AddSeconds((BitConverter.ToInt32(data, idx + 2))); nrst[i].val = BitConverter.ToSingle(data, idx + 6); idx += 10; } int strlen = 0; for (int i = 0; i < srst.Length; ++i) { srst[i].sn = BitConverter.ToInt16(data, idx); srst[i].dtm = new DateTime(1970, 1, 1).AddSeconds((BitConverter.ToInt32(data, idx + 2))); strlen = BitConverter.ToUInt16(data, idx + 6); srst[i].val = Encoding.Default.GetString(data, idx + 8, strlen); idx += 8 + strlen; } } catch (Exception ex) { err.WrtMsg(ex.Message); return false; } return true; }
/// <summary> /// 后台线程提交数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == -1) { byte[] sendbuffer = e.UserState as byte[]; Console.WriteLine("TX: " + BitConverter.ToString(sendbuffer, 0).Replace("-", " ")); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " TX: " + BitConverter.ToString(sendbuffer, 0).Replace("-", " ")); sw.Close(); } catch(Exception ex) { Console.WriteLine(ex.ToString()); } } else if (e.ProgressPercentage > 0) { byte[] receive = new byte[e.ProgressPercentage]; Array.Copy(e.UserState as byte[], receive, e.ProgressPercentage); Console.WriteLine("RX: " + BitConverter.ToString(receive, 0).Replace("-", " ")); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: " + BitConverter.ToString(receive, 0).Replace("-", " ")); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } try { byte[] btemp = new byte[2] { receive[5], receive[4] }; int bufferlen = BitConverter.ToInt16(btemp, 0) + 6; if (bufferlen == receive.Length)//报文长度正确 { TCP tcptemp = new TCP(receive, m_len, m_startAddr, dataType); if ((tcptemp.Responseread != null) && (tcptemp.Responseread.ByteNum != 0)) { Console.WriteLine("RX: FC:{0} ", tcptemp.Responseread.FC); try { sw = File.AppendText(logfile); sw.WriteLine(DateTime.Now.ToString() + " RX: FC:{0} ", tcptemp.Responseread.FC); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } var datas = tcptemp.GetData(); foreach (var data in datas) { //if (data.Addr == 0) continue; Console.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); try { sw = File.AppendText(logfile); sw.WriteLine("RX: " + "addr:" + data.Addr.ToString() + " " + "data:" + data.Data.ToString()); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } numInf numtemp = new numInf(); if (find.TryGetValue(data.Addr, out numtemp)) { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Remove(data.Addr); find.Add(data.Addr, numtemp); } else { numtemp.val = Convert.ToSingle(data.Data); numtemp.dtm = DateTime.Now; find.Add(data.Addr, numtemp); } } sendFlag = true; Console.WriteLine("\n"); try { sw = File.AppendText(logfile); sw.WriteLine("\r\n"); sw.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }//end if ((tcptemp.Responseread != null) && (tcptemp.Responseread.ByteNum != 0)) }//end if (bufferlen == buffer.Length) }// end try catch (Exception ex) { Console.WriteLine(ex.ToString()); //System.Diagnostics.Debug.WriteLine(ex.ToString()); } } }