360 lines
15 KiB
C#
360 lines
15 KiB
C#
using AR;
|
|
using Emgu.CV;
|
|
using Emgu.CV.Structure;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using UIControl;
|
|
|
|
namespace Project
|
|
{
|
|
public partial class FMain : Form
|
|
{
|
|
DateTime CameraConTimeL = DateTime.Now;
|
|
DateTime CameraConTimeR = DateTime.Now;
|
|
DateTime BarcodeConTime = DateTime.Now;
|
|
DateTime KeyenceConTimeF = DateTime.Now;
|
|
DateTime KeyenceConTimeR = DateTime.Now;
|
|
DateTime PrintLConTime = DateTime.Now;
|
|
DateTime PrintRConTime = DateTime.Now;
|
|
DateTime swPLCConTime = DateTime.Now;
|
|
Boolean bRunConnection = true;
|
|
|
|
|
|
void bwDeviceConnection()
|
|
{
|
|
while (bRunConnection && this.Disposing == false && this.Disposing == false)
|
|
{
|
|
//초기혹은 파괴상태는 처리안함
|
|
if (PUB.keyenceF != null && PUB.keyenceF.disposed &&
|
|
PUB.keyenceR != null && PUB.keyenceR.disposed)
|
|
{
|
|
System.Threading.Thread.Sleep(1000);
|
|
continue;
|
|
}
|
|
|
|
if (ConnectSeq == 0) //키엔스
|
|
{
|
|
var tscam = DateTime.Now - KeyenceConTimeF;
|
|
if (tscam.TotalSeconds > 5 && PUB.flag.get(eVarBool.FG_KEYENCE_OFFF) == false)
|
|
{
|
|
if (AR.SETTING.Data.Keyence_IPF.isEmpty() == false)
|
|
{
|
|
if (PUB.keyenceF != null && PUB.keyenceF.IsConnect == false)
|
|
{
|
|
PUB.keyenceF.Connect();
|
|
KeyenceConTimeF = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
KeyenceConTimeF = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
else KeyenceConTimeF = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 1) //키엔스
|
|
{
|
|
var tscam = DateTime.Now - KeyenceConTimeR;
|
|
if (tscam.TotalSeconds > 5 && PUB.flag.get(eVarBool.FG_KEYENCE_OFFR) == false)
|
|
{
|
|
if (AR.SETTING.Data.Keyence_IPR.isEmpty() == false)
|
|
{
|
|
if (PUB.keyenceR != null && PUB.keyenceR.IsConnect == false)
|
|
{
|
|
PUB.keyenceR.Connect();
|
|
KeyenceConTimeR = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
KeyenceConTimeR = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
else KeyenceConTimeR = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 2) //카메라(왼)
|
|
{
|
|
var tscam = DateTime.Now - CameraConTimeL;
|
|
if (tscam.TotalSeconds > 7)
|
|
{
|
|
//if (COMM.SETTING.Data.EnableExtVision)
|
|
if (PUB.wsL == null || PUB.wsL.Connected == false)
|
|
{
|
|
if (AR.SETTING.Data.Log_CameraConn)
|
|
PUB.log.Add($"Camera(L) connection attempt ({AR.SETTING.Data.HostIPL}:{AR.SETTING.Data.HostPortL})");
|
|
if (PUB.wsL != null)
|
|
{
|
|
DetachCameraEventL(); //이벤트 종료
|
|
PUB.wsL.Dispose();
|
|
}
|
|
|
|
PUB.wsL = new WatsonWebsocket.WatsonWsClient(AR.SETTING.Data.HostIPL, AR.SETTING.Data.HostPortL, false);
|
|
AttachCameraEventL();
|
|
try
|
|
{
|
|
PUB.wsL.StartWithTimeout();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
PUB.log.AddE(ex.Message); //220214
|
|
}
|
|
|
|
CameraConTimeL = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
//if (PUB.flag.get(eVarBool.FG_RDY_CAMERA_L) == false)
|
|
{
|
|
//마지막 수신시간으로 부터 5초가 지나면 전송한다
|
|
//var tsRecv = DateTime.Now - lastRecvWSL;
|
|
//if (tsRecv.TotalSeconds >= 15)
|
|
//{
|
|
// PUB.wsL.Dispose();
|
|
//}
|
|
//else if (tsRecv.TotalSeconds >= 5)
|
|
{
|
|
WS_Send(eWorkPort.Left, PUB.wsL, string.Empty, "STATUS", "");
|
|
}
|
|
CameraConTimeL = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 3) //카메라(우)
|
|
{
|
|
var tscam = DateTime.Now - CameraConTimeR;
|
|
if (tscam.TotalSeconds > 7)
|
|
{
|
|
//if (COMM.SETTING.Data.EnableExtVision)
|
|
if (PUB.wsR == null || PUB.wsR.Connected == false)
|
|
{
|
|
if (AR.SETTING.Data.Log_CameraConn)
|
|
PUB.log.Add($"Camera(R) connection attempt ({AR.SETTING.Data.HostIPR}:{AR.SETTING.Data.HostPortR})");
|
|
if (PUB.wsR != null)
|
|
{
|
|
DetachCameraEventR(); //이벤트 종료
|
|
PUB.wsR.Dispose();
|
|
}
|
|
|
|
PUB.wsR = new WatsonWebsocket.WatsonWsClient(AR.SETTING.Data.HostIPR, AR.SETTING.Data.HostPortR, false);
|
|
AttachCameraEventR();
|
|
|
|
try
|
|
{
|
|
PUB.wsR.Start();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
PUB.log.AddE(ex.Message); //220214
|
|
}
|
|
|
|
|
|
CameraConTimeR = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
//if (PUB.flag.get(eVarBool.FG_RDY_CAMERA_R) == false)
|
|
{
|
|
//마지막 수신시간으로 부터 5초가 지나면 전송한다
|
|
//var tsRecv = DateTime.Now - lastRecvWSR;
|
|
//if (tsRecv.TotalSeconds >= 15)
|
|
//{
|
|
// PUB.wsR.Dispose();
|
|
//}
|
|
//else if (tsRecv.TotalSeconds >= 5)
|
|
{
|
|
WS_Send(eWorkPort.Right, PUB.wsR, string.Empty, "STATUS", "");
|
|
}
|
|
CameraConTimeR = DateTime.Now.AddSeconds(-4);
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 4) //바코드연결
|
|
{
|
|
var tscam = DateTime.Now - BarcodeConTime;
|
|
if (tscam.TotalSeconds > 5)
|
|
{
|
|
if (AR.SETTING.Data.Barcode_Port.isEmpty() == false)
|
|
{
|
|
if (PUB.BarcodeFix == null || PUB.BarcodeFix.IsOpen() == false)
|
|
{
|
|
PUB.BarcodeFix.PortName = AR.SETTING.Data.Barcode_Port;
|
|
PUB.BarcodeFix.BaudRate = AR.SETTING.Data.Barcode_Baud;
|
|
PUB.BarcodeFix.Open();
|
|
BarcodeConTime = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
BarcodeConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
else BarcodeConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 5) //프린터(좌)
|
|
{
|
|
var tscam = DateTime.Now - PrintLConTime;
|
|
if (tscam.TotalSeconds > 5)
|
|
{
|
|
if (AR.SETTING.Data.PrintL_Port.isEmpty() == false)
|
|
{
|
|
if (PUB.PrinterL == null || PUB.PrinterL.IsOpen == false)
|
|
{
|
|
try
|
|
{
|
|
PUB.PrinterL.PortName = AR.SETTING.Data.PrintL_Port;
|
|
PUB.PrinterL.BaudRate = AR.SETTING.Data.PrintL_Baud;
|
|
PUB.PrinterL.Open();
|
|
PrintLConTime = DateTime.Now;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
PUB.log.AddE($"Printer(L) {ex.Message}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
PrintLConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
else PrintLConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
ConnectSeq += 1;
|
|
}
|
|
else if (ConnectSeq == 6) //프린터(우)
|
|
{
|
|
var tscam = DateTime.Now - PrintRConTime;
|
|
if (tscam.TotalSeconds > 5)
|
|
{
|
|
if (AR.SETTING.Data.PrintR_Port.isEmpty() == false)
|
|
{
|
|
if (PUB.PrinterR == null || PUB.PrinterR.IsOpen == false)
|
|
{
|
|
try
|
|
{
|
|
PUB.PrinterR.PortName = AR.SETTING.Data.PrintR_Port;
|
|
PUB.PrinterR.BaudRate = AR.SETTING.Data.PrintR_Baud;
|
|
PUB.PrinterR.Open();
|
|
PrintRConTime = DateTime.Now;
|
|
}
|
|
catch (Exception ex) {
|
|
PUB.log.AddE($"Printer(R) {ex.Message}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//연결이 되어있다면 상태값을 요청한다
|
|
PrintRConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
}
|
|
else PrintRConTime = DateTime.Now.AddSeconds(-4);
|
|
}
|
|
ConnectSeq = 7;
|
|
}
|
|
else if (ConnectSeq == 7) //swPLC 230725
|
|
{
|
|
var tscam = DateTime.Now - swPLCConTime;
|
|
if (tscam.TotalSeconds > 5)
|
|
{
|
|
if (PUB.plc != null && PUB.plc.Init == false)
|
|
{
|
|
PUB.plc.Start();
|
|
}
|
|
swPLCConTime = DateTime.Now;
|
|
}
|
|
ConnectSeq = 0;
|
|
}
|
|
System.Threading.Thread.Sleep(2000);
|
|
|
|
}
|
|
Console.WriteLine("Close : bwDeviceConnection");
|
|
}
|
|
|
|
|
|
public string PostFromUrl(string url, string jsonStr, out Boolean isError, string authid = "", string authpw = "", int _timeout = 0)
|
|
{
|
|
isError = false;
|
|
string result = "";
|
|
try
|
|
{
|
|
var timeout = 1000;
|
|
//RaiseMessage(false, "POST : " + url);
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
|
|
if (_timeout == 0)
|
|
{
|
|
request.Timeout = timeout;
|
|
request.ReadWriteTimeout = timeout;
|
|
}
|
|
else
|
|
{
|
|
request.Timeout = _timeout;
|
|
request.ReadWriteTimeout = _timeout;
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(authid) == false && string.IsNullOrEmpty(authpw) == false)
|
|
{
|
|
string authInfo = $"{authid}:{authpw}";
|
|
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
|
|
request.Headers["Authorization"] = "Basic " + authInfo;
|
|
}
|
|
|
|
request.Method = "POST";
|
|
request.ContentType = "application/json";
|
|
request.ContentLength = jsonStr.Length;
|
|
request.MaximumAutomaticRedirections = 4;
|
|
request.MaximumResponseHeadersLength = 4;
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
|
|
using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
|
|
{
|
|
sw.Write(jsonStr);
|
|
sw.Flush();
|
|
sw.Close();
|
|
|
|
var response = request.GetResponse() as HttpWebResponse;
|
|
using (var txtReader = new StreamReader(response.GetResponseStream()))
|
|
{
|
|
result = txtReader.ReadToEnd();
|
|
}
|
|
}
|
|
|
|
// LastQueryBUF = result;
|
|
//LastQueryURL = url;
|
|
//RaiseRawMessage(url, "RESULT\n" + result); //181026 - show data
|
|
}
|
|
catch (WebException wex)
|
|
{
|
|
isError = true;
|
|
result = wex.ToString();// new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
|
|
//RaiseMessage(true, "POST-ERROR\n" + result);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|