using iWareSda_QQJF.OPCService;
using iWareSda_QQJF.RgvModel;
using iWareSda_QQJF.RGV.RgvModel;
using iWareSda_QQJF.SRM.SrmModel;
using iWareSda_QQJF.SrmTranModel;
using OpcAccess;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using iWareSda_QQJF.enumType;
//logtxtWrite---0是记录到send记事本里(参数有误),1是记录到plcLog.txt里(写入成功),其他将记录到d:\log_ShuYing\alarm记事本里(产生异常)
using logtxtWrite;
using iWareSda_QQJF._2DShow;
using iWareSda_QQJF.WCSNEW;
namespace iWareSda_QQJF
{
public partial class FormMain : Form
{
#region 变量声明
//logtxt.txtWrite("类名:tranOPC,函数名:Tranopc " + logtxt.oneRow(ex.ToString()), 2);
///
/// 开启堆垛机的WCF服务
///
private ServiceHost SrmServiceHost = null;
///
/// 开启输送线的WCF服务
///
private ServiceHost SrmTranServiceHost = null;
///
/// 开启Rgv的WCF服务
///
private ServiceHost RgvServiceHost = null;
#endregion
#region OPC形式访问设备的代理变量
//界面显示Label声明
public static List labelSrms = new List();
public static List labelRgvs = new List();
//堆垛机OPC变量声明
public static SS7 srm_g1 = null;
public static SS7 srm_g2 = null;
public static SS7 srm_g3 = null;
public static SS7 srm_g4 = null;
public static SS7 srm_g5 = null;
public static SS7 srm_g6 = null;
public static SS7 srm_g7 = null;
public static SS7 srm_g8 = null;
public static SS7 srm_g9 = null;
public static List srmgs = new List
{
srm_g1, srm_g2, srm_g3, srm_g4, srm_g5, srm_g6, srm_g7, srm_g8, srm_g9
};
//------------------------------------------
// rgvOPC变量声明
public static SS7 rgv_g1 = null;
public static SS7 rgv_g2 = null;
public static SS7 rgv_g3 = null;
public static SS7 rgv_g4 = null;
public static List rgvgs = new List { rgv_g1, rgv_g2, rgv_g3, rgv_g4 };
//--------------------------------------------
//输送线opc变量声明
public static HSLS7 hsltrang1 = null;
public static HSLS7 hsltrang2 = null;
//-------------------------
//输送线opc变量声明
static string errorStr = string.Empty;
#endregion
#region DB块实例化
//堆垛机DB初始化
public static SrmDBli srmDB1 = new SRM.SrmModel.SrmDBli(1);
public static SrmDBli srmDB2 = new SRM.SrmModel.SrmDBli(2);
public static SrmDBli srmDB3 = new SRM.SrmModel.SrmDBli(3);
public static SrmDBli srmDB4 = new SRM.SrmModel.SrmDBli(4);
public static SrmDBli srmDB5 = new SRM.SrmModel.SrmDBli(5);
public static SrmDBli srmDB6 = new SRM.SrmModel.SrmDBli(6);
public static SrmDBli srmDB7 = new SRM.SrmModel.SrmDBli(7);
public static SrmDBli srmDB8 = new SRM.SrmModel.SrmDBli(8);
public static SrmDBli srmDB9 = new SRM.SrmModel.SrmDBli(9);
public static List srmDBS = new List { srmDB1, srmDB2, srmDB3, srmDB4, srmDB5, srmDB6, srmDB7, srmDB8, srmDB9 };
//------------------------------------
//rgvDB初始化
public static rgvDB rgvDB1 = new rgvDB(1);
public static rgvDB rgvDB2 = new rgvDB(2);
public static rgvDB rgvDB3 = new rgvDB(3);
public static rgvDB rgvDB4 = new rgvDB(4);
public static List rgvDBs = new List { rgvDB1, rgvDB2, rgvDB3, rgvDB4 };
//----------------------------------------------
//输送线DB初始化
public static List tranDb;
#endregion
public FormMain()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
//初始化界面显示
labelSrms.Add(labelSrm1);
labelSrms.Add(labelSrm2);
labelSrms.Add(labelSrm3);
labelSrms.Add(labelSrm4);
labelSrms.Add(labelSrm5);
labelSrms.Add(labelSrm6);
labelSrms.Add(labelSrm7);
labelSrms.Add(labelSrm8);
labelSrms.Add(labelSrm9);
labelRgvs.Add(labelRgv1);
labelRgvs.Add(labelRgv2);
labelRgvs.Add(labelRgv3);
labelRgvs.Add(labelRgv4);
tranDb = new List();
for (int i = 1; i < 69; i++)
{
SrmTran_DB tran = new SrmTran_DB(i);
tranDb.Add(tran);
}
}
#region 开启关闭线程服务类
/// 初始化获取设备信息和服务(开启线程服务)
///
///
///
///
private void FormMain_Load(object sender, EventArgs e)
{
try
{
///设备通讯配置初始化
Thread deviceth = new Thread(deviceOpcInit);
StartThread(deviceth);
///设备在线显示
Thread onlineth = new Thread(online);
StartThread(onlineth);
#region 对外发布WCF形式数据访问服务
///堆垛机WCf服务
SrmServiceHost = new ServiceHost(typeof(iWareSda_QQJF.SRM.SrmService.SrmService));
SrmServiceHost.Open();
///输送线WCF服务
SrmTranServiceHost = new ServiceHost(typeof(iWareSda_QQJF.SRMTRAN.SrmTranService.SrmTranService));
SrmTranServiceHost.Open();
///RgvWCF服务
RgvServiceHost = new ServiceHost(typeof(iWareSda_QQJF.RGV.RgvService.RgvService));
RgvServiceHost.Open();
//WCS.WCS.init();
}
catch (Exception)
{
logtxt.txtWrite("类名:FormMain/函数名:FormMain_Load/ WCF发布失败:", 2);
}
#endregion
}
/// 关闭退出应用(退出线程服务)
///
///
///
///
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
{
//关闭WCS后台线程
//WCS.WCS.Close();
WCSNEW.WCS.Close();
//关闭SrmWCF服务
CloseWcf(SrmServiceHost);
//关闭SrmTranWCF服务
CloseWcf(SrmTranServiceHost);
//关闭RgvWCF服务
CloseWcf(RgvServiceHost);
Environment.Exit(0);
}
#endregion
/// WCS写入心跳
///
///
private void writeHandShake()
{
int value = 1;
while (true)
{
Thread.Sleep(1000);
try
{
if (value > 1000) value = 1;
value++;
for (int i = 0; i < 9; i++)
{
FormMain.srmgs[i].WriteValuePoint(FormMain.srmDBS[i].handShakeW, value);
}
}
catch (Exception) { logtxt.txtWrite("堆垛机心跳写入失败", 2); }
}
}
///
/// 读取设备是否在线
///
private void online()
{
while (true)
{
Thread.Sleep(1000);
for (int i = 0; i < Srm_CacheEntity.Srms.Count; i++)
{
if (srmgs[i].IsConnected == false)
{
labelSrms[i].Text = "/堆垛机" + (i + 1) + "掉线";
}
else
{
labelSrms[i].Text = "/堆垛机" + (i + 1) + "在线";
}
}
for (int i = 0; i < Rgv_CacheEntity.Rgvs.Count; i++)
{
if (rgvgs[i].IsConnected == false)
{
labelRgvs[i].Text = "/RGV" + (i + 1) + "掉线";
}
else
{
labelRgvs[i].Text = "/RGV" + (i + 1) + "在线";
}
}
try
{
if (hsltrang1.IsConnected == false)
{
labelTran.Text = "/输送线掉线";
}
else
{
labelTran.Text = "/输送线在线";
}
}
catch
{
}
}
}
/// OPC初始化
///
///
private void deviceOpcInit()
{
try
{
//堆垛机opc初始化
for (int i = 0; i < Srm_CacheEntity.Srms.Count; i++)
{
//srmgs[i] = srmOPC.srmopc(i + 1, srmDBS[i], srmgs[i]);
srmgs[i] = new SS7(srmIp.srmIps[i], Convert.ToInt16("0"), Convert.ToInt16("1"), FormMain.srmDBS[i].handShakeR);
}
//rgvopc初始化
for (int i = 0; i < Rgv_CacheEntity.Rgvs.Count; i++)
{
// rgvgs[i] = rgvOPC.rgvopc(i + 1, rgvDBs[i], rgvgs[i]);
rgvgs[i] = new SS7(srmIp.rgvIps[i], Convert.ToInt16("0"), Convert.ToInt16("1"), FormMain.rgvDBs[i].handShskeR);
}
//输送线初始化,只有一个地址
hsltrang1 = new HSLS7(srmIp.tranIP, FormMain.tranDb[0].handShakeR);
hsltrang2 = new HSLS7(srmIp.tranIP, FormMain.tranDb[0].handShakeR);//备用连接
labelSrm1.Text = labelSrm1.Text + "/初始化结束";
}
catch (Exception)
{
logtxt.txtWrite("类名:FormMain/函数名:deviceOpcInit/ OPC初始化失败:", 2);
}
//暂时写这,避免WCS开启太快
//WCS.WCS.init();
//Helper.Song("h", 500);
//Helper.Song("e", 500);
//Helper.Song("w", 500);
//Helper.Song("q", 250);
//Helper.Song("h", 250);
//Helper.Song("g", 500);
//Helper.Song("q", 500);
//Helper.Song("h", 1000);
//Helper.Song("h", 500);
//Helper.Song("w", 500);
//Helper.Song("w", 500);
//Helper.Song("q", 250);
//Helper.Song("h", 250);
//Helper.Song("d", 500);
//Helper.Song("g", 500);
//Helper.Song("d", 1000);
//Helper.Song("d", 500);
//Helper.Song("g", 500);
//Helper.Song("h", 500);
//Helper.Song("h", 250);
//Helper.Song("g", 250);
//Helper.Song("h", 500);
//Helper.Song("q", 500);
//Helper.Song("w", 1000);
//Helper.Song("q", 375);
//Helper.Song("w", 125);
//Helper.Song("e", 250);
//Helper.Song("e", 250);
//Helper.Song("e", 250);
//Helper.Song("e", 250);
//Helper.Song("w", 250);
//Helper.Song("q", 250);
//Helper.Song("g", 500);
//Helper.Song("q", 500);
//Helper.Song("h", 2000);
WCSNEW.WCS.init();
}
#region 辅助类
/// 程序启动进度条
///
///
///
///
//private void timer1_Tick(object sender, EventArgs e)
//{
// if (progressBar1.Value < 100)
// progressBar1.Value += 5;
// else
// progressBar1.Value = 0;
// rtbError.Text = errorStr;
//}
/// 窗体关闭
///
///
///
///
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
//if (!WZ.Useful.Commons.MessageUtil.ConfirmYesNo("正常情况下请勿关闭此窗体!"))
//{
// e.Cancel = true;
//}
}
/// 开启线程
///
///
private void StartThread(Thread thread)
{
if (thread != null)
{
thread.IsBackground = true;
thread.Start();
}
}
/// 开启带参数的线程
///
///
private void StartThread(Thread thread, object obj)
{
if (thread != null)
{
thread.IsBackground = true;
thread.Start(obj);
}
}
/// 关闭线程
///
///
/// 需要关闭的线程
private void CloseThread(Thread thread)
{
if (thread != null)
{
thread.Abort();
}
}
/// 关闭WCF
///
///
/// 需要关闭的WCF
private void CloseWcf(ServiceHost host)
{
if (host != null)
{
host.Close();
}
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
//_2Dshow s = new _2Dshow();
//s.Show();
//WCSNEW.WCS.fullTimesMax = int.Parse(tbTime.Text);
WCSNEW.WCS.deleteCVPTime = int.Parse(tbTime.Text);
}
private void btnDeviceCanDo_Click(object sender, EventArgs e)
{
WCSNEW.WCS.deviceCanDo = !WCSNEW.WCS.deviceCanDo;
if (WCSNEW.WCS.deviceCanDo)
{
WZ.Useful.Commons.ControlHelper.SetControlProperty(btnDeviceCanDo, "Text", "运行");
}
else
{
WZ.Useful.Commons.ControlHelper.SetControlProperty(btnDeviceCanDo, "Text", "暂停");
}
}
}
}