diff --git a/LibComm/CommWithCC24.cs b/LibComm/CommWithCC24.cs index d7ac619..b004f47 100644 --- a/LibComm/CommWithCC24.cs +++ b/LibComm/CommWithCC24.cs @@ -15,7 +15,7 @@ namespace LibComm public event OnConnectStatus OnConnectStatus; public event OnTrigCamera OnTrigCamera; public event OnCameraStatus OnCameraStatus; - public void Initialize() + public void Start() { cc24 = new CC24(); @@ -26,9 +26,12 @@ namespace LibComm cc24.NotifyCamAcqEnabled += CC24_NotifyCamAcqEnabled; cc24.NotifyCamAcqDisabled += CC24_NotifyCamAcqDisabled; - cc24.Initialize(); - cc24.NotifyCamAcqEnable(0); - cc24.NotifyCamAcqEnable(1); + Task.Run(() => + { + cc24.Initialize(); + cc24.NotifyCamAcqEnable(0); + cc24.NotifyCamAcqEnable(1); + }); } public void Stop() { diff --git a/LibComm/ICommPLC.cs b/LibComm/ICommPLC.cs index 0a244f0..1b4168d 100644 --- a/LibComm/ICommPLC.cs +++ b/LibComm/ICommPLC.cs @@ -15,7 +15,8 @@ namespace LibComm event OnDataReceived OnDataReceived; event OnConnectStatus OnConnectStatus; event OnTrigCamera OnTrigCamera; - void Initialize(); + event OnCameraStatus OnCameraStatus; + void Start(); void Stop(); void NoticeCamComplete(int index, byte[] datax); } diff --git a/TetraPackOCR/Form1.cs b/TetraPackOCR/Form1.cs index ac1c3c0..b95b70f 100644 --- a/TetraPackOCR/Form1.cs +++ b/TetraPackOCR/Form1.cs @@ -40,6 +40,7 @@ using System.Windows.Forms; using ThridLibray; using LibDataBase; using LibReadTetraExcel; +using LibComm; namespace TetraPackOCR { @@ -56,10 +57,7 @@ namespace TetraPackOCR //创建字段log ILog log = LogManager.GetLogger(typeof(Form1)); - /// - /// 声明一个cc24通讯对象 - /// - CC24 cc24; + ICommPLC commPLC; /// /// 声明一个PaddleOCR对象 /// @@ -134,7 +132,7 @@ namespace TetraPackOCR myJobManagerDET = null; } log.Info("定位VPP文件加载完成"); - InitializeCC24(); + InitializeComm(); log.Info("模型文件加载完成"); check_Autorun.BackgroundImage = Image.FromFile(Application.StartupPath + "\\logo_image\\ON.png"); @@ -199,7 +197,7 @@ namespace TetraPackOCR myJobManagerDET.Shutdown(); } - CloseCC24(); + StopComm(); if (myJobManagerDET == null) System.Environment.Exit(0); @@ -917,7 +915,6 @@ namespace TetraPackOCR m_GotoZero = false; m_startTime = DateTime.Now; m_textWidth = 18 - (config.NumberOfLanes - 5); - //m_textWidth = Convert.ToDouble(textBox1.Text); ocrAcc.Clear(); autorunFlag = check_Autorun.Checked; btn_StarDet_manual.Enabled = false; @@ -932,20 +929,6 @@ namespace TetraPackOCR m_BeginOCR = true; } private bool m_BeginOCR = false; - private List ExecelGetOcrText(string design, string layer) - { - List result = new List(); - string[] ll = layer.Replace("[", "").Replace("]", "").Split(','); - for (int i = 0; i < ll.Length; i++) - { - ll[i] = ll[i].Replace(" ", ""); - string[] str = ll[i].Split('-'); - if (str.Length < 2) - continue; - result.Add(design + str[1] + str[0]); - } - return result; - } /// /// 清空上次订单数据 /// @@ -1353,19 +1336,12 @@ namespace TetraPackOCR private void NoticePLCCompleteOCR() { if (autorunFlag == false) - { - byte[] datax = DataConverter.FloatToByte(0.0f, true); - cc24?.NotifyCamInspectionComplete(1, datax); - cc24?.NotifyCamAcqComplete(1); - } + commPLC?.NoticeCamComplete(1, DataConverter.FloatToByte(0.0f, true)); } private void NoticePLCCompleteDet(byte[] datax) { if (autorunFlag == false) - { - cc24?.NotifyCamInspectionComplete(0, datax); - cc24?.NotifyCamAcqComplete(0); - } + commPLC?.NoticeCamComplete(0, datax); } private OCRTextResult OCRBytes(byte[] ocrimagebyte) { @@ -1662,38 +1638,16 @@ namespace TetraPackOCR #region 通讯相关 #region 通讯初始化 - void InitializeCC24() + void InitializeComm() { try { - cc24 = new CC24(); - - cc24.VisionReceivedNewUserData += CC24_NewUserDataReceived; - cc24.PlcConnectionStatusChanged += CC24_PlcConnectionStatusChanged; - cc24.PlcTriggerCamAcqStart += CC24_PlcTriggerCamAcqStart; - cc24.PlcTriggerCamAcqStop += CC24_PlcTriggerCamAcqStop; - cc24.NotifyCamAcqEnabled += CC24_NotifyCamAcqEnabled; - cc24.NotifyCamAcqDisabled += CC24_NotifyCamAcqDisabled; - - - - cc24.Initialize(); - cc24.NotifyCamAcqEnable(0); - cc24.NotifyCamAcqEnable(1); - - Invoke(new Action(() => - { - if (cc24.SignalState.PlcConnectionStatus) - { - ttls_PCLStatusShow.Visible = true; - } - else - { - ttls_PCLStatusShow.Visible = false; - - } - })); - + commPLC = new CommWithCC24(); + commPLC.OnConnectStatus += CommPLC_OnConnectStatus; + commPLC.OnTrigCamera += CommPLC_OnTrigCamera; + commPLC.OnDataReceived += CommPLC_OnDataReceived; + commPLC.OnCameraStatus += CommPLC_OnCameraStatus; + commPLC.Start(); } catch (Exception ex) { @@ -1701,52 +1655,28 @@ namespace TetraPackOCR } } - #endregion - #region 相机采集使能状态 - private void CC24_NotifyCamAcqEnabled(int cameraIndex, bool isEnabled) - { - - Invoke(new Action(() => - { - if (isEnabled) - { - ttls_AcqEnableShow.Visible = true; - } - else - { - ttls_AcqEnableShow.Visible = false; - } - })); - } - - private void CC24_NotifyCamAcqDisabled(int cameraIndex, bool isEnabled) - { - Invoke(new Action(() => - { - if (isEnabled) - { - ttls_AcqEnableShow.Visible = true; - } - else - { - ttls_AcqEnableShow.Visible = false; - } - })); - - } - #endregion - - #region 接收PLC数据 - void CC24_NewUserDataReceived(object sender, CogNdmNewUserDataEventArgs e) + private void CommPLC_OnCameraStatus(int index, bool enable) { if (InvokeRequired) { - Invoke(new CogNdmNewUserDataEventHandler(CC24_NewUserDataReceived), new object[] { sender, e }); + BeginInvoke(new Action(CommPLC_OnCameraStatus), index, enable); + return; + } + if (enable) + ttls_AcqEnableShow.Visible = true; + else + ttls_AcqEnableShow.Visible = false; + } + + private void CommPLC_OnDataReceived(byte[] data) + { + if (InvokeRequired) + { + BeginInvoke(new Action(CommPLC_OnDataReceived), data); return; } - byte[] data = cc24.ReadBytesFromPLC(0, 4); float mMatchingStrf = DataConverter.ByteToFloat(data, true); mMatchingStr = Convert.ToInt32(mMatchingStrf); @@ -1786,6 +1716,55 @@ namespace TetraPackOCR log.Info("当前检测合格,正常结束"); } } + + private void CommPLC_OnTrigCamera(int index) + { + if (InvokeRequired) + { + BeginInvoke(new Action(CommPLC_OnTrigCamera), index); + return; + } + try + { + if (index == 1) + { + Ocr_picBox.BackgroundImage = null; + Thread.Sleep(1000); + OcrCamTriger(); + } + } + catch (Exception ex) + { + log.Error($"Trigger AcqStart Error: {ex.Message}"); + } + } + + private void CommPLC_OnConnectStatus(bool connected) + { + if (InvokeRequired) + { + BeginInvoke(new Action(CommPLC_OnConnectStatus), connected); + return; + } + if (connected) + { + PlcContinueFlag = true; + log.Info("PLC已连接PC,可以进行相关操作"); + ttls_PCLStatusShow.Visible = true; + button2.Enabled = true; + button2.BackColor = Color.LimeGreen; + } + else + { + PlcContinueFlag = false; + log.Info("PLC已断开PC,请查看相关设备是否连接"); + ttls_PCLStatusShow.Visible = false; + button2.Enabled = false; + button2.BackColor = Color.LightGray; + } + } + #endregion + private bool m_GotoZero = false; private void button2_Click(object sender, EventArgs e) { @@ -1805,68 +1784,8 @@ namespace TetraPackOCR log.Info("零点坐标已发送"); } } - #endregion - #region 接收触发相机信号 - void CC24_PlcTriggerCamAcqStart(object sender, CogNdmTriggerAcquisitionEventArgs e) - { - if (InvokeRequired) - { - Invoke(new CogNdmTriggerAcquisitionEventHandler(CC24_PlcTriggerCamAcqStart), new object[] { sender, e }); - return; - } - try - { - if (e.CameraIndex == 1) - { - Ocr_picBox.BackgroundImage = null; - Thread.Sleep(1000); - OcrCamTriger(); - } - } - catch (Exception ex) - { - log.Error($"Trigger AcqStart Error: {ex.Message}"); - } - } - #endregion - - #region 相机停止 - private void CC24_PlcTriggerCamAcqStop(object sender, CogNdmTriggerAcquisitionStopEventArgs e) - { - - } - - #endregion - - #region 通讯状态发生改变 - private void CC24_PlcConnectionStatusChanged(object sender, CogNdmProtocolStatusChangedEventArgs e) - { - if (InvokeRequired) - { - Invoke(new CogNdmProtocolStatusChangedEventHandler(CC24_PlcConnectionStatusChanged), new object[] { sender, e }); - return; - } - if (e.ProtocolStatus == CogNdmConnectionStatusConstants.Connected) - { - PlcContinueFlag = true; - log.Info("PLC已连接PC,可以进行相关操作"); - ttls_PCLStatusShow.Visible = true; - button2.Enabled = true; - button2.BackColor = Color.LimeGreen; - } - else if (e.ProtocolStatus != CogNdmConnectionStatusConstants.Connecting) - { - PlcContinueFlag = false; - log.Info("PLC已断开PC,请查看相关设备是否连接"); - ttls_PCLStatusShow.Visible = false; - button2.Enabled = false; - button2.BackColor = Color.LightGray; - } - } - #endregion - - #region 通讯发送坐标 + #region 通讯发送坐标 private void SendToPLC(double x, double y, double r) { try @@ -1965,17 +1884,17 @@ namespace TetraPackOCR #endregion #region 通讯关闭 - private void CloseCC24() + private void StopComm() { try { - cc24.VisionReceivedNewUserData -= CC24_NewUserDataReceived; - cc24.PlcConnectionStatusChanged -= CC24_PlcConnectionStatusChanged; - cc24.PlcTriggerCamAcqStart -= CC24_PlcTriggerCamAcqStart; - cc24.PlcTriggerCamAcqStop -= CC24_PlcTriggerCamAcqStop; - cc24.NotifyCamAcqEnabled -= CC24_NotifyCamAcqEnabled; - cc24.NotifyCamAcqDisabled -= CC24_NotifyCamAcqDisabled; - cc24.Shutdown(); + if (commPLC == null) + return; + commPLC.OnConnectStatus -= CommPLC_OnConnectStatus; + commPLC.OnTrigCamera -= CommPLC_OnTrigCamera; + commPLC.OnDataReceived -= CommPLC_OnDataReceived; + commPLC.OnCameraStatus -= CommPLC_OnCameraStatus; + commPLC.Stop(); } catch (Exception ex) {