SDA/LA24030_LuLiPackageLine_SDA.sln | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareCommon/Utils/Log4Net/LogType.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareCommon/log4net_iWare.config | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareModel/EnumType/EDevice/EDevice.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareModel/iWareModel.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareSda/App.config | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareSda/Common/Struct/WareSdaStruct.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareSda/SdaMainForm.Designer.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareSda/SdaMainForm.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
SDA/iWareSda/iWareSda.csproj | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SDA/LA24030_LuLiPackageLine_SDA.sln
@@ -71,7 +71,7 @@ {3302F4AE-FF0A-49CA-BF38-D6F7E16E2153} = {50A3ECEF-B287-46BD-8271-AF2387438D62} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution VisualSVNWorkingCopyRoot = . SolutionGuid = {F9CA2CC3-85DB-4A04-8692-1EC016FC394A} VisualSVNWorkingCopyRoot = . EndGlobalSection EndGlobal SDA/iWareCommon/Utils/Log4Net/LogType.cs
@@ -27,10 +27,8 @@ /// RGV任务线程日志 /// </summary> RgvThreadService = 14, /// <summary> /// 桁架任务线程日志 /// </summary> TrussThreadService = 15, StationSdaService = 15, #region SDA相关 SDA/iWareCommon/log4net_iWare.config
@@ -5,9 +5,8 @@ <appSettings> </appSettings> <log4net> <!-- 重新获取发动机信息【信息】日志--> <appender name="AutoUpdateEngineInfoTask_Info" type="log4net.Appender.RollingFileAppender"> <file value="d:\\Log\\XiGangLog\\iWareCC\\AutoUpdateEngineInfoTask_Info\\" /> <appender name="StationSdaService_Info" type="log4net.Appender.RollingFileAppender"> <file value="d:\\Log\\XiGangLog\\iWareCC\\StationSdaService_Info\\" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <staticLogFileName value="false" /> @@ -17,13 +16,13 @@ <param name="ConversionPattern" value="%n消息时间:%d [%t] %n消息级别:%-5p %n消 息 类:%c [%x] %n%m %n "/> </layout> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="AutoUpdateEngineInfoTask_Info" /> <loggerToMatch value="StationSdaService_Info" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> </appender> <!--重新获取发动机信息【错误】日志--> <appender name="AutoUpdateEngineInfoTask_Error" type="log4net.Appender.RollingFileAppender"> <file value="d:\\Log\\XiGangLog\\iWareCC\\AutoUpdateEngineInfoTask_Error\\" /> <appender name="StationSdaService_Error" type="log4net.Appender.RollingFileAppender"> <file value="d:\\Log\\XiGangLog\\iWareCC\\StationSdaService_Error\\" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <staticLogFileName value="false" /> @@ -33,7 +32,7 @@ <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n "/> </layout> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="AutoUpdateEngineInfoTask_Error" /> <loggerToMatch value="StationSdaService_Error" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> </appender> @@ -624,8 +623,8 @@ </appender> <root> <level value="ALL"/> <appender-ref ref="AutoUpdateEngineInfoTask_Info"/> <appender-ref ref="AutoUpdateEngineInfoTask_Error"/> <appender-ref ref="StationSdaService_Info"/> <appender-ref ref="StationSdaService_Error"/> <appender-ref ref="AutoIssueInStoreTask_Info"/> <appender-ref ref="AutoIssueInStoreTask_Error"/> <appender-ref ref="EmptySalverTransferTask_Info"/> SDA/iWareModel/EnumType/EDevice/EDevice.cs
@@ -46,5 +46,8 @@ //AGV = 1019, AGV = 1099, Station = 7777 } } SDA/iWareModel/iWareModel.csproj
@@ -86,7 +86,9 @@ <Compile Include="EnumType\EDevice\Rgv\ERgvCmd.cs" /> <Compile Include="EnumType\EDevice\Rgv\ERgvEvent.cs" /> <Compile Include="EnumType\EDevice\Rgv\ERgvBodyTest.cs" /> <Compile Include="EnumType\EDevice\Rgv\EStationMode.cs" /> <Compile Include="EnumType\EDevice\Rgv\ERgvMode.cs" /> <Compile Include="EnumType\EDevice\Rgv\EStationState.cs" /> <Compile Include="EnumType\EDevice\Rgv\ERgvState.cs" /> <Compile Include="EnumType\EDevice\ESrmAlarm.cs" /> <Compile Include="EnumType\EDevice\Line\RgvErrorReason.cs" /> SDA/iWareSda/App.config
@@ -3,19 +3,11 @@ <appSettings> <!-- 语言配置 配置 0 中文 1 英文 --> <add key="LanguageFlg" value="0"/> <!-- 堆垛机的PLC 配置 --> <add key="Srm1_Address" value="192.168.10.60"/> <add key="Srm2_Address" value="192.168.10.68"/> <add key="Srm3_Address" value="192.168.10.76"/> <add key="Srm4_Address" value="192.168.10.84"/> <add key="Srm_Rack" value="0"/> <add key="Srm_Slot" value="1"/> <add key="Srm_Port" value="102"/> <!-- RGV的PLC 配置 --> <add key="RGV_Address" value="192.168.10.10"/> <add key="RGV_Rack" value="0"/> <add key="RGV_Slot" value="1"/> <add key="RGV_Port" value="102"/> <!-- 站点的PLC 配置 --> <add key="Station_Address" value="192.168.10.10"/> <add key="Station_Rack" value="0"/> <add key="Station_Slot" value="1"/> <add key="Station_Port" value="102"/> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> SDA/iWareSda/Common/Struct/WareSdaStruct.cs
@@ -59,6 +59,17 @@ #endregion #region 站点的PLC地址 public const CpuType Station_PLC_CpuType = CpuType.S71500; public const SiemensPLCS Station_SiemensPLCS = SiemensPLCS.S1500; public static string Station_Address = ConfigHelper.GetConfigString("Station_Address"); public static short Station_Rack = (short)ConfigHelper.GetConfigInt("Station_Rack"); public static short Station_Slot = (short)ConfigHelper.GetConfigInt("Station_Slot"); public static short Station_Port = (short)ConfigHelper.GetConfigInt("Station_Port"); #endregion #region 输送线的PLC地址 //public const CpuType Line_PLC_CpuType = CpuType.S71500; @@ -76,6 +87,16 @@ /// RGV站点集合 /// </summary> public static List<string> RgvStationList = new List<string>() { "1001","1002","1003","1004","1005","1006","1007","1008","1009","1010", "1011","1012","1013","1014","1015", "1020","1030","1040", //拆盘机 提升机 RGV "1019" }; /// <summary> /// 站点集合 /// </summary> public static List<string> StationStationList = new List<string>() { "1001","1002","1003","1004","1005","1006","1007","1008","1009","1010", "1011","1012","1013","1014","1015", "1020","1030","1040", //拆盘机 提升机 RGV @@ -209,6 +230,28 @@ {"1.4","输送线通讯异常"} }; //里面有空格,别忘了最后trim下 /// <summary> /// RGV报警字典 /// key:报警代码 value:报警内容 /// </summary> public static IDictionary<string, string> StationAlertDict = new System.Collections.Generic.Dictionary<string, string>() { {"0.0","前极限异常"}, {"0.1","后极限异常"}, {"0.2","急停异常"}, {"0.3","行走激光测距值无变化"}, {"0.4","行走激光测距值位零"}, {"0.5","行走变频器异常"}, {"0.6","输送变频器异常"}, {"0.7","行走超时异常"}, {"1.0","输送超时异常"}, {"1.1","左侧突出异常"}, {"1.2","右侧突出异常"}, {"1.3","输送线突出异常"}, {"1.4","输送线通讯异常"} }; #endregion } } SDA/iWareSda/SdaMainForm.Designer.cs
@@ -43,16 +43,8 @@ this.lbl_Main2 = new System.Windows.Forms.Label(); this.lbl_Main1 = new System.Windows.Forms.Label(); this.pictureBox5 = new System.Windows.Forms.PictureBox(); this.tabPage_Srm1 = new System.Windows.Forms.TabPage(); this.tb_Srm1 = new System.Windows.Forms.TextBox(); this.tabPage_Srm2 = new System.Windows.Forms.TabPage(); this.tb_Srm2 = new System.Windows.Forms.TextBox(); this.tabPage_Srm3 = new System.Windows.Forms.TabPage(); this.tb_Srm3 = new System.Windows.Forms.TextBox(); this.tabPage_Srm4 = new System.Windows.Forms.TabPage(); this.tb_Srm4 = new System.Windows.Forms.TextBox(); this.tabPage_RGV = new System.Windows.Forms.TabPage(); this.tb_Rgv = new System.Windows.Forms.TextBox(); this.tb_Station = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.panel1.SuspendLayout(); @@ -60,10 +52,6 @@ this.tabPage_Main.SuspendLayout(); this.panel2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); this.tabPage_Srm1.SuspendLayout(); this.tabPage_Srm2.SuspendLayout(); this.tabPage_Srm3.SuspendLayout(); this.tabPage_Srm4.SuspendLayout(); this.tabPage_RGV.SuspendLayout(); this.SuspendLayout(); // @@ -82,10 +70,6 @@ // tabControl1 // this.tabControl1.Controls.Add(this.tabPage_Main); this.tabControl1.Controls.Add(this.tabPage_Srm1); this.tabControl1.Controls.Add(this.tabPage_Srm2); this.tabControl1.Controls.Add(this.tabPage_Srm3); this.tabControl1.Controls.Add(this.tabPage_Srm4); this.tabControl1.Controls.Add(this.tabPage_RGV); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); @@ -235,117 +219,28 @@ this.pictureBox5.TabIndex = 15; this.pictureBox5.TabStop = false; // // tabPage_Srm1 // this.tabPage_Srm1.Controls.Add(this.tb_Srm1); this.tabPage_Srm1.Location = new System.Drawing.Point(4, 25); this.tabPage_Srm1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tabPage_Srm1.Name = "tabPage_Srm1"; this.tabPage_Srm1.Size = new System.Drawing.Size(1082, 728); this.tabPage_Srm1.TabIndex = 2; this.tabPage_Srm1.Text = "堆垛机1"; this.tabPage_Srm1.UseVisualStyleBackColor = true; // // tb_Srm1 // this.tb_Srm1.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Srm1.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Srm1.Location = new System.Drawing.Point(0, 0); this.tb_Srm1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Srm1.Multiline = true; this.tb_Srm1.Name = "tb_Srm1"; this.tb_Srm1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Srm1.Size = new System.Drawing.Size(1082, 728); this.tb_Srm1.TabIndex = 1; // // tabPage_Srm2 // this.tabPage_Srm2.Controls.Add(this.tb_Srm2); this.tabPage_Srm2.Location = new System.Drawing.Point(4, 25); this.tabPage_Srm2.Name = "tabPage_Srm2"; this.tabPage_Srm2.Size = new System.Drawing.Size(1082, 728); this.tabPage_Srm2.TabIndex = 4; this.tabPage_Srm2.Text = "堆垛机2"; this.tabPage_Srm2.UseVisualStyleBackColor = true; // // tb_Srm2 // this.tb_Srm2.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Srm2.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Srm2.Location = new System.Drawing.Point(0, 0); this.tb_Srm2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Srm2.Multiline = true; this.tb_Srm2.Name = "tb_Srm2"; this.tb_Srm2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Srm2.Size = new System.Drawing.Size(1082, 728); this.tb_Srm2.TabIndex = 2; // // tabPage_Srm3 // this.tabPage_Srm3.Controls.Add(this.tb_Srm3); this.tabPage_Srm3.Location = new System.Drawing.Point(4, 25); this.tabPage_Srm3.Name = "tabPage_Srm3"; this.tabPage_Srm3.Size = new System.Drawing.Size(1082, 728); this.tabPage_Srm3.TabIndex = 5; this.tabPage_Srm3.Text = "堆垛机3"; this.tabPage_Srm3.UseVisualStyleBackColor = true; // // tb_Srm3 // this.tb_Srm3.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Srm3.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Srm3.Location = new System.Drawing.Point(0, 0); this.tb_Srm3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Srm3.Multiline = true; this.tb_Srm3.Name = "tb_Srm3"; this.tb_Srm3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Srm3.Size = new System.Drawing.Size(1082, 728); this.tb_Srm3.TabIndex = 2; // // tabPage_Srm4 // this.tabPage_Srm4.Controls.Add(this.tb_Srm4); this.tabPage_Srm4.Location = new System.Drawing.Point(4, 25); this.tabPage_Srm4.Name = "tabPage_Srm4"; this.tabPage_Srm4.Size = new System.Drawing.Size(1082, 728); this.tabPage_Srm4.TabIndex = 6; this.tabPage_Srm4.Text = "堆垛机4"; this.tabPage_Srm4.UseVisualStyleBackColor = true; // // tb_Srm4 // this.tb_Srm4.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Srm4.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Srm4.Location = new System.Drawing.Point(0, 0); this.tb_Srm4.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Srm4.Multiline = true; this.tb_Srm4.Name = "tb_Srm4"; this.tb_Srm4.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Srm4.Size = new System.Drawing.Size(1082, 728); this.tb_Srm4.TabIndex = 2; // // tabPage_RGV // this.tabPage_RGV.Controls.Add(this.tb_Rgv); this.tabPage_RGV.Controls.Add(this.tb_Station); this.tabPage_RGV.Location = new System.Drawing.Point(4, 25); this.tabPage_RGV.Margin = new System.Windows.Forms.Padding(4); this.tabPage_RGV.Name = "tabPage_RGV"; this.tabPage_RGV.Size = new System.Drawing.Size(1082, 728); this.tabPage_RGV.TabIndex = 3; this.tabPage_RGV.Text = "RGV"; this.tabPage_RGV.Text = "站点"; this.tabPage_RGV.UseVisualStyleBackColor = true; // // tb_Rgv // tb_Station // this.tb_Rgv.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Rgv.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Rgv.Location = new System.Drawing.Point(0, 0); this.tb_Rgv.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Rgv.Multiline = true; this.tb_Rgv.Name = "tb_Rgv"; this.tb_Rgv.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Rgv.Size = new System.Drawing.Size(1082, 728); this.tb_Rgv.TabIndex = 2; this.tb_Station.Dock = System.Windows.Forms.DockStyle.Fill; this.tb_Station.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Bold); this.tb_Station.Location = new System.Drawing.Point(0, 0); this.tb_Station.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tb_Station.Multiline = true; this.tb_Station.Name = "tb_Station"; this.tb_Station.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; this.tb_Station.Size = new System.Drawing.Size(1082, 728); this.tb_Station.TabIndex = 2; // // label3 // @@ -385,14 +280,6 @@ this.tabPage_Main.ResumeLayout(false); this.panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); this.tabPage_Srm1.ResumeLayout(false); this.tabPage_Srm1.PerformLayout(); this.tabPage_Srm2.ResumeLayout(false); this.tabPage_Srm2.PerformLayout(); this.tabPage_Srm3.ResumeLayout(false); this.tabPage_Srm3.PerformLayout(); this.tabPage_Srm4.ResumeLayout(false); this.tabPage_Srm4.PerformLayout(); this.tabPage_RGV.ResumeLayout(false); this.tabPage_RGV.PerformLayout(); this.ResumeLayout(false); @@ -411,19 +298,11 @@ private System.Windows.Forms.Label lbl_Main2; private System.Windows.Forms.Label lbl_Main1; private System.Windows.Forms.PictureBox pictureBox5; private System.Windows.Forms.TabPage tabPage_Srm1; private System.Windows.Forms.TextBox tb_Srm1; private System.Windows.Forms.TabPage tabPage_RGV; private System.Windows.Forms.Panel panel2; private System.Windows.Forms.Button btn_Show; private System.Windows.Forms.Button btn_Hide; private System.Windows.Forms.TextBox tb_Rgv; private System.Windows.Forms.TabPage tabPage_Srm2; private System.Windows.Forms.TextBox tb_Srm2; private System.Windows.Forms.TabPage tabPage_Srm3; private System.Windows.Forms.TextBox tb_Srm3; private System.Windows.Forms.TabPage tabPage_Srm4; private System.Windows.Forms.TextBox tb_Srm4; private System.Windows.Forms.TextBox tb_Station; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; } SDA/iWareSda/SdaMainForm.cs
@@ -32,16 +32,16 @@ private static IDictionary<string, string> realtimePlcValueDict_Srm = new Dictionary<string, string>(); /// <summary> /// RGV实时PLC值字典 /// Station实时PLC值字典 /// </summary> private static IDictionary<string, string> realtimePlcValueDict_Rgv = new Dictionary<string, string>(); private static IDictionary<string, string> realtimePlcValueDict_Station = new Dictionary<string, string>(); #region 发送WCS心跳 /// <summary> /// 发送堆垛机的心跳 /// </summary> private List<Thread> SendStackerHeartToSrmThreads = new List<Thread>(); private List<Thread> SendStackerHeartToRgvThreads = new List<Thread>(); private List<Thread> SendStackerHeartToStationThreads = new List<Thread>(); /// <summary> /// 发送输送线的心跳 /// </summary> @@ -51,7 +51,7 @@ private List<Thread> GetSrmStateThreads = new List<Thread>(); private List<Thread> GetRgvStateThreads = new List<Thread>(); private List<Thread> GetStationStateThreads = new List<Thread>(); private List<Thread> GetLineStateThreads = new List<Thread>(); #endregion @@ -62,16 +62,16 @@ public static bool isShowPlcValue_Srm = false; /// <summary> /// 是否要显示实时Rgv的PLC值堆垛机 /// 是否要显示实时Station的PLC值堆垛机 /// </summary> public static bool isShowPlcValue_Rgv = false; public static bool isShowPlcValue_Station = false; static string errorStr = string.Empty; static string infoStr_ChangeHandshake = string.Empty; static string errorStr_Line = string.Empty; static string errorStr_Srm = string.Empty; static string errorStr_Rgv = string.Empty; static string errorStr_Station = string.Empty; static string infoStr_SaveLine = string.Empty; static string infoStr_Connection = string.Empty; @@ -107,14 +107,9 @@ try { #region 对外发布WCF形式数据访问服务 var srmServiceHost = new ServiceHost(typeof(iWareSda.SrmService)); srmServiceHost.Open(); //var lineServiceHost = new ServiceHost(typeof(iWareSda.LineService)); //lineServiceHost.Open(); var rgvServiceHost = new ServiceHost(typeof(iWareSda.RgvService)); rgvServiceHost.Open(); var StationServiceHost = new ServiceHost(typeof(iWareSda.StationService)); StationServiceHost.Open(); #endregion @@ -140,91 +135,35 @@ #region 状态信息获取 //获取堆垛机的状态信息 Srm_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(GetSrmInfo)); thread.Name = string.Format("获取堆垛机{0}的状态", x.View.DeviceName); GetSrmStateThreads.Add(thread); StartThread(thread, x); }); ////模拟测试 //var y = Srm_CacheEntity.DeviceObjs[3]; //var thread_test = new Thread(new ParameterizedThreadStart(GetSrmInfo)); //thread_test.Name = string.Format("获取堆垛机{0}的状态", y.View.DeviceName); //GetSrmStateThreads.Add(thread_test); //StartThread(thread_test, y); //获取Rgv的状态信息 Rgv_CacheEntity.DeviceObjs.ForEach(x => //获取Station的状态信息 Station_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(GetRgvInfo)); thread.Name = string.Format("获取Rgv{0}的状态", x.View.DeviceName); GetRgvStateThreads.Add(thread); var thread = new Thread(new ParameterizedThreadStart(GetStationInfo)); thread.Name = string.Format("获取Station{0}的状态", x.View.DeviceName); GetStationStateThreads.Add(thread); StartThread(thread, x); }); /* Rgv_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(HandleRGVAckBug)); thread.Name = string.Format("修复Rgv{0}的ACK BUG", x.View.DeviceName); GetRgvStateThreads.Add(thread); StartThread(thread, x); }); //*/ ////获取输送线的状态信息 //HuscoLine_CacheEntity.DeviceObjs.ForEach(x => //{ // var thread = new Thread(new ParameterizedThreadStart(GetLineInfo)); // thread.Name = string.Format("获取输送线{0}的状态", x.View.DeviceName); // GetLineStateThreads.Add(thread); // StartThread(thread, x); //}); #endregion #region 设备发送心跳 //开启 堆垛机 心跳的线程 Srm_CacheEntity.DeviceObjs.ForEach(x => //开启 Station 心跳的线程 Station_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(SendStackerHeartToSrm)); thread.Name = string.Format("自动发送堆垛机{0}心跳", x.View.DeviceName); SendStackerHeartToSrmThreads.Add(thread); var thread = new Thread(new ParameterizedThreadStart(SendStackerHeartToStation)); thread.Name = string.Format("自动发送Station{0}心跳", x.View.DeviceName); SendStackerHeartToStationThreads.Add(thread); StartThread(thread, x); }); //开启 Rgv 心跳的线程 Rgv_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(SendStackerHeartToRgv)); thread.Name = string.Format("自动发送Rgv{0}心跳", x.View.DeviceName); SendStackerHeartToRgvThreads.Add(thread); StartThread(thread, x); }); /* //开启 输送线 心跳的线程 HuscoLine_CacheEntity.DeviceObjs.ForEach(x => { var thread = new Thread(new ParameterizedThreadStart(SendStackerHeartToLine)); thread.Name = string.Format("自动发送输送线{0}心跳", x.View.DeviceName); SendStackerHeartToLineThreads.Add(thread); StartThread(thread, x); }); //*/ #endregion #region UI显示 var treadShowUI = new Thread(ShowUI); treadShowUI.Start(); #endregion new Thread(DeleteData).Start(); //*/ @@ -492,16 +431,16 @@ #endregion #region Rgv #region Station #region 设备状态信息 /// <summary> /// 获取 Rgv 的状态信息 /// 获取 Station 的状态信息 /// </summary> /// <param name="obj"></param> private void GetRgvInfo(object obj) private void GetStationInfo(object obj) { var s = (RgvEntity)obj; var s = (StationEntity)obj; if (s.plcService != null && !s.plcService.IsConnected) { s.plcService.Close(); @@ -514,8 +453,8 @@ s.InitData(); if (s.plcService == null || !s.plcService.IsConnected) { errorStr_Rgv = "Rgv" + s.View.DeviceName + "连接已断开,正在尝试打开。。。"; errorStr_Rgv = SysHelper.Language(WareSdaStruct.LanguageFlg, errorStr_Rgv, "Piler connection disconnected,waiting for reconnection "); errorStr_Station = "Station" + s.View.DeviceName + "连接已断开,正在尝试打开。。。"; errorStr_Station = SysHelper.Language(WareSdaStruct.LanguageFlg, errorStr_Station, "Piler connection disconnected,waiting for reconnection "); s.plcService.Close(); s.plcService.OpenService(); Thread.Sleep(100); @@ -524,7 +463,7 @@ else { var s7 = s.plcService; var Rgv_db = s.DBBlockForWrite; var Station_db = s.DBBlockForWrite; s.SetPropertyValueForRead(); s.SetPropertyValueForWrite(); @@ -533,44 +472,44 @@ //s.View.BodyTestName = s.GetBodyTestName(s.View.r_S); //s.View.StateName = s.GetStateName(s.View.R_State); if (SdaMainForm.isShowPlcValue_Rgv) if (SdaMainForm.isShowPlcValue_Station) { string dbValues = SdaHelper.GetStrShow<RgvView, RgvDBForWrite, RgvDBForRead>(s.View, s.DBBlockForWrite, s.DBBlockForRead, "", "", s.View.DeviceId, s.View.DeviceName); realtimePlcValueDict_Rgv[s.View.DeviceName] = dbValues; string dbValues = SdaHelper.GetStrShow<StationView, StationDBForWrite, StationDBForRead>(s.View, s.DBBlockForWrite, s.DBBlockForRead, "", "", s.View.DeviceId, s.View.DeviceName); realtimePlcValueDict_Station[s.View.DeviceName] = dbValues; } else { realtimePlcValueDict_Rgv[s.View.DeviceName] = ""; realtimePlcValueDict_Station[s.View.DeviceName] = ""; } foreach (var item in s.View.R_RgvForReadCommList) foreach (var item in s.View.R_StationForReadCommList) { //判断如果ACK=1,则写入STB为0 if (item.R_ACK == true) { var writeObj = s.View.W_RgvForWriteCommList.Where(x => x.StationCode == item.StationCode).FirstOrDefault(); var writeAddressObj = s.DBBlockForWrite.W_RgvForWriteCommList.Where(x => x.StationCode == item.StationCode).FirstOrDefault(); MessageModel fr = s.plcService.WriteValuePoint(writeAddressObj.W_STP, false, writeObj.W_STP); var writeObj = s.View.W_StationForWriteCommList.Where(x => x.StationCode == item.StationCode).FirstOrDefault(); var writeAddressObj = s.DBBlockForWrite.W_StationForWriteCommList.Where(x => x.StationCode == item.StationCode).FirstOrDefault(); MessageModel fr = null; if (fr.result == false) { Log4NetHelper.WriteErrorLog(LogType.SrmTheadService, "获取 RGV和输送线 的状态信息时,判断ACK=1,更新STB为0时错误:" + fr.resMsg, null); Log4NetHelper.WriteErrorLog(LogType.SrmTheadService, "获取 Station和输送线 的状态信息时,判断ACK=1,更新STB为0时错误:" + fr.resMsg, null); } } } //赋值报警 //s.View.R_Line_WarningDBList = s.GetLineAlertDatas(); s.View.R_Rgv_WarningDBList = s.GetRgvAlertDatas(); s.View.R_Station_WarningDBList = s.GetStationAlertDatas(); } } catch (Exception ex) { s.InitData(); errorStr_Rgv = "GetRgvInfo出现异常:" + ex.Message; errorStr_Rgv = SysHelper.Language(WareSdaStruct.LanguageFlg, errorStr_Rgv, "GetRgvInfo throw exceptions: " + ex.Message); errorStr_Station = "GetStationInfo出现异常:" + ex.Message; errorStr_Station = SysHelper.Language(WareSdaStruct.LanguageFlg, errorStr_Station, "GetStationInfo throw exceptions: " + ex.Message); Log4NetHelper.WriteErrorLog(LogType.RgvSdaService, "获取 Rgv 的状态信息出现异常", ex); Log4NetHelper.WriteErrorLog(LogType.StationSdaService, "获取 Station 的状态信息出现异常", ex); } Thread.Sleep(1000); } @@ -582,26 +521,26 @@ #region 心跳相关 /// <summary> /// 发送给Rgv的心跳 /// 发送给Station的心跳 /// </summary> /// <param name="obj"></param> private void SendStackerHeartToRgv(object obj) private void SendStackerHeartToStation(object obj) { bool handShakeValue = true; while (true) { var s = (RgvEntity)obj; var s = (StationEntity)obj; handShakeValue = !handShakeValue; try { if (s.plcService != null && !s.plcService.IsConnected) { errorStr_Rgv = SysHelper.Language(WareSdaStruct.LanguageFlg, "Rgv" + s.View.DeviceName + "连接已断开", "Piler connection disconnected "); errorStr_Station = SysHelper.Language(WareSdaStruct.LanguageFlg, "Station" + s.View.DeviceName + "连接已断开", "Piler connection disconnected "); Thread.Sleep(100); continue; } errorStr_Rgv = SysHelper.Language(WareSdaStruct.LanguageFlg, "Rgv" + s.View.DeviceName + "连接已连接。。。", "Piler connection connected "); errorStr_Station = SysHelper.Language(WareSdaStruct.LanguageFlg, "Station" + s.View.DeviceName + "连接已连接。。。", "Piler connection connected "); if (s.plcService != null && s.plcService.IsConnected) { MessageModel fr = s.plcService.WriteValuePoint(s.DBBlockForWrite.W_HandShake, handShakeValue, s.View.W_HandShake); @@ -615,8 +554,8 @@ } catch (Exception ex) { errorStr_Rgv = SysHelper.Language(WareSdaStruct.LanguageFlg, "发送心跳给Rgv出现异常。。。" + ex.Message, "Send to stacker for heart beat throw expection: " + ex.Message); Log4NetHelper.WriteErrorLog(LogType.SdaService, "发送给Rgv的心跳出现异常:" + ex.Message, ex); errorStr_Station = SysHelper.Language(WareSdaStruct.LanguageFlg, "发送心跳给Station出现异常。。。" + ex.Message, "Send to stacker for heart beat throw expection: " + ex.Message); Log4NetHelper.WriteErrorLog(LogType.SdaService, "发送给Station的心跳出现异常:" + ex.Message, ex); } } } @@ -675,7 +614,7 @@ //line.View.R_WarningDBList = line.GetAlertDatas(); string dbValues = SdaHelper.GetStrShow<HuscoLineView, HuscoLineDBForWrite, HuscoLineDBForRead>(line.View, line.DBBlockForWrite, line.DBBlockForRead, HuscoLine_CacheEntity.W_DBHeader, HuscoLine_CacheEntity.R_DBHeader, line.View.DeviceId, line.View.DeviceName); this.tb_Rgv.Text = dbValues + " \r\n AssemblyBarcode:" + _AssemblyBarcode + " \r\n CoilCode:" + _CoilCode + " \r\n"; this.tb_Station.Text = dbValues + " \r\n AssemblyBarcode:" + _AssemblyBarcode + " \r\n CoilCode:" + _CoilCode + " \r\n"; //首先读取握手信号是否是true,只有true 的时候才能拿值 var isRead = Convert.ToInt32(line.plcService.ReadValuePoint("", handShareAddress, typeof(Int32))); @@ -796,32 +735,13 @@ Thread.Sleep(1000); try { foreach (var item in realtimePlcValueDict_Srm) { if (item.Key == "Srm1") { this.tb_Srm1.Text = item.Value; } else if (item.Key == "Srm2") { this.tb_Srm2.Text = item.Value; } else if (item.Key == "Srm3") { this.tb_Srm3.Text = item.Value; } else if (item.Key == "Srm4") { this.tb_Srm4.Text = item.Value; } } var str_rgv = ""; foreach (var item in realtimePlcValueDict_Rgv) var str_Station = ""; foreach (var item in realtimePlcValueDict_Station) { str_rgv += item.Value; str_Station += item.Value; } this.tb_Rgv.Text = str_rgv; this.tb_Station.Text = str_Station; } catch (Exception) @@ -856,7 +776,7 @@ { realtimePlcValueDict_Srm.Add(x.View.DeviceName, ""); }); Rgv_CacheEntity.DeviceObjs.ForEach(x => Station_CacheEntity.DeviceObjs.ForEach(x => { realtimePlcValueDict_Srm.Add(x.View.DeviceName, ""); }); @@ -1012,36 +932,36 @@ private void button2_Click_1(object sender, EventArgs e) { isShowPlcValue_Rgv = true; isShowPlcValue_Station = true; } private void button1_Click_1(object sender, EventArgs e) { isShowPlcValue_Rgv = false; isShowPlcValue_Station = false; } /* /// <summary> /// 一直存在RGVACK信号无法清除的BUG,做个定时清除的线程 /// 一直存在StationACK信号无法清除的BUG,做个定时清除的线程 /// </summary> public void HandleRGVAckBug(object obj) public void HandleStationAckBug(object obj) { var s = (RgvEntity)obj; var s = (StationEntity)obj; while (true) { Thread.Sleep(1000); bool finishRgv = (bool)s.plcService.ReadValuePoint(s.DBBlockForRead.R_RGV_Finish, typeof(bool)); bool finisAck = (bool)s.plcService.ReadValuePoint(s.DBBlockForWrite.W_RGV_FinishACK, typeof(bool)); bool finishStation = (bool)s.plcService.ReadValuePoint(s.DBBlockForRead.R_Station_Finish, typeof(bool)); bool finisAck = (bool)s.plcService.ReadValuePoint(s.DBBlockForWrite.W_Station_FinishACK, typeof(bool)); if (finisAck == false && finishRgv == true) if (finisAck == false && finishStation == true) { Thread.Sleep(10000);//如果10秒还没清除,就强制清除 finishRgv = (bool)s.plcService.ReadValuePoint(s.DBBlockForRead.R_RGV_Finish, typeof(bool)); finisAck = (bool)s.plcService.ReadValuePoint(s.DBBlockForWrite.W_RGV_FinishACK, typeof(bool)); if (finisAck == false && finishRgv == true) finishStation = (bool)s.plcService.ReadValuePoint(s.DBBlockForRead.R_Station_Finish, typeof(bool)); finisAck = (bool)s.plcService.ReadValuePoint(s.DBBlockForWrite.W_Station_FinishACK, typeof(bool)); if (finisAck == false && finishStation == true) { s.plcService.WriteValuePoint(s.DBBlockForWrite.W_RGV_FinishACK, true, s.View.W_RGV_FinishACK);//重发一次 20230503 王铮 s.plcService.WriteValuePoint(s.DBBlockForWrite.W_Station_FinishACK, true, s.View.W_Station_FinishACK);//重发一次 20230503 王铮 } } SDA/iWareSda/iWareSda.csproj
@@ -8,7 +8,7 @@ <OutputType>WinExe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>iWareSda</RootNamespace> <AssemblyName>XiGang_iWareSda</AssemblyName> <AssemblyName>iWareSda</AssemblyName> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <FileAlignment>512</FileAlignment> <WcfConfigValidationEnabled>True</WcfConfigValidationEnabled> @@ -127,6 +127,15 @@ <Compile Include="Devices\3-Rgv\RgvModel\Rgv_CacheEntity.cs" /> <Compile Include="Devices\3-Rgv\RgvService\IRgvService.cs" /> <Compile Include="Devices\3-Rgv\RgvService\RgvService.cs" /> <Compile Include="Devices\4-Station\StationModel\DB\RgvComm.cs" /> <Compile Include="Devices\4-Station\StationModel\DB\RgvDB2Obj.cs" /> <Compile Include="Devices\4-Station\StationModel\DB\RgvDBForRead.cs" /> <Compile Include="Devices\4-Station\StationModel\DB\RgvDBForWrite.cs" /> <Compile Include="Devices\4-Station\StationModel\StationEntity.cs" /> <Compile Include="Devices\4-Station\StationModel\StationView.cs" /> <Compile Include="Devices\4-Station\StationModel\Station_CacheEntity.cs" /> <Compile Include="Devices\4-Station\StationService\IStationService.cs" /> <Compile Include="Devices\4-Station\StationService\StationService.cs" /> <Compile Include="Interface\IDevice.cs" /> <Compile Include="Model\DeviceWarningInfo.cs" /> <Compile Include="Model\SdaResEntity.cs" />