zhengqifeng
2025-12-30 e254b1f4efa18b3c84ce75e9da2aeff64a1c7cbe
´úÂë¹ÜÀí/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PLCJob.cs
@@ -46,18 +46,6 @@
        private readonly string set = "0x16,0x4D,0x0D,0x30,0x34,0x30,0x31,0x44,0x30,0x35,0x2E";//主机发送设置扫描模式为主机模式的命令,扫描器返回接收到的命令和<ACK>(0x06)后,将扫描模式更改为主机模式
        private readonly string Text = "开启扫码";//主机发送设置扫描模式为主机模式的命令,扫描器返回接收到的命令和<ACK>(0x06)后,将扫描模式更改为主机模式
        private readonly string command = "0x16,0x54,0x0D";//发送开始解码命令;"0x16,0x55,0x0D"发送停止解码命令
        SerialPortCommunicator portCommunicator1 = new SerialPortCommunicator("COM1", 9600, "上线扫码枪");
        static bool IsConnected1 = false;
        SerialPortCommunicator portCommunicator2 = new SerialPortCommunicator("COM2", 9600, "上线扫码枪");
        static bool IsConnected2 = false;
        SerialPortCommunicator portCommunicator17 = new SerialPortCommunicator("COM17", 9600, "压装扫码枪");
        static bool IsConnected17 = false;
        SerialPortCommunicator portCommunicator18 = new SerialPortCommunicator("COM18", 9600, "压装扫码枪");
        static bool IsConnected18 = false;
        SerialPortCommunicator portCommunicator19 = new SerialPortCommunicator("COM19", 9600, "压装扫码枪");
        static bool IsConnected19 = false;
        SerialPortCommunicator portCommunicator20 = new SerialPortCommunicator("COM20", 9600, "压装扫码枪");
        static bool IsConnected20 = false;
        public Task Execute(IJobExecutionContext context)
        {
@@ -116,6 +104,10 @@
            if (Location1ScanStart && !Location1ScanDone)//控制扫码枪扫描托盘码,根据托盘码查询组盘数据,判断托盘绑定成品是否已绑定所有所需零件
            {
                #region ä¸²å£è¿žæŽ¥
                SerialPortCommunicator portCommunicator1 = new SerialPortCommunicator("COM1", 9600, "上线扫码枪");
                bool IsConnected1 = false;
                SerialPortCommunicator portCommunicator2 = new SerialPortCommunicator("COM2", 9600, "上线扫码枪");
                bool IsConnected2 = false;
                if (!IsConnected1) IsConnected1 = portCommunicator1.Connect();
                if (!IsConnected2) IsConnected2 = portCommunicator2.Connect();
                byte[] dataToSend1 = Encoding.ASCII.GetBytes(command);//转成字节数组
@@ -137,8 +129,7 @@
                            var boxing = _boxingService.Repository.QueryFirst(x => x.PalletCode == PalletCode);
                            if (boxing == null)
                            {
                                WriteInfo(device.DeviceName, "空托盘");
                                device.SetValue(W_PLCDBName.wboolLocation1ScanDone, true);
                                WriteError(device.DeviceName, "空托盘");
                                return;
                            }
                            List<Dt_BoxingDetail> dt_BoxingDetails = _boxingDetailService.Repository.QueryData(x => x.BoxingId == boxing.Id);
@@ -146,7 +137,6 @@
                            if (dt_Formula == null)
                            {
                                WriteError(device.DeviceName, "无成品配方");
                                device.SetValue(W_PLCDBName.wboolLocation1ScanDone, true);
                                return;
                            }
                            List<Dt_FormulaDetail> dt_FormulaDetails = _formulaDetailService.Repository.QueryData(x => x.FormulaId == dt_Formula.Id);
@@ -154,7 +144,6 @@
                            if (!_boxingDetailService.IsComponentCodesEqual(dt_BoxingDetails, dt_FormulaDetails))
                            {
                                WriteError(device.DeviceName, "零件有问题,请处理");
                                device.SetValue(W_PLCDBName.wboolLocation1ScanDone, true);
                                return;
                            }
                        }
@@ -192,6 +181,10 @@
            {
                #region MyRegion
                #region ä¸²å£è¿žæŽ¥
                SerialPortCommunicator portCommunicator17 = new SerialPortCommunicator("COM17", 9600, "压装扫码枪");
                bool IsConnected17 = false;
                SerialPortCommunicator portCommunicator18 = new SerialPortCommunicator("COM18", 9600, "压装扫码枪");
                bool IsConnected18 = false;
                if (!IsConnected17) IsConnected17 = portCommunicator17.Connect();
                if (!IsConnected18) IsConnected18 = portCommunicator18.Connect();
                byte[] dataToSend1 = Encoding.ASCII.GetBytes(command);//转成字节数组
@@ -208,12 +201,6 @@
                        if (PalletCode.IsNotEmptyOrNull())
                        {
                            Dt_Boxing dt_Boxing = _boxingService.Repository.QueryFirst(x => x.PalletCode == PalletCode);
                            if (dt_Boxing == null)
                            {
                                WriteInfo(device.DeviceName, "空托盘");
                                device.SetValue(W_PLCDBName.wboolLocation2ScanDone, true);
                                return;
                            }
                            Dt_Formula dt_Formula = _formulaService.Repository.QueryFirst(x => x.ProductCode == dt_Boxing.ProductCode);
                            //写入PLC
                            device.SetValue(W_PLCDBName.wrealProductLength, dt_Formula.ProductLength);
@@ -277,6 +264,10 @@
            {
                #region MyRegion
                #region ä¸²å£è¿žæŽ¥
                SerialPortCommunicator portCommunicator19 = new SerialPortCommunicator("COM19", 9600, "检测扫码枪");
                bool IsConnected19 = false;
                SerialPortCommunicator portCommunicator20 = new SerialPortCommunicator("COM20", 9600, "检测扫码枪");
                bool IsConnected20 = false;
                if (!IsConnected19) IsConnected19 = portCommunicator19.Connect();
                if (!IsConnected20) IsConnected20 = portCommunicator20.Connect();
                byte[] dataToSend1 = Encoding.ASCII.GetBytes(command);//转成字节数组
@@ -294,12 +285,6 @@
                        if (PalletCode.IsNotEmptyOrNull())
                        {
                            Dt_Boxing dt_Boxing = _boxingService.Repository.QueryFirst(x => x.PalletCode == PalletCode);
                            if (dt_Boxing == null)
                            {
                                WriteInfo(device.DeviceName, "空托盘");
                                device.SetValue(W_PLCDBName.wboolLocation1ScanDone, true);
                                return;
                            }
                            Dt_Formula dt_Formula = _formulaService.Repository.QueryFirst(x => x.ProductCode == dt_Boxing.ProductCode);
                            //写入PLC
                            device.SetValue(W_PLCDBName.wrealXDirectionDistance1, dt_Formula.XDirectionDistance1);
@@ -361,15 +346,19 @@
            var Location4ScanDone = device.GetValue<W_PLCDBName, bool>(W_PLCDBName.wboolLocation4ScanDone);
            if (Location4ScanStart && !Location4ScanDone)//控制扫码枪扫描托盘码,根据托盘码查询组盘数据,判断托盘绑定成品是否已绑定所有所需零件
            {
                if (!IsConnected17) IsConnected17 = portCommunicator17.Connect();
                if (!IsConnected18) IsConnected18 = portCommunicator18.Connect();
                SerialPortCommunicator portCommunicator21 = new SerialPortCommunicator("COM21", 9600, "下线扫码枪");
                bool IsConnected21 = false;
                SerialPortCommunicator portCommunicator22 = new SerialPortCommunicator("COM22", 9600, "下线扫码枪");
                bool IsConnected22 = false;
                if (!IsConnected21) IsConnected21 = portCommunicator21.Connect();
                if (!IsConnected22) IsConnected22 = portCommunicator22.Connect();
                byte[] dataToSend1 = Encoding.ASCII.GetBytes(command);//转成字节数组
                portCommunicator17.Write(dataToSend1);
                string receiveData = portCommunicator18.ToString(Encoding.UTF8);
                portCommunicator21.Write(dataToSend1);
                string receiveData = portCommunicator22.ToString(Encoding.UTF8);
                byte[] dataToSend2 = Encoding.ASCII.GetBytes("PL106");//转成字节数组
                portCommunicator18.Write(dataToSend2);
                portCommunicator22.Write(dataToSend2);
                //}
                string PalletCode = portCommunicator17.ToString(Encoding.UTF8);
                string PalletCode = portCommunicator21.ToString(Encoding.UTF8);
                using (var uow = _unitOfWorkManage.CreateUnitOfWork())
                {
                    try
@@ -377,13 +366,6 @@
                        if (PalletCode.IsNotEmptyOrNull())
                        {
                            Dt_Boxing dt_Boxing = _boxingService.Repository.QueryFirst(x => x.PalletCode == PalletCode);
                            if (dt_Boxing == null)
                            {
                                WriteInfo(device.DeviceName, "该托盘为空托盘");
                                device.SetValue(W_PLCDBName.wboolLocation4ScanDone, true);
                                return;
                            }
                            _boxingService.Repository.DeleteData(dt_Boxing);
                            List<Dt_BoxingDetail> dt_BoxingDetails = _boxingDetailService.Repository.QueryData(x => x.BoxingId == dt_Boxing.Id);
                            foreach (Dt_BoxingDetail dt_BoxingDetail in dt_BoxingDetails)
@@ -394,8 +376,8 @@
                            //下线扫码完成
                            device.SetValue(W_PLCDBName.wboolLocation4ScanDone, true);
                        }
                        IsConnected17 = !portCommunicator17.Disconnect();
                        IsConnected18 = !portCommunicator18.Disconnect();
                        IsConnected21 = !portCommunicator21.Disconnect();
                        IsConnected22 = !portCommunicator22.Disconnect();
                    }
                    catch (Exception ex)
                    {