using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DBFactory;
using System.Net.Sockets;
using System.Threading;
using ICommLayer;
using CommLayerFactory;
using Microsoft.VisualBasic;
namespace ControlSystem
{
///
/// Creator:Richard.liu
/// 调度程序主窗口
///
public partial class FrmControlMonitor : Form
{
private Object thisLock = new Object();
Model.MDevice device = null;//20110331
StringBuilder sql = new StringBuilder();
char[] dd = new char[1] { '.' };//20101124
string[] DS;//20101124
FrmDeviceStatus _deviceStatus = new FrmDeviceStatus();
FrmWorkstationStatus _worstation = new FrmWorkstationStatus();
#region 方法
public void FlashPanit(string obj, bool visible)
{
this.Controls[obj].Visible = visible;
}
public void FlashPanit(string obj, Image backgroundImage)
{
this.Controls[obj].BackgroundImage = backgroundImage;
}
public void FlashPanit(string obj, ImageLayout backgroundImageLayout)
{
this.Controls[obj].BackgroundImageLayout = backgroundImageLayout;
}
public void FlashPanit(string obj, int top, int left)
{
this.Controls[obj].Top = top;
this.Controls[obj].Left = left;
}
public void FlashPanit(string obj, string text, bool append)
{
if (append == true)
{
this.Controls[obj].Text += text;
}
else
{
this.Controls[obj].Text = text;
}
}
public string GetObjectText(string obj)
{
return this.Controls[obj].Text;
}
public void MonitorRefresh(object dataSource)
{
if (dataSource!=this.dgvMonitor.DataSource)
{
this.dgvMonitor.DataSource = dataSource;
}
//20100108
dataSource = null;
}
public void MonitorRefresh()
{//20110222
if (CStaticClass.RealRefresh == true)
{
sql.Remove(0, sql.Length);
sql.Append("select * from V_Monitor_Task where ").Append(CStaticClass.Monstatus).Append(" order by 设备指令索引 asc ");
this.dgvMonitor.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}
}
public void ManagerRefresh(object dataSource)
{
if (this.dgvManager.DataSource != dataSource)
{
this.dgvManager.DataSource = dataSource;
}
//20100108
dataSource = null;
}
public void ManagerRefresh()
{//20110222
if (CStaticClass.RealRefresh == true)
{
sql.Remove(0, sql.Length);
sql.Append("select * from V_Manage_Task where ").Append(CStaticClass.Manstatus);
this.dgvManager.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}
}
#endregion
private static FrmControlMonitor _formInstance;
public static FrmControlMonitor FormInstance
{
get
{
if (_formInstance == null)
{
_formInstance = new FrmControlMonitor();
}
return _formInstance;
}
set { _formInstance = value; }
}
//IGetDeviceState gds;
CGetState gs = new CGetState();
CControl cc = new CControl();
CListenPLCAsk cplc = new CListenPLCAsk();
CCommonFunction ccf = new CCommonFunction();
DBOperator dbo = CStaticClass.dbo;
DBOperator dbo1 = CStaticClass.dbo1;
DBOperator dboM =CStaticClass.dboM;
public FrmControlMonitor()
{
InitializeComponent();
_formInstance = this;
//201100608
CListenAGVState.DataChange+=new CDataSourceChangeEventHandler(CListenAGVState_DataChange);
CListenAGVState.UpdateDB+=new CUpdateDBEventHandler(CListenAGVState_UpdateDB);
DataView dv;
System.IO.Ports.SerialPort sp;
try
{
//20100609
#region 串口初始化
sql.Remove(0, sql.Length);
sql.Append("SELECT F_DeviceIndex, F_CommSettings, F_SerialPort FROM T_Base_Device where F_SerialPort>0");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
sp=new System.IO.Ports.SerialPort("COM"+dv[i]["F_SerialPort"].ToString());
sp.BaudRate = 9600;
sp.Parity = System.IO.Ports.Parity.None;
sp.DataBits = 8;
sp.StopBits = System.IO.Ports.StopBits.One;
CStaticClass.serialports.Add(Convert.ToInt32( dv[i]["F_DeviceIndex"]),sp);
}
#endregion
}
catch (Exception ex)
{
tsStatus.Text = "串口初始化时:" + ex.Message;
}
finally
{
dv=null;
sp=null;
}
}
///
/// 20110405相应CListenAGV线程的数据反馈事件
///
///
///
void CListenAGVState_DataChange(object sender, CDataChangeEventArgs e)
{
try
{
if (e.ManDataSource == null)
{
dgvManager.Invoke(new MethodInvoker(delegate()
{
sql.Remove(0, sql.Length);
sql.Append("select * from V_Manage_Task where ").Append(CStaticClass.Manstatus);
this.dgvManager.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}));
}
else
{
dgvManager.Invoke(new MethodInvoker(delegate() { dgvManager.DataSource = e.ManDataSource; }));
}
if (e.MonDataSource == null)
{
dgvMonitor.Invoke(new MethodInvoker(delegate() {
sql.Remove(0, sql.Length);
sql.Append("select * from V_Monitor_Task where ").Append(CStaticClass.Monstatus).Append(" order by 设备指令索引 asc ");
this.dgvMonitor.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}));
}
else
{
dgvMonitor.Invoke(new MethodInvoker(delegate() { dgvMonitor.DataSource = e.MonDataSource; }));
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("处理附加线程反馈数据更新时:" + ex.Message) < 0)
{
tsStatus.Text += "处理附加线程反馈数据更新时:" + ex.Message;
}
}
}
///
/// 20110608相应CListenAGV线程的数据库更新事件
///
///
///
void CListenAGVState_UpdateDB(object sender, CUpdateDBChangeEventArgs e)
{
try
{
this.Invoke(new MethodInvoker(delegate()
{
if (e.Taskindex > 0)
{
gs.ActionComplete(e.Deviceindex, e.Taskindex, e.Taskstate);
}
else
{
dbo1 = e.Dbo;
dbo1.ExecuteSql(e.ExeSQL.ToString());
}
}));
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("处理附加线程更新数据库时:" + ex.Message) < 0)
{
tsStatus.Text += "处理附加线程更新数据库时:" + ex.Message;
}
}
}
private void FrmControlMonitor_Load(object sender, EventArgs e)
{
if (this.rbmanAll.Checked == true)
{
CStaticClass.Manstatus = " F_Status<>-1 ";
}
if (this.rbmanRun.Checked == true)
{
CStaticClass.Manstatus = " F_Status=1 ";
}
if (this.rbmanWait.Checked == true)
{
CStaticClass.Manstatus = " F_Status=0 ";
}
//显示设备指令
sql.Remove(0, sql.Length);
sql.Append("select * from V_Monitor_Task where " ).Append( CStaticClass.Monstatus ).Append( " order by 设备指令索引 asc ");
this.dgvMonitor.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//显示调度任务
sql.Remove(0, sql.Length);
sql.Append("select * from V_Manage_Task where " ).Append( CStaticClass.Manstatus);
this.dgvManager.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
this.tabPage1.AutoScrollMinSize = new Size(1072, 312);
#region 添加输送机、穿梭车和堆垛机的单击事件
foreach (Control ctrl in this.plAccessorial1.Controls)
{
if (ctrl.GetType().ToString() == "System.Windows.Forms.Button")
{
ctrl.Click += new EventHandler(ctrl_Click);
}
if ((ctrl.GetType().ToString() == "System.Windows.Forms.PictureBox")&&(ctrl.Enabled==true))
{
ctrl.Click += new EventHandler(ctrl_ClickPic);
}
}
foreach (Control ctrl in this.plAccessorial2.Controls)
{
if (ctrl.GetType().ToString() == "System.Windows.Forms.Button")
{
ctrl.Click += new EventHandler(ctrl_Click);
}
if ((ctrl.GetType().ToString() == "System.Windows.Forms.PictureBox") && (ctrl.Enabled == true))
{
ctrl.Click += new EventHandler(ctrl_ClickPic);
}
if (ctrl.GetType().ToString() == "System.Windows.Forms.GroupBox")
{
foreach (Control ct in ctrl.Controls)
{
if (ct.GetType().ToString() == "System.Windows.Forms.TextBox")
{
ct.Click += new EventHandler(ctrl_ClickTxt);
}
}
}
}
#endregion
}
private void ctrl_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
_deviceStatus.DeviceIndex = Convert.ToInt32(btn.Tag);
_deviceStatus.ShowDialog();
}
private void ctrl_ClickTxt(object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
_worstation.DeviceIndex = Convert.ToInt32(txt.Tag);
_worstation.ShowDialog();
}
private void ctrl_ClickPic(object sender, EventArgs e)
{
PictureBox btn = (PictureBox)sender;
_deviceStatus.DeviceIndex = Convert.ToInt32(btn.Tag );
_deviceStatus.ShowDialog();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (CStaticClass.Order == true)
{
gs.GetDeviceState();
if (tsStatus.Text.Length > 300)
tsStatus.Text = "";
}
}
private void TSMrefresh_Click(object sender, EventArgs e)
{
sql.Remove(0, sql.Length);
sql.Append("select * from V_Manage_Task where " ).Append( CStaticClass.Manstatus);
CStaticClass.RealRefresh = true;
this.dgvManager.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}
private void TSMMonitorRefresh_Click(object sender, EventArgs e)
{
sql.Remove(0, sql.Length);
sql.Append("select * from V_Monitor_Task where " ).Append( CStaticClass.Monstatus ).Append( " order by 设备指令索引 asc ");
CStaticClass.RealRefresh = true;
this.dgvMonitor.DataSource = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
}
private void rbmanAll_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Manstatus = " F_Status<>-1 ";
}
TSMrefresh_Click(sender, e);
}
private void rbmanRun_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Manstatus = " F_Status=1 ";
}
TSMrefresh_Click(sender, e);
}
private void rbmanWait_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Manstatus = " F_Status=0 ";
}
TSMrefresh_Click(sender, e);
}
private void rbmonAll_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Monstatus = " F_Status<>-1 ";
}
TSMMonitorRefresh_Click(sender, e);
}
private void rbmonRun_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Monstatus = " (F_Status>=1) ";
}
TSMMonitorRefresh_Click(sender, e);
}
private void rbmonWait_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if (rb.Checked == true)
{
CStaticClass.Monstatus = " F_Status=0 ";
}
TSMMonitorRefresh_Click(sender, e);
}
private void button2_Click(object sender, EventArgs e)
{
CStaticClass.Monstatus = " F_Status<>-1 ";
TSMMonitorRefresh_Click(sender, e);
}
private void button1_Click(object sender, EventArgs e)
{
try
{
if (this.textBox1.Text.Trim().Length == 0) return;
if (this.comboBox1.Text == "托盘条码")
{
CStaticClass.Monstatus = " 附加信息='" + this.textBox1.Text.Trim() + "' ";
}
if (this.comboBox1.Text == "调度任务索引")
{
CStaticClass.Monstatus = " 调度任务索引='" + this.textBox1.Text.Trim() + "' ";
}
if (this.comboBox1.Text == "设备指令索引")
{
CStaticClass.Monstatus = " 设备指令索引='" + this.textBox1.Text.Trim() + "' ";
}
TSMMonitorRefresh_Click(sender, e);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void dgvMonitor_DataSourceChanged(object sender, EventArgs e)
{
dgvMonitor.Columns["F_Status"].Visible = false;
}
private void dgvManager_DataSourceChanged(object sender, EventArgs e)
{
dgvManager.Columns["F_Status"].Visible = false;
}
private void timer2_Tick(object sender, EventArgs e)
{
//DataTable dt; string ss1;
try
{
if ((CStaticClass.RealRefresh == true) && (CStaticClass.Order == true))
{
//if ((CStaticClass.gcCount % 10) == 0)
//{
// #region 故障信息显示
// ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
// string sql = "SELECT 调度任务索引,设备索引, 设备名称, 故障名称, 发生时间 FROM V_Device_Error_log where 发生时间 like '" + DateTime.Today.ToString("yyyy-MM-dd") + "%' order by 发生时间 asc";
// //20091128
// dt = dbo1.ExceSQL(sql).Tables[0];
// if (dt.Rows.Count > 0)
// {
// this.listView1.Items.Clear();
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// ListViewItem lvi = new ListViewItem();
// lvi.Text = dt.Rows[i]["调度任务索引"].ToString();
// lvi.SubItems.Add(dt.Rows[i]["设备索引"].ToString());
// lvi.SubItems.Add(dt.Rows[i]["设备名称"].ToString());
// lvi.SubItems.Add(dt.Rows[i]["故障名称"].ToString());
// lvi.SubItems.Add(dt.Rows[i]["发生时间"].ToString());
// listView1.Items.Add(lvi);
// //20091128
// lvi = null;
// }
// }
// #endregion
//}
//显示设备指令20110222
//sql.Remove(0, sql.Length);
//sql.Append("select * from V_Monitor_Task where " ).Append( CStaticClass.Monstatus ).Append( " order by 设备指令索引 asc ");
//FrmControlMonitor.FormInstance.MonitorRefresh(dbo1.ExceSQL(sql.ToString()).Tables[0].DefaultView);
////显示调度任务
//sql.Remove(0, sql.Length);
//sql.Append("select * from V_Manage_Task where " ).Append( CStaticClass.Manstatus);
//FrmControlMonitor.FormInstance.ManagerRefresh(
// dbo1.ExceSQL(sql.ToString()).Tables[0].DefaultView);
}
//获取调度任务
if (CStaticClass.ObtainManageTask == true)
{
if (CObtainTask.GetManagerTask() == 0)
{
this.tsStatus.ForeColor = Color.Red;
if (this.tsStatus.Text.IndexOf(CObtainTask.CObtainTaskError) < 0)
{
this.tsStatus.Text += CObtainTask.CObtainTaskError;
}
}
if (CObtainTask.CObtainTaskError.Length > 0)
{
if (this.tsStatus.Text.IndexOf(CObtainTask.CObtainTaskError) < 0)
{
this.tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += CObtainTask.CObtainTaskError;
}
}
CObtainTask.CObtainTaskError = "";
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("获取调度任务时:" + ex.Message) < 0)
{
tsStatus.Text += "获取调度任务时:" + ex.Message;
}
}
finally
{
//dt = null;
}
}
private void timer3_Tick(object sender, EventArgs e)
{
if (CStaticClass.Order == true)
{
//启动拆分进程MyTaskIntoSteps();
CDisassembleTask.MyTaskIntoSteps();
if (CDisassembleTask .DisassembleTaskError!= "")
{
if (tsStatus.Text.IndexOf(CDisassembleTask.DisassembleTaskError) < 0)
{
tsStatus.ForeColor = Color.Red;
tsStatus.Text += CDisassembleTask.DisassembleTaskError;
}
CDisassembleTask.DisassembleTaskError = "";
}
cplc.DealwithPLCAsk();
if (cplc.ListenPLCAskError != "")
{
if (tsStatus.Text.IndexOf(cplc.ListenPLCAskError) < 0)
{
tsStatus.ForeColor = Color.Red;
tsStatus.Text += cplc.ListenPLCAskError;
}
}
cplc.ListenPLCAskError = "";
if (CListenAGVState.TcpServerError != "")
{
if (tsStatus.Text.IndexOf(CListenAGVState.TcpServerError) < 0)
{
tsStatus.ForeColor = Color.Red;
tsStatus.Text += CListenAGVState.TcpServerError;
}
}
CListenAGVState.TcpServerError = "";
}
}
private void timer4_Tick(object sender, EventArgs e)
{
if (CStaticClass.Order == true)
{
#region 读取所有PLC数据
//string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
CStaticClass.GetAllReturns();
//string ss11 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
#endregion
}
}
private void timer5_Tick(object sender, EventArgs e)
{
if (CStaticClass.Order == true)
{
//string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
cc.StartOrder();
if (cc.CControlError != "")
{
if (tsStatus.Text.IndexOf(cc.CControlError) < 0)
{
tsStatus.ForeColor = Color.Red;
tsStatus.Text += cc.CControlError;
}
}
cc.CControlError = "";
}
}
private void timerFlash_Tick(object sender, EventArgs e)
{
//20100108
DataView dvh;
//Model.MDevice device = null;
try
{
if (CStaticClass.Order == true)
{
Panel pp = plAccessorial1;
PictureBox stack1 = bt11001;
PictureBox stack2 = bt11002;
TextBox tw11 = t11001;
TextBox tw21 = t11002;
PictureBox stack3 = bt11003;
PictureBox stack4 = bt11004;
TextBox tw31 = t11003;
TextBox tw41 = t11004;
switch(tabControl1.SelectedIndex )
{
case 0:
pp = plAccessorial1;
tw11 = t11001;
tw21 = t11002;
stack1 = bt11001;
stack2 = bt11002;
tw31 = t11003;
tw41 = t11004;
stack3 = bt11003;
stack4 = bt11004;
break;
case 1:
pp = plAccessorial2;
break;
}
#region 每层楼监视画面
foreach (Control ctrl in pp.Controls)
{
if (((ctrl.GetType().ToString() == "System.Windows.Forms.Button") ||
(ctrl.GetType().ToString() == "System.Windows.Forms.PictureBox")) &&
(ctrl.Enabled == true))
{
device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Tag));
if (device == null)
{//20100108
if (tsStatus.Text.IndexOf("设备索引:" + ctrl.Tag + "在数据库没有记录!") < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "设备索引:" + ctrl.Tag + "在数据库没有记录!";
}
continue;
}
#region 设置设备状态
switch (device.RunState)
{
//空闲
case 0:
if (device.DeviceKind == 1 || device.DeviceKind == 4)
{
ctrl.BackColor = Color.MediumOrchid;
}
else
{
if (device.DeviceKind != 18)
{
ctrl.BackColor = SystemColors.InactiveCaptionText;
}
}
break;
//运行
case 1:
ctrl.BackColor = Color.Lime;
break;
//故障
case 2:
ctrl.BackColor = Color.Red;
break;
//离线
case 3:
ctrl.BackColor = Color.LightYellow;
break;
//停用
case 4:
ctrl.BackColor = Color.Maroon;
break;
//20090920动作完成
case 5:
if (device.DeviceKind == 1 || device.DeviceKind == 4)
{
ctrl.BackColor = Color.MediumSlateBlue;//MediumOrchid;
}
else
{
if (device.DeviceKind != 18)
{
ctrl.BackColor = Color.Gray;
}
}
break;
}
#endregion
#region 移动设备坐标更新
//堆垛机
if (device.DeviceKind == 1)
{
switch (device.DeviceIndex)
{
case 11001:
stack1.Location = new Point((int)(233+18.02 * (device.XCoor - 1)), stack1.Location.Y);
tw11.Location = new Point(stack1.Location.X + 6, tw11.Location.Y);
break;
case 11002:
stack2.Location = new Point((int)(233+18.02 * (device.XCoor - 1)), stack2.Location.Y);
tw21.Location = new Point(stack2.Location.X + 6, tw21.Location.Y);
break;
case 11003:
stack3.Location = new Point((int)(233 + 18.02 * (device.XCoor - 1)), stack3.Location.Y);
tw31.Location = new Point(stack3.Location.X + 6, tw31.Location.Y);
break;
case 11004:
stack4.Location = new Point((int)(233 + 18.02 * (device.XCoor - 1)), stack4.Location.Y);
tw41.Location = new Point(stack4.Location.X + 6, tw41.Location.Y);
break;
}
}
#endregion
}
else if ((ctrl.GetType().ToString() == "System.Windows.Forms.TextBox") || ((ctrl.GetType().ToString() == "System.Windows.Forms.PictureBox") && (ctrl.Name.Substring(0, 1) == "t")))
{
#region 货物探测20101118
DS = ctrl.Tag.ToString().Split(dd);
int devicebyte = 0; int devbit = 0;
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
ctrl.Visible = CStaticClass.GetDevicePhotoelectric(devicebyte,devbit) == 1 ? true : false;
#endregion
}
#region 逻辑有物显示
else if (ctrl.GetType().ToString() == "System.Windows.Forms.RadioButton")
{
//20100108DataView dvh;
dvh = dbo.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_DeviceIndex = " + ctrl.Tag + ") AND (F_HaveGoods = 1)").Tables[0].DefaultView;
if (dvh.Count > 0)
{
ctrl.Visible = true;
ctrl.BackColor = Color.Blue;
}
else
{
ctrl.Visible = false;
}
}
#endregion
}
#endregion
}
}
catch (Exception ex)
{//20100108
if (tsStatus.Text.IndexOf("刷新界面动画时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "刷新界面动画时:" + ex.Message;
}
}
finally
{//20100108
dvh = null;
device = null;
}
}
private void tabPage1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.TranslateTransform(this.tabPage1.AutoScrollPosition.X, this.tabPage1.AutoScrollPosition.Y);
//20100108
g.Dispose();
}
private void dgvMonitor_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow DGVRow in this.dgvMonitor.Rows)
{
if (DGVRow != null)
{
if (Convert.ToInt32(DGVRow.Cells["f_status"].Value) >= 30)
{
DGVRow.DefaultCellStyle.BackColor = Color.Red;
}
}
}
}
private void timerCamera_Tick(object sender, EventArgs e)
{
//20100108控制摄像头解除当前区域报警
//摄像头设备类型29;每个设备的F_LocalPort代表摄像头设备索引;F_RemotePort代表摄像头划分的区域值(1--12)
//检查F_LocalPort代表摄像头设备索引的区域F_RemotePort内的所有设备都没有报警就置F_LockedState=0
if (CStaticClass.Order == false) return;
DataView dv;
DataView dv1;
DataView dvs;
try
{
dv = dbo.ExceSQL("select F_DeviceIndex,F_LockedState from T_Base_Device where F_DeviceKindIndex=29 and F_LockedState>0").Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
if (dv[i]["F_LockedState"] != DBNull.Value)
{//有设备索引锁住摄像头
dv1 = dbo.ExceSQL("SELECT F_RemotePort FROM T_Base_Device WHERE F_DeviceIndex=" + dv[i]["F_LockedState"] + "").Tables[0].DefaultView;
if (dv1.Count > 0)
{
//检查F_LocalPort摄像头设备索引的F_RemotePort区域内的所有设备都没有报警就置F_LockedState=0
dvs = dbo.ExceSQL("SELECT SUM(F_ErrorCode) AS errs FROM T_Base_Device WHERE (F_LocalPort = " + dv[i]["F_DeviceIndex"] + " and F_RemotePort=" + dv1[0]["F_RemotePort"] + ") ").Tables[0].DefaultView;
if (dvs[0]["errs"] != DBNull.Value)
{
if (Convert.ToInt32(dvs[0]["errs"]) <= 0)
{
#region 控制摄像头解除当前区域报警
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + dv[i]["F_DeviceIndex"] + " and F_LockedState>0");
#endregion
}
}
}
}
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf(ex.Message) < 0)
{
tsStatus.Text += ex.Message;
}
}
finally
{
dv = null;
dvs = null;
dv1 = null;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
string df = "";
switch (this.comboBox1.Text)
{
case "托盘条码":
df = "附加信息";
break;
case "调度任务索引":
df = "调度任务索引";
break;
case "设备指令索引":
df = "设备指令索引";
break;
default:
return;
}
//20100208
sql.Remove(0, sql.Length);
sql.Append("select distinct " + df + " from V_Monitor_Task ");
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
this.textBox1.DataSource = null;
this.textBox1.DisplayMember = df;
this.textBox1.ValueMember = df;
this.textBox1.DataSource = dv;
}
}
catch (Exception ex)
{
throw ex;
}
}
private void timerListenSerialPort_Tick(object sender, EventArgs e)
{//20100609监听状态是大于0的串口设备
DataView dv,dvlane;
int devindex = 0, byteRead = 0;
byte[] GetBytes;
int TaskIdx = 0;
int mti =0;
int mtikind=0;
try
{
sql.Remove(0, sql.Length);
sql.Append("SELECT T_Base_Device.F_DeviceIndex,T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task where (T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex) and (T_Monitor_Task.F_Status > 0) AND (T_Base_Device.F_SerialPort > 0)");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
devindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]);
if (CStaticClass.serialports[devindex].IsOpen == false)
{
CStaticClass.serialports[devindex].Open();
}
byteRead = CStaticClass.serialports[devindex].BytesToRead;
if (byteRead >= 8)
{
GetBytes = new byte[byteRead];
CStaticClass.serialports[devindex].Read(GetBytes, 0, byteRead);
if ((byteRead == 8) && (GetBytes[1] == 240) && (GetBytes[6] == 170))//PLC执行PC命令的应答帧,PC认为任务开始运行
{
TaskIdx =Convert.ToInt32( (GetBytes[3] * Math.Pow(2, 8) + GetBytes[4]));
mti = ccf.GetManageTaskIndexfromMonitor(TaskIdx);
mtikind = ccf.GetManageTaskKindIndexFromMonitor(TaskIdx);
#region 修改调度任务状态
sql.Remove(0, sql.Length);
sql.Append("update T_Monitor_Task set F_Status=2 where F_Status=1 and F_MonitorIndex=" + TaskIdx);
dbo.ExceSQL(sql.ToString());
#endregion
#region 根据任务号和探物情况判断任务执行的位置回写本地管理表
sql.Remove(0, sql.Length);
sql.Append("update T_Manage_Task set FCurrentLocation=" ).Append(
devindex ).Append( " where F_ManageTaskKindIndex=" ).Append( mtikind ).Append( " and FID=" ).Append( mti ).Append( "");
dbo.ExceSQL(sql.ToString());
//调度任务表也记录当前位置,主要是给输送机链用
sql.Remove(0, sql.Length);
sql.Append("update T_Monitor_Task set F_CurrentLocation=" ).Append(
devindex ).Append( " where F_MonitorIndex=" ).Append( TaskIdx);
dbo.ExceSQL(sql.ToString());
//设备逻辑有物
//20090918给堆垛机送货的输送机逻辑有物解锁F_HaveGoods=0
//20100108
sql.Remove(0, sql.Length);
sql.Append("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate where F_LaneGateDeviceIndex=" ).Append( devindex);
dvlane = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvlane.Count > 0)
{
sql.Remove(0, sql.Length);
sql.Append("update T_Base_Device set F_HaveGoods=0 where F_DeviceIndex=" ).Append( devindex);
dbo.ExceSQL(sql.ToString());
}
#endregion
}
else if ((byteRead == 16)&& (GetBytes[1] != 240) && (GetBytes[6] != 170))//PLC主动上报信息帧:完成、故障;PC需要发送应答帧
{
TaskIdx = Convert.ToInt32((GetBytes[2] * Math.Pow(2, 8) + GetBytes[3]));
mti = ccf.GetManageTaskIndexfromMonitor(TaskIdx);
mtikind = ccf.GetManageTaskKindIndexFromMonitor(TaskIdx);
if (GetBytes[4] == 1)//完成
{
gs.ActionComplete(devindex, TaskIdx, 0);
}
else if (GetBytes[4]>=30)//故障
{
gs.ActionError(devindex, TaskIdx, GetBytes[4]);
}
byte [] _Senddata=new byte[8];
_Senddata[0] = 8;
_Senddata[1] = 240;
_Senddata[2] = GetBytes[1];
_Senddata[3] = Convert.ToByte(TaskIdx >> 8);
_Senddata[4] = Convert.ToByte(TaskIdx & 255);
_Senddata[5] = 0;//Convert.ToByte(devindex);
_Senddata[6] = 170;
byte SXor = _Senddata[0];
for (int k = 1; k <= 6; k++)
{
SXor = Convert.ToByte(Convert.ToInt16(SXor) ^ Convert.ToInt16(_Senddata[k]));
}
_Senddata[7] = SXor;
CStaticClass.serialports[devindex].Write(_Senddata, 0, 8);
}
}
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("监听串口设备" + devindex.ToString() + "时:" + ex.Message) < 0)
{
tsStatus.Text += "监听串口设备" + devindex.ToString() + "时:" + ex.Message;
}
}
finally
{
dv = null;
GetBytes = null;
}
}
private void tsStatus_TextChanged(object sender, EventArgs e)
{
if (OPCClient.CCommonOPCClient.OpcError != null)//20101011
{
if (OPCClient.CCommonOPCClient.OpcError.IndexOf("同步数据时:OPC Server没连接到PLC,并且超过重复连接次数!请先关闭命令开关,检查通讯线路,确认后重新打开命令开关!") >= 0)
{
if (tsStatus.Text.IndexOf("同步数据时:OPC Server没连接到PLC,并且超过重复连接次数!请先关闭命令开关,检查通讯线路,确认后重新打开命令开关!") >= 0)
{
FrmMain.FormInstance.Voice.Speak("同步数据时:OPC Server没连接到PLC,并且超过重复连接次数!请先关闭命令开关,检查通讯线路,确认后重新打开命令开关!", DotNetSAPI.SpeechVoiceSpeakFlags.SVSFlagsAsync);
//tsStatus.Text = "";
}
}
}
if (SocketsTCPIP.CClientTCPIP.TcpError != null)//20101011
{
if (SocketsTCPIP.CClientTCPIP.TcpError.IndexOf("SocketsTCPIP:连接远程主机时,发生三次连接失败错误!请检查远程主机是否正常运行!重新打开命令开关。") >= 0)
{
if (tsStatus.Text.IndexOf("SocketsTCPIP:连接远程主机时,发生三次连接失败错误!请检查远程主机是否正常运行!重新打开命令开关。") >= 0)
{
FrmMain.FormInstance.Voice.Speak("SocketsTCPIP:连接远程主机时,发生三次连接失败错误!请检查远程主机是否正常运行!重新打开命令开关。", DotNetSAPI.SpeechVoiceSpeakFlags.SVSFlagsAsync);
//tsStatus.Text = "";
}
}
}
if (CParsePLCData.CParsePLCError != null)//20101011
{
if (CParsePLCData.CParsePLCError.IndexOf("发生故障:有货无调度任务,请您检查确认!") >= 0)
{
if (tsStatus.Text.IndexOf("发生故障:有货无调度任务,请您检查确认!") >= 0)
{
FrmMain.FormInstance.Voice.Speak("组箱区入库输送机发生故障:有货无调度任务,请您检查确认!", DotNetSAPI.SpeechVoiceSpeakFlags.SVSFlagsAsync);
//tsStatus.Text = "";
}
}
}
}
private void FrmControlMonitor_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.FormBorderStyle = FormBorderStyle.None;
}
else
{
this.FormBorderStyle = FormBorderStyle.Sizable;
}
}
private void ReApplyTask_Click(object sender, EventArgs e)
{//20110331
try
{
LinkLabel bt = (LinkLabel)sender;
int devBind = Convert.ToInt32(bt.Tag);
device = Model.CGetInfo.GetDeviceInfo(devBind);//20110331
if (CStaticClass.GetDevicePhotoelectric(device.SendOutDetect) != 1) return;//20110331
DataView dv = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex, F_BarCode FROM T_Base_PLC_Ask WHERE (F_BarCode<>'-') and (F_BindingDevice = {0})", devBind)).Tables[0].DefaultView;
if (dv.Count > 0)
{
cplc.clientApp.ManageStockCreateApplyAsync(dv[0]["F_BarCode"].ToString(), dv[0]["F_DeviceIndex"].ToString());
}
}
catch (Exception ex)
{
tsStatus.Text = "重新申请任务时:" + ex.Message;
}
}
private void HandleCompelte_Click(object sender, EventArgs e)
{//20110412
try
{
LinkLabel bt = (LinkLabel)sender;
int deviceindex = Convert.ToInt32(bt.Tag);
string barcode = string.Empty;
if (CStaticClass.GetDevicePhotoelectric(deviceindex.ToString() + ".0") != 1) return;//20110331叠盘机无物
sql.Remove(0, sql.Length);
sql.Append("SELECT T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark").Append(
",F_FirstProject,F_BoxBarcode,F_TempFirstProject FROM T_Base_Device,T_Base_PLC_Ask").Append(
" where T_Base_Device.F_DeviceIndex=T_Base_PLC_Ask.F_DeviceIndex and F_BarCode<>'-' and T_Base_PLC_Ask.F_DeviceIndex=").Append(deviceindex).Append(
" order by T_Base_Device.F_DeviceIndex desc");
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
barcode = dv[0]["F_BarCode"].ToString();
sql.Remove(0, sql.Length);
sql.Append("SELECT T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark").Append(
",F_FirstProject,F_BoxBarcode,F_TempFirstProject FROM T_Base_Device,T_Base_PLC_Ask").Append(
" where T_Base_Device.F_DeviceIndex=T_Base_PLC_Ask.F_DeviceIndex and T_Base_PLC_Ask.F_Remark=").Append(deviceindex).Append(
" order by T_Base_Device.F_DeviceIndex desc");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
int i = 0;
//20110505一楼叠盘机下达命令到叠盘机14001
int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]);
int dpjcode = 0;
if (deviceindex == 14001)
{
dpjcode = 14001;
}
else
{
dpjcode = Convert.ToInt32(dv[i]["F_BoxBarcode"]);
}
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
dtime.Remove(dtime.Length - 1, 1);
int hidx = ccf.GetTempManageIdx();
int hmindx = ccf.GetMonitorIndex(hidx, 2);
string ah = string.Format("D-{0}.0;D{1}.0;I{0};I{1}", dv[i]["F_Remark"].ToString(), dv[i]["F_BoxBarcode"].ToString());
sql.Remove(0, sql.Length);
sql.Append("insert into T_Monitor_Task(F_MonitorTaskLevel,F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex,").
Append("F_DeviceIndex,F_DeviceCommandIndex,F_UseAwayFork,F_AheadDetect,F_RunningLock,F_TxtParam) ").
Append("values(2,").Append(GetRouteIDsub(Convert.ToInt32(dv[i]["F_BoxBarcode"]))).Append(",").Append(hidx).Append(",2,").Append(hmindx).Append(",").Append(dpjcode).
Append(",8,'-','").Append(ah).Append("','").Append(dcode.ToString()).Append("','").Append(barcode).Append("')");
dbo.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("update T_Base_device set F_LockedState=").Append(hmindx).Append(
" where F_DeviceIndex=").Append(dcode);
dbo.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,").
Append("FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FIntoStepOK) ").
Append("values(").Append(hidx).Append(",'").Append(barcode).Append("',1,2,'").Append(ccf.GetWarehouseIndex()).Append("','").Append(Convert.ToInt32(dv[i]["F_BoxBarcode"])).Append("','-','").Append(ccf.GetWarehouseIndex()).Append("','"
).Append(dv[i]["F_TempFirstProject"]).Append("','-',0,0,'-','").Append(dtime).Append("','1')");
dbo.ExecuteSql(sql.ToString());
cplc.client.ManageStockCreateCompleteAsync(dv[i]["F_BoxBarcode"].ToString(),barcode);
}
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '-' WHERE (F_DeviceIndex = {0})", deviceindex));
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "人工强制叠盘完成", deviceindex.ToString(), barcode);
FrmControlMonitor.FormInstance.MonitorRefresh();//20110222
FrmControlMonitor.FormInstance.ManagerRefresh();//20110222
}
}
catch(Exception ex)
{
tsStatus.Text = "强制叠盘完成时:" + ex.Message;
}
}
int GetRouteIDsub(int device)
{//20110412
DataView dv = dbo.ExceSQL("SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex=" + device + "").Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_RouteIDSub"]);
}
else
{
return -1;
}
}
private void linkLabel3_Click(object sender, EventArgs e)
{
if (CStaticClass.GetDevicePhotoelectric(12030, 0) == 1)
{
if (MessageBox.Show("您确认12030没扫到条码,需要人工检查吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
{
return;
}
string dtime = DateTime.Now.ToString("u");//20101028
dtime = dtime.Substring(0, dtime.Length - 1);//20101028
int AutoManageIdx = ccf.GetTempManageIdx();
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
"values(" + AutoManageIdx + ",'0000000000','3',2,'" + ccf.GetWarehouseIndex() + "','12030','-','" + ccf.GetWarehouseIndex() + "','12032','-',0,0,'-','" + dtime + "')";//20101028
dbo.ExceSQL(Sql);
FrmControlMonitor.FormInstance.ManagerRefresh();//20110222
}
}
}
}