initial commit
This commit is contained in:
		
							
								
								
									
										175
									
								
								cVMS.NET_CS/RunCode/RunSequence/RUN_GETDATA.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								cVMS.NET_CS/RunCode/RunSequence/RUN_GETDATA.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Drawing; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using COMM; | ||||
| using AR; | ||||
|  | ||||
| namespace vmsnet | ||||
| { | ||||
|     public partial class FMain | ||||
|     { | ||||
|         /// <summary> | ||||
|         /// 연결된 개체의 데이터를 수집합니다. | ||||
|         /// </summary> | ||||
|         void RUN_GETDATA() | ||||
|         { | ||||
|             var DAQS = PUB.DAQ.Where(t => t.isOn).ToList(); | ||||
|             DateTime stiem = DateTime.Now; | ||||
|             var activecnt = 0; | ||||
|             var TotalRecvDatas = new List<NotifyData>(); | ||||
|             foreach (GM10 m in DAQS) | ||||
|             { | ||||
|                 if (m.isOn == false) continue; | ||||
|  | ||||
|                 if (PUB.CONFIG.synctime && m.opt_synctime == false) | ||||
|                 { | ||||
|                     PUB.workmsg("Sync DateTime"); | ||||
|                     PUB.StatusMSG("장치의 시간동기화"); | ||||
|                     if (!m.SyncDate()) | ||||
|                     { | ||||
|                         PUB.log.AddE($"Device({m.title})의 시간동기화가 실패하였습니다."); | ||||
|                     } | ||||
|                     /* 작성자: 김치균, 작성일: 2024-10-11, 작성내용: 실패하더라도 1회만 동작 */ | ||||
|                     m.opt_synctime = true; | ||||
|                     /*****************************************************************/ | ||||
|                     PUB.workmsg(""); | ||||
|                 } | ||||
|                 else if (PUB.CONFIG.lsb && m.opt_lsb == false) | ||||
|                 { | ||||
|                     PUB.workmsg("Set : Binary Output LSB"); | ||||
|                     bool Rlt = m.SetBinaryLSB(); | ||||
|                     if (Rlt == false) | ||||
|                     { | ||||
|                         PUB.log.AddE($"Device({m.title})의 Binary Output Mode : LSB 설정 실패"); | ||||
|                     } | ||||
|                     /* 작성자: 김치균, 작성일: 2024-10-11, 작성내용: 실패하더라도 1회만 동작 */ | ||||
|                     m.opt_lsb = true; | ||||
|                     /*****************************************************************/ | ||||
|                     PUB.workmsg(""); | ||||
|                 } | ||||
|                 else ////켜져잇다면 | ||||
|                 { | ||||
|  | ||||
|                     // PingMsg += " | CONN," + m.IP; | ||||
|  | ||||
|                     activecnt++; | ||||
|                     UpdateConnectionDisplayLabel(m.idx, ConnState.Connected); | ||||
|  | ||||
|                     if (m.Disable) | ||||
|                     { | ||||
|                         PUB.RaiseRemoteCommandEvent(rCommand.EnableUIItems, m.idx); | ||||
|                         m.Disable = false; ////켜졌다면 아이콘을 껏다는것을 취소한다. 이후 종료되었을때 다시 disable되도록 | ||||
|                     } | ||||
|  | ||||
|                     PUB.StatusMSG($"DAQ 데이터수집 중"); | ||||
|  | ||||
|                     var RecvDatas = new List<NotifyData>(); | ||||
|                     var recv1 = PUB.GetMeasureData(m, PUB.CONFIG.meas_pri1, PUB.CONFIG.meas_pri2); | ||||
|                     if (recv1.Any() == false) | ||||
|                     { | ||||
|                         ////통신오류 혹은 데이터의 오류 | ||||
|                         UpdateConnectionDisplayLabel(m.idx, ConnState.Disconnected); | ||||
|                         m.Disconnect(); | ||||
|                         m.Disable = false; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         RecvDatas.AddRange(recv1); | ||||
|                         //PUB.RaiseRemoteCommandEvent(rCommand.ValueUpdate, recv1); | ||||
|  | ||||
|                         //CONFIG.meas_2nd1 = 101~160 | ||||
|                         if (PUB.CONFIG.seconddata && (PUB.CONFIG.meas_sec1 > 0 && PUB.CONFIG.meas_sec2 > 0)) | ||||
|                         { | ||||
|                             var recv2 = PUB.GetMeasureData(m, PUB.CONFIG.meas_sec1, PUB.CONFIG.meas_sec2); | ||||
|                             if (recv2.Any() == true) RecvDatas.AddRange(recv2); | ||||
|                         } | ||||
|  | ||||
|                         //CONFIG.meas_3rd1 = 201~260 | ||||
|                         if (PUB.CONFIG.thirddata && (PUB.CONFIG.meas_3rd1 > 0 && PUB.CONFIG.meas_3rd2 > 0)) | ||||
|                         { | ||||
|                             var recv3 = PUB.GetMeasureData(m, PUB.CONFIG.meas_3rd1, PUB.CONFIG.meas_3rd2); | ||||
|                             if (recv3.Any() == true) RecvDatas.AddRange(recv3); | ||||
|                         } | ||||
|  | ||||
|                         //CONFIG.meas_4th1 = 301~360 | ||||
|                         if (PUB.CONFIG.getdata4 && (PUB.CONFIG.meas_4th1 > 0 && PUB.CONFIG.meas_4th2 > 0)) | ||||
|                         { | ||||
|                             var recv4 = PUB.GetMeasureData(m, PUB.CONFIG.meas_4th1, PUB.CONFIG.meas_4th2); | ||||
|                             if (recv4.Any() == true) RecvDatas.AddRange(recv4); | ||||
|                         } | ||||
|  | ||||
|                         //update display control | ||||
|                         if (RecvDatas.Any()) | ||||
|                         { | ||||
|                             PUB.RaiseRemoteCommandEvent(rCommand.ValueUpdate, RecvDatas); | ||||
|                             TotalRecvDatas.AddRange(RecvDatas); | ||||
|                         } | ||||
|  | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             ////모든데이터를 DB에저장한다. | ||||
|             if (TotalRecvDatas.Any() && PUB.sm.Step == ESMStep.RUN) | ||||
|             { | ||||
|                 try | ||||
|                 { | ||||
|                     RUN_SAVEDATA(TotalRecvDatas); | ||||
|                     if (System.Diagnostics.Debugger.IsAttached) Console.WriteLine("save ok"); | ||||
|                 } | ||||
|                 catch (Exception ex) | ||||
|                 { | ||||
|                     PUB.log.Add(AR.Log.ETYPE.ERROR, "Save Error" + ex.Message.ToString()); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (PUB.sleepoffset > 0) | ||||
|             { | ||||
|                 System.Threading.Thread.Sleep(PUB.sleepoffset); | ||||
|             } | ||||
|  | ||||
|             var TSLoop = DateTime.Now - stiem; | ||||
|             refreshinterval = (int)(TSLoop.TotalMilliseconds); //;// (tspan.Minutes * 60 * 1000) + (tspan.Seconds * 1000) + tspan.Milliseconds | ||||
|  | ||||
|             this.DispCtrl1.Invalidate(); | ||||
|  | ||||
|             if (!DispCtrl1.FullScreen) | ||||
|             { | ||||
|                 // BarGraph1.Refresh() | ||||
|  | ||||
|                 //'//트렌드뷰 초기화 | ||||
|                 //Dim Grp As DispCtrl.CGROUP = Me.DispCtrl1.GROUPS(DispCtrl1.ShowIndex) | ||||
|                 //For Each item As DispCtrl.CITEM In Grp.Items | ||||
|                 //    TrendCtrlII1.CHInfo(item.idx - 1).Value.Add(item.value2) | ||||
|                 //Next | ||||
|                 //TrendCtrlII1.Time.Add(New TrendCtrlII.CTimeinfo(TrendCtrlII1.Time.Count, Now.ToFileTime)) | ||||
|                 //'TrendCtrlII1.Style.X2 = Now.ToFileTime | ||||
|                 //TrendCtrlII1.Set_Refresh() | ||||
|                 //TrendCtrlII1.Refresh() | ||||
|             } | ||||
|  | ||||
|             var offsetvalue = (refreshinterval - PUB.CONFIG.threadlimit); | ||||
|             if(Math.Abs(offsetvalue) > 3) | ||||
|             { | ||||
|                 if (offsetvalue < 0) //지연시간을 더 줘야 한다 | ||||
|                 { | ||||
|                     if (offsetvalue < -50) PUB.sleepoffset += -offsetvalue; //50미만에서는 보정값 그대로 사용 | ||||
|                     else if (offsetvalue < -20) PUB.sleepoffset += 10; //50미만에서는 보정값 그대로 사용 | ||||
|                     else PUB.sleepoffset += 5; //50을 초과한 경우에는  10씩 조정되도록 한다 | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     //너무 많이 지연되었다. 속도를 줄여야 한다 | ||||
|                     if (offsetvalue > 50) PUB.sleepoffset += -offsetvalue; //50미만에서는 보정값 그대로 사용 | ||||
|                     else if (offsetvalue > 20) PUB.sleepoffset -= 10; | ||||
|                     else PUB.sleepoffset -= 5; //50을 초과한 경우에는  10씩 조정되도록 한다 | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|         } | ||||
|  | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Arin(asus)
					Arin(asus)