宜昌华友成品库管理软件
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

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
}
}