Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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;
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        //串口收发线程
        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" );
        }
Esempio n. 4
0
        //从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);
        }
Esempio n. 5
0
        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");
        }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        //定时器
        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");
        }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
 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);
     }
 }
Esempio n. 11
0
        //根据板块类型和协议类型创建子站
        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);
        }
Esempio n. 12
0
        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();
        }
Esempio n. 13
0
        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);
            }
        }
Esempio n. 14
0
        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);
        }