using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Collections.Concurrent;
using System.Threading;
using System.Timers;
namespace BEMSDataGateway
{
public partial class Form1 : Form
{
//event 부분 추가 . 20161209
//EventWaitHandle ewhLoginSuccess = new EventWaitHandle(false, EventResetMode.ManualReset, "Login.Success");
//EventWaitHandle ewhLoginFail = new EventWaitHandle(false, EventResetMode.ManualReset, "Login.Fail");
//EventWaitHandle ewhDisconnect = new EventWaitHandle(false, EventResetMode.ManualReset, "Connect.Fail");
bool startOk = false;
public bool bConnect;
////서로 다른 두 스레드(ResponseFunc와 Form)의 충돌을 피하기 위해 델리게이트 사용.
////ResponseFunc에서 오류 발생시 델리게이트를 통해 Log를 출력함
//delegate void CrossThreadSafetySetErrorCodeTxt(string text);
//private void SetText(string text)
//{
// if (this.LogTxt.InvokeRequired)
// {
// CrossThreadSafetySetErrorCodeTxt d = new CrossThreadSafetySetErrorCodeTxt(SetText);
// this.Invoke(d, text );
// //this.Invoke(d, text);
// }
// else
// {
// this.LogTxt.Text = text;
// }
//}
// public delegate void ErrorFunc(int nErrorCode);
//결과 학인 콜백 함수 이름변경(ErrorFunc -> ResponseFunc) 및 static 삭제 swpark 2016.12.01
public delegate int ErrorFunc(int nErrorCode);//선언위치 변경 swpark 20161209
public ErrorFunc _errfunc;// 선언위치변경 swpark 20161209
public static int ResponseFunc(int nErrorCode)
{
LogFileCreate LFC = new LogFileCreate();
Form1 F1 = new Form1();
// nErrorCode 정보
// 1 : 서버 연결 성공
// 2 : 연결 끊어짐
// 3 : 프로젝트 다운로드 완료
// 4 : 로그인 성공
// 5 : 로그인 실패
// 100~ : 기타 오류
switch (nErrorCode)
{
case 1:
LFC.Log("서버에 연결 성공 = " + nErrorCode);
//this.SetText("서버에 연결 성공 = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
break;
case 2:
LFC.Log("서버에 의해서 소켓 연결이 끊어졌습니다 = " + nErrorCode);
//CloseConnection();
//SetText("서버에 의해서 소켓 연결이 끊어졌습니다 = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
//CloseConnection();
break;
case 3:
LFC.Log("프로젝트 다운로드를 완료했습니다. = " + nErrorCode);
UserLogin("bems_gw", "1", true);
//this.SetText("프로젝트 다운로드를 완료했습니다. = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
break;
case 4:
//System.Threading.Thread.Sleep(2000);
LFC.Log("서버 로그인에 성공했습니다. = " + nErrorCode);
My_TimerThread.check = false;
F1.ReadTag();
//this.SetText("서버 로그인에 성공했습니다.. = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
break;
case 5:
LFC.Log("알 수 없는 에러로 연결이 끊겼습니다. = " + nErrorCode);
//this.SetText("알 수 없는 에러로 연결이 끊겼습니다. = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
//CloseConnection();
break;
default:
LFC.Log("서버 로그인에 실패했습니다. 연결을 종료합니다. = " + nErrorCode);
//this.SetText("서버 로그인에 실패했습니다. 연결을 종료합니다. = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
//CloseConnection();
break;
}
return nErrorCode;
}
//public delegate void MonitoringTag(string szTag, float fValue);
//public delegate void MonitoringPacket([MarshalAs(UnmanagedType.LPArray, SizeConst = 8192)] byte[] bPacket);
// 접속정보 전달용 구조체 (마샬링)
public struct runMode
{
public UInt32 uNetType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public String szRunIp;
public UInt32 uRunPort;
public UInt32 uRunScan;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public String szServer2;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public String szHaIp;
public UInt32 uHaPort;
public UInt32 uHaScan;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szUser;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szPassword;
}
public struct DBInfo
{
public UInt32 uDbType;//0 : MDB. 1 : MSSQL
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szDBPath;//MDB 파일 위치 값이 없으면 실행파일위치에서 하위 Project\DB\iCos4.mdb 를 읽어옴
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szSqlIP; //MSSQL IP주소
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szSqlDB; //MSSQL DB명
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szSqlID; //MSSQL ID
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szSqlPW; //MSSQL PASSWORD
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szDbAddr; //
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
public String szDbTable; //DB 테이블명
}
// 접속 초기화 함수
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern bool InitSocket(string szUser, string szPassword, bool bLogout);
//접속정보 설정
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetNetwork(ref runMode tRunMode);
// DB정보 설정
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetDBInfo(ref DBInfo tDBInfo);
// 태그값 등록 함수
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void RegTag(int nTagCnt, string szTag);
// 태그값 등록해제 함수
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void UnregTag(int nTagCnt, string szTag);
// 디바이스 태그 DB 설정
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SetDeviceDB(int nDBType, string szDBPath);
// 디바이스 태그 값 가져오기
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern float GetTagValue(string szTag);
// 디바이스 태그 값 쓰기
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern float SetTagValue(string szTag, float fValue);
// 로그인 전용 함수
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern bool UserLogin(string szUser, string szPassword, bool bLogout);
// 로그아웃 전용 함수
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern bool UserLogout(string szUser);
// 접속 초기화 함수
[DllImport("ICosSocket.dll")]
public static extern void CloseConnection();
// 결과확인 함수 포인터 전달 함수
[DllImport("ICosSocket.dll", EntryPoint = "SetErrorFunc")]
public static extern void SetErrorFunc(ErrorFunc x);
//[DllImport("ICosSocket.dll", EntryPoint = "SetPacketFunc")]
//public static extern void SetPacketFunc(MonitoringPacket x);
//[DllImport("ICosSocket.dll", EntryPoint = "SetMonitoringFunc")]
//public static extern void SetMonitoringFunc(MonitoringTag x);
// 변수추가 szText swpark 2016.12.01
//public static void MonitoringTag(string szTag, float fValue, string szText)
//{
// string str;
// str = szTag + " : " + fValue.ToString();
//}
// iCos4 네트워크 상태
// NetworkStatus 정보
// 0 : 연결안됨
// 1 : 정상상태
[DllImport("ICosSocket.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetNetworkStatus();
public string iCosFourConn()
{
string strRet = "";
string Result_Conn_iCos = "";
Readini Ri = new Readini();
Ri.ReadData(); // ini의 설정값을 불러옴.
LogTxt.Text += "iCos 에 접속중입니다. 기다려주세요...." + Environment.NewLine;
runMode tRunMode = new runMode();
tRunMode.szRunIp = Ri.IP1;
tRunMode.szHaIp = Ri.DGW_IP;
tRunMode.szServer2 = Ri.Ip2;
tRunMode.uNetType = 7; //TYPE_CLIENT_ONLY
tRunMode.uRunPort = 6000;
tRunMode.uRunScan = 3000;
tRunMode.uHaPort = 2;
tRunMode.uHaScan = 1;
tRunMode.szUser = "bems_gw";
tRunMode.szPassword = "1";
try
{
SetNetwork(ref tRunMode);
//ErrorFunc _errfunc = new ErrorFunc(ResponseFunc); //응답처리함수 swpark 2016.12.01
_errfunc = new ErrorFunc(ResponseFunc);
SetErrorFunc(_errfunc); //콜백 함수 넘겨주는 방식 변경 (웹서버용 함수) swpark 2016.12.01
//SetMonitoringPointValueFunc(_monitorvalue);//모니터링값 수신 함수 콜백 연결 웹서버용
bool bRet = InitSocket("bems_gw", "1", true);
strRet = bRet.ToString();
LogTxt.Text += "iCos 접속 함수 동작 시작 : " + Convert.ToString(strRet) + " = " + Convert.ToString(DateTime.Now) + Environment.NewLine;
Result_Conn_iCos = "SUCCESS";
}
catch(Exception e)
{
LogTxt.Text += "iCos 접속완료 여부 : 실패하였습니다. = " + Convert.ToString(DateTime.Now) + e + Environment.NewLine ;
Result_Conn_iCos = "FAIL";
}
return Result_Conn_iCos;
}
public void iCosFourReadDB()
{
SetDeviceDB(0, "C:\\DGW2.0\\Release\\Project\\DB\\iCos4.mdb");
}
string[] ReturnTag = new string[2];
public void ReadTag()
{
timerstart_readTag();
}
System.Timers.Timer timer2 = new System.Timers.Timer();
public void timerstart_readTag()
{
timer2.Interval = 3000;
timer2.Elapsed += new ElapsedEventHandler(timer2_Elapsed);
timer2.Start();
}
bool Check_reconn = false;
public void timer2_Elapsed(object sender, ElapsedEventArgs e) // 1분마다 실행되는 데이터 수집 로직
{
if (Check_reconn == false)
{
Check_reconn = true;
System.Threading.Thread.Sleep(5000);
Parsing Ps = new Parsing();
ReturnTag = Ps.TagParsing();
RegTag(Convert.ToInt32(ReturnTag[1]), ReturnTag[0]);
LogFileCreate LFC = new LogFileCreate();
LFC.Log("포인트 등록완료");
Check_reconn = false;
timer2.Stop();
timer2.Enabled = false;
}
}
public void UnReg()
{
Parsing Ps = new Parsing();
ReturnTag = Ps.TagParsing();
UnregTag(Convert.ToInt32(ReturnTag[1]), ReturnTag[0]);
}
//public void GetValue()
//{
// float fval;
// fval = GetTagValue("ch.ctrl.tag1");
// //string strRet;
// //strRet = fval.ToString();
// //MessageBox.Show(strRet);
//}
My_TimerThread TTs = new My_TimerThread();
static string SelecDir;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ProStopBtn.Enabled = false;
PointSetBtn.Enabled = false;
PointUnRegBtn.Enabled = false;
ProStartBtn.Enabled = false;
ProStopBtn.Enabled = false;
Shown += Form1_Shown;
}
System.Timers.Timer timer_NetStat = new System.Timers.Timer();
LogFileCreate LFC = new LogFileCreate();
public void Timer_netStat()
{
timer_NetStat.Interval = 5000;
timer_NetStat.Elapsed += new ElapsedEventHandler(net_state_Thread);
timer_NetStat.Start();
}
private delegate void myDelegate(string theValue);
private void Wirte_Communicaion_State(string theValue)
{
try
{
LFC.Log(theValue + "= 들어온 통신상태");
if (theValue == "1")
{
Net_Stat.BackColor = Color.LightSkyBlue;
Net_Stat.Text = "통신중";
}
else if (theValue == "0")
{
Net_Stat.BackColor = Color.Red;
Net_Stat.Text = "통신끊김";
}
}
catch(Exception E)
{
LFC.Log(Convert.ToString(E));
LogTxt.Text += Convert.ToString(E)+ Environment.NewLine;
}
}
public void net_state_Thread(object sender, ElapsedEventArgs e)
{
try
{
//Net_Stat.BackColor = Color.LemonChiffon;
int nNet;
nNet = GetNetworkStatus();
string strRet;
strRet = nNet.ToString();
this.Invoke(new myDelegate(Wirte_Communicaion_State), new object[] { strRet });
}
catch (Exception E)
{
LFC.Log(Convert.ToString(E));
LogTxt.Text += Convert.ToString(E) + Environment.NewLine;
}
}
private void Form1_Shown(object sender, EventArgs e)
{
LogFileCreate LFC = new LogFileCreate();
string ReturnValue = iCosFourConn();
iCosFourReadDB();
LFC.Log("접속 함수 동작 시작 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
LogTxt.Text += "접속 함수 동작 시작 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine;
if (ReturnValue == "SUCCESS")
{
LogTxt.Text += "접속 성공 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine;
PointSetBtn.Enabled = true;
PointUnRegBtn.Enabled = true;
ProStartBtn.Enabled = true;
}
SetDeviceDB(0, "");
//ReadTag();
try
{
//Creating_Setting_File CSF = new Creating_Setting_File();
//CSF.Create_Setting_Point_File();
EndTxt.Clear();
//TTs.timer1start();
ProStartBtn.Enabled = false; // 시작버튼 비활성화.
StartTxt.Text = Convert.ToString(DateTime.Now);
LogTxt.Text += "프로그램 시작 " + Convert.ToString(DateTime.Now) + Environment.NewLine;
ProStopBtn.Enabled = true;
FileSettingBtn.Enabled = false;
FileMatchBtn.Enabled = false;
FileExpBtn.Enabled = false;
FirstCheck FC = new FirstCheck();
FC.Check_DailyData();
OneMinute_Insert OMI = new OneMinute_Insert();
OMI.Today_PeakMinMax();
OMI.Year_PeakMinMax();
My_TimerThread MTT = new My_TimerThread();
MTT.timer2start();
//Timer_netStat();
}
catch (Exception eProStart)
{
LogTxt.Text += "프로그램 오류 " + Convert.ToString("DB에 접속되지 않았습니다.") + " " + eProStart + " = " + Convert.ToString(DateTime.Now) + Environment.NewLine;
}
}
//private static DateTime Delay(int MS)
//{
// DateTime ThisMoment = DateTime.Now;
// TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS);
// DateTime AfterWards = ThisMoment.Add(duration);
// while (AfterWards >= ThisMoment)
// {
// System.Windows.Forms.Application.DoEvents();
// ThisMoment = DateTime.Now;
// }
// return DateTime.Now;
//}
private void ProStartBtn_Click(object sender, EventArgs e)
{
if (toolStripStatusLabel1.Text != "")
{
try
{
//Creating_Setting_File CSF = new Creating_Setting_File();
//CSF.Create_Setting_Point_File();
EndTxt.Clear();
//TTs.timer1start();
ProStartBtn.Enabled = false; // 시작버튼 비활성화.
StartTxt.Text = Convert.ToString(DateTime.Now);
LogTxt.Text += "프로그램 시작 " + Convert.ToString(DateTime.Now) + Environment.NewLine;
ProStopBtn.Enabled = true;
FileSettingBtn.Enabled = false;
FileMatchBtn.Enabled = false;
FileExpBtn.Enabled = false;
FirstCheck FC = new FirstCheck();
FC.Check_DailyData();
OneMinute_Insert OMI = new OneMinute_Insert();
OMI.Today_PeakMinMax();
OMI.Year_PeakMinMax();
My_TimerThread MTT = new My_TimerThread();
MTT.timer2start();
}
catch (Exception eProStart)
{
LogTxt.Text += "프로그램 오류 " + Convert.ToString("DB에 접속되지 않았습니다.") + " " + eProStart + " = " + Convert.ToString(DateTime.Now) + Environment.NewLine;
}
}
else
MessageBox.Show("경로를 설정해주세요");
}
private void ProStopBtn_Click(object sender, EventArgs e)
{
CloseConnection();
TTs.timer2Stop();
FileSettingBtn.Enabled = true;
FileMatchBtn.Enabled = true;
FileExpBtn.Enabled = true;
ProStartBtn.Enabled = true;
EndTxt.Text = Convert.ToString(DateTime.Now);
LogTxt.Text += "프로그램 중단 " + " = " + Convert.ToString(DateTime.Now) + Environment.NewLine;
ProStopBtn.Enabled = false;
}
private void ProSetBtn_Click(object sender, EventArgs e)
{
SettingForm SF = new SettingForm();
SF.ShowDialog();
}
private void ProPathBtn_Click_1(object sender, EventArgs e)
{
FolderBrowserDialog();
}
///
/// 셋팅파일 불러오기 버튼
///
///
///
private void FileSettingBtn_Click(object sender, EventArgs e)
{
string FSBLocation = Environment.CurrentDirectory + "\\Login.ini";
try
{
System.Diagnostics.Process.Start(FSBLocation);
}
catch
{
FileError(FSBLocation);
}
}
///
/// 매칭파일 불러오기 버튼
///
///
///
private void FileMatchBtn_Click(object sender, EventArgs e)
{
string FSBLocation = Environment.CurrentDirectory + "\\SettingFile.csv";
try
{
System.Diagnostics.Process.Start(FSBLocation);
}
catch
{
FileError(FSBLocation);
}
}
///
/// 수식파일 불러오기 버튼
///
///
///
private void FileExpBtn_Click(object sender, EventArgs e)
{
string FSBLocation = Environment.CurrentDirectory + "\\Expression.csv";
try
{
System.Diagnostics.Process.Start(FSBLocation);
}
catch
{
FileError(FSBLocation);
}
}
public void FileError(string Error)
{
if ((!Error.Contains("Login.ini")) || (!Error.Contains("expression.csv")) || (!Error.Contains("Matching.csv")))
{
MessageBox.Show("파일을 찾을 수 없습니다.");
}
}
public string FolderBrowserDialog()
{
LogFileCreate LFC = new LogFileCreate();
FolderBrowserDialog folderDig = new FolderBrowserDialog();
folderDig.ShowNewFolderButton = true;
// Show the FolderBrowserDialog.
DialogResult result = folderDig.ShowDialog();
if (result == DialogResult.OK)
{
SelecDir = folderDig.SelectedPath;
Environment.SpecialFolder root = folderDig.RootFolder;
toolStripStatusLabel1.Text = "프로젝트 경로 : " + Environment.CurrentDirectory;
LogTxt.Text += "경로설정완료 " + SelecDir + " " + Convert.ToString(DateTime.Now) + Environment.NewLine;
LFC.Log("경로 설정 완료" + SelecDir);
}
return SelecDir;
}
private void EraseLog_Click(object sender, EventArgs e)
{
LogTxt.Clear();
}
// 프로그램 종료시 이벤트
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
LogFileCreate LFC = new LogFileCreate();
if (MessageBox.Show("프로그램을 종료하시겠습니까?", "종료", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
LFC.Log("사용자에 의해 프로그램 종료가 취소되었습니다. = " + Convert.ToString(DateTime.Now));
e.Cancel = true;
}
else
{
LFC.Log("사용자에 의해 프로그램이 종료되었습니다. = " + Convert.ToString(DateTime.Now));
}
}
private void PointSetBtn_Click(object sender, EventArgs e)
{
//iCosFourDBSET();
ReadTag();
//UnReg();
}
private void Conn_iCos_Btn_Click(object sender, EventArgs e)
{
//Thread thread_tLS = new Thread(threadLoginSuccess);
//thread_tLS.IsBackground = true;
//thread_tLS.Start();
//Thread thread_tLF = new Thread(threadLoginFail);
//thread_tLF.IsBackground = true;
//thread_tLF.Start();
//Thread thread_tCF = new Thread(threadConnectFail);
//thread_tCF.IsBackground = true;
//thread_tCF.Start();
LogFileCreate LFC = new LogFileCreate();
string ReturnValue = iCosFourConn();
iCosFourReadDB();
LFC.Log("접속 함수 동작 시작 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
LogTxt.Text += "접속 함수 동작 시작 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine;
if (ReturnValue == "SUCCESS")
{
LogTxt.Text += "접속 성공 = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine;
PointSetBtn.Enabled = true;
PointUnRegBtn.Enabled = true;
ProStartBtn.Enabled = true;
}
SetDeviceDB(0, "");
}
//서로 다른 두 스레드(ResponseFunc와 Form)의 충돌을 피하기 위해 델리게이트 사용.
//ResponseFunc에서 오류 발생시 델리게이트를 통해 Log를 출력함
delegate void CrossThreadSafetySetErrorCodeTxt(string text);
private void SetText(string text)
{
if (this.LogTxt.InvokeRequired)
{
CrossThreadSafetySetErrorCodeTxt d = new CrossThreadSafetySetErrorCodeTxt(SetText);
this.Invoke(d, text);
//this.Invoke(d, text);
}
else
{
this.LogTxt.Text = text;
}
}
//void threadLoginSuccess(object state)
//{
// //int count = 0;
// while (ewhLoginSuccess.WaitOne()) // 이벤트 대기
// {
// ewhLoginSuccess.Reset(); // ManualReset으로 설정했으므로 Reset 명시
// this.SetText("로그인 성공 = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
// }
//}
//void threadLoginFail(object state)
//{
// //int count = 0;
// while (ewhLoginFail.WaitOne()) // 이벤트 대기
// {
// ewhLoginFail.Reset(); // ManualReset으로 설정했으므로 Reset 명시
// this.SetText("로그인 실패 = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
// }
//}
//void threadConnectFail(object state)
//{
// //int count = 0;
// while (ewhDisconnect.WaitOne()) // 이벤트 대기
// {
// ewhDisconnect.Reset(); // ManualReset으로 설정했으므로 Reset 명시
// this.SetText("연결 종료 = " + Convert.ToString(DateTime.Now) + Environment.NewLine);
// }
//}
private void PointUnRegBtn_Click(object sender, EventArgs e)
{
UnReg();
}
private void Btn_TagSetFile_Click(object sender, EventArgs e)
{
Creating_Setting_File CSF = new Creating_Setting_File();
CSF.Create_Point_File();
}
private void Btn_SettingFile_Click(object sender, EventArgs e)
{
Creating_Setting_File CSF = new Creating_Setting_File();
CSF.Create_Setting_Point_File();
}
private void AllValueCheck_btn_Click(object sender, EventArgs e)
{
string[] sArray = File.ReadAllLines("TagSetFile.csv", Encoding.Default);
LogTxt.Text += "*********** 현재 시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "**********" + Environment.NewLine;
try
{
for (int i = 0; i < sArray.Length; i++) //
{
string[] tmp = sArray[i].Split(','); // tmp[0] = index, tmp[1] = Tag명.
LogTxt.Text += tmp[1] + " 의 값 : " + GetTagValue(tmp[1]) + Environment.NewLine;
}
LogTxt.Text += "**************************************************************" + Environment.NewLine;
//LogTxt.Text += "일괄 조회 종료";
}
catch (Exception er)
{
MessageBox.Show("오류 발생 = " + er);
}
}
}
}