/// <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) { } }
/// <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 }
/// <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); }