using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Windows.Forms;
|
using System.IO;
|
using System.Threading;
|
using HalconDotNet;
|
using HalconTools;
|
using PointGreyAndHalcon;
|
using System.Diagnostics;
|
using SuperDog;
|
using Microsoft.Win32;
|
|
namespace LLMF
|
{
|
public partial class frmMain : Form
|
{
|
#region 定义
|
|
//private LogHelper log = LogHelper.GetInstance();
|
|
string configPath = Application.StartupPath + "\\Config.xml";
|
ConfigStruct config;
|
ToolKit.FileToolkit.SerializeFileTool<ConfigStruct> sft = new ToolKit.FileToolkit.SerializeFileTool<ConfigStruct>();
|
|
OPC opc;
|
|
string camConfigPath = Application.StartupPath + "\\camConfig.xml";
|
PointGreyAndHalcon.PointGreyAndHalcon cam;
|
PointGreyAndHalcon.PointGreyAndHalcon cam_left;
|
|
HalconTool ht = new HalconTool();
|
HalconTool ht_left = new HalconTool();
|
|
RunStatus runStatus = RunStatus.Normal;
|
RunStatus runStatus_left = RunStatus.Normal;
|
|
double initAngle = 0;
|
double finalAngle = 0;
|
double initAngle_left = 0;
|
double finalAngle_left = 0;
|
bool booltemAngle = false;
|
Stopwatch sw = new Stopwatch();
|
|
HTuple ImageHeight = new HTuple();
|
HTuple ImageWidth = new HTuple();
|
|
bool isLeftCameraOpen = false;
|
bool isRightCameraOpen = false;
|
bool isDoorOpen = false;
|
//bool isCylinderLoosen = false;
|
//bool isCylinder2Loosen = false;
|
bool isUUTOut = false;
|
bool isRealyOK = false;
|
|
#endregion
|
WelcomeUser m_WelcomeForm = new WelcomeUser(); //欢迎界面
|
public frmMain()
|
{
|
InitializeComponent();
|
}
|
|
private void frmMain_Load(object sender, EventArgs e)
|
{
|
m_WelcomeForm.Show(); //显示欢迎界面
|
// m_WelcomeForm.ProgressBar1.Value = 0; //欢迎界面进度条
|
Application.DoEvents(); //处理所有的当前在消息队列中的Windows消息。
|
|
Log.WriteLog("App main form loading");
|
|
initConfig();
|
if (config.leftUsed)
|
{
|
Log.WriteLog("App main form load leftUsed");
|
tabPage2.Parent = null;
|
initCam_Left();
|
initHalconTool_Left();
|
tabControl1.TabPages[0].Select();
|
}
|
|
if (config.rightUsed)
|
{
|
Log.WriteLog("App main form load rightUsed");
|
tabPage1.Parent = null;
|
initCam_Right();
|
initHalconTool();
|
tabControl1.TabPages[0].Select();
|
}
|
initOPC();
|
|
m_WelcomeForm.Close();//
|
m_WelcomeForm = null; //清空内存
|
}
|
|
|
/// <summary>
|
/// 建立Tag与Control之间的联系
|
/// </summary>
|
|
private void MapTagToControl()
|
{
|
Log.WriteLog("MapTagToControl Enter");
|
|
opc.itemReadDict[InputTag.X_JinDian].control = lblX_JinDian;
|
opc.itemReadDict[InputTag.Z_JinDian].control =lblZ_JinDian;
|
opc.itemReadDict[InputTag.X_Alarm].control =lblX_Alarm;
|
opc.itemReadDict[InputTag.Z_Alarm].control = lblZ_Alarm;
|
opc.itemReadDict[InputTag.X_CW].control = lblX_CW;
|
opc.itemReadDict[InputTag.X_CCW].control = lblX_CCW;
|
opc.itemReadDict[InputTag.Z_CW].control = lblZ_CW;
|
opc.itemReadDict[InputTag.Z_CCW].control =lblZ_CCW;
|
opc.itemReadDict[InputTag.DingWei_CW].control = lblDingWei_CW;
|
opc.itemReadDict[InputTag.DingWei_CCW].control = lblDingWei_CCW;
|
opc.itemReadDict[InputTag.DingWei_JinDian].control = lblDingWei_JinDian;
|
opc.itemReadDict[InputTag.DingWei_Alarm].control = lblDingWei_Alarm;
|
|
opc.itemReadDict[InputTag.Start1].control = lblStart1;
|
opc.itemReadDict[InputTag.Start2].control = lblStart2;
|
opc.itemReadDict[InputTag.Reset].control = lblReset;
|
opc.itemReadDict[InputTag.E_Stop].control = lblE_Stop;
|
opc.itemReadDict[InputTag.SafeCurtain].control = lblSafeCurtain;
|
opc.itemReadDict[InputTag.OpenJieJin].control = lblOpenJieJin;
|
opc.itemReadDict[InputTag.CeBianQian].control =lblCeBianQian;
|
opc.itemReadDict[InputTag.CeBianHou].control = lblCeBianHou;
|
opc.itemReadDict[InputTag.WuGanQian].control = lblWuGanQian;
|
opc.itemReadDict[InputTag.WuGanHou].control = lblWuGanHou;
|
|
|
//OutPut I/O界面显示
|
|
opc.itemWriteDict[OutputTag.CeBianCylider].control = lblCeBianCylider;
|
opc.itemWriteDict[OutputTag.ZhengBianCylider].control = lblZhengBianCylider;
|
opc.itemWriteDict[OutputTag.WuGanCylider].control = lblWuGanCylider;
|
opc.itemWriteDict[OutputTag.HuaTaiCylider].control = lblHuaTaiCylider;
|
opc.itemWriteDict[OutputTag.SiFuPowerOn].control = lblSiFuPowerOn;
|
opc.itemWriteDict[OutputTag.X_SRV_ON].control = lblX_SRV_ON;
|
opc.itemWriteDict[OutputTag.Z_SRV_ON].control = lblZ_SRV_ON;
|
opc.itemWriteDict[OutputTag.DingWei_SRV_ON].control = lblDingWei_SRV_ON;
|
opc.itemWriteDict[OutputTag.Red].control = lblRed;
|
opc.itemWriteDict[OutputTag.Yellow].control = lblYellow;
|
opc.itemWriteDict[OutputTag.Green].control = lblGreen;
|
opc.itemWriteDict[OutputTag.Buzzer].control = lblBuzzer;
|
opc.itemWriteDict[OutputTag.Z_ShaChe].control = lblZ_ShaChe;
|
opc.itemWriteDict[OutputTag.ForApple].control = lblForApple;
|
opc.itemWriteDict[OutputTag.CameraLighto].control = lblCameraLighto;
|
opc.itemWriteDict[OutputTag.WuGanCylider2].control = lblWuGanCylider2;
|
|
Log.WriteLog("MapTagToControl Leave");
|
}
|
|
|
#region 初始化
|
/// <summary>
|
/// 加载配置文件
|
/// </summary>
|
private void initConfig()
|
{
|
Log.WriteLog("InitConfig configpath: " + configPath);
|
|
if (File.Exists(configPath))
|
{
|
config = sft.GetConfig(configPath);
|
}
|
else
|
{
|
config = new ConfigStruct();
|
|
config.angleOffset = 0;
|
config.opcConfig.itmHandleClient = 1234;
|
config.opcConfig.serverIP = "127.0.0.1";
|
config.opcConfig.serverName = "KEPware.KEPServerEx.V4";
|
config.opcConfig.groupProperty.defaultGroupDeadband = 0;
|
config.opcConfig.groupProperty.defaultGroupIsActive = true;
|
config.opcConfig.groupProperty.isActive = true;
|
config.opcConfig.groupProperty.isSubscribed = true;
|
config.opcConfig.groupProperty.updateRate = 300;
|
config.title = "LLMF V1.1";
|
config.cams = new CamerasConfig();
|
config.cams.SerialNumber = new uint[1];
|
config.cams.SerialNumber[0] = 11111111;
|
config.password = "1";
|
config.minAngle = 119;
|
config.maxAngle = 121;
|
config.pulsePerDegree = 500;
|
config.calAngle = 120;
|
config.saveImage = true;
|
sft.SetConfig(configPath, config);
|
}
|
this.tsplabelProductName.Text = config.title;
|
this.txtCalAngle.Text = config.calAngle.ToString();
|
this.txtCalAngle_left.Text = config.calAngle.ToString();
|
this.ckbSaveImage.Checked = config.saveImage;
|
|
List<string> list = new List<string>();
|
list.Add("inch13");
|
list.Add("inch15");
|
list.Add("inch16");
|
if (config.leftUsed)
|
{
|
cboSize_Left.DataSource = list;
|
cboSize_Left.SelectedIndex = config.selectedSizeIndex;
|
}
|
if (config.rightUsed)
|
{
|
cboSize.DataSource = list;
|
cboSize.SelectedIndex = config.selectedSizeIndex;
|
}
|
}
|
|
/// <summary>
|
/// 加载相机
|
/// </summary>
|
private void initCam_Right()
|
{
|
Log.WriteLog("initCam_Right Enter");
|
|
cam = new PointGreyAndHalcon.PointGreyAndHalcon();
|
isRightCameraOpen = cam.OpenCamera(config.cams.SerialNumber[1]);
|
cam.GrabImageDone += new GrabImageDoneDelegate(cam_GrabImageDone);
|
|
Log.WriteLog("initCam_Right Leave");
|
}
|
|
|
/// <summary>
|
/// 加载HalconTool
|
/// </summary>
|
private void initHalconTool()
|
{
|
Log.WriteLog("initHalconTool Enter");
|
|
ht.LoadJobs();
|
ht.resultCreater.ListenEvent += new EventHandler<HalconTools.ListenEventArgs>(resultCreater_ListenEvent);
|
|
Log.WriteLog("initHalconTool Leave");
|
}
|
|
|
|
/// <summary>
|
/// 加载OPC
|
/// </summary>
|
private void initOPC()
|
{
|
Log.WriteLog("initOPC Enter");
|
|
ConnectToOpc();
|
UpdateOPC();
|
MapTagToControl();
|
opc.listenEventCreater.ListenEvent += new EventHandler<EventTool.ListenEventArgs>(listenEventCreater_ListenEvent);
|
opc.listenEventCreater.ListenEvent += new EventHandler<EventTool.ListenEventArgs>(listenOutTageEventCreater_ListenEvent);
|
|
Log.WriteLog("initOPC Leave");
|
}
|
|
#endregion
|
|
#region 各种事件
|
|
void cam_GrabImageDone(string recData, HImage recImage)
|
{
|
Log.WriteLog("cam_GrabImageDone Enter");
|
|
Log.WriteLog("cam_GrabImageDone recData: " + runStatus.ToString());
|
|
lock (GetMutexLock_Right())
|
{
|
Log.WriteLog("cam_GrabImageDone lock GetMutexLock_Right enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
Log.WriteLog("cam_GrabImageDone ui thread proccess begin");
|
|
switch (recData)
|
{
|
case "GrabSuccess":
|
//cam.image = recImage;
|
Log.WriteLog("cam_GrabImageDone GrabSuccess begin");
|
|
Log.WriteLog("cam_GrabImageDone GrabSuccess updateImage");
|
|
cam.UpdateImage(viewPort);
|
|
Log.WriteLog("cam_GrabImageDone GrabSuccess save image file");
|
if (runStatus != RunStatus.continueCapture)
|
{
|
#region 保存图片
|
string FolderPath = "D:\\Image\\" + DateTime.Now.ToString("yyyyMMdd");
|
string fileName = txtSN.Text.Trim() + "-" + DateTime.Now.ToString("HHmmssffff");
|
|
if (!Directory.Exists(FolderPath)) Directory.CreateDirectory(FolderPath);
|
cam.SaveImage(FolderPath, fileName);
|
#endregion
|
}
|
|
ht.JobImage.Dispose();
|
Log.WriteLog("cam_GrabImageDone GrabSuccess getimage info");
|
|
ht.JobImage = recImage.CopyImage();
|
HOperatorSet.GetImageSize(ht.JobImage, out ImageWidth, out ImageHeight);
|
ht.JobResults.Clear();
|
|
Log.WriteLog("cam_GrabImageDone GrabSuccess run JobLLMF");
|
ht.Run("JobLLMF");
|
|
Log.WriteLog("cam_GrabImageDone GrabSuccess end");
|
break;
|
|
case "GrabFail":
|
Log.WriteLog("cam_GrabImageDone GrabFail");
|
break;
|
}
|
|
recImage.Dispose();
|
|
Log.WriteLog("cam_GrabImageDone ui thread proccess end");
|
}));
|
GC.Collect();//c#回收系统
|
}
|
|
Log.WriteLog("cam_GrabImageDone Leave");
|
}
|
|
void cam_left_GrabImageDone(string recData, HImage recImage)
|
{
|
Log.WriteLog("cam_left_GrabImageDone Enter");
|
|
Log.WriteLog("cam_left_GrabImageDone recData: " + runStatus.ToString());
|
|
lock (GetMutexLock_Left())
|
{
|
Log.WriteLog("cam_left_GrabImageDone lock GetMutexLock_Left enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
Log.WriteLog("cam_left_GrabImageDone ui thread proccess begin");
|
|
switch (recData)
|
{
|
case "GrabSuccess":
|
//cam_left.image = recImage.CopyImage();
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess begin");
|
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess updateImage");
|
|
cam_left.UpdateImage(viewPort_left);
|
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess save image file");
|
if (runStatus_left != RunStatus.continueCapture)
|
{
|
#region 保存图片
|
string FolderPath = "D:\\Image\\" + DateTime.Now.ToString("yyyyMMdd") + "-left";
|
string fileName = txtSN.Text.Trim() + "-" + DateTime.Now.ToString("HHmmssffff");
|
|
if (!Directory.Exists(FolderPath)) Directory.CreateDirectory(FolderPath);
|
cam_left.SaveImage(FolderPath, fileName);
|
#endregion
|
}
|
|
ht_left.JobImage.Dispose();
|
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess getimage info");
|
ht_left.JobImage = recImage.CopyImage();
|
HOperatorSet.GetImageSize(ht_left.JobImage, out ImageWidth, out ImageHeight);
|
ht_left.JobResults.Clear();
|
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess run JobLLMF");
|
ht_left.Run("JobLLMF");
|
|
Log.WriteLog("cam_left_GrabImageDone GrabSuccess end");
|
break;
|
|
case "GrabFail":
|
Log.WriteLog("cam_left_GrabImageDone GrabFail");
|
break;
|
}
|
|
recImage.Dispose();
|
|
Log.WriteLog("cam_left_GrabImageDone ui thread proccess end");
|
}));
|
|
GC.Collect();
|
}
|
|
Log.WriteLog("cam_left_GrabImageDone Leave");
|
}
|
|
void resultCreater_ListenEvent(object sender, HalconTools.ListenEventArgs e)
|
{
|
Log.WriteLog("resultCreater_ListenEvent Enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
Log.WriteLog("resultCreater_ListenEvent UI, data:" + e.IData.Data.ToString()+ ", runStatus:" + runStatus);
|
|
string s = e.IData.Data.ToString();
|
if (!s.Equals("JobLLMF_Done"))
|
{
|
if (runStatus == RunStatus.firstCapture || runStatus == RunStatus.adjustMent)
|
{
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.CaptureFail_Right true begin");
|
|
opc.Write(OutputTag.CaptureFail_Right, true);
|
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.CaptureFail_Right true end");
|
return;
|
}
|
}
|
|
Log.WriteLog("resultCreater_ListenEvent UI, jobresults count: " + ht.JobResults.Count.ToString());
|
|
JobResult r = new JobResult();
|
|
if (ht.JobResults.Count > 0)
|
{
|
r = ht.JobResults[0].results[0];
|
|
string logstr = (null == r.fitLineResult) ? "null" : "exists";
|
Log.WriteLog("resultCreater_ListenEvent UI, jobresults count r.fitLineResult:" + logstr);
|
if (r.fitLineResult == null)
|
{
|
ShowDisplayAngle("-");
|
return;
|
}
|
}
|
else
|
{
|
ShowDisplayAngle("-");
|
return;
|
}
|
|
Log.WriteLog("resultCreater_ListenEvent UI, DrawLine");
|
|
DrawLine(viewPort, r.fitLineResult);
|
|
double tmpAngle = 180 - ht.AngleLine2HorizontialAxis(r.fitLineResult) + config.angleOffset;
|
|
Log.WriteLog("resultCreater_ListenEvent UI, ShowDisplayAngle angle: " + tmpAngle.ToString());
|
|
ShowDisplayAngle(tmpAngle.ToString("0.00"));
|
if(booltemAngle==true)
|
{
|
Log.WriteLog("Camera Get The Alignment tmpAangle"+tmpAngle.ToString());
|
|
}
|
|
|
if (runStatus == RunStatus.calibration) //标定
|
{
|
this.btnCalibration.Enabled = true;
|
return;
|
}
|
|
if (runStatus == RunStatus.continueCapture) //连续拍照
|
{
|
return;
|
}
|
|
if (runStatus == RunStatus.firstCapture || runStatus == RunStatus.adjustMent)
|
{
|
if (runStatus == RunStatus.firstCapture)
|
{
|
initAngle = tmpAngle; //记录初始角度
|
|
|
//Janhans 增加界面角度log记载的Flage 变量 booltemAngle
|
booltemAngle = true;
|
Log.WriteLog("Camera Get The InitAngle "+initAngle.ToString());
|
}
|
if (tmpAngle >= config.minAngle && tmpAngle <= config.maxAngle)
|
{
|
string str;
|
|
finalAngle = tmpAngle;
|
sw.Stop();
|
Log.WriteLog("Camera Get The FinalAngle" + finalAngle);
|
|
str=sw.ElapsedMilliseconds.ToString();
|
Log.WriteLog("Aangle_Alignment_Time"+str+"ms");
|
sw.Restart();
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move_OK true begin");
|
opc.Write(OutputTag.Move_OK, true);
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move_OK true end");
|
|
Log.WriteLog("-------角度调整完成,继电器上电, PC给出信号至Macmin-----");
|
Log.WriteLog("--------Relay turn on------");
|
isRealyOK = true;
|
Log.WriteLog("RunEnd Enter");
|
txtResultInitAngle.Text = initAngle.ToString("0.00");
|
txtResultFinalAngle.Text = finalAngle.ToString("0.00");
|
booltemAngle = false;//界面角度log记载的Flage 变量 booltemAngle
|
|
|
//RunEnd();
|
//Log.WriteLog("resultCreater_ListenEvent UI, RunEnd");
|
|
return;
|
}
|
|
//告诉PLC走多少
|
int tmpDis = (int)(((config.maxAngle + config.minAngle) / 2 - tmpAngle) * config.pulsePerDegree);
|
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move_Distance: " + tmpDis.ToString());
|
|
opc.Write(OutputTag.Move_Distance, tmpDis);
|
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move begin");
|
|
Thread.Sleep(100);
|
opc.Write(OutputTag.Move, true);
|
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move end");
|
}
|
}));
|
|
Log.WriteLog("resultCreater_ListenEvent Leave");
|
}
|
|
void resultCreater_left_ListenEvent(object sender, HalconTools.ListenEventArgs e)
|
{
|
Log.WriteLog("resultCreater_left_ListenEvent Enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
Log.WriteLog("resultCreater_left_ListenEvent UI, data:"+ e.IData.Data.ToString() + " runStatus: " + runStatus);
|
|
string s = e.IData.Data.ToString();
|
if (!s.Equals("JobLLMF_Done"))
|
{
|
if (runStatus_left == RunStatus.firstCapture || runStatus_left == RunStatus.adjustMent)
|
{
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.CaptureFail_left true begin");
|
|
opc.Write(OutputTag.CaptureFail_left, true);
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.CaptureFail_left true end");
|
return;
|
}
|
}
|
|
JobResult r = new JobResult();
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, jobresults count:" + ht_left.JobResults.Count.ToString());
|
|
if (ht_left.JobResults.Count > 0)
|
{
|
r = ht_left.JobResults[0].results[0];
|
string logstr = (null == r.fitLineResult) ? "null" : "exists";
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, jobresults count r.fitLineResult: " + logstr);
|
if (r.fitLineResult == null)
|
{
|
ShowDisplayAngle_left("-");
|
return;
|
}
|
}
|
else
|
{
|
ShowDisplayAngle_left("-");
|
return;
|
}
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, DrawLine");
|
|
DrawLine(viewPort_left, r.fitLineResult);
|
|
double tmpAngle = 180 - ht_left.AngleLine2HorizontialAxis(r.fitLineResult) + config.angleOffset_Left;
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, ShowDisplayAngle angle: " + tmpAngle.ToString());
|
|
ShowDisplayAngle_left(tmpAngle.ToString("0.00"));
|
|
if (runStatus_left == RunStatus.calibration) //标定
|
{
|
this.btnCalibration_left.Enabled = true;
|
return;
|
}
|
|
if (runStatus_left == RunStatus.continueCapture) //连续拍照
|
{
|
return;
|
}
|
|
if (runStatus_left == RunStatus.firstCapture || runStatus_left == RunStatus.adjustMent)
|
{
|
if (runStatus_left == RunStatus.firstCapture)
|
{
|
initAngle_left = tmpAngle; //记录初始角度
|
}
|
if (tmpAngle >= config.minAngle && tmpAngle <= config.maxAngle)
|
{
|
|
finalAngle_left = tmpAngle;
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.Move_OK_left true begin");
|
|
opc.Write(OutputTag.Move_OK_left, true);
|
Log.WriteLog("-------角度调整完成,PC给出继电器信号至Macmin-----");
|
Log.WriteLog("--------Relay turn on------");
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.Move_OK_left true end");
|
|
RunEnd_Left();
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, RunEnd_Left");
|
|
return;
|
}
|
|
//告诉PLC走多少
|
int tmpDis = (int)(((config.maxAngle + config.minAngle) / 2 - tmpAngle) * config.pulsePerDegree_Left);
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.Move_Distance_left:" + tmpDis.ToString());
|
|
opc.Write(OutputTag.Move_Distance_left, tmpDis);
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.Move_Distance_left begin");
|
|
Thread.Sleep(100);
|
opc.Write(OutputTag.Move_left, true);
|
|
Log.WriteLog("resultCreater_left_ListenEvent UI, opc write OutputTag.Move_left end");
|
}
|
}));
|
|
Log.WriteLog("resultCreater_left_ListenEvent Leave");
|
}
|
|
void listenEventCreater_ListenEvent(object sender, EventTool.ListenEventArgs e)
|
{
|
// Log.WriteLog("listenEventCreater_ListenEvent Enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
OPC.Item item = (OPC.Item)e.IData.Data;
|
|
string logstr = (null == item.value) ? "null" : item.value.ToString();
|
Log.WriteLog("listenEventCreater_ListenEvent item.name:" + item.name + " item.value: " + logstr);
|
|
switch (item.name)
|
{
|
case InputTag.Capture:
|
if ((bool)item.value)
|
{
|
if (!Effective())
|
{
|
break;
|
}
|
if (runStatus == RunStatus.Normal)
|
{
|
runStatus = RunStatus.firstCapture;
|
}
|
else if (runStatus == RunStatus.firstCapture)
|
{
|
runStatus = RunStatus.adjustMent;
|
}
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Capture cam.GrabImage begin");
|
cam.GrabImage("");
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Capture cam.GrabImage end");
|
}
|
break;
|
|
case InputTag.Position:
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Position");
|
|
tsslPosition.Text = ((int)item.value).ToString();
|
break;
|
|
case InputTag.Start:
|
if ((bool)item.value)
|
{
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start StopRightCamera begin");
|
Log.WriteLog("------双手启动完成,产品送料开始,相机准备拍照----");
|
//双手启动,产品送料开始
|
sw.Start();
|
|
StopRightCamera();
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start opc write OutputTag.Start");
|
|
opc.Write(OutputTag.Start, false);
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start initTest");
|
|
initTest();
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start ShowDisplay");
|
|
ShowDisplay("开始检测", Color.Blue, Color.Lime);
|
}
|
break;
|
|
case InputTag.Capture_left:
|
if ((bool)item.value)
|
{
|
if (!Effective())
|
{
|
break;
|
}
|
if (runStatus_left == RunStatus.Normal)
|
{
|
runStatus_left = RunStatus.firstCapture;
|
}
|
else if (runStatus_left == RunStatus.firstCapture)
|
{
|
runStatus_left = RunStatus.adjustMent;
|
}
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Capture_left cam_left.GrabImage begin");
|
|
cam_left.GrabImage("");
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Capture_left cam_left.GrabImage end");
|
}
|
break;
|
|
case InputTag.Position_left:
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Position_left");
|
tsslPosition_left.Text = ((int)item.value).ToString();
|
break;
|
|
case InputTag.Start_left:
|
if ((bool)item.value)
|
{
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start_left StopLeftCamera begin");
|
Log.WriteLog("------双手启动完成,产品送料开始,相机准备拍照----");
|
StopLeftCamera();
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start_left opc write OutputTag.Start_left");
|
|
opc.Write(OutputTag.Start_left, false);
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start_left initTest_Left");
|
|
initTest_Left();
|
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Start_left ShowDisplay_left");
|
|
ShowDisplay_left("开始检测", Color.Blue, Color.Lime);
|
}
|
break;
|
|
case InputTag.Alarm:
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Alarm");
|
AlarmDisplay((int)item.value, this.tsslAlarm);
|
break;
|
|
case InputTag.Alarm_left:
|
Log.WriteLog("listenEventCreater_ListenEvent InputTag.Alarm_left");
|
AlarmDisplay((int)item.value, this.tsslAlarm_Left);
|
break;
|
|
}
|
}));
|
|
// Log.WriteLog("listenEventCreater_ListenEvent Leave");
|
}
|
void listenOutTageEventCreater_ListenEvent(object sender, EventTool.ListenEventArgs e)
|
{
|
// Log.WriteLog("listenEventCreater_ListenEvent Enter");
|
|
this.BeginInvoke(new MethodInvoker(delegate
|
{
|
OPC.Item item = (OPC.Item)e.IData.Data;
|
|
string logstr = (null == item.value) ? "null" : item.value.ToString();
|
Log.WriteLog("listenEventCreater_ListenEvent item.name:" + item.name + " item.value: " + logstr);
|
|
switch (item.name)
|
{
|
case OutputTag.ForApple:
|
if (config.rightUsed == true)
|
{
|
btnDisplay.Text = (bool)item.value ? "继电器上电并保持" : "继电器断电";
|
|
|
}
|
else
|
{
|
btnDisplay_left.Text = (bool)item.value ? "继电器上电并保持" : "继电器断电";
|
|
|
}
|
|
if ((bool)item.value && isRealyOK)
|
{
|
//Log.WriteLog("--------角度调整完成,继电器上电------");
|
|
|
}
|
else if (!((bool)item.value) && isRealyOK)
|
{
|
Log.WriteLog("--------产品检测完成,OP复位操作,继电器断电------");
|
Log.WriteLog("--------Relay turn off------");
|
isRealyOK = false;
|
Log.WriteLog("--------产品检测结束------");
|
Thread.Sleep(3000);
|
Log.WriteLog("resultCreater_ListenEvent UI, opc write OutputTag.Move_OK true end");
|
RunEnd();
|
Log.WriteLog("resultCreater_ListenEvent UI, RunEnd");
|
}
|
|
break;
|
|
}
|
}));
|
|
// Log.WriteLog("listenEventCreater_ListenEvent Leave");
|
}
|
|
#endregion
|
|
#region OPC操作
|
|
/// <summary>
|
/// 连接到OPC Server
|
/// 保持此前的手动/自动模式
|
/// </summary>
|
private void ConnectToOpc()
|
{
|
Log.WriteLog("ConnectToOpc Enter");
|
|
opc = new OPC(config.opcConfig);
|
if (opc.Connect())
|
{
|
Log.WriteLog("ConnectToOpc connect succeed");
|
|
tsslOPC.Text = "OPC Connection Succeed !";
|
// 进行如下操作
|
opc.CreateGroup(); // 创建Group
|
//PlcRunMode(RunMode.Manual);
|
}
|
else
|
{
|
Log.WriteLog("ConnectToOpc connect fail");
|
|
tsslOPC.Text = "OPC Connection Failed !";
|
|
/* 连接不上时的异常处理 */
|
}
|
|
Log.WriteLog("ConnectToOpc Leave");
|
}
|
|
/// <summary>
|
/// 遍历OPC所有点位,得到值
|
/// </summary>
|
private void UpdateOPC()
|
{
|
Log.WriteLog("UpdateOPC Enter");
|
Thread.Sleep(5000);
|
|
foreach (KeyValuePair<string, OPC.Item> item in opc.itemReadDict)
|
{
|
object status = new Object();
|
opc.ReadOneItem_Wrapper(item.Key, ref status);
|
string logstr = (null == item.Value) ? "null" : item.Value.ToString();
|
Log.WriteLog("UpdateOPC itemReadDict key: " + item.Key + " value:" + logstr);
|
|
switch (item.Key)
|
{
|
case InputTag.Capture :
|
break;
|
|
case InputTag.Position:
|
tsslPosition.Text = ((int)item.Value.value).ToString();
|
break;
|
|
case InputTag.Position_left:
|
tsslPosition_left.Text = ((int)item.Value.value).ToString();
|
break;
|
|
case InputTag.Alarm:
|
//AlarmDisplay((int)item.Value.value);
|
AlarmDisplay((int)item.Value.value, this.tsslAlarm);
|
break;
|
case InputTag.Alarm_left:
|
AlarmDisplay((int)item.Value.value, this.tsslAlarm_Left);
|
break;
|
}
|
}
|
|
foreach (KeyValuePair<string, OPC.Item> item in opc.itemWriteDict)
|
{
|
object status = new Object();
|
opc.ReadOneItem_Wrapper(item.Key, ref status);
|
string logstr =(null == item.Value) ? "null" : item.Value.ToString();
|
Log.WriteLog("UpdateOPC itemWriteDict key: " + item.Key + " value:" + logstr);
|
switch (item.Key)
|
{
|
case OutputTag.Move:
|
break;
|
|
case OutputTag.CameraLight:
|
ckbCameraLight.Checked = (bool)item.Value.value;
|
ckbCameraLight.Text = ckbCameraLight.Checked ? "光源关" : "光源开";
|
break;
|
|
case OutputTag.CameraLight_left:
|
ckbCameraLight_left.Checked = (bool)item.Value.value;
|
ckbCameraLight_left.Text = ckbCameraLight_left.Checked ? "光源关" : "光源开";
|
break;
|
|
//case OutputTag.ForApple:
|
// if (config.rightUsed == true )
|
// {
|
// btnDisplay.Text = (bool)item.Value.value ? "继电器上电" : "继电器断电";
|
|
|
// }
|
// else
|
// {
|
// btnDisplay_left.Text = (bool)item.Value.value ? "继电器上电" : "继电器断电";
|
|
// }
|
|
// if ((bool)item.Value.value && isRealyOK)
|
// {
|
// Log.WriteLog("--------角度调整完成,继电器上电------");
|
// }
|
// if (!((bool)item.Value.value) && isRealyOK)
|
// {
|
// Log.WriteLog("--------产品检测完成,OP复位操作,继电器断电------");
|
// }
|
// isRealyOK = false;
|
// break;
|
}
|
}
|
|
Log.WriteLog("UpdateOPC Leave");
|
}
|
|
#endregion
|
|
#region 各种方法
|
|
/// <summary>
|
/// 初始化新的检测
|
/// </summary>
|
private void initTest()
|
{
|
runStatus = RunStatus.Normal;
|
|
txtResultInitAngle.Text = "";
|
txtResultFinalAngle.Text = "";
|
}
|
|
/// <summary>
|
/// 左初始化新的检测
|
/// </summary>
|
private void initTest_Left()
|
{
|
runStatus_left = RunStatus.Normal;
|
|
txtResultInitAngle.Text = "";
|
txtResultFinalAngle.Text = "";
|
}
|
|
/// <summary>
|
/// 报警信息
|
/// </summary>
|
/// <param name="k">编号</param>
|
private void AlarmDisplay(int k)
|
{
|
tsslAlarm.ForeColor = (k == 0) ? Color.Black : Color.Red;
|
|
switch (k)
|
{
|
case 0:
|
tsslAlarm.Text = "无报警!";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 1:
|
tsslAlarm.Text = "调整伺服电机驱动器报警";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 3:
|
tsslAlarm.Text = "调整伺服脉冲异常";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 5:
|
tsslAlarm.Text = "相机抓取角度失败";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 11:
|
tsslAlarm.Text = "送料伺服电机驱动器报警";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 12:
|
tsslAlarm.Text = "门伺服电机驱动器报警";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 13:
|
tsslAlarm.Text = "送料伺服脉冲异常";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 14:
|
tsslAlarm.Text = "门伺服脉冲异常";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 20:
|
tsslAlarm.Text = "产品初始角度未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 21:
|
tsslAlarm.Text = "侧边气缸夹紧未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 22:
|
tsslAlarm.Text = "正边气缸夹紧未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 23:
|
tsslAlarm.Text = "无杆气缸推送未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 24:
|
tsslAlarm.Text = "滑台气缸退位未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 26:
|
tsslAlarm.Text = "无杆气缸回初始位未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 27:
|
tsslAlarm.Text = "侧边气缸回初始位未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 28:
|
tsslAlarm.Text = "正边气缸回初始位未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 29:
|
tsslAlarm.Text = "滑台气缸回初始位未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 30:
|
tsslAlarm.Text = "光幕触发报警,请确认无异常状态并复位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 31:
|
tsslAlarm.Text = "无杆气缸回原点未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 32:
|
tsslAlarm.Text = "侧边气缸回原点未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 33:
|
tsslAlarm.Text = "正边气缸回原点未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 34:
|
tsslAlarm.Text = "滑台气缸回原点未到位";
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 35:
|
tsslAlarm.Text = "调整伺服触发极限位,请检查产品打开的初始角度";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 36:
|
tsslAlarm.Text = "定位相机光源未打开,请检查相机光源状态并急停复位";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 37:
|
tsslAlarm.Text = "相机未拍照,请重启程序或检查PLC状态";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
|
case 38:
|
tsslAlarm.Text = "初始化未完成,请急停复位并检查程序工作状态";
|
sw.Reset();
|
Log.WriteLog(tsslAlarm.Text.ToString());
|
break;
|
}
|
}
|
|
/// <summary>
|
/// 报警信息
|
/// </summary>
|
/// <param name="k">编号</param>
|
private void AlarmDisplay(int k, ToolStripStatusLabel alarm)
|
{
|
alarm.ForeColor = (k == 0) ? Color.Black : Color.Red;
|
|
switch (k)
|
{
|
case 0:
|
alarm.Text = "无报警!";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 1:
|
alarm.Text = "调整伺服电机驱动器报警";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 3:
|
alarm.Text = "调整伺服脉冲异常";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 5:
|
alarm.Text = "相机抓取角度失败,请检查产品LCD边框是否贴有异物";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 7:
|
alarm.Text = "产品初始角度过大,请急停复位后重新打开产品再次测量";
|
Log.WriteLog(alarm.Text.ToString());
|
if (alarm.Name.Contains("_Left"))
|
{
|
SaveinitAngle_Left();
|
}
|
else
|
{
|
SaveinitAngle_Right();
|
}
|
break;
|
|
case 10:
|
alarm.Text = "急停中,请复位!";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 11:
|
alarm.Text = "送料伺服电机驱动器报警";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 12:
|
alarm.Text = "门伺服电机驱动器报警";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 13:
|
alarm.Text = "送料伺服脉冲异常";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 14:
|
alarm.Text = "门伺服脉冲异常";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 20:
|
alarm.Text = "产品初始角度未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 21:
|
alarm.Text = "侧边气缸夹紧未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 22:
|
alarm.Text = "正边气缸夹紧未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 23:
|
alarm.Text = "无杆气缸推送未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 24:
|
alarm.Text = "滑台气缸退位未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 26:
|
alarm.Text = "无杆气缸回初始位未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 27:
|
alarm.Text = "侧边气缸回初始位未到位";
|
break;
|
|
case 28:
|
alarm.Text = "正边气缸回初始位未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 29:
|
alarm.Text = "滑台气缸回初始位未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 30:
|
alarm.Text = "光幕触发报警,请确认无异常状态并复位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 31:
|
alarm.Text = "无杆气缸回原点未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 32:
|
alarm.Text = "侧边气缸回原点未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 33:
|
alarm.Text = "正边气缸回原点未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 34:
|
alarm.Text = "滑台气缸回原点未到位";
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 35:
|
alarm.Text = "调整伺服触发极限位,请检查产品打开的初始角度";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 36:
|
alarm.Text = "定位相机光源未打开,请检查相机光源状态并急停复位";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 37:
|
alarm.Text = "相机未拍照,请重启程序或检查PLC状态";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
|
case 38:
|
alarm.Text = "初始化未完成,请急停复位并检查程序工作状态";
|
sw.Stop();
|
sw.Reset();
|
Log.WriteLog(alarm.Text.ToString());
|
break;
|
}
|
}
|
|
|
/// <summary>
|
/// 按钮显示
|
/// </summary>
|
/// <param name="s">内容</param>
|
/// <param name="foreColor">文字颜色</param>
|
/// <param name="backgroudColor">背景色</param>
|
private void ShowDisplay(string s, Color foreColor, Color backColor)
|
{
|
btnDisplay.Text = s;
|
btnDisplay.ForeColor = foreColor;
|
btnDisplay.BackColor = backColor;
|
}
|
|
/// <summary>
|
/// 左按钮显示
|
/// </summary>
|
/// <param name="s">内容</param>
|
/// <param name="foreColor">文字颜色</param>
|
/// <param name="backgroudColor">背景色</param>
|
private void ShowDisplay_left(string s, Color foreColor, Color backColor)
|
{
|
btnDisplay_left.Text = s;
|
btnDisplay_left.ForeColor = foreColor;
|
btnDisplay_left.BackColor = backColor;
|
}
|
|
/// <summary>
|
/// 再控件上画直线
|
/// </summary>
|
/// <param name="viewport"></param>
|
/// <param name="line"></param>
|
private void DrawLine(HWindowControl viewport, FitLineResult line)
|
{
|
HOperatorSet.SetColor(viewport.HalconWindow, "green");
|
HOperatorSet.SetLineWidth(viewport.HalconWindow, 2);
|
HOperatorSet.SetPart(viewport.HalconWindow, 0, 0, ImageHeight - 1, ImageWidth - 1);
|
HOperatorSet.DispLine(viewport.HalconWindow, line.mRowStart, line.mColumnStart, line.mRowEnd, line.mColumnEnd);
|
}
|
|
/// <summary>
|
/// 保存数据
|
/// </summary>
|
private void SaveResult()
|
{
|
Log.WriteLog("SaveResult Enter");
|
|
string filePath = "D:\\Data\\" + DateTime.Now.ToString("yyyyMMdd");
|
if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath);
|
|
filePath += "\\result.csv";
|
string tmpS = "";
|
if (!File.Exists(filePath))
|
{
|
tmpS = "SN,time,initAngle,finalAngle,\r\n";
|
File.AppendAllText(filePath, tmpS);
|
}
|
|
tmpS = txtSN.Text.Trim() + "," + DateTime.Now.ToString("HH:mm:ss") + "," + initAngle.ToString() + "," + finalAngle.ToString() + ",\r\n";
|
File.AppendAllText(filePath, tmpS);
|
|
Log.WriteLog("SaveResult Leave");
|
}
|
|
/// <summary>
|
/// 右初始角度保存数据
|
/// </summary>
|
private void SaveinitAngle_Right()
|
{
|
Log.WriteLog("SaveinitAngle_Right Enter");
|
|
string filePath = "D:\\Data\\" + DateTime.Now.ToString("yyyyMMdd");
|
if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath);
|
|
filePath += "\\result.csv";
|
string tmpS = "";
|
if (!File.Exists(filePath))
|
{
|
tmpS = "SN,time,initAngle,finalAngle,\r\n";
|
File.AppendAllText(filePath, tmpS);
|
}
|
|
tmpS = txtSN.Text.Trim() + "," + DateTime.Now.ToString("HH:mm:ss") + "," + initAngle.ToString() + "," + "" + ",\r\n";
|
File.AppendAllText(filePath, tmpS);
|
|
Log.WriteLog("SaveinitAngle_Right Leave");
|
}
|
|
|
/// <summary>
|
/// 左保存数据
|
/// </summary>
|
private void SaveResult_Left()
|
{
|
Log.WriteLog("SaveResult_Left Enter");
|
|
string filePath = "D:\\Data\\" + DateTime.Now.ToString("yyyyMMdd") + "-Left";
|
if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath);
|
|
filePath += "\\result.csv";
|
string tmpS = "";
|
if (!File.Exists(filePath))
|
{
|
tmpS = "SN,time,initAngle,finalAngle,\r\n";
|
File.AppendAllText(filePath, tmpS);
|
}
|
|
tmpS = txtSN.Text.Trim() + "," + DateTime.Now.ToString("HH:mm:ss") + "," + initAngle_left.ToString() + "," + finalAngle_left.ToString() + ",\r\n";
|
File.AppendAllText(filePath, tmpS);
|
|
Log.WriteLog("SaveResult_Left Leave");
|
}
|
|
/// <summary>
|
/// 左初始角度保存数据
|
/// </summary>
|
private void SaveinitAngle_Left()
|
{
|
Log.WriteLog("SaveinitAngle_Left Enter");
|
|
string filePath = "D:\\Data\\" + DateTime.Now.ToString("yyyyMMdd") + "-Left";
|
if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath);
|
|
filePath += "\\result.csv";
|
string tmpS = "";
|
if (!File.Exists(filePath))
|
{
|
tmpS = "SN,time,initAngle,finalAngle,\r\n";
|
File.AppendAllText(filePath, tmpS);
|
}
|
|
tmpS = txtSN.Text.Trim() + "," + DateTime.Now.ToString("HH:mm:ss") + "," + initAngle_left.ToString() + "," + "" + ",\r\n";
|
File.AppendAllText(filePath, tmpS);
|
|
Log.WriteLog("SaveinitAngle_Left Leave");
|
}
|
|
/// <summary>
|
/// 运算结束操作
|
/// </summary>
|
private void RunEnd()
|
{
|
Log.WriteLog("RunEnd Enter");
|
|
runStatus = RunStatus.Normal;
|
SaveResult();
|
txtResultInitAngle.Text = initAngle.ToString("0.00");
|
txtResultFinalAngle.Text = finalAngle.ToString("0.00");
|
ShowDisplay("视觉检测完成", Color.Blue, Color.Lime);
|
|
Log.WriteLog("RunEnd Leave");
|
}
|
|
/// <summary>
|
/// 左运算结束操作
|
/// </summary>
|
private void RunEnd_Left()
|
{
|
Log.WriteLog("RunEnd_Left Enter");
|
|
runStatus_left = RunStatus.Normal;
|
SaveResult_Left();
|
txtResultInitAngle.Text = initAngle_left.ToString("0.00");
|
txtResultFinalAngle.Text = finalAngle_left.ToString("0.00");
|
ShowDisplay("视觉检测完成", Color.Blue, Color.Lime);
|
|
Log.WriteLog("RunEnd_Left Leave");
|
}
|
|
/// <summary>
|
/// 显示角度
|
/// </summary>
|
/// <param name="s">角度</param>
|
private void ShowDisplayAngle(string s)
|
{
|
this.lblAngleDisplay.Text = s;
|
}
|
|
/// <summary>
|
/// 显示左角度
|
/// </summary>
|
/// <param name="s">角度</param>
|
private void ShowDisplayAngle_left(string s)
|
{
|
this.lblAngleDisplay_left.Text = s;
|
}
|
|
#endregion
|
|
#region 控件事件
|
|
private void btnHalconTool_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnHalconTool_Click Enter");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
HalconTools.frmMain main = new HalconTools.frmMain();
|
main.ShowDialog();
|
|
if (config.rightUsed) ht.LoadJobs();
|
if (config.leftUsed) ht_left.LoadJobs();
|
}
|
|
Log.WriteLog("btnHalconTool_Click Leave");
|
}
|
|
private void btnHalconTool_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnHalconTool_left_Click Enter");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
HalconTools.frmMain main = new HalconTools.frmMain();
|
main.ShowDialog();
|
|
if (config.rightUsed) ht.LoadJobs();
|
if (config.leftUsed) ht_left.LoadJobs();
|
}
|
|
Log.WriteLog("btnHalconTool_left_Click Leave");
|
}
|
|
private void btnCapture_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnCapture_Click Enter");
|
|
runStatus = RunStatus.calibration;
|
|
cam.GrabImage("");
|
|
Log.WriteLog("btnCapture_Click Leave");
|
}
|
|
private void btnCapture_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnCapture_left_Click Enter");
|
|
runStatus_left = RunStatus.calibration;
|
|
cam_left.GrabImage("");
|
|
Log.WriteLog("btnCapture_left_Click Leave");
|
}
|
|
private void btnCalibration_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnCalibration_Click Enter");
|
|
double calAngle, nowAngle;
|
|
try
|
{
|
calAngle = Convert.ToDouble(txtCalAngle.Text);
|
nowAngle = Convert.ToDouble(lblAngleDisplay.Text);
|
}
|
catch (Exception ex)
|
{
|
Log.WriteLog("btnCalibration_Click Exception Leave");
|
|
MessageBox.Show("角度检测错误或标定角度输入错误!");
|
return;
|
}
|
|
config.angleOffset = calAngle - (nowAngle - config.angleOffset);
|
sft.SetConfig(configPath, config);
|
MessageBox.Show("标定成功");
|
|
runStatus = RunStatus.Normal;
|
btnCalibration.Enabled = false;
|
gbxCalibration.Enabled = false;
|
|
|
Log.WriteLog("btnCalibration_Click Leave");
|
}
|
|
private void btnCalibration_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("Error: btnCalibration_left_Click Enter");
|
|
double calAngle, nowAngle;
|
|
try
|
{
|
calAngle = Convert.ToDouble(txtCalAngle_left.Text);
|
nowAngle = Convert.ToDouble(lblAngleDisplay_left.Text);
|
}
|
catch (Exception ex)
|
{
|
Log.WriteLog("Error: btnCalibration_left_Click Exception Leave");
|
|
MessageBox.Show("角度检测错误或标定角度输入错误!");
|
return;
|
}
|
|
config.angleOffset_Left = calAngle - (nowAngle - config.angleOffset_Left);
|
sft.SetConfig(configPath, config);
|
MessageBox.Show("标定成功");
|
|
runStatus_left = RunStatus.Normal;
|
btnCalibration_left.Enabled = false;
|
gbxCalibration_left.Enabled = false;
|
|
Log.WriteLog("btnCalibration_left_Click Leave");
|
}
|
|
private void btnCanCalibration_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnCanCalibration_Click Enter");
|
|
if (gbxCalibration.Enabled == false)
|
{
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK) gbxCalibration.Enabled = true;
|
}
|
else
|
{
|
gbxCalibration.Enabled = false;
|
}
|
|
Log.WriteLog("btnCanCalibration_Click Leave");
|
}
|
|
private void btnCanCalibration_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnCanCalibration_left_Click Enter");
|
|
if (gbxCalibration_left.Enabled == false)
|
{
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK) gbxCalibration_left.Enabled = true;
|
}
|
else
|
{
|
gbxCalibration_left.Enabled = false;
|
}
|
|
Log.WriteLog("btnCanCalibration_left_Click Leave");
|
}
|
|
private void tVideo_Tick(object sender, EventArgs e)
|
{
|
Log.WriteLog("tVideo_Tick Enter");
|
|
cam.GrabImage("");
|
|
Log.WriteLog("tVideo_Tick Leave");
|
}
|
|
private void tVideo_left_Tick(object sender, EventArgs e)
|
{
|
Log.WriteLog("tVideo_left_Tick Enter");
|
|
cam_left.GrabImage("");
|
|
Log.WriteLog("tVideo_left_Tick Leave");
|
}
|
|
private void btnContinueCapture_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnContinueCapture_Click Enter");
|
|
runStatus = RunStatus.continueCapture;
|
tVideo.Enabled = true;
|
this.btnContinueCapture.Enabled = false;
|
this.btnStopCapture.Enabled = true;
|
|
Log.WriteLog("btnContinueCapture_Click Leave");
|
}
|
|
private void btnContinueCapture_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnContinueCapture_left_Click Enter");
|
|
runStatus_left = RunStatus.continueCapture;
|
tVideo_left.Enabled = true;
|
this.btnContinueCapture_left.Enabled = false;
|
this.btnStopCapture_left.Enabled = true;
|
|
Log.WriteLog("btnContinueCapture_left_Click Leave");
|
}
|
|
private void btnStopCapture_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnStopCapture_Click Enter");
|
|
StopRightCamera();
|
|
Log.WriteLog("btnStopCapture_Click Leave");
|
}
|
|
private void StopRightCamera()
|
{
|
Log.WriteLog("StopRightCamera Enter");
|
|
tVideo.Enabled = false;
|
runStatus = RunStatus.Normal;
|
this.btnContinueCapture.Enabled = true;
|
this.btnStopCapture.Enabled = false;
|
|
Log.WriteLog("StopRightCamera Leave");
|
}
|
|
private void btnStopCapture_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnStopCapture_left_Click Enter");
|
|
StopLeftCamera();
|
|
Log.WriteLog("btnStopCapture_left_Click Leave");
|
}
|
|
private void StopLeftCamera()
|
{
|
Log.WriteLog("StopLeftCamera Enter");
|
|
tVideo_left.Enabled = false;
|
runStatus_left = RunStatus.Normal;
|
this.btnContinueCapture_left.Enabled = true;
|
this.btnStopCapture_left.Enabled = false;
|
|
Log.WriteLog("StopLeftCamera Leave");
|
}
|
|
private void btnTestMove_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnTestMove_Click Enter");
|
|
int tmpD = Convert.ToInt32(txtTestPulse.Text);
|
opc.Write(OutputTag.Move_Distance, tmpD);
|
Thread.Sleep(100);
|
opc.Write(OutputTag.Move_Test, true);
|
|
Log.WriteLog("btnTestMove_Click Leave");
|
}
|
|
private void btnTestMove_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnTestMove_left_Click Enter");
|
|
int tmpD = Convert.ToInt32(txtTestPulse_left.Text);
|
opc.Write(OutputTag.Move_Distance_left, tmpD);
|
Thread.Sleep(100);
|
opc.Write(OutputTag.Move_Test_left, true);
|
|
Log.WriteLog("btnTestMove_left_Click Leave");
|
}
|
|
private void cbxTest_CheckedChanged(object sender, EventArgs e)
|
{
|
Log.WriteLog("cbxTest_CheckedChanged Enter");
|
|
if (cbxTest.Checked)
|
{
|
Log.WriteLog("cbxTest_CheckedChanged cbxTest.Checked = true");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
gbxTest.Enabled = cbxTest.Checked;
|
runStatus = RunStatus.testMent;
|
}
|
}
|
else
|
{
|
Log.WriteLog("cbxTest_CheckedChanged cbxTest.Checked = false");
|
|
gbxTest.Enabled = cbxTest.Checked;
|
tVideo.Enabled = false;
|
runStatus = RunStatus.Normal;
|
}
|
|
Log.WriteLog("cbxTest_CheckedChanged Leave");
|
}
|
|
private void cbxTest_left_CheckedChanged(object sender, EventArgs e)
|
{
|
Log.WriteLog("cbxTest_left_CheckedChanged Enter");
|
|
if (cbxTest_left.Checked)
|
{
|
Log.WriteLog("cbxTest_CheckedChanged cbxTest_left.Checked = true");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
gbxTest_left.Enabled = cbxTest_left.Checked;
|
runStatus_left = RunStatus.testMent;
|
}
|
}
|
else
|
{
|
Log.WriteLog("cbxTest_left_CheckedChanged cbxTest_left.Checked = false");
|
|
gbxTest_left.Enabled = cbxTest_left.Checked;
|
tVideo_left.Enabled = false;
|
runStatus_left = RunStatus.Normal;
|
}
|
|
Log.WriteLog("cbxTest_left_CheckedChanged Leave");
|
}
|
|
private void btnConfig_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnConfig_Click Enter");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
frmConfig tmpCon = new frmConfig(opc, config,"Right");
|
tmpCon.ShowDialog();
|
}
|
|
Log.WriteLog("btnConfig_Click Leave");
|
}
|
|
private void btnConfig_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnConfig_left_Click Enter");
|
|
frmPassword frmp = new frmPassword(config.password);
|
frmp.ShowDialog();
|
|
if (frmp.isOK)
|
{
|
frmConfig tmpCon = new frmConfig(opc, config,"Left");
|
tmpCon.ShowDialog();
|
}
|
|
Log.WriteLog("btnConfig_left_Click Leave");
|
}
|
|
private void ckbCameraLight_CheckedChanged(object sender, EventArgs e)
|
{
|
Log.WriteLog("ckbCameraLight_CheckedChanged Enter");
|
|
opc.Write(OutputTag.CameraLight, ckbCameraLight.Checked);
|
ckbCameraLight.Text = ckbCameraLight.Checked ? "光源关" : "光源开";
|
|
Log.WriteLog("ckbCameraLight_CheckedChanged Leave");
|
}
|
|
private void ckbCameraLight_left_CheckedChanged(object sender, EventArgs e)
|
{
|
Log.WriteLog("ckbCameraLight_left_CheckedChanged Enter");
|
|
opc.Write(OutputTag.CameraLight_left, ckbCameraLight_left.Checked);
|
ckbCameraLight_left.Text = ckbCameraLight_left.Checked ? "光源关" : "光源开";
|
|
Log.WriteLog("ckbCameraLight_left_CheckedChanged Leave");
|
}
|
|
private void btnORI_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnORI_Click Enter");
|
opc.Write(OutputTag.ORI, true);
|
Log.WriteLog("btnORI_Click Leave");
|
}
|
|
private void btnORI_left_Click(object sender, EventArgs e)
|
{
|
Log.WriteLog("btnORI_left_Click Enter");
|
|
opc.Write(OutputTag.ORI_left, true);
|
|
Log.WriteLog("btnORI_left_Click Leave");
|
}
|
|
#endregion
|
|
private static System.Threading.Mutex _mutex_Right;
|
|
private System.Threading.Mutex GetMutexLock_Right()
|
{
|
System.Threading.Interlocked.CompareExchange(ref _mutex_Right, new System.Threading.Mutex(), null);
|
return _mutex_Right;
|
}
|
|
private static System.Threading.Mutex _mutex_Left;
|
|
private System.Threading.Mutex GetMutexLock_Left()
|
{
|
System.Threading.Interlocked.CompareExchange(ref _mutex_Left, new System.Threading.Mutex(), null);
|
return _mutex_Left;
|
}
|
|
#region 左
|
|
private void button2_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.Manual_left, true);
|
}
|
|
private void button4_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.qigangjiajin_left, true);
|
}
|
|
private void button5_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.qigangsongkai_left, true);
|
}
|
|
private void btnCloseDor_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.guanmen_left, true);
|
}
|
|
private void btnOpenDor_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.kaimen_left, true);
|
}
|
|
private void button1_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.huataiqigang_left, true);
|
}
|
|
private void button3_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.songliao_left, true);
|
}
|
|
private void btnOut_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.chuliao_left, true);
|
}
|
|
private void button6_Click(object sender, EventArgs e)
|
{
|
if (runStatus_left == RunStatus.Normal)
|
{
|
if (MessageBox.Show("确定进行手动定位?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
{
|
opc.Write(OutputTag.shoudongdingwei_left, true);
|
}
|
}
|
else
|
{
|
MessageBox.Show("测试状态下无法手动定位!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
}
|
}
|
|
private void checkBox1_CheckedChanged(object sender, EventArgs e)
|
{
|
if (checkBox1.Checked)
|
{
|
if ((runStatus_left == RunStatus.Normal))
|
{
|
button6.Enabled = true;
|
}
|
else
|
{
|
checkBox1.Checked = false;
|
button6.Enabled = false;
|
MessageBox.Show("测试状态下无法手动定位!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
}
|
}
|
else
|
{
|
button6.Enabled = false;
|
}
|
}
|
|
#endregion
|
|
#region 右
|
|
private void button10_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.Manual, true);
|
}
|
|
private void button8_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.qigangjiajin, true);
|
}
|
|
private void button7_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.qigangsongkai, true);
|
}
|
|
private void button13_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.guanmen, true);
|
//if (isUUTOut == false)
|
//{
|
// opc.Write(OutputTag.guanmen, true);
|
// isDoorOpen = false;
|
//}
|
//else
|
//{
|
// MessageBox.Show("请先送料!");
|
//}
|
}
|
|
private void button14_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.kaimen, true);
|
//isDoorOpen = true;
|
}
|
|
private void button11_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.huataiqigang, true);
|
}
|
|
private void button9_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.songliao, true);
|
//if (isDoorOpen == true)
|
//{
|
// opc.Write(OutputTag.songliao, true);
|
// isUUTOut = false;
|
//}
|
//else
|
//{
|
// MessageBox.Show("请先开门!");
|
//}
|
}
|
|
private void button12_Click(object sender, EventArgs e)
|
{
|
opc.Write(OutputTag.chuliao, true);
|
//isUUTOut = true;
|
}
|
|
private void button15_Click(object sender, EventArgs e)
|
{
|
if (runStatus == RunStatus.Normal)
|
{
|
if (MessageBox.Show("确定进行手动定位?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
{
|
opc.Write(OutputTag.shoudongdingwei, true);
|
}
|
}
|
else
|
{
|
MessageBox.Show("测试状态下无法手动定位!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
}
|
}
|
|
private void checkBox2_CheckedChanged(object sender, EventArgs e)
|
{
|
if (checkBox2.Checked)
|
{
|
if ((runStatus == RunStatus.Normal))
|
{
|
button15.Enabled = true;
|
}
|
else
|
{
|
checkBox2.Checked = false;
|
button15.Enabled = false;
|
MessageBox.Show("测试状态下无法手动定位!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
}
|
}
|
else
|
{
|
button15.Enabled = false;
|
}
|
}
|
|
#endregion
|
|
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
|
{
|
if (MessageBox.Show("确定退出程序?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
|
{
|
e.Cancel = false;
|
|
if (isRightCameraOpen == true)
|
{
|
cam.CloseCamera();
|
}
|
|
if (isLeftCameraOpen == true)
|
{
|
cam_left.CloseCamera();
|
}
|
}
|
else
|
{
|
e.Cancel = true;
|
}
|
}
|
|
#region 左相机相关
|
/// <summary>
|
/// 加载左相机
|
/// </summary>
|
private void initCam_Left()
|
{
|
Log.WriteLog("initCam_Left Enter");
|
|
cam_left = new PointGreyAndHalcon.PointGreyAndHalcon();
|
isLeftCameraOpen = cam_left.OpenCamera(config.cams.SerialNumber[0]);
|
cam_left.GrabImageDone += new GrabImageDoneDelegate(cam_left_GrabImageDone);
|
|
Log.WriteLog("initCam_Left Leave");
|
}
|
|
/// <summary>
|
/// 加载HalconTool_Left
|
/// </summary>
|
private void initHalconTool_Left()
|
{
|
Log.WriteLog("initHalconTool_Left Enter");
|
|
ht_left.LoadJobs();
|
ht_left.resultCreater.ListenEvent += new EventHandler<HalconTools.ListenEventArgs>(resultCreater_left_ListenEvent);
|
|
Log.WriteLog("initHalconTool_Left Leave");
|
}
|
#endregion
|
|
private void tspbtnExit_Click(object sender, EventArgs e)
|
{
|
this.Close();
|
}
|
|
private void ckbSaveImage_CheckedChanged(object sender, EventArgs e)
|
{
|
|
if (ckbSaveImage.Checked)
|
{
|
config.saveImage=true;
|
sft.SetConfig(configPath, config);
|
|
}
|
else
|
{
|
config.saveImage = false;
|
sft.SetConfig(configPath, config);
|
}
|
}
|
|
public bool Effective()
|
{
|
string defaultScope = "<dogscope />";
|
DogFeature feature = new DogFeature(1);
|
using (var dog = new Dog(feature))
|
{
|
string vendorcodes = "tn+2bpxTE0MhQDarbNvbJEPpez6LfT6oB2DjZLKQMs0H2ap3YfmDIzYaLqDsZliOKL677L28ZbDhxwdP3Mq2xIbi/5zkXQ7ybvG9HLKaYXN3ql8yY5XJ1WHn7ISI+m7M9t1SzzQaUwnW/NV2VUslx/PdI5hZ1VVwsIaus042E5u8QGCSPJcDOXBeGIJeJSezvM+scip87hDujXsrubV0n+xCAdrTAs/WU5O1JwpgYNArqrFCpYSV4nO5ZveQRcPchUuED+gaNpHfsKZYAtW/43ud3IYcnTg6HuQPo+9fRu8iDpi18+j8USasj6M8EY9g7x3YjwO1DHCPpNEWB3IrHA0rhWG+c2emcCc3q8r8Qx8yHBCAUdZV7F8CTar/co5NbVv3FNObKULZxqrESWkPhoIKBtuCutspoGkTBHger+2A5qtfEMy6ZHt6MRvmgmiIO23AQGQ3yXKHXkq6HsDtrl1P+8coQTFnqopDOGaPi6C+Pb7qIqCJx+IBnWnjuZEfawKMcR+1hB9m1rSfhY+UQ0crh8jYr5a+tOAbSU9tPw3ZmKLQYbm6m8gLAHIv+EOq1rRfH5XxhUUbL4Lv4mrTFcmWl1Ibnaiz7140PqVqaquI8h8Mj4tL/5u/f1iJTKvnUywmPUDZXAecu6FmwDeQpvGJwa+q1Fgn3WXqBitT/lnEox7pp8deMpT/ol0wpcmlU40Cq5XsvnLmbGdK/qcXYBa+ZYhLYnXpzTe4XUDbatIFKfNVwZsSgXaMPpRLghEMQupv/H9uJ2vtlRYjt0ysoFDgzb3W0qr3bK7T55a8bhiptfh/dq7Q5hHZUolRprjXTbcUlmyhjzrH+bAz+BdmwiHJInx/najqyflknUUuOdO8IrMFAh0zWiICkijghbvWUwjg/DTpLKRO2e6hTaWtvCHTBHfBRV0/0EVW0kMmdx/huL1k1BBo11Fv/X7feCskl0m5rot1ubw/T/shAAvVBg==";
|
var status = dog.Login(vendorcodes, defaultScope);
|
if (status != DogStatus.StatusOk)
|
{
|
if (status == DogStatus.TimeError)
|
{
|
if (config.leftUsed)
|
{
|
btnDisplay_left.Text = "禁止篡改时间";
|
}
|
else
|
{
|
btnDisplay.Text = "禁止篡改时间";
|
}
|
return false;
|
}
|
else
|
{
|
if (config.leftUsed)
|
{
|
btnDisplay_left.Text = "请插入有效的加密狗";
|
}
|
else
|
{
|
btnDisplay.Text = "请插入有效的加密狗";
|
}
|
return false;
|
}
|
}
|
}
|
return true;
|
}
|
|
private void cboSize_Left_SelectionChangeCommitted(object sender, EventArgs e)
|
{
|
config.selectedSizeIndex = cboSize_Left.SelectedIndex;
|
sft.SetConfig(configPath, config);
|
long value = config.inch13;
|
if (cboSize_Left.SelectedValue.ToString() == "inch15")
|
{
|
value = config.inch15;
|
}
|
if (cboSize_Left.SelectedValue.ToString() == "inch16")
|
{
|
value = config.inch16;
|
}
|
opc.Write(OutputTag.X_Work, value);
|
}
|
|
private void cboSize_SelectionChangeCommitted(object sender, EventArgs e)
|
{
|
config.selectedSizeIndex = cboSize.SelectedIndex;
|
sft.SetConfig(configPath, config);
|
long value = config.inch13;
|
if (cboSize.SelectedValue.ToString() == "inch15")
|
{
|
value = config.inch15;
|
}
|
if (cboSize.SelectedValue.ToString() == "inch16")
|
{
|
value = config.inch16;
|
}
|
opc.Write(OutputTag.X_Work, value);
|
}
|
}
|
}
|