You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
431 lines
16 KiB
431 lines
16 KiB
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<SiaSun.LMS.Model.LED_MAIN> 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<SiaSun.LMS.Model.LED_LIST> 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
|
|
}
|
|
}
|