public CPublicVar() { CB23 = frmMain.staComm.GetVarByStaNameVarName("NJ301", "B_23"); nVarDI187 = frmMain.staComm.GetVarByStaNameVarName("NJ301", "DI187"); nVarU[0] = frmMain.staComm.GetVarByStaNameVarName("NJ301", "AI01"); nVarU[1] = frmMain.staComm.GetVarByStaNameVarName("NJ301", "AI02"); nVarU[2] = frmMain.staComm.GetVarByStaNameVarName("NJ301", "AI06"); for (int i = 0; i < 3; i++) { nVarPV[i] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "PV"); nVarMode[i] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "Mode"); nVarPVW[i] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "PV_W"); nVarI[i] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "I"); nVarIW[i] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "I_W"); nVarPID[i, 0] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "PID_P"); nVarPID[i, 1] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "PID_I"); nVarPID[i, 2] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[i], "PID_D"); CStation Sta = frmMain.staComm.GetStaByStaName(sListOLName[i]); nOLSta[i] = (CProtcolModbusTCP)Sta; } nVarPLCI[0] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[0], "I"); nVarPLCI[1] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[1], "I_1"); nVarPLCI[2] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[1], "I_3"); nVarPLCI[3] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[1], "I_4"); nVarPLCI[4] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[1], "I_6"); nVarPLCI[5] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[2], "I_1"); nVarPLCI[6] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[2], "I_3"); nVarPLCI[7] = frmMain.staComm.GetVarByStaNameVarName(sListOLName[2], "I_4"); LoadXml(); }
private void frmChild_MouseDown(object sender, MouseEventArgs e)//鼠标点击 { int i = 0; PointF MouseP = new PointF((e.X - frmMain.iLeftD) / frmMain.iWinFoucs, (e.Y - frmMain.iTopD) / frmMain.iWinFoucs); if (e.Button == System.Windows.Forms.MouseButtons.Left) { for (i = ListTuYuan.Count - 1; i > -1; i--) { CBase obj = (CBase)ListTuYuan[i]; if (obj.ElementType == LCElementType.Ring) { if (obj.Selected(MouseP)) { CStation Sta = frmMain.staComm.GetStaByStaName("NJ301"); CProtcolFINS SPLC = (CProtcolFINS)Sta; if (SPLC.System[0] == 7) { return; } CRing nRing = (CRing)obj; string sVar = "AV" + nRing.ShowText.PadLeft(3, '0'); SPLC.SendAODO(sVar, 0, "DO"); break; } } } } }
//串口收发线程 private void CTPortThread() { while (true) { int index = WaitHandle.WaitAny(PortEvents); switch (index) { case 0: //[0]串口接收数据 Thread.Sleep(10); try { int n = n_SerialPort.BytesToRead; //先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte[n]; //声明一个临时数组存储当前来的串口数据 //received_count += n;//增加接收计数 n_SerialPort.Read(buf, 0, n); //读取缓冲数据 if (n > 0) { lock (this) { cRecvBuff.AddBuff(buf); int i = LastSendMsg.iStaIndex; CStation nSta = ((CStation)ListStation[i]); if (nSta.PortDataRecv(LastSendMsg, cRecvBuff)) { GetSendMsg(); } } } } catch (Exception e) { Debug.WriteLine("串口接收" + e.Message); } //iTemp = 0; break; case 1: //[1]串口发送数据 try { int j = LastSendMsg.iStaIndex; CStation jSta = ((CStation)ListStation[j]); n_SerialPort.Write(LastSendMsg.sSendMsg.DataBuffer, 0, LastSendMsg.sSendMsg.Length); DelayTime = 0; } catch (Exception e) { Debug.WriteLine("串口发送" + e.Message); } break; case 2: //[2]停止线程 break; default: break; } Thread.Sleep(10); } //Debug.WriteLine("quit" ); }
//从StationInf_Table.xml中获取子站信息,再从sPrjName中获取对应的端口名称 public bool GetStationsFromXML()//获取子站信息 { XmlDocument MyXmlDoc = new XmlDocument(); MyXmlDoc.Load(sIOPath); string xpath = "IO/StationInf_Table"; XmlElement childNode = (XmlElement)MyXmlDoc.SelectSingleNode(xpath); foreach (XmlElement node in childNode.ChildNodes) { string sPortName = node.GetAttribute("PortName"); foreach (CPort nPort in ListPort) { if (sPortName == nPort.PortName) { CStation nSta = (CStation)CDAModule.CreateStation(nPort.PortType, nPort.PortProtocol); if (nSta == null) { break; } nSta.LoadFromNode(node); nSta.staAlarm = staAlarm; ListStation.Add(nSta); nPort.ListStation.Add(nSta); nSta.iPortIndex = ListPort.IndexOf(nPort); nSta.iStaIndex = nPort.ListStation.IndexOf(nSta); break; } } } return(true); }
public void nCon_ValueChanged(object sender, EventArgs e)//微调框数值改变 { NumericUpDown nCon = (NumericUpDown)sender; string sVar = nCon.Name; int iValue = (int)nCon.Value; CStation Sta = frmMain.staComm.GetStaByStaName("NJ301"); CProtcolFINS SPLC = (CProtcolFINS)Sta; SPLC.SendAODO(sVar, iValue, "AO"); }
public static string InsertToText(string str1, CStation nSta, CVar nVar) { if (str1.Length > 0) { str1 = str1.Replace("[SN]", nSta.Name); str1 = str1.Replace("[SD]", nSta.Description); str1 = str1.Replace("[VN]", nVar.Name); str1 = str1.Replace("[VD]", nVar.Description); } return(str1); }
private void UpdateTreelist(TreeNodeCollection aNodes) { int i = 0; foreach (TreeNode item in aNodes)//遍历Treeview的所有节点 { string sType = item.Name.Substring(0, 3); switch (sType) { case "Prj": break; case "Prt": i = int.Parse(item.Name.Substring(4)); CPort nPort = (CPort)frmMain.staComm.ListPort[i]; if (nPort != null) { if (nPort.bOpen) { item.BackColor = Color.Lime; } else { item.BackColor = Color.Red; } } break; case "Sta": i = int.Parse(item.Name.Substring(4)); CStation nSta = (CStation)frmMain.staComm.ListStation[i]; if (nSta != null) { if (nSta.CommStateE == ECommSatate.Unknown) { item.BackColor = Color.White; } else if (nSta.CommStateE == ECommSatate.Failure) { item.BackColor = Color.Red; } else if (nSta.CommStateE == ECommSatate.Normal) { item.BackColor = Color.Lime; } } break; default: break; } UpdateTreelist(item.Nodes); } }
//定时器 public void CommTimerCall(object source, System.Timers.ElapsedEventArgs e) { if (!bOpen) { return; } try { DelayTime += 100; //Debug.WriteLine(iDelayTime); if (LastSendMsg.QuLen <= 0) { return; } if (PortProtocol == "真空硅901P") { int iii = 0; } if (DelayTime >= LastSendMsg.Delay_Time)//超时 { int i = LastSendMsg.iStaIndex; CStation nSta = ((CStation)ListStation[i]); nSta.present_MsgFailRep++;//子站重发次数+1 //Debug.WriteLine(nSta.Name + " 1FailRep:" + nSta.present_FailRep.ToString() + ":" + LastSendMsg.Delay_Time.ToString()); if (nSta.present_MsgFailRep > MsgFailRep)//超过最大重发次数 { // Debug.WriteLine(nSta.Name + " 2FailRep:" + nSta.present_FailRep.ToString()); nSta.present_MsgFailRep = 0; //子站重发次数置0 nSta.present_DevFailNum++; //子站失败次数置+1 // Debug.WriteLine(nSta.Name + " 3FailNum:" + nSta.present_MsgFailNum.ToString()); if (nSta.present_DevFailNum > DevFailNum) //超过最大失败次数 { // Debug.WriteLine(nSta.Name + " 4FailNum:" + nSta.present_MsgFailNum.ToString()); nSta.CommStateE = ECommSatate.Failure; //子站置通信故障 GetSendMsg(); //失败次数没达到,继续发送下个子站报文 } else { GetSendMsg();//失败次数没达到,继续发送下个子站报文 } } else { PortEvents[1].Set();//重发次数不到,重发上次报文 } } } catch (Exception e1) { Debug.WriteLine("CommTimerCall" + e1.Message); } //Debug.WriteLine("Send"); }
private void AddStaToTable(int iIndex) { if (iIndex < 0) { return; } CStation nSta = (CStation)frmMain.staComm.ListStation[iIndex]; ArrayList obj = new ArrayList(); string[] str1; foreach (CVar nVar in nSta.StaDevice.ListDevVar) { str1 = AddRow(nVar, nSta.Name); dataGridView1.Rows.Add(str1); } }
public void GetDeviceVar(string StaName) { if (ExpressType == LCExpressType.Var) { string str1 = Exipression.Replace(".", ","); string[] sPath = str1.Split(','); if (sPath.Length >= 3) { cSta = frmMain.staComm.GetStaByStaName(sPath[1]); cVar = frmMain.staComm.GetVarByStaNameVarName(sPath[1], sPath[2]); } } else if (ExpressType == LCExpressType.Expression)//表达式 { ListParam.Clear(); ListParam = CParameterOperate.GetParamList(Exipression, StaName); } }
//根据板块类型和协议类型创建子站 public static CStation CreateStation(string sPortType, string sPortProtocol) { CStation newSta = null; switch (sPortType) { case "串口": if (sPortProtocol == "Modbus_RTU") { newSta = new CProtcolModbusRTU(); } else if (sPortProtocol == "恒温槽RE215") { newSta = new CProtcolRE215(); } else if (sPortProtocol == "真空硅901P") { newSta = new CProtcol901P(); } else { newSta = null; } break; case "TCP": if (sPortProtocol == "Modbus_TCP") { newSta = new CProtcolModbusTCP(); } else if (sPortProtocol == "FINS_TCP") { newSta = new CProtcolFINS(); } else { return(null); } break; default: break; } return(newSta); }
private void AddStaToTable(CStation nSta) { if (nSta == null) { return; } ArrayList obj = new ArrayList(); string[] str1; foreach (CVar nVar in nSta.StaDevice.ListDevVar) { str1 = AddRow(nVar, nSta.Name); dataGridView1.Rows.Add(str1); } dataGridView1.AutoResizeColumns(); }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { try { TreeNode node = treeView1.SelectedNode; string sType = node.Name.Substring(0, 3); string sName = node.Name.Substring(4); CommTimer.Enabled = false; iIndex = 0; dataGridView1.Rows.Clear(); CStation sta1 = frmMain.staComm.ListPort[2].ListStation[0]; CStation sta2 = frmMain.staComm.ListStation[0]; switch (sType) { case "Prj": break; case "Prt": AddPortToTable(Int32.Parse(sName)); break; case "Sta": AddStaToTable(Int32.Parse(sName)); break; default: break; } dataGridView1.AutoResizeColumns(); CommTimer.Enabled = true; } catch (Exception ee) { MessageBox.Show("treeView1_AfterSelect:" + ee.Message); } }
private bool GetSendMsg() { try { CMessage sSend = new CMessage(); lock (this) { if (ListImmSendMsg.Count > 0) { sSend = (CMessage)ListImmSendMsg[0]; LastSendMsg = sSend.Clone(); //Write(sSend.sSendMsg); ListImmSendMsg.RemoveAt(0); PortEvents[1].Set(); return(true); } } //return true; CStation nSta = (CStation)ListStation[PresentSendStaIndex]; if (nSta.Driver == "真空硅") { int iii = 0; } if (nSta == null) { PresentSendStaIndex++; PresentSendStaIndex = PresentSendStaIndex % ListStation.Count; return(false); } if (nSta.CommStateE == ECommSatate.Failure) //当前发送子站为通信不正常时 { nSta.present_DevFailCyc++; //当前发送子站等待周期+1 //Debug.WriteLine(nSta.Name + " 4:" + nSta.present_MsgFailWaitCyc.ToString()); if (nSta.present_DevFailCyc <= DevFailCyc) //不超过最大等待周期时继续下一个子站 { //Debug.WriteLine(nSta.Name + " 5:" + PresentSendStaIndex.ToString()); PresentSendStaIndex++; PresentSendStaIndex = PresentSendStaIndex % ListStation.Count; //Debug.WriteLine(nSta.Name + " 6:" + PresentSendStaIndex.ToString()); GetSendMsg(); return(false); } else//否则开始重新发送该子站,重新计算超时 { nSta.present_MsgFailRep = 0; nSta.present_DevFailNum = 0; nSta.present_DevFailCyc = 0; } } sSend = nSta.GetNextLoopMsg(); if (sSend.sSendMsg.Length > 0) { LastSendMsg = sSend;//.Clone(); PortEvents[1].Set(); } PresentSendStaIndex++; PresentSendStaIndex = PresentSendStaIndex % ListStation.Count; } catch (Exception e) { Debug.WriteLine("GetSendMsg" + e.Message); } return(true); }