using System; using System.Data; using System.Text; using System.Collections.Generic; using System.Drawing; using System.Threading; using System.Windows.Forms; using DevExpress.XtraBars; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors; using UAS_DeviceMonitor.DataOperate; using UAS_DeviceMonitor.Entity; using UAS_DeviceMonitor.PublicMethod; using UAS_DeviceMonitor.CustomerControl.PictureEditWithText; using UAS_DeviceMonitor.Device.Infomation; namespace UAS_DeviceMonitor { public partial class Main : RibbonForm { StringBuilder sql = new StringBuilder(); //用于设备状态查询界面SQL查看 StringBuilder DeviceStatusQuerySQL = new StringBuilder(); //用于设备主档资料查询界面SQL查看 StringBuilder DeviceListQuerySQL = new StringBuilder(); DataHelper dh = SystemInf.dh; ModeBusTCPServer mbt = new ModeBusTCPServer(); List SQL = new List(); #region 初始化代码 public Main() { InitializeComponent(); dpc_enableCheckEdit.QueryCheckStateByValue += CheckedEdit_QueryCheckStateByValue; CommandSetRepositoryItemComboBox1.ParseEditValue += CommandSetRepositoryItemComboBox1_ParseEditValue; CheckEditCommandSet.QueryCheckStateByValue += CheckedEdit_QueryCheckStateByValue; PollSettingItemSearchLookUpEdit.ParseEditValue += PollSettingItemSearchLookUpEdit_ParseEditValue; GridViewPollSetting.RowCellStyle += GridViewPollSetting_RowCellStyle; #region 添加发送接收编码规则的静态值 ComboBoxData cbd = new ComboBoxData(); cbd.Text = "UTF-8"; cbd.Value = "UTF-8"; ComboBoxData cbd1 = new ComboBoxData(); cbd1.Text = "Hexadecimal"; cbd1.Value = "Hexadecimal"; ComboBoxData cbd2 = new ComboBoxData(); cbd2.Text = "ASCII"; cbd2.Value = "ASCII"; CommandSetRepositoryItemComboBox1.Items.Add(cbd); CommandSetRepositoryItemComboBox1.Items.Add(cbd1); CommandSetRepositoryItemComboBox1.Items.Add(cbd2); #endregion } private void CommandSetRepositoryItemComboBox1_ParseEditValue(object sender, ConvertEditValueEventArgs e) { string val = ""; if (e.Value != null) { val = e.Value.ToString(); } else { val = "FALSE";//默认为不选 } e.Value = val; e.Handled = true; } private void PollSettingItemSearchLookUpEdit_ParseEditValue(object sender, ConvertEditValueEventArgs e) { e.Handled = true; } private void Main_Load(object sender, EventArgs e) { //设备列表 GridDeviceList.GetDataSQL = "SELECT 0 CHECKEDCOLUMN,DE_ID,DE_CODE,DE_NAME,DE_SPEC,DE_INDATE,DE_RUNSTATUS,DE_ADDRESS,DE_INMAN,DE_LINECODE,DE_WCCODE,DE_VENDCODE,DE_VENDNAME,DE_STEPCODE,DE_STEPNAME FROM DEVICE ORDER BY DE_CODE".ToUpper(); GridDeviceList.TableName = "device"; GridDeviceList.ID = "de_id"; GridDeviceList.InsertSQL = "INSERT INTO DEVICE(DE_ID,DE_CODE,DE_NAME,DE_SPEC,DE_INDATE,DE_RUNSTATUS,DE_ADDRESS,DE_INMAN,DE_LINECODE,DE_WCCODE,DE_VENDCODE,DE_VENDNAME,DE_STEPCODE,DE_STEPNAME) VALUES(DEVICE_SEQ.NEXTVAL,:DE_CODE,:DE_NAME,:DE_SPEC,:DE_INDATE,:DE_RUNSTATUS,:DE_ADDRESS,:DE_INMAN,:DE_LINECODE,:DE_WCCODE,:DE_VENDCODE,:DE_VENDNAME,:DE_STEPCODE,:DE_STEPNAME)"; ButtonAddDevice.Grid = GridDeviceList; ButtonSaveDevice.Grid = GridDeviceList; ButtonDeleteDevice.Grid = GridDeviceList; //ToolPageControlDeviceList.Gridcontrol = GridDeviceList; //轮询业务 //GridPolling.GetDataSQL = "select 0 CHECKEDCOLUMN,pl_id,pl_code,pl_name,pl_type,pl_dccode,pl_remark from polling".ToUpper(); //GridPolling.ID = "pl_id"; //GridPolling.TableName = "polling"; //GridPolling.InsertSQL = "insert into polling(pl_id,pl_code,pl_name,pl_type,pl_dccode,pl_remark) values(polling_seq.nextval,:pl_code,:pl_name,:pl_type,:pl_dccode,:pl_remark)"; //ButtonDeletePolling.Grid = GridPolling; //ButtonSavePolling.Grid = GridPolling; //ButtonAddPolling.Grid = GridPolling; //轮询配置界面 GridPollingSetting.GetDataSQL = "SELECT '' POLLSETTINGSTATUSCOLUMN,0 CHECKEDCOLUMN,DPC_MAN,DPC_ID,DPC_DECODE ,DPC_INTERVAL ,DPC_DCCODE ,DPC_FUNCTION , nvl(DPC_ENABLE,0)DPC_ENABLE,DPC_STATUS,DPC_REMARK,EM_NAME FROM DEVICEPOLLINGCONFIG left join EMPLOYEE on em_code=dpc_man WHERE DPC_MAN='" + User.UserCode + "' ORDER BY DPC_ID"; GridPollingSetting.ID = "DPC_ID"; GridPollingSetting.TableName = "DEVICEPOLLINGCONFIG"; GridPollingSetting.InsertSQL = "insert into DEVICEPOLLINGCONFIG(DPC_ID,DPC_DECODE ,DPC_INTERVAL ,DPC_DCCODE ,DPC_FUNCTION , DPC_ENABLE,DPC_STATUS ,DPC_REMARK,DPC_MAN) values(DEVICEPOLLINGCONFIG_seq.nextval,:DPC_DECODE ,:DPC_INTERVAL ,:DPC_DCCODE ,:DPC_FUNCTION , :DPC_ENABLE,:DPC_STATUS ,:DPC_REMARK,'" + User.UserCode + "')"; ButtonSaveCommandSet.Grid = GridPollingSetting; ButtonNewCommandSet.Grid = GridPollingSetting; ButtonDeleteCommandSet.Grid = GridPollingSetting; //指令设置界面 GridCommandSetting.GetDataSQL = "select 0 CHECKEDCOLUMN,dc_id,dc_code,dc_name,dc_type,dc_value,dc_sendcoding,dc_receivecoding,db_name,dc_man,to_char(dc_date,'YYYY-MM-DD HH:mi:ss')dc_date from devicecommand left join devicebrand on db_code=dc_debrand".ToUpper(); GridCommandSetting.TableName = "devicecommand"; GridCommandSetting.ID = "dc_id"; GridCommandSetting.InsertSQL = "insert into devicecommand(dc_id,dc_code,dc_name,dc_value,dc_debrand,dc_sendcoding,dc_receivecoding,dc_man,dc_date) values(devicecommand_seq.nextval,:dc_code,:dc_name,:dc_value,'" + BaseUtil.GetComboxEditValue(Brand) + "',:dc_sendcoding,:dc_receivecoding,'" + User.UserName + "',sysdate)"; ButtonSaveCommand.Grid = GridCommandSetting; ButtonDeleteCommand.Grid = GridCommandSetting; ButtonNewCommand.Grid = GridCommandSetting; //设备联网配置界面 GridDeviceNetSetting.GetDataSQL = "SELECT 0 CHECKEDCOLUMN,DNC_ID,DNC_DECODE,DNC_GATEWAY,DNC_UPPERIP,DNC_PORT,DNC_MAC,DNC_IP,DNC_TYPE FROM DEVICENETCONFIG order by DNC_ID"; GridDeviceNetSetting.ID = "dnc_id"; GridDeviceNetSetting.TableName = "DEVICENETCONFIG"; GridDeviceNetSetting.InsertSQL = "insert into DEVICENETCONFIG(DNC_ID,DNC_DECODE,DNC_GATEWAY,DNC_UPPERIP,DNC_PORT,DNC_MAC,DNC_IP,DNC_TYPE) values(DEVICENETCONFIG_SEQ.NEXTVAL,:DNC_DECODE,:DNC_GATEWAY,:DNC_UPPERIP,:DNC_PORT,:DNC_MAC,:DNC_IP,:DNC_TYPE)"; ButtonDeleteNetConfig.Grid = GridDeviceNetSetting; ButtonAddNetConfig.Grid = GridDeviceNetSetting; ButtonSaveNetConfig.Grid = GridDeviceNetSetting; Ptime = new Dictionary(); } /// /// 关闭前将所有设备离线,状态更新为离线 /// /// /// private void Main_FormClosing(object sender, FormClosingEventArgs e) { dh.ExecuteSql("update devicepollingconfig set dpc_status='Stop' where dpc_status='Running'", "update"); dh.ExecuteSql("update devicepollinglog set dpg_status='Stop' where dpg_status='Running'", "update"); } #endregion #region 设备列表界面 private void GridViewDeviceList_RowCellClick(object sender, RowCellClickEventArgs e) { string de_code = GridViewDeviceList.GetRowCellValue(e.RowHandle, "DE_CODE").ToString(); DeviceDetailInfo ddi = new DeviceDetailInfo(de_code); ddi.StartPosition = FormStartPosition.CenterScreen; ddi.ShowDialog(); } private void PageDeviceList_VisibleChanged(object sender, EventArgs e) { if (PageDeviceList.PageVisible) { DataTable dt; //填充人员资料,工作中心,线别下拉框 ComBoxDeviceListMan.Properties.DataSource = (DataTable)dh.ExecuteSql("select em_code,em_name from employee ", "select"); dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select"); BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceListWC, "wc_name", "wc_code", dt, true); } } private void ButtonSaveDevice_Click(object sender, EventArgs e) { ButtonSaveDevice.DoSaveAfterHandler(); sql.Clear(); sql.Append("update device set de_inman='" + User.UserName + "' where de_id=:de_id"); dh.BatchInsert(sql.ToString(), new string[] { "de_id" }, ButtonSaveDevice.LastSaveID); GridDeviceList.RefreshData(); } private void ComboxDeviceListWC_SelectedIndexChanged(object sender, EventArgs e) { DeviceListQuerySQL.Clear(); string WC = BaseUtil.GetComboxEditValue(ComboxDeviceListWC); DeviceListQuerySQL.Append("select 0 CHECKEDCOLUMN,de_id,de_code,de_name,de_spec,de_indate,de_runstatus,de_address,de_wccode,de_inman,de_linecode"); DeviceListQuerySQL.Append("de_vendcode,de_vendname,de_stepcode,de_stepname from device where de_wccode='" + WC + "' order by de_code"); sql.Clear(); if (WC == "全部") sql.Append("select li_code,li_name from line"); else sql.Append("select li_code,li_name from line where li_wccode='" + WC + "'"); DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceListLC, "li_code", "li_name", dt, true); RefreshDeviceData(); } private void ComboxDeviceListLC_SelectedIndexChanged(object sender, EventArgs e) { DeviceListQuerySQL.Clear(); string WC = BaseUtil.GetComboxEditValue(ComboxDeviceListWC); string LC = BaseUtil.GetComboxEditValue(ComboxDeviceListLC); DeviceListQuerySQL.Append("select 0 CHECKEDCOLUMN,de_id,de_code,de_name,de_spec,de_indate,de_runstatus,de_address,de_wccode, "); DeviceListQuerySQL.Append("de_vendcode,de_vendname,de_inman,de_linecode,de_stepcode,de_stepname from device "); if (WC != "全部" && LC != "全部") DeviceListQuerySQL.Append(" where de_wccode='" + WC + "' and de_linecode='" + LC + "' "); if (WC == "全部" && LC != "全部") DeviceListQuerySQL.Append(" where de_linecode='" + LC + "' "); if (WC != "全部" && LC == "全部") DeviceListQuerySQL.Append(" where de_wccode='" + WC + "' "); DeviceListQuerySQL.Append("order by de_code"); RefreshDeviceData(); } private void ComBoxDeviceListMan_EditValueChanged(object sender, EventArgs e) { } private void RefreshDeviceData() { GridDeviceList.GetDataSQL = DeviceListQuerySQL.ToString(); GridDeviceList.RefreshData(); } #endregion #region 界面通用事件 /// /// 选项卡切换不同XPage /// /// /// private void ButtonItem_ItemClick(object sender, ItemClickEventArgs e) { HideXPage(e.Item.Tag.ToString()); } /// /// 根据点击按钮的Tag显示对应的XPage /// /// private void HideXPage(string PageName) { for (int i = 0; i < MainTabControl.TabPages.Count; i++) { if (MainTabControl.TabPages[i].Name == PageName) MainTabControl.TabPages[i].PageVisible = true; else MainTabControl.TabPages[i].PageVisible = false; } } /// /// 勾选Grid的CheckBox /// /// /// private void CheckedEdit_QueryCheckStateByValue(object sender, DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventArgs e) { string val = ""; if (e.Value != null) { val = e.Value.ToString(); } else { val = "FALSE";//默认为不选 } switch (val.ToUpper()) { case "TRUE": case "YES": case "1": e.CheckState = CheckState.Checked; break; case "FALSE": case "NO": case "0": e.CheckState = CheckState.Unchecked; break; default: e.CheckState = CheckState.Checked; break; } e.Handled = true; } #endregion #region PageCommandSet业务代码(指令设置) /// /// 判断指令编号不能重复 /// /// /// private void ButtonSaveCommand_Click(object sender, EventArgs e) { GridCommandSetting.InsertSQL = "insert into devicecommand(dc_id,dc_code,dc_name,dc_value,dc_debrand,dc_sendcoding,dc_receivecoding,dc_man,dc_date) values(devicecommand_seq.nextval,:dc_code,:dc_name,:dc_value,'" + BaseUtil.GetComboxEditValue(Brand) + "',:dc_sendcoding,:dc_receivecoding,'" + User.UserName + "',sysdate)"; ButtonSaveCommand.DoSaveAfterHandler(); sql.Clear(); sql.Append("update devicecommand set dc_man='" + User.UserName + "',dc_date=sysdate where dc_id=:dc_id"); dh.BatchInsert(sql.ToString(), new string[] { "dc_id" }, ButtonSaveCommand.LastSaveID); GridCommandSetting.RefreshData(); } /// /// 加载ComBox品牌数据 /// /// /// private void PageCommandSet_VisibleChanged(object sender, EventArgs e) { if (PageCommandSet.PageVisible) { DataTable dt = (DataTable)SystemInf.dh.ExecuteSql("select * from devicebrand", "select"); BaseUtil.FillComBoxEditWidthDataTable(Brand, "db_name", "db_code", dt); GridCommandSetting.Condition = " where dc_debrand='" + BaseUtil.GetComboxEditValue(Brand) + "' order by dc_id"; } } private void Brand_SelectedIndexChanged(object sender, EventArgs e) { GridCommandSetting.Condition = " where dc_debrand='" + BaseUtil.GetComboxEditValue(Brand) + "' order by dc_id"; GridCommandSetting.RefreshData(); } #endregion #region PagePollingSetting业务代码(轮询配置) PollingTask pt = new PollingTask(); /// /// 绘制轮询配置状态栏 /// List PollSettingPaintRowIndex = new List(); private void ButtonStartPolling_Click(object sender, EventArgs e) { GridView grid = GridViewPollSetting; for (int i = 0; i < GridPollingSetting.RowCount; i++) { Polling pl = new Polling(); pl.Id = int.Parse(GridViewPollSetting.GetRowCellValue(i, "DPC_ID").ToString()); pl.DeviceCode = GridViewPollSetting.GetRowCellValue(i, "DPC_DECODE").ToString(); pl.CommandCode = GridViewPollSetting.GetRowCellValue(i, "DPC_DCCODE").ToString(); pl.Interval = int.Parse(GridViewPollSetting.GetRowCellValue(i, "DPC_INTERVAL").ToString()); pl.Enable = GridViewPollSetting.GetRowCellValue(i, "DPC_ENABLE").ToString() != "0"; pl.Dh = new DataHelper(); if (pl.Enable) { //插入轮询日志 sql.Clear(); sql.Append("insert into DEVICEPOLLINGLOG(dpg_id,dpg_decode,dpg_starttime,dpg_interval)values"); sql.Append("(DEVICEPOLLINGLOG_seq.nextval,'" + pl.DeviceCode + "',sysdate,'" + pl.Interval + "')"); dh.ExecuteSql(sql.ToString(), "insert"); pt.AddTask(RunTask, pl); //添加到状态为运行的行 PollSettingPaintRowIndex.Add(i); GridPollingSetting.Focus(); } } } /// /// 绘制轮询状态 /// /// /// private void GridViewPollSetting_RowCellStyle(object sender, RowCellStyleEventArgs e) { if (e.Column.Name.ToUpper() == "POLLSETTINGSTATUSCOLUMN" && PollSettingPaintRowIndex.Contains(e.RowHandle)) { e.Appearance.BackColor = Color.Green; } } Dictionary Ptime; private void RunTask(object i) { PollingTimer timer = new PollingTimer(); Polling pl = (Polling)i; timer.Polling = i; timer.Interval = pl.Interval * 1000; timer.Elapsed += Timer_Tick; timer.Start(); try { if (!Ptime.ContainsKey(pl.Id)) Ptime.Add(pl.Id, timer); } catch (Exception) { if (!Ptime.ContainsKey(pl.Id)) Ptime.Add(pl.Id, timer); } } /// /// 轮询执行的业务 /// /// /// private void Timer_Tick(object sender, EventArgs e) { PollingTimer timer = (PollingTimer)sender; Polling pl = (Polling)timer.Polling; DataHelper dh = pl.Dh; string Decode = pl.DeviceCode; string Dccode = pl.CommandCode; DataTable dt = (DataTable)dh.ExecuteSql("select dnc_ip,dnc_port from DEVICENETCONFIG where dnc_decode='" + Decode + "'", "select"); DataTable dt1 = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value,dc_receivecoding from devicecommand where dc_code='" + Dccode + "'", "select"); if (dt.Rows.Count > 0) { string IP = dt.Rows[0]["dnc_ip"].ToString() + ":" + dt.Rows[0]["dnc_port"].ToString(); string SendCoding = ""; string ReceiveCoding = ""; string Command = ""; int SendCommandByteSize = 0; if (dt1.Rows.Count > 0) { SendCoding = dt1.Rows[0]["dc_sendcoding"].ToString(); ReceiveCoding = dt1.Rows[0]["dc_receivecoding"].ToString(); Command = dt1.Rows[0]["dc_value"].ToString(); SendCommandByteSize = Encoding.Default.GetBytes(Command.ToCharArray()).Length; } mbt.Send(IP, SendCoding, ReceiveCoding, Command); //处理2秒之内返回的指令 Thread.Sleep(1000); if (mbt.Returnvalue.ContainsKey(IP)) { int ReceiveCommandByteSize = Encoding.Default.GetBytes(mbt.Returnvalue[IP].ToCharArray()).Length; mbt.Returnvalue.Remove(IP); SQL.Clear(); //更新轮询状态 sql.Clear(); sql.Append("update DEVICEPOLLINGCONFIG set dpc_status='Running' where dpc_decode='" + Decode + "' and dpc_dccode='" + Dccode + "'"); dh.ExecuteSql(sql.ToString(), "update"); //SQL.Add(sql.ToString()); //更新轮询日志状态 sql.Clear(); sql.Append("update DEVICEPOLLINGLOG set dpg_status='Running',dpg_senddatasize=nvl(dpg_senddatasize,0)+" + SendCommandByteSize); sql.Append(",dpg_receivedatasize=nvl(dpg_receivedatasize,0)+" + ReceiveCommandByteSize + ",dpg_count=nvl(dpg_count,0)+1 "); sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + Decode + "')"); //SQL.Add(sql.ToString()); dh.ExecuteSql(sql.ToString(), "update"); //dh.ExecuteSQLTran(SQL.ToArray()); } else { SQL.Clear(); //更新轮询状态 sql.Clear(); sql.Append("update DEVICEPOLLINGCONFIG set dpc_status='Stop' where dpc_decode='" + Decode + "' and dpc_dccode='" + Dccode + "'"); //SQL.Add(sql.ToString()); dh.ExecuteSql(sql.ToString(), "update"); //更新轮询日志状态 sql.Clear(); sql.Append("update DEVICEPOLLINGLOG set dpg_status='Running',dpg_senddatasize=nvl(dpg_senddatasize,0)+"); sql.Append(SendCommandByteSize + ",dpg_count=nvl(dpg_count,0)+1 "); sql.Append("where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + Decode + "')"); //SQL.Add(sql.ToString()); dh.ExecuteSql(sql.ToString(), "update"); //dh.ExecuteSQLTran(SQL.ToArray()); } } } /// /// 停止全部轮询 /// /// /// private void ButtonPausePolling_Click(object sender, EventArgs e) { foreach (var item in Ptime) { item.Value.Stop(); } PollSettingPaintRowIndex.Clear(); GridPollingSetting.Focus(); Ptime.Clear(); } private void GridViewPollSetting_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (e.Column.Name.ToUpper() == "DPC_ENABLE") { GridViewPollSetting.SetRowCellValue(e.RowHandle, e.Column, e.Value); if (GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ENABLE").ToString() == "0") { //DialogResult cancel = XtraMessageBox.Show("确认禁用该轮询?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); //if (cancel.ToString() == "Yes") //{ int id = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ID").ToString()); if (Ptime.ContainsKey(id)) { Ptime[id].Stop(); Ptime.Remove(id); PollSettingPaintRowIndex.Remove(e.RowHandle); } //} //else //{ // Cancel = false; // GridViewPollSetting.SetRowCellValue(e.RowHandle, e.Column, -1); //} } else { Polling pl = new Polling(); pl.Id = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ID").ToString()); pl.DeviceCode = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_DECODE").ToString(); pl.Interval = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_INTERVAL").ToString()); pl.CommandCode = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_DCCODE").ToString(); pl.Enable = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ENABLE").ToString() != "0"; pl.Dh = new DataHelper(); if (pl.Enable) pt.AddTask(RunTask, pl); PollSettingPaintRowIndex.Add(e.RowHandle); } } } private void GridViewPollSetting_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { } private void ButtonSaveCommandSet_Click(object sender, EventArgs e) { ButtonSaveCommandSet.DoSaveAfterHandler(); sql.Clear(); sql.Append("update DEVICEPOLLINGCONFIG set dpc_man='" + User.UserCode + "' where dpc_id=:dpc_id"); dh.BatchInsert(sql.ToString(), new string[] { "dpc_id" }, ButtonSaveCommandSet.LastSaveID); GridPollingSetting.RefreshData(); } /// /// 设置GridView多选放大镜 /// /// /// private void PagePollingSetting_VisibleChanged(object sender, EventArgs e) { if (PagePollingSetting.PageVisible) { //如果未开启则进行开启 if (!mbt.IsOpen) mbt.Open(); DataTable dt = (DataTable)SystemInf.dh.ExecuteSql("SELECT DC_CODE,DC_NAME,DC_REMARK FROM DEVICECOMMAND", "select"); PollSettingItemSearchLookUpEdit.DataSource = dt; PollSettingItemSearchLookUpEdit.DisplayMember = "DC_CODE"; PollSettingItemSearchLookUpEdit.ValueMember = "DC_CODE"; } } #endregion #region 设备查看界面 private void PageDeviceStatus_VisibleChanged(object sender, EventArgs e) { if (PageDeviceStatus.PageVisible) { DeviceStatusQuerySQL.Clear(); DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG on dpc_decode=de_code order by de_code"); PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString()); //填充筛选条件,车间和线体 DataTable dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select"); BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceStatusWC, "wc_name", "wc_code", dt, true); } } private void CheckEditDeviceStatusEnable_CheckedChanged(object sender, EventArgs e) { DeviceStatusQuerySQL.Clear(); if (CheckEditDeviceStatusEnable.Checked) { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG "); DeviceStatusQuerySQL.Append("on dpc_decode=de_code where nvl(dpc_enable,0)<>0 order by de_code"); } else { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG "); DeviceStatusQuerySQL.Append("on dpc_decode=de_code order by de_code"); } PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString()); } private void ComboxDeviceStatusWC_SelectedIndexChanged(object sender, EventArgs e) { DeviceStatusQuerySQL.Clear(); string WC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusWC); if (CheckEditDeviceStatusEnable.Checked) { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG "); DeviceStatusQuerySQL.Append("on dpc_decode=de_code where nvl(dpc_enable,0)<>0 and de_wccode='" + WC + "' order by de_code"); } else { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG "); DeviceStatusQuerySQL.Append("on dpc_decode=de_code where de_wccode='" + WC + "' order by de_code"); } PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString()); sql.Clear(); if (WC == "全部") sql.Append("select li_code,li_name from line"); else sql.Append("select li_code,li_name from line where li_wccode='" + WC + "'"); DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceStatusLC, "li_code", "li_name", dt, true); } private void ComboxDeviceStatusLC_SelectedIndexChanged(object sender, EventArgs e) { DeviceStatusQuerySQL.Clear(); string WC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusWC); string LC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusLC); if (CheckEditDeviceStatusEnable.Checked) { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join "); DeviceStatusQuerySQL.Append("DEVICEPOLLINGCONFIG on dpc_decode=de_code where nvl(dpc_enable,0)<>0"); if (WC != "全部") DeviceStatusQuerySQL.Append(" and de_wccode='" + WC + "' "); if (LC != "全部") DeviceStatusQuerySQL.Append(" and de_linecode='" + LC + "' "); DeviceStatusQuerySQL.Append(" order by de_code"); } else { DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join "); DeviceStatusQuerySQL.Append("DEVICEPOLLINGCONFIG on dpc_decode=de_code "); if (WC != "全部" && LC != "全部") DeviceStatusQuerySQL.Append(" where de_wccode='" + WC + "' and de_linecode='" + LC + "' "); if (WC == "全部" && LC != "全部") DeviceStatusQuerySQL.Append(" where de_linecode='" + LC + "' "); if (WC != "全部" && LC == "全部") DeviceStatusQuerySQL.Append(" where de_wccode='" + WC + "' "); DeviceStatusQuerySQL.Append("order by de_code"); } PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString()); } private void PaintDeviceStatusControl(string SQL) { DataTable dt = (DataTable)dh.ExecuteSql(SQL, "select"); //界面重新展示时如过数量不一致则重新绘制 if (PanelDeviceStatus.Controls.Count != dt.Rows.Count) { PanelDeviceStatus.Controls.Clear(); int CountPerRow = PanelDeviceStatus.Width / 110; int RightPadding = PanelDeviceStatus.Width % 110; int Count = dt.Rows.Count; int RowCount = Count % CountPerRow == 0 ? Count / CountPerRow : Count / CountPerRow + 1; int LastRowCount = 0; for (int i = 0; i < PanelDeviceStatus.Controls.Count; i++) { PanelDeviceStatus.Controls[i].Dispose(); } ContextMenu ContextMenu = new ContextMenu(); for (int j = 0; j < RowCount; j++) { //如果是最后一行则循环尾数 if (j == RowCount - 1) { LastRowCount = Count % CountPerRow; } for (int i = 0; i < (j == RowCount - 1 ? LastRowCount : CountPerRow); i++) { PictureEditWithText pic = new PictureEditWithText(); pic.DeviceName = dt.Rows[j * CountPerRow + i]["de_name"].ToString(); pic.Picedit.ToolTipController = CommonTipController; pic.Picedit.ContextMenu = ContextMenu; pic.Picedit.Click += Pic_Click; pic.Name = dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j; pic.Anchor = AnchorStyles.Left; pic.Anchor = AnchorStyles.Top; pic.Picedit.Name = dt.Rows[j * CountPerRow + i]["de_code"].ToString(); pic.Picedit.MouseHover += Pic_MouseHover; pic.Picedit.Properties.SizeMode = PictureSizeMode.Squeeze; if (dt.Rows[j * CountPerRow + i]["dpc_status"].ToString() != "Running") { pic.Picedit.Image = Properties.Resources.network_offline; } else { pic.Picedit.Image = Properties.Resources.net_connected; } pic.Text = dt.Rows[j * CountPerRow + i]["de_code"].ToString(); pic.Picedit.BorderStyle = BorderStyles.HotFlat; pic.Location = new Point((10 + RightPadding) / 2 + 110 * i, 10 + j * 150); PanelDeviceStatus.Controls.Add(pic); } } BaseUtil.CleanMemory(); TimerDeviceStatus.Start(); } } private void Pic_Click(object sender, EventArgs e) { PictureEdit pic = sender as PictureEdit; DeviceStatusInfo dsi = new DeviceStatusInfo(pic.Name); dsi.StartPosition = FormStartPosition.CenterScreen; dsi.ShowDialog(); } private void Pic_MouseHover(object sender, EventArgs e) { //使用Tip显示轮询数据 PictureEdit pic = sender as PictureEdit; DataTable dt = (DataTable)dh.ExecuteSql("select * from DEVICEPOLLINGLOG where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + pic.Name + "')", "select"); if (dt.Rows.Count > 0) { sql.Clear(); sql.Append("开始时间" + dt.Rows[0]["dpg_starttime"].ToString() + "\n"); sql.Append("发送数据大小" + dt.Rows[0]["dpg_senddatasize"].ToString() + "字节\n"); sql.Append("接收数据大小" + dt.Rows[0]["dpg_receivedatasize"].ToString() + "字节\n"); sql.Append("轮询次数" + dt.Rows[0]["dpg_count"].ToString() + "次\n"); CommonTipController.ShowHint(sql.ToString(), pic.Name); } else { CommonTipController.ShowHint("暂无信息", pic.Name); } } //重新展示设备图像界面 private void ShowDeviceStatus() { DataTable dt = (DataTable)dh.ExecuteSql(DeviceStatusQuerySQL.ToString(), "select"); int CountPerRow = PanelDeviceStatus.Width / 110; int RightPadding = PanelDeviceStatus.Width % 110; int Count = dt.Rows.Count; int RowCount = Count % CountPerRow == 0 ? Count / CountPerRow : Count / CountPerRow + 1; int LastRowCount = 0; //只更换现有控件的图片,不必重新绘制控件 for (int j = 0; j < RowCount; j++) { //如果是最后一行则循环尾数 if (j == RowCount - 1) { LastRowCount = Count % CountPerRow; } for (int i = 0; i < (j == RowCount - 1 ? LastRowCount : CountPerRow); i++) { if (dt.Rows[j * CountPerRow + i]["dpc_status"].ToString() != "Running") { (PanelDeviceStatus.Controls[dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j] as PictureEditWithText).Picedit.Image = Properties.Resources.network_offline; } else { (PanelDeviceStatus.Controls[dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j] as PictureEditWithText).Picedit.Image = Properties.Resources.net_connected; } } } BaseUtil.CleanMemory(); } //刷新界面 private void TimerDeviceStatus_Tick(object sender, EventArgs e) { if (PageDeviceStatus.PageVisible) { ShowDeviceStatus(); } } private void PanelDeviceStatus_SizeChanged(object sender, EventArgs e) { if (PageDeviceStatus.PageVisible) { ShowDeviceStatus(); TimerDeviceStatus.Start(); } } #endregion } }