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);
|
|
|
/// <summary>
|
/// 开启堆垛机的WCF服务
|
/// </summary>
|
private ServiceHost SrmServiceHost = null;
|
|
/// <summary>
|
/// 开启输送线的WCF服务
|
/// </summary>
|
private ServiceHost SrmTranServiceHost = null;
|
|
/// <summary>
|
/// 开启Rgv的WCF服务
|
/// </summary>
|
private ServiceHost RgvServiceHost = null;
|
#endregion
|
|
#region OPC形式访问设备的代理变量
|
//界面显示Label声明
|
public static List<Label> labelSrms = new List<Label>();
|
public static List<Label> labelRgvs = new List<Label>();
|
|
//堆垛机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<SS7> srmgs = new List<SS7>
|
{
|
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<SS7> rgvgs = new List<SS7> { 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<SrmDBli> srmDBS = new List<SrmDBli> { 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<rgvDB> rgvDBs = new List<rgvDB> { rgvDB1, rgvDB2, rgvDB3, rgvDB4 };
|
//----------------------------------------------
|
//输送线DB初始化
|
public static List<SrmTran_DB> 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<SrmTran_DB>();
|
for (int i = 1; i < 69; i++)
|
{
|
SrmTran_DB tran = new SrmTran_DB(i);
|
tranDb.Add(tran);
|
}
|
}
|
|
#region 开启关闭线程服务类
|
/// <summary>初始化获取设备信息和服务(开启线程服务)
|
///
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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
|
}
|
/// <summary>关闭退出应用(退出线程服务)
|
///
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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
|
|
/// <summary>WCS写入心跳
|
///
|
/// </summary>
|
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); }
|
}
|
}
|
|
/// <summary>
|
/// 读取设备是否在线
|
/// </summary>
|
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
|
{
|
|
}
|
}
|
}
|
|
/// <summary>OPC初始化
|
///
|
/// </summary>
|
|
|
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 辅助类
|
/// <summary>程序启动进度条
|
///
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
//private void timer1_Tick(object sender, EventArgs e)
|
//{
|
// if (progressBar1.Value < 100)
|
// progressBar1.Value += 5;
|
// else
|
// progressBar1.Value = 0;
|
|
// rtbError.Text = errorStr;
|
//}
|
|
/// <summary>窗体关闭
|
///
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
|
{
|
//if (!WZ.Useful.Commons.MessageUtil.ConfirmYesNo("正常情况下请勿关闭此窗体!"))
|
//{
|
// e.Cancel = true;
|
//}
|
}
|
|
/// <summary>开启线程
|
///
|
/// </summary>
|
private void StartThread(Thread thread)
|
{
|
if (thread != null)
|
{
|
thread.IsBackground = true;
|
thread.Start();
|
}
|
}
|
|
/// <summary>开启带参数的线程
|
///
|
/// </summary>
|
private void StartThread(Thread thread, object obj)
|
{
|
if (thread != null)
|
{
|
thread.IsBackground = true;
|
thread.Start(obj);
|
}
|
}
|
|
/// <summary>关闭线程
|
///
|
/// </summary>
|
/// <param name="thread">需要关闭的线程</param>
|
private void CloseThread(Thread thread)
|
{
|
if (thread != null)
|
{
|
thread.Abort();
|
}
|
}
|
|
/// <summary>关闭WCF
|
///
|
/// </summary>
|
/// <param name="host">需要关闭的WCF</param>
|
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", "暂停");
|
}
|
}
|
|
|
}
|
}
|