Initial commit
This commit is contained in:
380
Handler/Project/Device/_CONNECTION.cs
Normal file
380
Handler/Project/Device/_CONNECTION.cs
Normal file
@@ -0,0 +1,380 @@
|
||||
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;
|
||||
|
||||
DateTime SendStatusTime = DateTime.Now;
|
||||
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($"카메라(L) 접속 시도({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($"카메라(R) 접속 시도({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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
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) { }
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
var tsst = DateTime.Now - SendStatusTime;
|
||||
if (tsst.TotalSeconds > 3)
|
||||
{
|
||||
//내정보를 전송한다.
|
||||
|
||||
var modelVision = "";
|
||||
if (PUB.Result.isSetvModel) modelVision = PUB.Result.vModel.Title;
|
||||
|
||||
var dt = new
|
||||
{
|
||||
mc = SETTING.Data.McName,
|
||||
status = PUB.sm.Step.ToString(),
|
||||
model = modelVision,
|
||||
bypass = (VAR.BOOL[eVarBool.Opt_DisablePrinter] ? true : false),
|
||||
};
|
||||
string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
|
||||
var url = $@"http://10.131.32.29:8080/api/updatelastatus";
|
||||
var rlt = PostFromUrl(url, jsonStr, out bool iserr, _timeout: 1000);
|
||||
if (iserr) PUB.log.AddE($"ECS 상태정보실패 메세지:{rlt}");
|
||||
SendStatusTime = DateTime.Now;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user