chenxy 6 years ago
parent
commit
a955d429cc

BIN
doc/通信流程图-1.xlsx


+ 1 - 1
imex/PLC_S/ServerModel/GoodsCode.cs

@@ -21,7 +21,7 @@ namespace PLC_S.ServerModel
     /// </summary>
     public class GoodsCode : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
     {
-        public static Dictionary<string, PLC_S_GC> PLC_FLAGS = new Dictionary<string, PLC_S_GC>();
+        public Dictionary<string, PLC_S_GC> PLC_FLAGS = new Dictionary<string, PLC_S_GC>();
         public const string M_NAME = "GC";
 
         private readonly Logger logger = Logger.CreateLogger(M_NAME);

+ 83 - 30
imex/PLC_S/ServerModel/PieceWork.cs

@@ -22,14 +22,16 @@ namespace PLC_S.ServerModel
     /// </summary>
     public class PieceWork : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
     {
-        public static Dictionary<string, PLC_S_PW> PLC_FLAGS = new Dictionary<string, PLC_S_PW>();
-        public static Dictionary<string, PLC_S_GC> PLC_FLAGS_GC = new Dictionary<string, PLC_S_GC>();
+        public Dictionary<string, PLC_S_PW> PLC_FLAGS = new Dictionary<string, PLC_S_PW>();
+        public Dictionary<string, PLC_S_GC> PLC_FLAGS_GC = new Dictionary<string, PLC_S_GC>();
         public const string M_NAME = "PW";
         private readonly MES_S _mes_s = null;
         private readonly Logger logger = Logger.CreateLogger(M_NAME);
         private readonly LogInfo logger_t = new LogInfo();
         private readonly LogInfo logger_e = new LogInfo();
 
+        private bool _S_STOP = false;
+
         public PieceWork()
         {
             logger.FileExistDays = 30;
@@ -67,6 +69,7 @@ namespace PLC_S.ServerModel
         {
             try
             {
+                _S_STOP = false;
                 logger.OutputTrace($"{M_NAME}_ServerStarting");
             }
             catch { }
@@ -75,6 +78,7 @@ namespace PLC_S.ServerModel
         {
             try
             {
+                _S_STOP = false;
                 logger.OutputTrace($"{M_NAME}_ServerStarted");
             }
             catch { }
@@ -83,6 +87,7 @@ namespace PLC_S.ServerModel
         {
             try
             {
+                _S_STOP = true;
                 logger.OutputTrace($"{M_NAME}_ServerStoping");
             }
             catch { }
@@ -91,6 +96,7 @@ namespace PLC_S.ServerModel
         {
             try
             {
+                _S_STOP = true;
                 logger.OutputTrace($"{M_NAME}_ServerStoped");
             }
             catch { }
@@ -99,6 +105,7 @@ namespace PLC_S.ServerModel
         {
             try
             {
+                _S_STOP = true;
                 string message = e.ToString();
                 string cip = e?.Client?.IP;
                 if (e.Type == ServerMessageType.Debug)
@@ -137,6 +144,7 @@ namespace PLC_S.ServerModel
             SocketClient<SiemensS7_1200Model> plc = null;
             lock (this)
             {
+                _S_STOP = false;
                 try
                 {
                     string outputMessage = e.ToString();
@@ -179,8 +187,12 @@ namespace PLC_S.ServerModel
                         FormLogShow?.ShowLog(outputMessage);
                         return;
                     }
+
                     plc = new SocketClient<SiemensS7_1200Model>();
                     plc.Connect(plc_s.IP, plc_s.Port);
+                    outputMessage = $"[{e.Content}]PLC_Connect=[{plc_s.IP}:{plc_s.Port}]";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
 
                     if (string.IsNullOrWhiteSpace(flag))
                     {
@@ -188,19 +200,22 @@ namespace PLC_S.ServerModel
                         Logger.Warn(outputMessage, logKeyT, logger_t);
                         Logger.Warn(outputMessage, logKeyE, logger_e);
                         FormLogShow?.ShowLog(outputMessage);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                         return;
                     }
-                    if (string.IsNullOrWhiteSpace(barcode) || barcode == "0")
+                    if (string.IsNullOrWhiteSpace(barcode) || barcode == "0" || barcode.StartsWith("0"))
                     {
                         outputMessage = $"[{e.Content}]接收条码为空";
                         Logger.Warn(outputMessage, logKeyT, logger_t);
                         Logger.Warn(outputMessage, logKeyE, logger_e);
                         FormLogShow?.ShowLog(outputMessage);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                         return;
                     }
 
+                    outputMessage = $"[{e.Content}]GET_产品型号";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
                     DataRow codeRow = GetGoodsCode(barcode, e, logKeyE);
                     if (codeRow == null)
                     {
@@ -208,20 +223,14 @@ namespace PLC_S.ServerModel
                         Logger.Warn(outputMessage, logKeyT, logger_t);
                         Logger.Warn(outputMessage, logKeyE, logger_e);
                         FormLogShow?.ShowLog(outputMessage);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                         return;
                     }
 
                     string code = codeRow["goodscode"].ToString();
                     string intcode = codeRow["seatcovercode"].ToString();
-                    //string code = "A77";
-                    //string intcode = (iii++)+"";
-                    //if (iii > 3)
-                    //{
-                    //    iii = 1;
-                    //}
-
-                    outputMessage = $"[{e.Content}]产品型号={code}[{intcode}]";
+
+                    outputMessage = $"[{e.Content}]END_产品型号={code}[{intcode}]";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
 
@@ -231,25 +240,36 @@ namespace PLC_S.ServerModel
                         Logger.Error(null, outputMessage, logKeyT, logger_t);
                         Logger.Error(null, outputMessage, logKeyE, logger_e);
                         FormLogShow?.ShowLog(outputMessage);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                         return;
                     }
 
-                    outputMessage = $"[{e.Content}]GoodsCode=[{intcode}]";
+                    outputMessage = $"[{e.Content}]SET_GoodsCode=[{intcode}]{plc_s.Add_GoodsCode + plc_s.Add_GoodsCodeNum}";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
                     plc.Write<short>(plc_s.Add_GoodsCode, plc_s.Add_GoodsCodeNum, (short)(intcode.ToInt32()));
+                    outputMessage = $"[{e.Content}]END_GoodsCode=[{intcode}]{plc_s.Add_GoodsCode + plc_s.Add_GoodsCodeNum}";
 
-                    outputMessage = $"[{e.Content}]FlagCode=[1]";
+                    outputMessage = $"[{e.Content}]SET_FlagCode=[1]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
                     plc.Write<short>(plc_s.Add_FlagCode, plc_s.Add_FlagCodeNum, (short)1);
+                    outputMessage = $"[{e.Content}]END_FlagCode=[1]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
 
                     PLCResult<short> flag_result = null;
                     while (true)
                     {
                         Thread.Sleep(plc_s.Thread_Sleep);
+                        outputMessage = $"[{e.Content}]GET_FlagCode=[ ]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
+                        Logger.Trace(outputMessage, logKeyT, logger_t);
+                        FormLogShow?.ShowLog(outputMessage);
                         flag_result = plc.Read<short>(plc_s.Add_FlagCode, plc_s.Add_FlagCodeNum);
+                        outputMessage = $"[{e.Content}]END_FlagCode=[{flag_result.Data}]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
+                        Logger.Trace(outputMessage, logKeyT, logger_t);
+                        FormLogShow?.ShowLog(outputMessage);
+
                         if (flag_result.Data == 1)
                         {
                             continue;
@@ -258,17 +278,36 @@ namespace PLC_S.ServerModel
                         {
                             break;
                         }
+                        if (_S_STOP)
+                        {
+                            outputMessage = $"[{e.Content}]STOP[S]";
+                            Logger.Trace(outputMessage, logKeyT, logger_t);
+                            FormLogShow?.ShowLog(outputMessage);
+                            SendError(plc_s, e, logKeyT, logKeyE, plc);
+                            return;
+                        }
                         //if (flag_result.Data == 0)
                         {
+                            outputMessage = $"[{e.Content}]STOP[{flag_result.Data}]";
+                            Logger.Trace(outputMessage, logKeyT, logger_t);
+                            FormLogShow?.ShowLog(outputMessage);
+                            SendError(plc_s, e, logKeyT, logKeyE, plc);
                             return;
                         }
                     }
 
+                    outputMessage = $"[{e.Content}]GET_RoomCode=[ ]{plc_s.Add_RoomCode + plc_s.Add_RoomCodeNum}";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
                     PLCResult<short> room_result = plc.Read<short>(plc_s.Add_RoomCode, plc_s.Add_RoomCodeNum);
+                    outputMessage = $"[{e.Content}]END_RoomCode=[{room_result.Data}]{plc_s.Add_RoomCode + plc_s.Add_RoomCodeNum}";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
+
                     int room_num = room_result.Data;
                     string roomcode = room_num.ToString();
 
-                    outputMessage = $"[{e.Content}]RoomCode=[{roomcode}]";
+                    outputMessage = $"[{e.Content}]ADD_RoomCode=[{roomcode}]";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
 
@@ -279,19 +318,22 @@ namespace PLC_S.ServerModel
                         Logger.Warn(outputMessage, logKeyT, logger_t);
                         Logger.Warn(outputMessage, logKeyE, logger_e);
                         FormLogShow?.ShowLog(outputMessage);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                         //return;
                     }
-                    outputMessage = $"[{e.Content}]FlagCode=[0]";
+
+                    outputMessage = $"[{e.Content}]usercode_s=[{plc_s.USER_CDOE}]";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
-                    plc.Write<short>(plc_s.Add_FlagCode, plc_s.Add_FlagCodeNum, (short)0);
 
                     string usercode = plc_s.USER_CDOES[room_num];
                     outputMessage = $"[{e.Content}]usercode=[{usercode}]";
                     Logger.Trace(outputMessage, logKeyT, logger_t);
                     FormLogShow?.ShowLog(outputMessage);
 
+                    outputMessage = $"[{e.Content}]AddWorkPieceByStatus3=[P_ID:{plc_s.P_ID}][Code:{roomcode}]";
+                    Logger.Trace(outputMessage, logKeyT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
                     string result = SmartDeviceProxy.Instance.Invoke<string>(
                         p => p.AddWorkPieceByStatus3(
                             _mes_s.AccountCode,
@@ -304,7 +346,7 @@ namespace PLC_S.ServerModel
                     // 返回状态(成功、失败)
                     if (result == "OK")
                     {
-                        outputMessage = $"[{e.Content}]PW=[OK]";
+                        outputMessage = $"[{e.Content}]result=[OK]";
                         Logger.Trace(outputMessage, logKeyT, logger_t);
                         FormLogShow?.ShowLog(outputMessage);
                         return;
@@ -325,7 +367,7 @@ namespace PLC_S.ServerModel
                     Logger.Error(null, outputMessage, logKeyT, logger_t);
                     Logger.Error(null, outputMessage, logKeyE, logger_e);
                     FormLogShow?.ShowLog(outputMessage);
-                    SendError(plc_s, e, logKeyE, plc);
+                    SendError(plc_s, e, logKeyT, logKeyE, plc);
                 }
                 catch (Exception ex)
                 {
@@ -333,7 +375,7 @@ namespace PLC_S.ServerModel
                     if (plc_s != null)
                     {
                         Logger.Error(ex, $"ERROR[{e.Content}]", logKeyE, logger_e);
-                        SendError(plc_s, e, logKeyE, plc);
+                        SendError(plc_s, e, logKeyT, logKeyE, plc);
                     }
                     else
                     {
@@ -344,10 +386,13 @@ namespace PLC_S.ServerModel
                 {
                     try
                     {
-                        //string outputMessage = $"[{e.Content}]FlagCode=[0]";
-                        //Logger.Trace(outputMessage, logKeyT, logger_t);
-                        //FormLogShow?.ShowLog(outputMessage);
+                        string outputMessage = $"[{e.Content}]SET_FlagCode=[0]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
+                        Logger.Trace(outputMessage, logKeyT, logger_t);
+                        FormLogShow?.ShowLog(outputMessage);
                         plc?.Write<short>(plc_s.Add_FlagCode, plc_s.Add_FlagCodeNum, (short)0);
+                        outputMessage = $"[{e.Content}]END_FlagCode=[0]{plc_s.Add_FlagCode + plc_s.Add_FlagCodeNum}";
+                        Logger.Trace(outputMessage, logKeyT, logger_t);
+                        FormLogShow?.ShowLog(outputMessage);
                     }
                     catch(Exception ex)
                     {
@@ -361,20 +406,26 @@ namespace PLC_S.ServerModel
             }
         }
 
-        private void SendError(PLC_S_PW plc_s, ReceiveSession e, string loggerName, SocketClient<SiemensS7_1200Model> plc)
+        private void SendError(PLC_S_PW plc_s, ReceiveSession e, string loggerNameT,
+            string loggerNameE, SocketClient<SiemensS7_1200Model> plc)
         {
             try
             {
                 //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
                 {
-                    //plc.Connect(plc_s.IP, plc_s.Port);
+                    string outputMessage = $"[{e.Content}]SET_ErrorNum=[1]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
+                    Logger.Trace(outputMessage, loggerNameT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
                     plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)1);
+                    outputMessage = $"[{e.Content}]END_ErrorNum=[1]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
+                    Logger.Trace(outputMessage, loggerNameT, logger_t);
+                    FormLogShow?.ShowLog(outputMessage);
                 }
             }
             catch (Exception ex)
             {
                 //Logger.Error(ex, $"ERROR[{e.Content}]", $"{M_NAME}-E[{e?.Client?.IP}]", logger_e);
-                Logger.Error(ex, $"ERROR[{e.Content}]", loggerName, logger_e);
+                Logger.Error(ex, $"ERROR[{e.Content}]", loggerNameE, logger_e);
                 FormLogShow?.ShowLog("SendError=" + ex.Message);
             }
         }
@@ -493,6 +544,8 @@ namespace PLC_S.ServerModel
                     plc_s.P_ID = ini.Read(flag, "P_ID").ToInt32();
                     plc_s.USER_CDOE = ini.Read(flag, "USER_CDOE");
                     plc_s.USER_CDOES = plc_s.USER_CDOE?.Split(',');
+                    plc_s.USER_CDOE = JsonHelper.ToJson(plc_s.USER_CDOES);
+
                     plc_s.IP = ini.Read(flag, "IP");
                     plc_s.Port = ini.Read(flag, "Port").ToInt32();
                     plc_s.Add_GoodsCode = ini.Read(flag, "Add_GoodsCode");