Beispiel #1
0
        /// <summary>
        /// 更新IPM列表状态
        /// </summary>
        private void RefreshIPMList()
        {
            try
            {
                Ping m_ping = new Ping();
                this.IPMcustomCheckedListBox.Items.Clear();
                this.IPMMACAddrlistViewEx.Items.Clear();
                lstIPMIP.Clear();
                //统计每个子系统的通道数
                int          k = 0;
                ListViewItem lvi;
                for (int i = 0; i < ConstPreDefine.MAX_SUBSYS_NUM; i++)
                {
                    for (int j = 0; j < ConstPreDefine.MAX_CHANNEL_NUM; j++)
                    {
                        //if (GlobalDataInterface.globalOut_SysConfig.nChannelInfo[i * ConstPreDefine.MAX_CHANNEL_NUM + j] == 1)
                        if (GlobalDataInterface.globalOut_SysConfig.nChannelInfo[i] > j)  //Modify by ChengSk - 20190521
                        {
                            //nDstId = Commonfunction.EncodeIPM(i, j);
                            //GlobalDataInterface.TransmitParam(nDstId, (int)HC_IPM_COMMAND_TYPE.HC_CMD_SHUTDOWN, null);
                            int    nDstId    = Commonfunction.EncodeIPM(i, j);
                            int    nSubsysId = Commonfunction.GetIPMID(nDstId);
                            string strTemp   = ConstPreDefine.LC_IP_ADDR_TEMPLATE;
                            string strIP     = strTemp + nSubsysId;//得到IPM的IP地址
                            string strIPName = (nSubsysId - 16).ToString();
                            this.IPMcustomCheckedListBox.Items.Add("IPM-" + strIPName);
                            //this.IPMcustomCheckedListBox.Items.Add("IPM-" + strIP);

                            lstIPMIP.Add(strIP);
                            lvi = new ListViewItem((k + 1).ToString());
                            string strMACAddr = Commonfunction.GetAppSetting("IPM-" + strIP);
                            lvi.SubItems.Add(strMACAddr);
                            this.IPMMACAddrlistViewEx.Items.Add(lvi);//Add by ChengSk - 20190829

                            PingReply pingReply = m_ping.Send(strIP, 500);
                            if (pingReply.Status == IPStatus.Success)
                            {
                                //lvi.SubItems[k].ForeColor= Color.Green;
                                IPMMACAddrlistViewEx.Items[k].BackColor = System.Drawing.Color.Green;
                                //itemColor[k] = Color.Green;
                            }
                            else
                            {
                                //itemColor[k] = Color.White;
                                IPMMACAddrlistViewEx.Items[k].BackColor = System.Drawing.Color.White;//add by xcw 20200226
                                //lvi.SubItems[k].ForeColor = Color.White;
                            }
                            k++;
                        }
                    }
                }

                this.IPMcustomCheckedListBox.Refresh();
            }
            catch (Exception ex)
            { }
        }
Beispiel #2
0
        /// <summary>
        /// 远程关机
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Closebutton_Click(object sender, EventArgs e)
        {
            //Note by ChengSk - 20191112
            //foreach (string item in this.IPMcustomCheckedListBox.CheckedItems)
            //{
            //    string[] sArray = item.Split('-');
            //    string IP = sArray[sArray.Length - 1];
            //    if (GlobalDataInterface.global_IsTestMode)
            //    {
            //        // int nDstId = Commonfunction.EncodeIPM(i, j);
            //        //GlobalDataInterface.TransmitParam(nDstId, (int)HC_IPM_COMMAND_TYPE.HC_CMD_SHUTDOWN, null);

            //        //网络关闭IPM机器

            //        ConnectionOptions op = new ConnectionOptions();
            //        op.Username = "******";//账号
            //        op.Password = "";//登录密码
            //        op.Authority = "ntlmdomain:DOMAIN";
            //        ManagementScope scope = new ManagementScope("\\\\"+IP+"\\root\\cimv2", op);
            //        try
            //        {
            //            scope.Connect();
            //            ObjectQuery oq = new ObjectQuery("select * from win32_OperatingSystem");
            //            ManagementObjectSearcher query1 = new ManagementObjectSearcher(scope, oq);//得到WMI控制
            //            ManagementObjectCollection queryCollection1 = query1.Get();
            //            foreach (ManagementObject mobj in queryCollection1)
            //            {
            //                string[] str = { "" };
            //                mobj.InvokeMethod("ShutDown", str);
            //            }
            //        }
            //        catch (Exception ex)
            //        {

            //        }
            //    }
            //}

            if (GlobalDataInterface.global_IsTestMode)  //Modify by ChengSk - 20191112
            {
                for (int i = 0; i < ConstPreDefine.MAX_SUBSYS_NUM; i++)
                {
                    for (int j = 0; j < ConstPreDefine.MAX_CHANNEL_NUM; j++)
                    {
                        //if (GlobalDataInterface.globalOut_SysConfig.nChannelInfo[i * ConstPreDefine.MAX_CHANNEL_NUM + j] == 1)
                        if (j < GlobalDataInterface.globalOut_SysConfig.nChannelInfo[i])    //Modify by ChengSk - 20191112
                        {
                            int nDstId = 0;
                            if (GlobalDataInterface.nVer == 1)            //版本号判断 add by xcw 20200604
                            {
                                nDstId = Commonfunction.EncodeIPMChannel(i, j);
                            }
                            else if (GlobalDataInterface.nVer == 0)
                            {
                                nDstId = Commonfunction.EncodeIPM(i, j);
                            }
                            int    nSubsysId = Commonfunction.GetIPMID(nDstId);
                            string strTemp   = ConstPreDefine.LC_IP_ADDR_TEMPLATE;
                            string strIP     = strTemp + nSubsysId;         //得到IPM的IP地址
                            string strIPName = (nSubsysId - 16).ToString(); //add by xcw 20201225
                            foreach (string item in this.IPMcustomCheckedListBox.CheckedItems)
                            {
                                string[] sArray = item.Split('-');
                                string   IP     = sArray[sArray.Length - 1];
                                //if (IP == strIP)
                                if (IP == strIPName)
                                {
                                    nDstId = Commonfunction.EncodeIPM(i, j);
                                    GlobalDataInterface.TransmitParam(nDstId, (int)HC_IPM_COMMAND_TYPE.HC_CMD_SHUTDOWN, null);
#if REALEASE
                                    GlobalDataInterface.WriteErrorInfo("=> ShutDown to IPM, IP: " + IP + " !");
#endif
                                    break;
                                }
                            }
                        } //End if
                    }     //End for
                }         //End for
            }             //End if
        }
Beispiel #3
0
        /// <summary>
        /// 一对一发送命令/数据
        /// </summary>
        /// <param name="nDestId"></param>命令/数据目的ID
        /// <param name="nCmd"></param>命令
        /// <param name="rData"></param>数据
        /// <returns></returns>
        public bool SyncRequest(int nDestId, int nCmd, byte[] Data)
        {
            bool   boRC = false;//运行正常与否标志位
            Socket socket;

            if (nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_OFF &&
                nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON &&
                !SubsysIsConnected(Commonfunction.GetSubsysIndex(nDestId)))
            {
                Trace.WriteLine(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
#if REALEASE
                GlobalDataInterface.WriteErrorInfo(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
#endif
                return(false);
            }
            //C++: AfxGetApp()->BeginWaitCursor();

            string strIP     = "";
            int    nSubsysId = Commonfunction.GetSubSysID(nDestId);
            int    nPortNum  = ConstPreDefine.FSM_PORT_NUM;

            if (nCmd >= 0x2000 && nCmd < 0x3000) //判断为HC->IPM的发送命令
            {
                nPortNum  = ConstPreDefine.IPM_PORT_NUM;
                nSubsysId = Commonfunction.GetIPMID(nDestId);
            }
            string strTemp = ConstPreDefine.LC_IP_ADDR_TEMPLATE;
            strIP = strTemp + nSubsysId;          //得到发送的IP地址
            //if (nCmd >= 0x7100 && nCmd <= 0x7101) //判断为HC->SIM的发送命令
            if (nCmd >= 0x7000 && nCmd <= 0x7102) //判断为HC->SIM的发送命令
            {
                nPortNum = ConstPreDefine.SIM_PORT_NUM;
                strIP    = ConstPreDefine.SIM_IP_ADDR;//得到发送的IP地址
            }

            try
            {
                Lock(1000);//资源加锁


                socket = CreateSocket();              //创建socket
                socket.SendBufferSize = 0;            //网络发送缓冲区为0
                socket.SendTimeout    = nTrySendTime; //设置发送超时时间
                socket.NoDelay        = false;

                //if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON)
                //    boRC = ConnectoServer(socket, strIP, nPortNum, true);//初始连接
                //else
                //boRC = ConnectoServer(socket, strIP, nPortNum, false);//运行状态下连接
                boRC = ConnectoServer(socket, strIP, nPortNum, true);//2015-5-14 运行过程中会存在网线断了的情况


                if (!boRC)
                {
                    Trace.WriteLine("网络连接失败!");
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("网络连接失败!"));
#endif
                    UnLock();

                    socket.Close();
                    socket = null;
                    Trace.WriteLine("Socket关闭");
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo("Socket关闭");
#endif
                    return(boRC);
                }
                //byte[] ABC = new byte[1];
                //ABC[0] = 100;
                //if (nCmd == (int)HC_IPM_COMMAND_TYPE.HC_CMD_CONTINUOUS_SAMPLE_ON)
                //{
                //    QueryPerformanceFrequency(ref freq);
                //    QueryPerformanceCounter(ref count);
                //    Trace.WriteLine("发送连续采集前同步信息开始");
                //    boRC = Send(socket, ABC);//发送同步信息
                //    Trace.WriteLine("发送连续采集前同步信息结束");
                //}
                SendCMD cmd = new SendCMD();

                cmd.SYNC    = 0x434e5953;
                cmd.nSrcId  = ConstPreDefine.HC_ID; //发送源ID
                cmd.nDestId = nDestId;              //发送目的ID
                cmd.nCmd    = nCmd;

                int    nStructLen = 4 * sizeof(int);
                byte[] bytes      = new byte[nStructLen];
                bytes = Commonfunction.StructToBytes(cmd);//将结构体转化为byte数组
                //if (nCmd == (int)HC_IPM_COMMAND_TYPE.HC_CMD_CONTINUOUS_SAMPLE_ON)
                //    Trace.WriteLine("发送连续采集命令头开始");
                boRC = Send(socket, bytes);//发送命令头
                //if (nCmd == (int)HC_IPM_COMMAND_TYPE.HC_CMD_CONTINUOUS_SAMPLE_ON)
                //{
                //    //socket.RE
                //    Trace.WriteLine("发送连续采集命令头结束");
                //}
                ////测试获取图像命令发送时间
                //QueryPerformanceCounter(ref count1);
                //count = count1 - count;
                //result = (double)(count) / (double)freq;
                //Trace.WriteLine("发送连续采集同步信息+命令头时间:" + result);
                if (!boRC)
                {
                    Trace.WriteLine("网络发送命令头错误!");
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("网络发送命令头错误!"));
#endif
                    goto leave;
                }

                int A = BitConverter.ToInt32(bytes, 12);

                if (Data != null)
                {
                    boRC = Send(socket, Data);//发送数据

                    if (!boRC)
                    {
                        Trace.WriteLine("网络发送数据错误!");
#if REALEASE
                        GlobalDataInterface.WriteErrorInfo(string.Format("网络发送数据错误!"));
#endif
                        goto leave;
                    }
                }


leave:
                DestroySocket(socket, boRC);
                UnLock();
                //AfxGetApp()->EndWaitCursor();
                if (boRC)
                {
                    if (Data != null)
                    {
                        Trace.WriteLine(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
//#if REALEASE
//                        GlobalDataInterface.WriteErrorInfo(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
//#endif
                    }
                    else
                    {
                        Trace.WriteLine(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
//#if REALEASE
//                        GlobalDataInterface.WriteErrorInfo(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
//#endif   //delete by xcw 20201207
                    }
                }
                else
                {
                    if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON)
                    {
                        m_IsConnected[Commonfunction.GetSubsysIndex(nDestId)] = false;
                    }
                    if (Data != null)
                    {
                        Trace.WriteLine(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2},当前时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), nDestId, nCmd, Data.Length));
#if REALEASE
                        GlobalDataInterface.WriteErrorInfo(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2},当前时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), nDestId, nCmd, Data.Length));
#endif
                    }
                    else
                    {
                        Trace.WriteLine(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},当前时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), nDestId, nCmd));
#if REALEASE
                        GlobalDataInterface.WriteErrorInfo(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},当前时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), nDestId, nCmd));
#endif   //add by xcw 20201207
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine("失败:函数SyncRequest" + e);
#if REALEASE
                GlobalDataInterface.WriteErrorInfo("失败:函数SyncRequest" + e);
#endif
                return(false);
            }

            return(boRC);
        }
        /// <summary>
        /// 一对一发送命令/数据
        /// </summary>
        /// <param name="nDestId"></param>命令/数据目的ID
        /// <param name="nCmd"></param>命令
        /// <param name="rData"></param>数据
        /// <returns></returns>
        public bool SyncRequest(int nDestId, int nCmd, byte[] Data)
        {
            bool   boRC = false;//运行正常与否标志位
            Socket socket;

            if (nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_OFF &&
                nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON &&
                !SubsysIsConnected(Commonfunction.GetSubsysIndex(nDestId)))
            {
                Trace.WriteLine(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
#if REALEASE
                GlobalDataInterface.WriteErrorInfo(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd));
#endif
                return(false);
            }
            //C++: AfxGetApp()->BeginWaitCursor();

            string strIP     = "";
            int    nSubsysId = Commonfunction.GetSubSysID(nDestId);
            int    nPortNum  = ConstPreDefine.FSM_PORT_NUM;

            if (nCmd >= 0x2000 && nCmd < 0x3000) //判断为HC->IPM的发送命令
            {
                nPortNum  = ConstPreDefine.IPM_PORT_NUM;
                nSubsysId = Commonfunction.GetIPMID(nDestId);
            }

            string strTemp = ConstPreDefine.LC_IP_ADDR_TEMPLATE;
            strIP = strTemp + nSubsysId;//得到发送的IP地址


            try
            {
                Lock(1000);                //资源加锁

                socket = CreateSocket();   //创建socket
                socket.SendBufferSize = 0; //网络发送缓冲区为0
                if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON)
                {
                    boRC = ConnectoServer(socket, strIP, nPortNum, true, true);                                                                                                                                                                       //初始连接
                }
                else if ((nCmd >= (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_OFF && nCmd <= (int)HC_FSM_COMMAND_TYPE.HC_CMD_CUPSTATERESET) || (nCmd > (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON && nCmd <= (int)HC_FSM_COMMAND_TYPE.HC_CMD_GRADE_INFO)) //所有子系统发送
                {
                    boRC = ConnectoServer(socket, strIP, nPortNum, false, true);                                                                                                                                                                      //运行状态下连接
                }
                else
                {
                    boRC = ConnectoServer(socket, strIP, nPortNum, false, false);//运行状态下连接
                }
                if (!boRC)
                {
                    Trace.WriteLine("网络连接失败!");
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("网络连接失败!"));
#endif
                    UnLock();
                    socket.Close();
                    return(boRC);
                }

                SendCMD cmd = new SendCMD();

                cmd.SYNC    = 0x434e5953;
                cmd.nSrcId  = ConstPreDefine.HC_ID; //发送源ID
                cmd.nDestId = nDestId;              //发送目的ID
                cmd.nCmd    = nCmd;

                int    nStructLen = 4 * sizeof(int);
                byte[] bytes      = new byte[nStructLen];
                bytes = Commonfunction.StructToBytes(cmd); //将结构体转化为byte数组

                boRC = Send(socket, bytes);                //发送命令头
                if (!boRC)
                {
                    Trace.WriteLine("网络发送命令头错误!");
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("网络发送命令头错误!"));
#endif
                    goto leave;
                }

                int A = BitConverter.ToInt32(bytes, 12);

                if (Data != null)
                {
                    boRC = Send(socket, Data);//发送数据
                    if (!boRC)
                    {
                        Trace.WriteLine("网络发送数据错误!");
#if REALEASE
                        GlobalDataInterface.WriteErrorInfo(string.Format("网络发送数据错误!"));
#endif
                        goto leave;
                    }
                }


leave:
                DestroySocket(socket, boRC);
                UnLock();
                //AfxGetApp()->EndWaitCursor();
                if (boRC)
                {
                    Trace.WriteLine(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
#endif
                }
                else
                {
                    if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON)
                    {
                        m_IsConnected[Commonfunction.GetSubsysIndex(nDestId)] = false;
                    }
                    Trace.WriteLine(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
#if REALEASE
                    GlobalDataInterface.WriteErrorInfo(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length));
#endif
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine("失败:函数SyncRequest" + e);
#if REALEASE
                GlobalDataInterface.WriteErrorInfo("失败:函数SyncRequest" + e);
#endif
                return(false);
            }

            return(boRC);
        }