using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.Serialization; using System.Xml.Serialization; using System.IO; using System.Linq; using System.Xml; namespace SiaSun.LMS.LED { public partial class Main : Form { #region 自定义变量 SiaSun.LMS.Common.BX_5M mBX_5M = new SiaSun.LMS.Common.BX_5M(); public static Main mainWin; #endregion #region 构造函数 public Main() { InitializeComponent(); mainWin = this; } #endregion #region 系统函数 //加载窗体 private void Main_Load(object sender, EventArgs e) { //忽略线程间调用错误 Control.CheckForIllegalCrossThreadCalls = false; //初始化LED资源 mBX_5M.InitDLLResource(this.Handle); //显示托盘 this.notifyIcon1.Visible = true; this.btnStop.Enabled = false; //默认启动 this.btnStart_Click(null, EventArgs.Empty); //后台运行:属性中FormWindowState=Maximized this.btnBackRun_Click(null, EventArgs.Empty); } //启动发送大屏 private void btnStart_Click(object sender, EventArgs e) { try { //设置状态 btnStart.Enabled = false; btnStop.Enabled = true; //启动 LEDApply.RunWorkerAsync(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } //停止发送大屏 private void btnStop_Click(object sender, EventArgs e) { if (MessageBox.Show("确定停止LED监视任务!","系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK) { try { btnStop.Enabled = false; btnStart.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } //后台监控 private void LEDApply_DoWork(object sender, DoWorkEventArgs e) { try { while (btnStop.Enabled) { //检查是否最大值 if (rchMessage.Lines.Length >= rchMessage.MaxLength) rchMessage.Clear(); //BX-5M this.LED_SEND(mBX_5M); //延迟显示 System.Threading.Thread.Sleep(2000); //释放内存 System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet = new IntPtr(20); } } catch (Exception ex) { btnStart.Enabled = true; btnStop.Enabled = false; lblMessage.Text = ex.Message; } } //后台运行 private void btnBackRun_Click(object sender, EventArgs e) { if (!this.Visible) return; this.WindowState = FormWindowState.Minimized; this.Hide(); this.notifyIcon1.ShowBalloonTip(3, "提示", "程序隐藏在后台运行", ToolTipIcon.Info); } #endregion #region 显示或隐藏窗体 //显示 private void menuItemShow_Click(object sender, EventArgs e) { if (this.Visible) return; this.StartPosition = FormStartPosition.CenterScreen; this.WindowState = FormWindowState.Maximized; this.Visible = true; } //双击显示 private void notifyIcon1_DoubleClick(object sender, EventArgs e) { menuItemShow_Click(null, EventArgs.Empty); } //退出 private void menuItemExit_Click(object sender, EventArgs e) { try { //停止监视 btnStop_Click(null, EventArgs.Empty); //释放资源 this.LEDApply.Dispose(); //释放LED资源 //mBX_5M.FreeDLLResource(); //释放资源 this.notifyIcon1.Visible = false; this.notifyIcon1.Dispose(); //退出 Application.ExitThread(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion #region 自定义方法 public void LED_SEND(SiaSun.LMS.Common.BX_5M mBX_5M) { int AREA_NO =-1; int RETURN_ERROR = 0; string RETURN_ERROR_MESSAGE = string.Empty; string APP_PATH = AppDomain.CurrentDomain.BaseDirectory.ToString().Trim(); try { //取得自动处理标识为“1”自动处理,发送状态为“0”未发送的记录 IList lsLED_MAIN = Program._I_LEDService.LED_MAIN_GetList_AUTO_FLAG_LED_STATUS("1", "0"); foreach (SiaSun.LMS.Model.LED_MAIN mLED_MAIN in lsLED_MAIN) { //检查是否最大值 if (rchMessage.Lines.Length >= rchMessage.MaxLength) rchMessage.Clear(); //初始化图文区序号 AREA_NO = -1; #region 添加屏幕 RETURN_ERROR = mBX_5M.AddScreen(mLED_MAIN.CONTROL_TYPE, mLED_MAIN.SCREEN_WIDTH, mLED_MAIN.SCREEN_HEIGHT, mLED_MAIN.LED_IP); if (!mBX_5M.GetErrorMessage("AddScreen", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("AddScreen Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion #region 添加节目 RETURN_ERROR = mBX_5M.AddScreenProgram(); if (!mBX_5M.GetErrorMessage("AddScreenProgram", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("AddScreenProgram Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion //取得指定LED_ID且按LINE_NO从小到大排序的LED_LIST记录 IList lsLED_LIST = Program._I_LEDService.LED_LIST_GetList_LED_ID(mLED_MAIN.LED_ID); foreach (SiaSun.LMS.Model.LED_LIST mLED_LIST in lsLED_LIST) { //BX-5M屏幕不支持发送内容为空 if (string.IsNullOrEmpty(mLED_LIST.LINE_TEXT) || mLED_LIST.LINE_TEXT == null) { if (mLED_LIST.LINE_NO == 1) { if (mLED_MAIN.DEVICE_CODE == "12007") mLED_LIST.LINE_TEXT = "1#垛机空闲 "; if (mLED_MAIN.DEVICE_CODE == "12010") mLED_LIST.LINE_TEXT = "2#垛机空闲 "; if (mLED_MAIN.DEVICE_CODE == "12013") mLED_LIST.LINE_TEXT = "3#垛机空闲 "; if (mLED_MAIN.DEVICE_CODE == "12016") mLED_LIST.LINE_TEXT = "4#垛机空闲 "; } else { if (mLED_MAIN.DEVICE_CODE == "12007") mLED_LIST.LINE_TEXT = "1#入库站台正常 "; if (mLED_MAIN.DEVICE_CODE == "12010") mLED_LIST.LINE_TEXT = "2#入库站台正常 "; if (mLED_MAIN.DEVICE_CODE == "12013") mLED_LIST.LINE_TEXT = "3#入库站台正常 "; if (mLED_MAIN.DEVICE_CODE == "12016") mLED_LIST.LINE_TEXT = "4#入库站台正常 "; } //continue; } //else //{ // if (mLED_LIST.LINE_NO == 0) // { // if (!string.IsNullOrEmpty(mLED_MAIN.LED_MAIN_PARA1) && mLED_MAIN.LED_MAIN_PARA1 != null) // { // //if (Convert.ToDateTime(mLED_MAIN.LED_MAIN_PARA1.ToString()).AddSeconds(30) < System.DateTime.Now) // //{ // //if (mLED_MAIN.DEVICE_CODE == "12007" && mLED_LIST.LINE_TEXT != "1巷道入库站台正常 ") // // mLED_LIST.LINE_TEXT = "1巷道入库站台正常 "; // //if (mLED_MAIN.DEVICE_CODE == "12010" && mLED_LIST.LINE_TEXT != "2巷道入库站台正常 ") // // mLED_LIST.LINE_TEXT = "2巷道入库站台正常 "; // //if (mLED_MAIN.DEVICE_CODE == "12013" && mLED_LIST.LINE_TEXT != "3巷道入库站台正常 ") // // mLED_LIST.LINE_TEXT = "3巷道入库站台正常 "; // //if (mLED_MAIN.DEVICE_CODE == "12016" && mLED_LIST.LINE_TEXT != "4巷道入库站台正常 ") // // mLED_LIST.LINE_TEXT = "4巷道入库站台正常 "; // //} // } // //else // //{ // // continue; // //} // } //} //图文区序号从0开始 AREA_NO++; string PATH = APP_PATH + mLED_LIST.FILE_NAME; #region 添加图文区 RETURN_ERROR = mBX_5M.AddScreenProgramBmpTextArea(mLED_LIST.AREA_X, mLED_LIST.AREA_Y, mLED_LIST.AREA_WIDTH, mLED_LIST.AREA_HEIGHT); if (!mBX_5M.GetErrorMessage("AddScreenProgramBmpTextArea", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("AddScreenProgramBmpTextArea Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion //生成或重写对应文件 //System.IO.File.WriteAllText(PATH,mLED_LIST.LINE_TEXT.Length>15? mLED_LIST.LINE_TEXT.Substring(0,14): mLED_LIST.LINE_TEXT); System.IO.File.WriteAllText(PATH,mLED_LIST.LINE_TEXT); //160,32的屏幕,10号字体,每行最多显示10字 if (mLED_LIST.LINE_TEXT.Length < 11) { mLED_LIST.SHOW_STUNT = 1;//静止 } #region 添加文件到图文区 RETURN_ERROR = mBX_5M.AddScreenProgramAreaBmpTextFile(AREA_NO, PATH, mLED_LIST.FONT_SIZE, mLED_LIST.SHOW_STUNT, mLED_LIST.RUN_SPEED, mLED_LIST.SHOW_TIME); if (!mBX_5M.GetErrorMessage("AddScreenProgramAreaBmpTextFile", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("AddScreenProgramAreaBmpTextFile Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion } //未添加任何图文区 if (AREA_NO == -1) { #region 强制关机 //RETURN_ERROR = mBX_5M.PowerOffScreen(); //if (!mBX_5M.GetErrorMessage("PowerOffScreen", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) //{ // rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("PowerOffScreen Error: {0}\r\n", RETURN_ERROR_MESSAGE); //} #endregion } else { #region 强制开机 //RETURN_ERROR = mBX_5M.PowerOnScreen(); //if (!mBX_5M.GetErrorMessage("PowerOnScreen", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) //{ // rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("PowerOnScreen Error: {0}\r\n", RETURN_ERROR_MESSAGE); //} #endregion #region 发送数据 RETURN_ERROR = mBX_5M.SendScreenInfo(); if (!mBX_5M.GetErrorMessage("SendScreenInfo", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("SendScreenInfo Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion } #region 删除屏幕 RETURN_ERROR = mBX_5M.DeleteScreen(); if (!mBX_5M.GetErrorMessage("DeleteScreen", RETURN_ERROR, out RETURN_ERROR_MESSAGE)) { rchMessage.Text += SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() + string.Format("DeleteScreen Error: {0}\r\n", RETURN_ERROR_MESSAGE); } #endregion //更新LED_MAIN.LED_STATUS="1"(已发送) mLED_MAIN.LED_STATUS = "1"; mLED_MAIN.LED_MAIN_PARA1 = System.DateTime.Now.ToString(); Program._I_LEDService.LED_MAIN_Update(mLED_MAIN); } } catch (Exception ex) { //Program._log.Error(string.Format("LED_SEND catch Exception: {0}", ex.Message)); } } #endregion #region 数据清理 private void miDataClear_Click(object sender, EventArgs e) { ToolStripMenuItem item = sender as ToolStripMenuItem; if (item != null) { switch (item.Name) { //数据清理 case "miDataClear": TABLE_CLEAR frmClear = new TABLE_CLEAR(); frmClear.Show(this); break; } } } #endregion } }