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.

2098 lines
88 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using DotNetSAPI;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Runtime.Serialization;
using CommonLib;
namespace wcfControlMonitorClient
{
public partial class FrmClient : Form, WcfControlMonitor.IControlMonitorCallback
{
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams cp = base.CreateParams;
// cp.ExStyle |= 0x02000000;//WS_CLIPCHILDREN 两个窗体叠加时,重叠部分不重绘
// return cp;
// }
//}
Model.MDevice devinfo;
int PLC = 0;
DateTime lastupdate = DateTime.Now;
FrmDeviceStatus _deviceStatus = new FrmDeviceStatus();
FrmWorkstationStatus _worstation = new FrmWorkstationStatus();
StringBuilder sql = new StringBuilder();
DBFactory.DBOperator dbo = CStaticClass.dbo;
DBFactory.DBOperator dbo1 = new DBFactory.DBOperator();
SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
public SpVoice Voice = new SpVoice();
public Model.MDevice[] devlist;
public int devsn = 0;
private static FrmClient _formInstance;
public static FrmClient FormInstance
{
get
{
if (_formInstance == null)
{
_formInstance = new FrmClient();
}
return _formInstance;
}
set { _formInstance = value; }
}
public FrmClient()
{
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "操作日志", "FrmClient()", "", "");
InitializeComponent();
try
{
//初始化管理和调度交互状态
Model.CGetInfo.AddIOControlStatus();
Model.CGetInfo.AddDeviceKindInfo();
Model.CGetInfo.AddDeviceInfo();
Model.CGetInfo.AddDeviceErrors();
devlist = Model.CGetInfo.DeviceInfo.Values.ToArray<Model.MDevice>();
DataView dv0 = dbo.ExceSQL("SELECT distinct F_S7Connection,F_DBWGetLength FROM T_Base_Device WHERE (F_DeviceKindIndex = 28)").Tables[0].DefaultView;
if (dv0.Count > 0)
{
for (int i = 0; i < dv0.Count; i++)
{
if (CStaticClass.MutiS7ConnReturns.ContainsKey(dv0[i]["F_S7Connection"].ToString()) == false)
{
CStaticClass.MutiS7ConnReturns.Add(dv0[i]["F_S7Connection"].ToString(), new int[Convert.ToInt32(dv0[i]["F_DBWGetLength"])]);
}
}
}
CStaticClass.SystemName = CommonClassLib.AppSettings.GetValue("SystemName");
this.notifyIcon1.Text = CStaticClass.SystemName;
this.Text = CStaticClass.SystemName;
OPCClient.CCommonOPCClient.Hostname = CommonClassLib.AppSettings.GetValue("HostName");
OPCClient.CCommonOPCClient.ProgID = CommonClassLib.AppSettings.GetValue("OPCProgID");
#region 客户端订阅初始化20120428
DataView dvx;
DataView dv = dbo.ExceSQL("SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_ReadSubscription =F_DeviceIndex) ORDER BY F_ReadSubscription").Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
dvx = dbo.ExceSQL(string.Format("SELECT (MAX(F_DBW2Address) + F_DBWGetLength) AS maxdbw2 FROM T_Base_Device WHERE (F_ReadSubscription = '{0}') AND (F_DeviceKindIndex <> 33) GROUP BY F_DBWGetLength ORDER BY maxdbw2 DESC", dv[i]["F_ReadSubscription"])).Tables[0].DefaultView;
if (dvx.Count > 0)
{
if (CStaticClass.MutiReadSubscriptionDeviceStateReturns.ContainsKey(dv[i]["F_ReadSubscription"].ToString()) == false)
{
CStaticClass.MutiReadSubscriptionDeviceStateReturns.Add(dv[i]["F_ReadSubscription"].ToString(), new int[Convert.ToInt32(dvx[0]["maxdbw2"]) - Convert.ToInt32(dv[i]["F_DBW2Address"])]);
}
}
}
dv = dbo.ExceSQL("SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_DeviceKindIndex=33) ORDER BY F_ReadSubscription").Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
if (CStaticClass.MutiReadSubscriptionDeviceSplitReturns.ContainsKey(dv[i]["F_ReadSubscription"].ToString()) == false)
{
CStaticClass.MutiReadSubscriptionDeviceSplitReturns.Add(dv[i]["F_ReadSubscription"].ToString(), new int[Convert.ToInt32(dv[i]["F_DBWGetLength"])]);
}
}
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "操作日志", "FrmClient()-准备CreateSubscriptionGroup", "", "");
OPCClient.CCommonOPCClient.CreateSubscriptionGroup();
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "操作日志", "FrmClient()-CreateSubscriptionGroup", "", "");
OPCClient.CCommonOPCClient.UpdateDB += new CUpdateDBEventHandler(CCommon_UpdateDB);
if (OPCClient.CCommonOPCClient.OpcError != null)
{
MessageBox.Show(OPCClient.CCommonOPCClient.OpcError);
}
}
catch (Exception ex)
{
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "操作日志", "FrmClient()-catch", ex.StackTrace, ex.Message);
throw ex;
}
#endregion
}
/// <summary>
/// 客户端事件响应20120428
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void CCommon_UpdateDB(object sender, CUpdateDBChangeEventArgs e)
{
if (CStaticClass.WCFOK == true && !CStaticClass.client.IsDisposed)
{
string errtext = string.Empty;
this.BeginInvoke(new MethodInvoker(delegate()
{ DealWithDeviceState(out errtext, e.Deviceindex, e.SplitbyteValue, e.Devicestates); }));
}
}
/// <summary>
/// 客户端事件响应处理函数20120428
/// </summary>
/// <param name="errtext"></param>
/// <param name="deviceindex"></param>
/// <param name="splitbyteValue"></param>
/// <param name="devicestates"></param>
/// <returns></returns>
bool DealWithDeviceState(out string errtext, int deviceindex, byte[] splitbyteValue, byte[] devicestates)
{//deviceindex设备组代表的订阅,首先把设备组按照F_DBW2Address由小到大排序,拆分到具体每个设备
if ((splitbyteValue == null) && (devicestates == null))
{//20120420
errtext = OPCClient.CCommonOPCClient.OpcError;
SendMessage(string.Format("tsStatus@FrmClient.DealWithDeviceState时,订阅组:{0}发生异常,{1}!", deviceindex, errtext));
return false;
}
errtext = string.Empty; DataView dv = new DataView(); DataView dvsp = new DataView(); DataView dvbc = new DataView();
int devicebegin = 0; int DBW2Addressbegin = 0; int SplitBytebegin = 0; string S7Connection = string.Empty;
int SplitByteLength = 0;
try
{
StringBuilder sql = new StringBuilder(string.Format("SELECT F_DeviceKindIndex, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex <>33) AND (F_ReadSubscription = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex));
dv = dbo1.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
devicebegin = Convert.ToInt32(dv[0]["F_DeviceIndex"]);
DBW2Addressbegin = Convert.ToInt32(dv[0]["F_DBW2Address"]);
if (Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 7 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 24 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 35 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 8 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 40)
{
SplitBytebegin = Convert.ToInt32(dv[0]["F_SplitByte"]); // 光电开关起始
}
S7Connection = dv[0]["F_S7Connection"].ToString();
sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address", deviceindex));
dvsp = dbo1.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dvsp.Count > 0)
{
SplitByteLength = Convert.ToInt32(dvsp[0]["F_DBWGetLength"]);
}
}
else
{
sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceIndex = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex));
dv = dbo1.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
devicebegin = Convert.ToInt32(dv[0]["F_DeviceIndex"]);
DBW2Addressbegin = Convert.ToInt32(dv[0]["F_DBW2Address"]);
SplitBytebegin = Convert.ToInt32(dv[0]["F_SplitByte"]);
S7Connection = dv[0]["F_S7Connection"].ToString();
sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address", deviceindex));
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
SplitByteLength = Convert.ToInt32(dv[0]["F_DBWGetLength"]);
}
}
else
{//20120420
errtext = string.Format("FrmClient.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!", deviceindex);
SendMessage(string.Format("tsStatus@FrmClient.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!", deviceindex));
return false;
}
}
if (splitbyteValue != null)
{
Array.Copy(splitbyteValue, CStaticClass.MutiReadSubscriptionDeviceSplitReturns[deviceindex.ToString()], splitbyteValue.Length);
dvsp = dbo1.ExceSQL(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte FROM T_Base_Device WHERE (F_DeviceKindIndex <>31) AND(F_DeviceKindIndex <>33) AND (F_S7Connection = '{0}') AND (F_DBW2Address IS NOT NULL and F_SplitByte IS NOT NULL and F_SplitByte >={1} and F_SplitByte <{1}+{2}) ORDER BY F_DBW2Address", S7Connection, SplitBytebegin, SplitByteLength)).Tables[0].DefaultView;
for (int i = 0; i < dvsp.Count; i++)
{
devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvsp[i]["F_DeviceIndex"]));
int delta = Convert.ToInt32(dvsp[i]["F_SplitByte"]) - SplitBytebegin;
if (delta < 0) continue;
devinfo.SplitByte_0 = (splitbyteValue[delta] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (splitbyteValue[delta] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (splitbyteValue[delta] & 4) == 4 ? 1 : 0;
devinfo.SplitByte_3 = (splitbyteValue[delta] & 8) == 8 ? 1 : 0;
devinfo.SplitByte_4 = (splitbyteValue[delta] & 16) == 16 ? 1 : 0;
devinfo.SplitByte_5 = (splitbyteValue[delta] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (splitbyteValue[delta] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (splitbyteValue[delta] & 128) == 128 ? 1 : 0;
//if (devinfo.DeviceIndex == 12103 && devinfo.SplitByte_6 == 0)
//{
// label35.Text = "否";
//}
//if (devinfo.DeviceIndex == 12103 && devinfo.SplitByte_6 == 1)
//{
// label35.Text = "是";
//}
//if (devinfo.DeviceIndex == 12101 && devinfo.SplitByte_6 == 0)
//{
// label36.Text = "否";
//}
//if (devinfo.DeviceIndex == 12101 && devinfo.SplitByte_6 == 1)
//{
// label36.Text = "是";
//}
Model.CGetInfo.SetDeviceInfo(devinfo);
}
}
int tempdb2addr = 0; StringBuilder sss = new StringBuilder(); StringBuilder barcode = new StringBuilder();
if (devicestates != null)
{
Array.Copy(devicestates, CStaticClass.MutiReadSubscriptionDeviceStateReturns[deviceindex.ToString()], devicestates.Length);
for (int di = 0; di < dv.Count; di++)
{
int devidx = Convert.ToInt32(dv[di]["F_DeviceIndex"]);
devinfo = Model.CGetInfo.GetDeviceInfo(devidx);
int taskindex = 0;
int state = 0;
//以下代码重新开发CStaticClass.MutiS7ConnReturns改为按照F_ReadSubscription
if (devinfo.Dbw2Getlength > 3)
{
tempdb2addr = Convert.ToInt32(dv[di]["F_DBW2Address"]) - DBW2Addressbegin;
taskindex = (devicestates[tempdb2addr + 2] << 8) + devicestates[tempdb2addr + 3];
switch (devinfo.DeviceKind)
{
case 1:
devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 4) == 4 ? 1 : 0;
devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 8) == 8 ? 1 : 0;
devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 16) == 16 ? 1 : 0;
devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 7] & 128) == 128 ? 1 : 0;
break;
case 2:
if (devinfo.IfCorrelDoubleFork == "1")
{
devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 4) == 4 ? 1 : 0;
devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 8) == 8 ? 1 : 0;
devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 16) == 16 ? 1 : 0;
devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 128) == 128 ? 1 : 0;
}
else
{
devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 4) == 4 ? 1 : 0;
devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 8) == 8 ? 1 : 0;
devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 16) == 16 ? 1 : 0;
devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 6] & 128) == 128 ? 1 : 0;
//if (devinfo.DeviceIndex == 12103 && devinfo.SplitByte_6 == 0)
//{
// label35.Text = "否";
//}
//if (devinfo.DeviceIndex == 12103 && devinfo.SplitByte_6 == 1)
//{
// label35.Text = "是";
//}
//if (devinfo.DeviceIndex == 12101 && devinfo.SplitByte_6 == 0)
//{
// label36.Text = "否";
//}
//if (devinfo.DeviceIndex == 12101 && devinfo.SplitByte_6 == 1)
//{
// label36.Text = "是";
//}
}
break;
case 4:
devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 4) == 4 ? 1 : 0;
devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 8) == 8 ? 1 : 0;
devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 16) == 16 ? 1 : 0;
devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 12] & 128) == 128 ? 1 : 0;
break;
default:
break;
}
if (devinfo.Dbw2Getlength > 1)
{
state = devicestates[tempdb2addr + 1];
}
}
if (devinfo.DeviceIndex == 888)
{
devinfo.XCoor = devicestates[tempdb2addr + 0];
}
int devkind = devinfo.DeviceKind;
if (state >= 30)
{
devinfo.ErrorCode = state;
devinfo.RunState = 2;
}
else
{//0,1,2
if (state == 2)
{
devinfo.RunState = 5;
}
else
{
devinfo.RunState = state;
}
devinfo.ErrorCode = state;
}
devinfo.TaskNo = taskindex;
if ((devinfo.DeviceKind == 1) || (devinfo.DeviceKind == 4))
{
devinfo.XCoor = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标
//devinfo.XCoor = devicestates[tempdb2addr + 12] ;//X坐标
if (devinfo.DeviceKind == 1)
{
devinfo.YCoor = devicestates[tempdb2addr + 11] + (devicestates[tempdb2addr + 10] << 8) + (devicestates[tempdb2addr + 9] << 16) + (devicestates[tempdb2addr + 8] << 32);//Y坐标
//devinfo.YCoor = devicestates[tempdb2addr + 13] ;//Y坐标
}
}
Model.CGetInfo.SetDeviceInfo(devinfo);
}
}
return true;
}
catch (Exception ex)
{
SendMessage(string.Format("tsStatus@FrmClient.DealWithDeviceState时{0}", ex.StackTrace + ex.Message));
errtext = string.Format("tsStatus@FrmClient.DealWithDeviceState时{0}", ex.StackTrace + ex.Message);
return false;
}
finally
{
dv.Dispose();
dvbc.Dispose();
dvsp.Dispose();
}
}
#region wcf回调
public void SendDeviceInfo(Model.MDevice devinfo)
{
try
{
if (CStaticClass.WCFOK == false) return;
if (this.IsDisposed) return;
Model.CGetInfo.SetDeviceInfo(devinfo);
}
catch (Exception ex)
{
throw ex;
}
}
public IAsyncResult BeginSendDeviceInfo(Model.MDevice devinfo, AsyncCallback acb, object state)
{
return state as IAsyncResult;
}
public void EndSendDeviceInfo(IAsyncResult ar)
{
}
public IAsyncResult BeginSendMessage(string message, AsyncCallback acb, object state)
{
return state as IAsyncResult;
}
public void EndSendMessage(IAsyncResult ar)
{
}
public void SendMessage(string message)
{
char[] cc = new char[1] { '@' };
string[] strsplit = message.Split(cc);
if (strsplit.GetLength(0) > 1)
{//更新指定控件
if (strsplit[0] == "tsStatus")
{
tsStatus.Text = strsplit[1];
}
else if (strsplit[0] == "notifyIcon1")
{
this.BeginInvoke(new MethodInvoker(delegate()
{
notifyIcon1.BalloonTipText = strsplit[1];
notifyIcon1.ShowBalloonTip(10000, "警告:", strsplit[1], ToolTipIcon.Warning);
}));
}
}
//else
//{//刷新数据显示
// this.dgvManager.BeginInvoke(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;
// }));
// this.dgvMonitor.BeginInvoke(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;
// }));
//}
}
//20140824richard
public void SendOrderMessage(Model.MonitorInfo mi)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
try
{
if (CStaticClass.UserID.ToUpper() == "SA")
{
CStaticClass.Order = mi.Orderturnon;
CStaticClass.ObtainManageTask = mi.Obtaintask;
if (CStaticClass.Order == true)
{
ClickOrderTurnOn();
}
else
{
ClickOrderTurnOff();
}
if (CStaticClass.ObtainManageTask == true)
{
ClickObtainTask();
}
else
{
ClickStopObtainTask();
}
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("接收【获取任务和命令开关】广播时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "接收【获取任务和命令开关】广播时:" + ex.Message;
}
}
}));
}
public IAsyncResult BeginSendOrderMessage(Model.MonitorInfo mi, AsyncCallback callBack, object state)
{
return state as IAsyncResult;
}
public void EndSendOrderMessage(IAsyncResult ar)
{
}
//20140824richard
#endregion
private void Client_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("您确认要关闭" + CStaticClass.SystemName + "吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
{
e.Cancel = true;
return;
}
ClientLogout();
OPCClient.CCommonOPCClient.DisConnectOPCServer();//20120428
CommonClassLib.AppSettings.dbo.Close();
CommonClassLib.AppSettings.dbo1.Close();
CommonClassLib.AppSettings.dboM.Close();
FrmLogin.FormInstance.Close();
}
void LogCallBack(IAsyncResult ar)
{
try
{
string strErr = string.Empty;
if (CStaticClass.WcfControl.EndLogoutClient(out strErr, ar) == true)
{
//if (ar.AsyncState.ToString() == "RegisterClientCallBack")
//{
// CStaticClass.WcfControl.BeginRegisterClient(CStaticClass.UserID, "客户端:" + CStaticClass.ClientID + ",用户名:" + CStaticClass.UserID, new AsyncCallback(RegisterClientCallBack), null);
// return;
//}
}
CStaticClass.WCFOK = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void ClientLogout()
{
try
{
string errtext = string.Empty;
CStaticClass.WcfControl.BeginLogoutClient("客户端:" + CStaticClass.ClientID + ",用户名:" + CStaticClass.UserID, new AsyncCallback(LogCallBack), "");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
FrmHandCommand.FormInstance.Show();
}
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
FrmHandAssociateCommand.FormInstance.Show();
}
private void MIManageShow_Click(object sender, EventArgs e)
{
FrmAutoCommand.FormInstance.Show();
}
private void MIAltMonitor_Click(object sender, EventArgs e)
{
FrmModifyMonitor.FormInstance.Show();
}
private void MIAltManange_Click(object sender, EventArgs e)
{
FrmModifyManage.FormInstance.Show();
}
private void notifyIcon1_BalloonTipShown(object sender, EventArgs e)
{
try
{
Voice.Speak(notifyIcon1.BalloonTipText, SpFlags);
}
catch
{
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (CStaticClass.WCFOK == true)
{
this.TopMost = true;
this.Visible = true;
this.TopMost = false;
this.WindowState = FormWindowState.Maximized;
}
}
private void tsStatus_TextChanged(object sender, EventArgs e)
{
}
private void TSMrefresh_Click(object sender, EventArgs e)
{
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;
}
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 ");
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 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)
{
MessageBox.Show(ex.Message);
}
}
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 button2_Click(object sender, EventArgs e)
{
CStaticClass.Monstatus = " F_Status>=-1 ";
TSMMonitorRefresh_Click(sender, e);
}
public void MonitorRefresh()
{//20110222
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()
{//20110222
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;
}
void BuildHandTaskCallBack(IAsyncResult ar)
{
string errtext = string.Empty;
if (CStaticClass.WcfControl.EndBuildHandTask(out errtext, ar) == false)
{
//MessageBox.Show(errtext, "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Client_Load(object sender, EventArgs e)
{
try
{
//for (int i = 0; i <= 1000; i++)
//{
// Model.HandTask ht = new Model.HandTask(11001, 1, 0, "0", "00-00-00", "-", 0, 0);
// CStaticClass.WcfControl.BeginBuildHandTask(ht, new AsyncCallback(BuildHandTaskCallBack), ht);
//}
#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.Label") && (ctrl.Tag != null) && (ctrl.ForeColor == Color.Red))
{
ctrl.Click += new EventHandler(ctrl_ClickLabel);
}
if ((ctrl.GetType().ToString() == "System.Windows.Forms.PictureBox") && (ctrl.Enabled == true))
{
if (ctrl.Name.IndexOf("pic_") < 0 && ctrl.Name.IndexOf("sto_") < 0)
{
ctrl.Click += new EventHandler(ctrl_ClickPic);
}
else
{
ctrl.Click += new EventHandler(ctrl_Click_1);
ctrl.MouseEnter += new EventHandler(Btn_MouseEnter_Stop);
}
}
#endregion
TSMrefresh_Click(sender, e);
TSMMonitorRefresh_Click(sender, e);
//this.MMmasterAdmin.Visible = true;
//if (CStaticClass.UserID.ToUpper() == "SA")
//{
// this.MMmasterAdmin.Visible = true;
//}
//else
//{
// this.MMmasterAdmin.Visible = false;
//}
}
}
catch (Exception ex)
{
throw (ex);
}
}
private void MIDeviceState_Click(object sender, EventArgs e)
{
FrmDeviceInfoEdit.FormInstance.Show();
}
private void MIRouteInfo_Click(object sender, EventArgs e)
{
FrmRouteEdit.FormInstance.Show();
}
private void MIWaitTime_Click(object sender, EventArgs e)
{
FrmWaitTime.FormInstance.Show();
}
private void MIMonitorConnectInfo_Click(object sender, EventArgs e)
{
FrmConnectDB.FormInstance.ConnectType = "Monitor";
FrmConnectDB.FormInstance.Show();
}
private void ctrl_ClickLabel(object sender, EventArgs e)
{
Label label = (Label)sender;
_deviceStatus.DeviceIndex = Convert.ToInt32(label.Tag);
_deviceStatus.ShowDialog();
}
private void MIIOStation_Click(object sender, EventArgs e)
{
FrmIOStation.FormInstance.Show();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (CStaticClass.WCFOK == false)
{
if (CStaticClass.WcfControl != null)
{
if (CStaticClass.WcfControl.State == CommunicationState.Faulted)
{
CStaticClass.WCFOK = false;
ReConnectAndRegisterClient();
}
}
return;
}
try
{
if (label33.Text == "")
{
if (CStaticClass.UserID != "")
label33.Text = dbo.GetSingle("select f_username from T_Base_Users where f_userid='" + CStaticClass.UserID + "'").ToString();
}
//CStaticClass.WcfControl.BeginHeartbeat(new AsyncCallback(CallBackHeartbeat), null);
if (CStaticClass.WcfControl != null)
{
if (CStaticClass.WcfControl.State == CommunicationState.Faulted)
{
CStaticClass.WCFOK = false;
ReConnectAndRegisterClient();
}
else
{
CStaticClass.WcfControl.BeginHeartbeat(new AsyncCallback(CallBackHeartbeat), null);
}
}
//devsn++;
//if (devsn < devlist.Count())
//{
// CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
//}
//else
//{
// devsn = 0;
// CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
//}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("BeginHeartbeat时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "BeginHeartbeat时:" + ex.Message;
}
CStaticClass.WCFOK = false;
ReConnectAndRegisterClient();
}
}
public void SendAllDeviceStatesCallback(IAsyncResult ar)
{
try
{
Model.MDevice dev;
dev = CStaticClass.WcfControl.EndSendAllDeviceStates(ar);
if (dev != null)
{
Model.CGetInfo.SetDeviceInfo(dev);
}
devsn++;
if (devsn < devlist.Count())
{
CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
}
else
{
//devsn=0;
//CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
}
}
catch (Exception ex)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
if (tsStatus.Text.IndexOf("SendAllDeviceStatesCallback时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "SendAllDeviceStatesCallback时:" + ex.Message;
}
}));
ReRegisterClient();
}
}
private void MITransportTimeout_Click(object sender, EventArgs e)
{
FrmTransportTimeout.FormInstance.Show();
}
private void MISeeDarket_Click(object sender, EventArgs e)
{
FrmBrowseDarkCasket.FormInstance.Show();
}
private void MIDarketFileSet_Click(object sender, EventArgs e)
{
FrmDarkCasket.FormInstance.Show();
}
private void MIAutoTaskHistory_Click(object sender, EventArgs e)
{
FrmBrowseAotoTaskLog.FormInstance.Show();
}
private void MIUserInfoManage_Click(object sender, EventArgs e)
{
FrmUsers.FormInstance.Show();
}
private void MIAltPassword_Click(object sender, EventArgs e)
{
FrmPassword.FormInstance.Show();
}
private void MMExitSystem_Click(object sender, EventArgs e)
{
this.Close();
}
private void toolStripMenuItem10_Click(object sender, EventArgs e)
{
this.Visible = false;
//this.WindowState = FormWindowState.Minimized;
}
private void toolStripMenuItem8_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Maximized;
}
private void toolStripMenuItem9_Click(object sender, EventArgs e)
{
this.Close();
}
private void tabPage1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.TranslateTransform(this.tabPage1.AutoScrollPosition.X, this.tabPage1.AutoScrollPosition.Y);
g.Dispose();
}
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 timerFlash_Tick(object sender, EventArgs e)
{
string[] DS; char[] dd = new char[1] { '.' };
Model.MDevice device;
TimeSpan ts = DateTime.Now.TimeOfDay;
DataView dv; DataView dvJY;
this.SuspendLayout(); //richard.liu20140806
try
{
if (CStaticClass.WCFOK == true)
{
sql.Remove(0, sql.Length);//richard.liu20140806
sql.Append("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_LockedState = - 1) ");
dvJY = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//richard.liu20140806
Panel pp = plAccessorial1;
PictureBox stack1 ;
PictureBox stack2 ;
//PictureBox RGV1=bt15001;
//PictureBox RGV2 = bt15002;
//PictureBox RGV3 = bt25001;
TextBox tw1 ;
TextBox tw2 ;
stack1 = bt11001;
stack2 = bt21001;
tw1 = t11001;
tw2 = t21001;
//if (this.tabControl1.SelectedIndex == 0)
//{
// stack1 = bt11001;
// stack2 = bt21001;
// //stack4 = bt11004;
// //stack5 = bt11005;
// tw1 = t11001;
// tw2 = t21001;
// //tw4 = t11004;
// //tw5 = t11005;
// pp = plAccessorial1;
//}
//else
//{
// pp = plAccessorial1;
//}
#region 每层楼监视画面
#region 堆垛机、RGV
foreach (PictureBox ctrl in pp.Controls.OfType<PictureBox>())
{
if (ctrl.Enabled == false ) continue;
if (ctrl.Name.IndexOf("pic_") >= 0 || ctrl.Name.IndexOf("sto_") >= 0) continue;
device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Tag));
if (device == null)
{//20100108
if (tsStatus.Text.IndexOf(ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!") < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!";
}
continue;
}
#region 动画
if (device.DeviceKind == 1)
{//堆垛机
switch (device.DeviceIndex)
{
case 11001:
stack1.Location = new Point((int)(409+ 54 * (device.XCoor - 1)), stack1.Location.Y);
tw1.Location = new Point(stack1.Location.X + 10, tw1.Location.Y);
break;
case 21001:
stack2.Location = new Point((int)(424 + 37 * (device.XCoor - 1)), stack2.Location.Y);
tw2.Location = new Point(stack2.Location.X + 10, tw2.Location.Y);
break;
}
}
#endregion
#region 设置设备状态
if (ctrl.Enabled == false) continue;//20150130 bianzhi
switch (device.RunState)
{
//空闲
case 0:
ctrl.BackColor = Color.MediumOrchid;
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:
ctrl.BackColor = Color.SeaGreen;//MediumOrchid;
break;
}
#endregion
#region 设备被禁用
//richar.liu20140806
dvJY.Sort = "F_DeviceIndex";//20150320 宁波地铁 bianzhi
if (dvJY.Find(device.DeviceIndex) >= 0)
{
ctrl.BackColor = Color.Maroon;
}
#endregion
}
#endregion
#region 类输送机
foreach (Button ctrl in pp.Controls.OfType<Button>())
{
ctrl.FlatStyle = FlatStyle.Flat;
ctrl.FlatAppearance.BorderColor = Color.BlueViolet;
ctrl.FlatAppearance.BorderSize = 1;
device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Tag));
if (device == null)
{//20100108
if (tsStatus.Text.IndexOf(ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!") < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!";
}
continue;
}
#region 设置设备状态
switch (device.RunState)
{
//空闲
case 0:
ctrl.BackColor = Color.LightSkyBlue;
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:
ctrl.BackColor = Color.Gray;
break;
}
#endregion
#region 设备被禁用
//richar.liu20140806
dvJY.Sort = "F_DeviceIndex";//20150320 宁波地铁 bianzhi
if (dvJY.Find(device.DeviceIndex) >= 0)
{
ctrl.BackColor = Color.Maroon;
}
//------------------------------------------------------//20150319 bianzhi---------------------------------------------------------//
//sql.Remove(0, sql.Length);
//sql.Remove(0, sql.Length);
//sql.Append("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_LockedState = - 1) and F_DeviceIndex=").Append(device.DeviceIndex);
//dvJY = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
//if (dvJY.Count > 0)
//{
// ctrl.BackColor = Color.Maroon;
//}
//------------------------------------------------------//20150319 bianzhi---------------------------------------------------------//
#endregion
}
#endregion
#region 货物探测
foreach (TextBox ctrl in pp.Controls.OfType<TextBox>())
{
DS = ctrl.Tag.ToString().Split(dd);
int devicebyte = 0; int devbit = 0;
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
device = Model.CGetInfo.GetDeviceInfo(devicebyte);
if (device == null)
{//20100108
if (tsStatus.Text.IndexOf(ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!") < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += ctrl.Name + "控件对应的设备索引:" + ctrl.Tag + "在数据库没有记录!";
}
continue;
}
switch (devbit)
{
case 0:
ctrl.Visible = device.SplitByte_0 == 1 ? true : false;
//if (device.DeviceIndex == 12103 && device.SplitByte_6 == 0)
//{
// label35.Text = "否";
//}
//if (device.DeviceIndex == 12103 && device.SplitByte_6 == 1)
//{
// label35.Text = "是";
//}
//if (device.DeviceIndex == 12101 && device.SplitByte_6 == 0)
//{
// label36.Text = "否";
//}
//if (device.DeviceIndex == 12101 && device.SplitByte_6 == 1)
//{
// label36.Text = "是";
//}
break;
case 1:
ctrl.Visible = device.SplitByte_1 == 1 ? true : false;
break;
case 2:
ctrl.Visible = device.SplitByte_2 == 1 ? true : false;
break;
case 3:
ctrl.Visible = device.SplitByte_3 == 1 ? true : false;
break;
case 4:
ctrl.Visible = device.SplitByte_4 == 1 ? true : false;
break;
case 5:
ctrl.Visible = device.SplitByte_5 == 1 ? true : false;
break;
case 6:
ctrl.Visible = device.SplitByte_6 == 1 ? true : false;
ctrl.BackColor = Color.Goldenrod;
break;
case 7:
ctrl.Visible = device.SplitByte_7 == 1 ? true : false;
break;
}
}
#endregion
sql.Remove(0, sql.Length);//richard.liu20140806
sql.Append("SELECT * FROM T_Base_Device WHERE F_DeviceIndex=13001 ");
dvJY = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//richard.liu20140806
string bcs = dvJY[0]["F_HaveGoods"].ToString();
if (dvJY[0]["F_HaveGoods"].ToString() == "1")
{
this.pictureBox6.Visible = true;
this.label13.Visible = true;
}
else
{
this.pictureBox6.Visible = false;
this.label13.Visible = false;
}
sql.Remove(0, sql.Length);//richard.liu20140806
sql.Append("SELECT F_HaveGoods FROM T_Base_Device WHERE F_DeviceIndex=23001 ");
dvJY = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//richard.liu20140806
if (dvJY[0]["F_HaveGoods"].ToString() == "1")
{
this.pictureBox25.Visible = true;
this.label12.Visible = true;
}
else
{
this.pictureBox25.Visible = false;
this.label12.Visible = false;
}
sql.Remove(0, sql.Length);//richard.liu20140806
sql.Append("SELECT F_HaveGoods FROM T_Base_Device WHERE F_DeviceIndex=23002 ");
dvJY = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//richard.liu20140806
if (dvJY[0]["F_HaveGoods"].ToString() == "1")
{
this.pictureBox4.Visible = true;
this.label68.Visible = true;
}
else
{
this.pictureBox4.Visible = false;
this.label68.Visible = false;
}
#region 逻辑有物显示
foreach (RadioButton ctrl in pp.Controls.OfType<RadioButton>())
{
//20100108DataView dvh;
dv = dbo.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_DeviceIndex = " + ctrl.Tag + ") AND (F_HaveGoods >0)").Tables[0].DefaultView;
if (dv.Count > 0)
{
ctrl.Visible = true;
ctrl.BackColor = Color.Blue;
}
else
{
ctrl.Visible = false;
}
}
#endregion
#endregion
#region 刷新按钮 急停按钮通过堆垛机光电开关.6反馈 联机停车
foreach (PictureBox ctrl in pp.Controls.OfType<PictureBox>())
{
if (ctrl.Tag.ToString() != "" && (ctrl.Name.IndexOf("pic_") >= 0 || ctrl.Name.IndexOf("sto_") >= 0))
{
//如果是紧急停车按钮的时候
if (!ctrl.Tag.ToString().Contains("."))
{
device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Name.ToString().Substring(ctrl.Name.Length - 5, 5)));
if (device.DeviceKind == 40)
{
//取堆垛机状态来显示颜色
device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Tag));
if (device == null)
{
//判断设备在数据库表中村不存在
if (tsStatus.Text.IndexOf(ctrl.Name + "控件对应的设备索引:" + ctrl.Name.ToString().Substring(ctrl.Name.Length - 5, 5) + "在数据库无该设备") == -1)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += ctrl.Name + "控件对应的设备索引:" + ctrl.Name.ToString().Substring(ctrl.Name.Length - 5, 5) + "在数据无该设备";
}
continue;
}
DataView dwRunDevice = dbo.ExceSQL("select F_DeviceIndex from T_Base_Device where F_DeviceKindIndex = 1 or F_DeviceKindIndex = 4").Tables[0].DefaultView;
for (int i = 0; i < dwRunDevice.Count; i++)
{
if (ctrl.Tag.ToString() == dwRunDevice[i]["F_DeviceIndex"].ToString())
{
Model.MDevice deviceRun = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(ctrl.Tag.ToString()));
if (deviceRun.SplitByte_6 == 1)
{
//急停显示stop
ctrl.Image = wcfControlMonitorClient.Properties.Resources.stop1;
}
if (deviceRun.SplitByte_6 == 0)
{
//正常显示红色图片
ctrl.Image = wcfControlMonitorClient.Properties.Resources.stop0;
}
}
}
}
}
}
}
#endregion
}
}
catch (Exception ex)
{//20100108
if (tsStatus.Text.IndexOf("刷新界面动画时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "刷新界面动画时:" + ex.Message;
}
}
finally
{//20100108
TimeSpan ts1 = DateTime.Now.TimeOfDay;
device = null;
this.ResumeLayout();//richard.liu20140806
}
}
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;
}
}
}
}
void ReRegisterClient()
{
//CStaticClass.ClientID = Dns.GetHostName();
//var ctx = new InstanceContext(CStaticClass.client);
//CStaticClass.WcfControl = new WcfControlMonitor.ControlMonitorClient(ctx);
//string errtext = string.Empty;
//CStaticClass.WcfControl.BeginRegisterClient(CStaticClass.UserID, "客户端:" + CStaticClass.ClientID + ",用户名:" + CStaticClass.UserID, new AsyncCallback(RegisterClientCallBack), null);
}
void RegisterClientCallBack(IAsyncResult ar)
{
try
{
string ErrText;
if (CStaticClass.WcfControl.EndRegisterClient(out ErrText, ar) == true)
{
CStaticClass.WCFOK = true;
devsn++;
if (devsn < devlist.Count())
{
CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
}
else
{
devsn = 0;
CStaticClass.WcfControl.BeginSendAllDeviceStates(devlist[devsn].DeviceIndex, new AsyncCallback(SendAllDeviceStatesCallback), null);
}
}
else
{
CStaticClass.WcfControl.BeginLogoutClient("客户端:" + CStaticClass.ClientID + ",用户名:" + CStaticClass.UserID, new AsyncCallback(LogCallBack), "RegisterClientCallBack");
this.BeginInvoke(new MethodInvoker(delegate()
{
if (tsStatus.Text.IndexOf("EndRegisterClient时:" + ErrText) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "EndRegisterClient时:" + ErrText;
}
}));
}
}
catch (Exception ex)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
if (tsStatus.Text.IndexOf("EndRegisterClient时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "EndRegisterClient时:" + ex.Message;
}
}));
}
}
private void btClearStatus_Click(object sender, EventArgs e)
{
this.tsStatus.Text = "";
}
private void MIStartRetrieveTask_Click(object sender, EventArgs e)
{
ClickObtainTask();
CStaticClass.WcfControl.BeginObtainTask("", "UPDATE", new AsyncCallback(CallbackObtainTask), null);
}
private void MIStopRetrieveTask_Click(object sender, EventArgs e)
{
ClickStopObtainTask();
CStaticClass.WcfControl.BeginStopObtainTask(new AsyncCallback(CallbackStopObtainTask), null);
}
private void MITurnOn_Click(object sender, EventArgs e)
{
ClickOrderTurnOn();
CStaticClass.WcfControl.BeginOrderTurnOn(new AsyncCallback(CallbackTurnOn), null);
}
private void MITurnOff_Click(object sender, EventArgs e)
{
if (MessageBox.Show("您确认要“关闭命令开关”吗?如果“关闭命令开关”将导致调度计算机与所有设备通讯中断!", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
{
return;
}
ClickOrderTurnOff();
CStaticClass.WcfControl.BeginOrderTurnOff(new AsyncCallback(CallbackTurnOff), null);
}
private void MISystemInit_Click(object sender, EventArgs e)
{
FrmSystemInit.FormInstance.Show();
}
void CallbackObtainTask(IAsyncResult ar)
{
CStaticClass.WcfControl.EndObtainTask(ar);
}
void CallbackStopObtainTask(IAsyncResult ar)
{
CStaticClass.WcfControl.EndStopObtainTask(ar);
}
void CallbackTurnOn(IAsyncResult ar)
{
CStaticClass.WcfControl.EndOrderTurnOn(ar);
}
void CallbackTurnOff(IAsyncResult ar)
{
CStaticClass.WcfControl.EndOrderTurnOff(ar);
}
void CallBackHeartbeat(IAsyncResult ar)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
try
{
string errtext = string.Empty;
Model.MonitorInfo mi;
CStaticClass.WcfControl.EndHeartbeat(out mi, ar);
if (CStaticClass.UserID.ToUpper() == "SA")
{
CStaticClass.Order = mi.Orderturnon;
CStaticClass.ObtainManageTask = mi.Obtaintask;
if (mi.Orderturnon == true)
{
ClickOrderTurnOn();
}
else
{
ClickOrderTurnOff();
}
if (mi.Obtaintask == true)
{
ClickObtainTask();
}
else
{
ClickStopObtainTask();
}
}
if (mi.S7connectOnline.Count > 0)
{
if (mi.S7connectOnline.ContainsKey("S7 connection_1"))
{
if (mi.S7connectOnline["S7 connection_1"] == 0)
{
pbF1S7.Image = wcfControlMonitorClient.Properties.Resources.ProgressSuccess;
//devinfo = Model.CGetInfo.GetDeviceInfo(888);(原代码 cz改)
//devinfo = Model.CGetInfo.GetDeviceInfo(11001);
//if (PLC == 0)
//{
// PLC = devinfo.XCoor;
//}
//else
//{
// if (PLC == devinfo.XCoor)
// {
// if (lastupdate.AddSeconds(45) < DateTime.Now)
// {
// //do recon
// OPCClient.CCommonOPCClient.kkk();
// lastupdate = DateTime.Now;
// CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "UserID:" + CStaticClass.UserID + "的操作日志", "重建订阅组", "", "");
// }
// }
// else
// {
// PLC = devinfo.XCoor;
// lastupdate = DateTime.Now;
// }
//}
}
else
{
pbF1S7.Image = wcfControlMonitorClient.Properties.Resources.ProgressError;
}
}
if (mi.S7connectOnline.ContainsKey("S7 connection_2"))
{
if (mi.S7connectOnline["S7 connection_2"] == 0)
{
pbF2S7.Image = wcfControlMonitorClient.Properties.Resources.ProgressSuccess;
}
else
{
pbF2S7.Image = wcfControlMonitorClient.Properties.Resources.ProgressError;
}
}
}
}
catch (Exception ex)
{
if (tsStatus.Text.IndexOf("CallBackHeartbeat时:" + ex.Message) < 0)
{
tsStatus.ForeColor = Color.Red;
this.tsStatus.Text += "CallBackHeartbeat时:" + ex.Message;
}
ReRegisterClient();
}
}));
}
void ClickObtainTask()
{
if (MITurnOn.Checked == true)
{
if (this.Text != CStaticClass.SystemName + "【开始获取任务!】" + "【正在执行自动命令!】")
{
this.Text = CStaticClass.SystemName + "【开始获取任务!】" + "【正在执行自动命令!】";
}
}
else
{
if (this.Text != CStaticClass.SystemName + "【开始获取任务!】")
{
this.Text = CStaticClass.SystemName + "【开始获取任务!】";
}
}
MIStartRetrieveTask.Checked = true;
MIStartRetrieveTask.Enabled = false;
MIStopRetrieveTask.Checked = false;
MIStopRetrieveTask.Enabled = true;
}
void ClickStopObtainTask()
{
if (MITurnOn.Checked == true)
{
if (this.Text != CStaticClass.SystemName + "【正在执行自动命令!】")
{
this.Text = CStaticClass.SystemName + "【正在执行自动命令!】";
}
}
else
{
if (this.Text != CStaticClass.SystemName)
{
this.Text = CStaticClass.SystemName;
}
}
MIStartRetrieveTask.Checked = false;
MIStartRetrieveTask.Enabled = true;
MIStopRetrieveTask.Enabled = false;
MIStopRetrieveTask.Checked = true;
}
void ClickOrderTurnOn()
{
if (MIStartRetrieveTask.Checked == true)
{
if (this.Text != CStaticClass.SystemName + "【开始获取任务!】" + "【正在执行自动命令!】")
{
this.Text = CStaticClass.SystemName + "【开始获取任务!】" + "【正在执行自动命令!】";
}
}
else
{
if (this.Text != CStaticClass.SystemName + "【正在执行自动命令!】")
{
this.Text = CStaticClass.SystemName + "【正在执行自动命令!】";
}
}
MITurnOff.Enabled = true;
MITurnOn.Enabled = false;
MITurnOff.Checked = false;
MITurnOn.Checked = true;
}
void ClickOrderTurnOff()
{
if (MIStartRetrieveTask.Checked == true)
{
if (this.Text != CStaticClass.SystemName + "【开始获取任务!】")
{
this.Text = CStaticClass.SystemName + "【开始获取任务!】";
}
}
else
{
if (this.Text != CStaticClass.SystemName)
{
this.Text = CStaticClass.SystemName;
}
}
MITurnOff.Enabled = false;
MITurnOn.Enabled = true;
MITurnOn.Checked = false;
MITurnOff.Checked = true;
}
private void timer2_Tick(object sender, EventArgs e)
{
try
{
TSMMonitorRefresh_Click(sender, e);
TSMrefresh_Click(sender, e);
}
catch
{
//if (tsStatus.Text.IndexOf("读取数据库时:" + ex.Message) < 0)
//{
// tsStatus.ForeColor = Color.Red;
// this.tsStatus.Text += "读取数据库时时:" + ex.Message;
//}
}
}
private void MISystemInit2_Click(object sender, EventArgs e)
{
FrmSystemInit.FormInstance.Show();
}
private void MIManageConnectInfo_Click(object sender, EventArgs e)
{
FrmConnectDB.FormInstance.ConnectType = "Manage";
FrmConnectDB.FormInstance.Show();
}
public bool IsEquals(Array array1, Array array2, int arraylength)
{//20090902新增加arraylength
//比较类型是否一样
if ((array1 == null) || (array2 == null)) return false;
if (!Object.ReferenceEquals(array1.GetType(), array2.GetType()))
{
return false;
}
//比较长度是否一样
if (array1.GetLength(0) != array2.GetLength(0))
{
return false;
}
//比较成员是否对应相等
ValueType v1, v2;
for (int i = 0; i < arraylength; i++)
{
v1 = (ValueType)array1.GetValue(i);
v2 = (ValueType)array2.GetValue(i);
if (!v1.Equals(v2))
{
return false;
}
}
return true;
}
string GetBarcodeFromMonitorIndex(int taskindex)
{
DataView dvb = new DataView(); StringBuilder sss = new StringBuilder("");
try
{
sss.Append("SELECT F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")");
dvb = dbo.ExceSQL(sss.ToString()).Tables[0].DefaultView;
if (dvb.Count > 0)
{
return dvb[0]["F_TxtParam"].ToString();
}
else
{
return "-";
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dvb.Dispose();
}
}
int GetMonitorRunTaskIndexFromBarCode(StringBuilder BarCode)
{//20110216
DataView dv = new DataView();
try
{
string bc = BarCode.ToString();
dv = dbo1.ExceSQL(string.Format("SELECT 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_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_MonitorIndex"]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv.Dispose();
}
}
int GetMonitorAskTaskIndexFromBarCode(StringBuilder BarCode)
{//20110216
DataView dv = new DataView();
try
{
string bc = BarCode.ToString();
dv = dbo.ExceSQL(string.Format("SELECT 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_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and ((F_Status>0) or (F_SendFlag=2 and F_Status=0)) and F_DeviceCommandIndex=6 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_MonitorIndex"]);
}
else
{
return -1;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv.Dispose();
}
}
int GetMonitorTaskIndexFromBarCode(StringBuilder BarCode, Model.MDevice devinf)
{//20110216
DataView dv = new DataView();
try
{
string bc = BarCode.ToString();
dv = dbo.ExceSQL(string.Format("SELECT 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_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and (F_NumParam4 = {1} or F_NumParam4 = {2}) and F_Status>0 order by F_MonitorIndex asc", bc, devinf.DeviceIndex, devinf.DeviceVisual)).Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_MonitorIndex"]);
}
else
{
//dv = dbo.ExceSQL(string.Format("SELECT 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_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView;
//if (dv.Count > 0)
//{
// return Convert.ToInt32(dv[0]["F_MonitorIndex"]);
//}
//else
//{
return -1;
//}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv.Dispose();
}
}
string GetMonitorTaskStartTime(int taskindex, out int order)
{//20110216
DataView dv = new DataView();
try
{
dv = dbo.ExceSQL(string.Format("SELECT F_StartTime,F_DeviceCommandIndex FROM T_Monitor_Task WHERE F_MonitorIndex={0}", taskindex)).Tables[0].DefaultView;
if (dv.Count > 0)
{
order = Convert.ToInt32(dv[0]["F_DeviceCommandIndex"]);
return dv[0]["F_StartTime"].ToString();
}
else
{
order = -1;
return "-";
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
dv.Dispose();
}
}
private void MIZCKSetIO_Click(object sender, EventArgs e)
{
FrmZCKSetIOStation.FormInstance.Show();
}
private void button3_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
//急停按钮 联机停车急停单机事件
private void ctrl_Click_1(object sender, EventArgs e)
{
PictureBox px = (PictureBox)sender;
//pic30001 截出30001 跟T_BASE_Device 对应
int DeviceIndexForRunButton = Convert.ToInt32(px.Name.ToString().Substring(px.Name.Length - 5, 5));
Model.MDevice deviceRun = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(px.Tag.ToString()));
int iValue = 0;
//急停写1 正常写0
iValue = deviceRun.SplitByte_6 == 1 ? 0 : 1;
CStaticClass.WcfControl.BeginSendDeviceReset(DeviceIndexForRunButton, iValue, new AsyncCallback(SendDeviceResetCallBack), iValue);
}
//急停按钮程序
void SendDeviceResetCallBack(IAsyncResult ar)
{
string errtext = string.Empty;
if (CStaticClass.WcfControl.EndSendDeviceReset(out errtext, ar) == false)
{
MessageBox.Show(errtext, "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//急停显示 用于紧急急停按钮鼠标放上去显示设备信息
private void Btn_MouseEnter_Stop(object sender, EventArgs e)
{
string deviceindex = (sender as Control).Tag.ToString();
devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(deviceindex));
if (devinfo != null)
{
if (devinfo.SplitByte_6 == 0)//停车
{
deviceindex = string.Format("{0}-联机停车", devinfo.DeviceIndex);
}
if (devinfo.SplitByte_6 == 1)//未停车
{
deviceindex = string.Format("{0}-未联机停车", devinfo.DeviceIndex);
}
}
toolTip_DeviceIndex.SetToolTip(sender as Control, deviceindex);
}
void ReConnectAndRegisterClient()
{
try
{
CStaticClass.ClientID = Dns.GetHostName();
var ctx = new InstanceContext(CStaticClass.client);
CStaticClass.WcfControl = new WcfControlMonitor.ControlMonitorClient(ctx);
string errtext = string.Empty;
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "UserID:" + CStaticClass.UserID + "的操作日志", "尝试重新连接", "", "");
CStaticClass.WcfControl.BeginRegisterClient(CStaticClass.UserID, "客户端:" + CStaticClass.ClientID + ",用户名:" + CStaticClass.UserID, new AsyncCallback(ReConnectAndRegisterClientCallBack), null);
}
catch (Exception ex)
{
throw ex;
}
}
void ReConnectAndRegisterClientCallBack(IAsyncResult ar)
{
try
{
string ErrText = string.Empty;
if (false == CStaticClass.WcfControl.EndRegisterClient(out ErrText, ar))
{
//MessageBox.Show(ErrText, "登陆错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
CStaticClass.WCFOK = false;
return;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "UserID:" + CStaticClass.UserID + "的操作日志", "重连**成功登录系统", "", "");
tsStatus.Text = "";
//CStaticClass.WcfControl.BeginSendAllDeviceStates(CStaticClass.client.devlist[0].DeviceIndex, new AsyncCallback(CStaticClass.client.SendAllDeviceStatesCallback), null);
CStaticClass.WCFOK = true;
OPCClient.CCommonOPCClient.kkk();
//OPCClient.CCommonOPCClient.CreateSubscriptionGroup();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "登陆错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
CStaticClass.WCFOK = false;
return;
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
FrmDeviceErrorLog.FormInstance.Show();
}
}
}