using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static MainForm.SQLHelper; using ZedGraph; using EIP_Protocol; using System.Numerics; using SqlSugar; namespace MainForm.FaForm { public partial class BandBarodeDialog_S1 : Form { public static bool isNoClose { get; set; }=false; //private string _strProductBarcode = ""; //private string _CarrierBarcode = ""; int plcNo = 1; string stationCode = "[OP10]"; string stationName = "壳体清洁上料"; string tagBaseName = "g_OP10_MES"; //标签变量名称 string tagMesCommName = "mesCommToPC"; //标签变量名称 string tagBarsetName = "BarcodeSet"; OP10_MesData_t stPLC_MesData; //PLC的MES数据 private Timer _inputTimer; Form_Home home=new Form_Home(); public BandBarodeDialog_S1() { InitializeComponent(); } private void BandBarodeDialog_S1_Load(object sender, EventArgs e) { // 初始化定时器 _inputTimer = new Timer(); _inputTimer.Interval = 500; // 500毫秒 _inputTimer.Tick += InputTimer_Tick; // 绑定 TextChanged 事件 //GetBarcode.TextChanged += GetBarcode_TextChanged; //Form_Home.StopWhile = true; home.FunsEip.Add(GlobalContext.IsUsePLCNow, new Inovance_EIP(GlobalContext.PC1Address, GlobalContext.Machine1Address)); //OP10 壳体清洁上料装备 foreach (Inovance_EIP plcEIP in home.FunsEip.Values) { if (plcEIP != null) { try { (int, string) result = plcEIP.Connect(); } catch (Exception ex) { MessageBox.Show($"PLC[{plcEIP._pcIPStr}]连接失败!失败信息:" + ex.Message, "PLC连接提示", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); } } } List TaskReadProcess = new List(); // 线程-触发点位(PLC)的线程 TaskReadProcess.Add(new Task(() => { ReadStation(); })); //OP10 壳体清洁上料装备 // 开启PLC的业务处理线程-监听PLC点位+状态 foreach (Task task in TaskReadProcess) { if (task != null) task.Start(); } } private void InputTimer_Tick(object sender, EventArgs e) { int nRet = 0; string strRet = ""; string stationNameStr = stationCode + stationName; // 定时器触发,表示输入已经完成 _inputTimer.Stop(); GetBarcode.Focus(); //收到PLC确认反馈,关闭弹窗 if (isNoClose) { closeWin(); } // 处理条码 string Barcode = GetBarcode.Text.Trim(); if (!string.IsNullOrEmpty(Barcode)) { if (Barcode.Length > 9) ProductBarcode.Text = Barcode; else CarrierBarcode.Text= Barcode; Form_Home._strProductBarcode = ProductBarcode.Text.Trim(); Form_Home._strCarrierBarcode = CarrierBarcode.Text.Trim(); GetBarcode.Text = ""; } if (!string.IsNullOrEmpty(ProductBarcode.Text) && !string.IsNullOrEmpty(CarrierBarcode.Text)) { CommandFromPLC CommandToPlC = new CommandFromPLC(); CommandToPlC.cmd = 0; CommandToPlC.cmdParam = 0; CommandToPlC.cmdResult = 1; (nRet, strRet) = home.WriteResultToPlc(plcNo, stationNameStr, tagBaseName + "." + tagMesCommName, 1, CommandToPlC); if (nRet != 0) { ErrorLab.Text = $"PLC写入失败!失败原因:" + strRet; } else { ErrorLab.Text = $"扫码完成,请点击下方设备屏幕上确认按键!"; } } } private void GetBarcode_TextChanged(object sender, EventArgs e) { // 每次文本变化时重置定时器 _inputTimer.Stop(); _inputTimer.Start(); } private void closeWin() { this.DialogResult = DialogResult.OK; //Form_Home.StopWhile = false; this.Close(); } private void BandBarodeDialog_S1_FormClosing(object sender, FormClosingEventArgs e) { //Form_Home.StopWhile = false; } private void ReadStation() { while (true) { (int, string) result = home.FunsEip[plcNo] .Read_SingleTag(tagBaseName, 1, out stPLC_MesData, this); //读取单个结构体数据 if (result.Item1==0) { if (stPLC_MesData.mesCommFrmPLC.cmdParam==2) { closeWin(); }; } } } } }