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;
using System.Net.NetworkInformation;
namespace BEMSDataGateway
{
public partial class Form1 : Form
{
IcosComm iCosSocket; //iCos 통신클래스
LogFileCreate LFC = new LogFileCreate(); //로그 기록 파일
My_TimerThread MTT = new My_TimerThread();
System.Timers.Timer timer_NetStat = new System.Timers.Timer();
public static bool Enable_EnglishMode;
Parsing PS = new Parsing();
string szICOS_IP; //iCos server 주소
string szICOS_ID; //iCos server ID
string szICOS_PW; //iCos server Password
string szDB_IP; //iCos 프로젝트 DB 주소
string szDB_NAME; //iCos 프로젝트 DB 이름
string szDB_ID; //iCos 프로젝트 DB 접속 ID
string szDB_PW; //iCos 프로젝트 DB 접속 비밀번호
int nDB_TYPE = 1; //iCos 프로젝트 DB 종류 (0:MDB, 1:MS-SQL)
public bool bConnect;
public void CommResponse(string userid, int nType, int nSubType, Object obj) //iCOS 응답처리를 위한 함수
{
if (nType == 6)
{
if (nSubType == 2)
{
iCosLogInResponse _packet = (iCosLogInResponse)obj;
string errMsg;
if (_packet.nResult == 3) //로그인 성공
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Successfully logged in to the iCOS 4 server" + Environment.NewLine);
}
else//한글
{
LFC.Log("iCOS 4 서버에 로그인 성공" + Environment.NewLine);
}
Wirte_state_PointSetBtn(PointSetBtn);
Wirte_PointSetBtn(PointSetBtn);
}
else //로그인 실패
{
if (_packet.nResult == 0)
errMsg = "DB Error";
else if (_packet.nResult == 1)
errMsg = "Password Error";
else if (_packet.nResult == 2)
errMsg = "ID Error";
else
errMsg = "Other Errors";
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] iCOS4 server Login failure : " + errMsg + Environment.NewLine);
Wirte_logtxt(Convert.ToString(DateTime.Now) + "[Form] iCOS4 server Login failure : " + errMsg + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] iCOS4 로그인 실패 : " + errMsg + Environment.NewLine);
Wirte_logtxt(Convert.ToString(DateTime.Now) + "[Form] iCOS4 로그인 실패 : " + errMsg + Environment.NewLine);
}
//Wirte_ProStopBtn(ProStopBtn);
LFC.Log("[Form] iCOS4 서버 연결실패 : 3분후 재 로그인을 진행합니다." + Environment.NewLine);
Wirte_logtxt(Convert.ToString(DateTime.Now) + "[Form] iCOS4 로그인 실패 : 3분후 재 로그인을 진행합니다" + Environment.NewLine);
Delay(180000);
iCosSocket.IcosLogin(szICOS_ID, szICOS_PW);
}
}
}
else if (nType == 4) //알람
{
if (nSubType == 11)
{
//알람이 발생하면 여기로 들어온다.
}
else if (nSubType == 9) //ALARM_ACK_FROM_SERVER
{
//서버로 부터 알람에 대한 인지가 발생하면 여기로 들어온다.
}
else if (nSubType == 16) //ALARM_CHACK_ALL_PROCESS_FROM_SERVER
{
//서버로 부터 모든 알람에 대한 인지가 발생하면 여기로 들어온다.
}
else
{
// 그외에 알람관련 정보를 받으면 여기로 들어온다.
}
}
else if (nType == 99)
{
//iCos 서버와의 접속이 끊기고 연결오류 발생시 여기로 들어온다.
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form]The socket connection was broken by the iCos4 server" + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form]iCos4 서버에 의해서 소켓 연결이 끊어졌습니다" + Environment.NewLine);
}
}
}
public 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;
}
public bool iCos4ConnectandLogin(string address, string id, string password)// iCOS4 네트워크 상태 파악 함수, 0 : 연결 안됨, 1: 정상 상태
{
bool bRet = false;
var state = iCosSocket.GetConnectionStatus(id);
if (state)
{
iCosSocket.reDisconnect(id);
}
if (iCosSocket.Connect(address, 6000, id, password)) //iCOS 소켓 연결
{
iCosSocket.IcosLogin(id, password); //iCOS 로그인
bRet = true;
}
else
{
iCosSocket.Disconnect(id); //iCOS 소켓 연결 해제
}
return bRet;
}
public string iCos4Connect() //iCOS 연결 함수
{
string strRet = "";
string Result_Connect_iCos = "";
Readini Ri = new Readini();
Ri.ReadData(); // ini의 설정값을 불러옴.
szICOS_IP = Ri.IP1;
szICOS_ID = Ri.ICOS_ID;
szICOS_PW = Ri.ICOS_PASSWORD;
nDB_TYPE = Convert.ToInt32(Ri.ICOSDB_TYPE);
szDB_IP = Ri.ICOSDB_LOC;
szDB_NAME = Ri.ICOSDB_NAME;
szDB_ID = Ri.ICOSDB_ID;
szDB_PW = Ri.ICOSDB_PASSWORD;
Enable_EnglishMode = Ri.Enable_EnglishMode;
this.ProSetBtn.Text = (Enable_EnglishMode ? "Connection setup" : "접속 설정");
this.ProPathBtn.Text = (Enable_EnglishMode ? "Open project folder" : "프로젝트 폴더 열기");
this.Conn_iCos_Btn.Text = (Enable_EnglishMode ? "iCos \r\nconnect" : "iCos \r\n접속");
this.PointSetBtn.Text = (Enable_EnglishMode ? "Registration of control point" : "관제점 등록");
this.PointUnRegBtn.Text = (Enable_EnglishMode ? "Disable control point" : "관제점 해제");
this.ProStartBtn.Text = (Enable_EnglishMode ? "Start" : "시작");
this.ProStopBtn.Text = (Enable_EnglishMode ? "Stop" : "중단");
this.EraseLog.Text = (Enable_EnglishMode ? "Log\r\nClear" : "로그\r\n지우기");
this.groupBox1.Text = (Enable_EnglishMode ? "Preferences" : "환경설정");
this.groupBox5.Text = (Enable_EnglishMode ? "Monitoring" : "모니터링");
this.label6.Text = (Enable_EnglishMode ? "Start \r\nTime" : "시작시간");
this.label4.Text = (Enable_EnglishMode ? "End \r\nTime" : "종료시간");
this.label10.Text = (Enable_EnglishMode ? "Communication status" : "통신상태");
this.label11.Text = (Enable_EnglishMode ? "Verify the value" : "값 확인");
this.AllValueCheck_btn.Text = (Enable_EnglishMode ? "Batch verification of values" : "값 일괄 확인");
this.RequestValue_btn.Text = (Enable_EnglishMode ? "Identify specific values" : "특정 값 확인");
this.groupBox4.Text = (Enable_EnglishMode ? "Log message" : "로그 메시지");
try
{
if (!iCosSocket.InitTagAddress(nDB_TYPE, szDB_IP, szDB_NAME, szDB_ID, szDB_PW)) // iCOS DB 정보 가져옴
{
if (!iCosSocket.InitTagAddress(nDB_TYPE, szDB_IP, szDB_NAME, szDB_ID, szDB_PW)) //1차 실패시, iCOS DB 정보 다시 가져옴
{
if (Enable_EnglishMode)//영어
{
Result_Connect_iCos = "Final failure of iCOS control point DB information setting";
}
else//한글
{
Result_Connect_iCos = "iCOS 관제점 DB정보 설정 최종실패";
}
return Result_Connect_iCos;
}
}
iCosSocket.InitThread(); // iCoS 연결관리
bool bRet = iCos4ConnectandLogin(szICOS_IP, szICOS_ID, szICOS_PW);
if (bRet == false)
{
Result_Connect_iCos = "FAIL";
}
else
{
strRet = bRet.ToString();
Result_Connect_iCos = "SUCCESS";
}
}
catch (Exception)
{
Result_Connect_iCos = "FAIL";
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
return Result_Connect_iCos;
}
string[] ReturnTag = new string[2];
public void ReadTag() //iCOS 태그 등록 함수
{
int i;
Parsing Ps = new Parsing();
Control_Point_Group CPG = new Control_Point_Group();
ReturnTag = Ps.TagParsing();
i = iCosSocket.IcosRegTag(szICOS_ID, Convert.ToInt32(ReturnTag[1]), ReturnTag[0]);//Tag 등록
if (i == 1)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Completion of control point registration " + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Completion of control point registration" + Environment.NewLine);
}
else//한글
{
LFC.Log("관제점 등록 완료 " + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 관제점 등록 완료" + Environment.NewLine);
}
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Point entry failed" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Point entry failed" + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] 관제점 등록 실패" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 관제점 등록 실패" + Environment.NewLine);
}
return;
}
PS.setIcosSocket(iCosSocket);
CPG.setIcosSocket(iCosSocket);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
System.Timers.Timer timer2 = new System.Timers.Timer();
public int UnReg()//iCOS 태그 해제 함수
{
int i;
ReturnTag = PS.TagParsing();
Control_Point_Group CPG = new Control_Point_Group();
i = iCosSocket.IcosUnregTag(szICOS_ID, Convert.ToInt32(ReturnTag[1]), ReturnTag[0]);//태그 등록 해제
PS.setIcosSocket(iCosSocket);
CPG.setIcosSocket(iCosSocket);
if (i == 1)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Completion of control point" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Completion of control point" + Environment.NewLine);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
else//한글
{
LFC.Log("[Form] 관제점 해제 완료" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 관제점 해제 완료" + Environment.NewLine);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
return 1;
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Failure to control point" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Failure to control point" + Environment.NewLine);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
else//한글
{
LFC.Log("[Form] 관제점 해제 실패" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 관제점 해제 실패" + Environment.NewLine);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
return 0;
}
}
public static bool Ping_SyncCheck(string DestIP)
{
try
{
if (DestIP == null || DestIP.Trim().Length == 0) return false;
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "0123456789";
byte[] buffer = Encoding.ASCII.GetBytes(data);
PingReply reply = pingSender.Send(DestIP, 1000, buffer, options);
if (reply.Status == IPStatus.Success)
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
}
public Form1() //Form 함수
{
InitializeComponent(); //Form 초기화
iCosSocket = new IcosComm();
// iCos 통신클래스와 연동을 위한 딜리게이트 함수설정
iCosSocket.iCosResponse += new IcosComm.iCosCallback(CommResponse);
Timer_netStat(); //iCOS 네트워크 연결 확인 함수
}
private void Form1_Load(object sender, EventArgs e)
{
ProStopBtn.Enabled = false;
PointSetBtn.Enabled = false;
PointUnRegBtn.Enabled = false;
ProStartBtn.Enabled = false;
ProStopBtn.Enabled = false;
AllValueCheck_btn.Enabled = false;
RequestValue_btn.Enabled = false;
Shown += Form_Shown;
}
public void Timer_netStat() //iCOS 연결 상태 확인 쓰레드 동작 함수
{
timer_NetStat.Interval = 10 * 1000;
timer_NetStat.Elapsed += new ElapsedEventHandler(net_state_Thread);
timer_NetStat.Start();
}
string prevconnectstate = "";
string prevpingstate = "";
public void net_state_Thread(object sender, ElapsedEventArgs e) //iCOS 연결 상태 확인 쓰레드 함수
{
int nNet;
string strRet;
string connectstate = "";
try
{
if (Ping_SyncCheck(szICOS_IP) == true) // Ping 성공
{
nNet = Convert.ToInt32(iCosSocket.GetConnectionStatus(szICOS_ID));
strRet = nNet.ToString();
if (strRet == "1")
{
if (prevconnectstate == "ICOS Communication") // O->O
{
connectstate = "ICOS Communication";
}
else if (prevconnectstate == "ICOS Communication lost") //X -> O / ping onoff시
{
if (prevpingstate == "pingerror")
{
Wirte_state_Conn_iCos_Btn(Conn_iCos_Btn);
Wirte_Conn_iCos_Btn(Conn_iCos_Btn);
prevpingstate = "";
}
else
{
if (Enable_EnglishMode)//영어
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS Communication" + Environment.NewLine);
}
else//한글
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS 연결" + Environment.NewLine);
}
}
connectstate = "ICOS Communication";
Wirte_Net_Stat(connectstate);
}
else //시작
{
connectstate = "ICOS Communication";
Wirte_Net_Stat(connectstate);
}
}
else
{
if (prevconnectstate == "ICOS Communication") // O->X
{
Wirte_state_ProStartBtn(ProStartBtn);
Wirte_state_PointSetBtn(PointSetBtn);
Wirte_state_Conn_iCos_Btn(Conn_iCos_Btn);
connectstate = "ICOS Communication lost";
Wirte_Net_Stat(connectstate);
if (Enable_EnglishMode)//영어
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS Communication lost" + Environment.NewLine);
}
else//한글
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS 연결 실패" + Environment.NewLine);
}
}
else if (prevconnectstate == "ICOS Communication lost") //X->X
{
connectstate = "ICOS Communication lost";
}
else //시작
{
connectstate = "ICOS Communication lost";
Wirte_Net_Stat(connectstate);
if (Enable_EnglishMode)//영어
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS Communication lost" + Environment.NewLine);
}
else//한글
{
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS 연결 실패" + Environment.NewLine);
}
}
}
prevconnectstate = connectstate;
}
else // Ping 실패
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] ICOS Communication lost(Ping) Error" + Environment.NewLine);
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS Communication lost(Ping) Error" + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] ICOS 연결 실패(Ping) 오류" + Environment.NewLine);
Wirte_logtxt(Convert.ToString(DateTime.Now) + " ICOS 연결 실패(Ping) 오류" + Environment.NewLine);
}
connectstate = "ICOS Communication lost";
prevconnectstate = connectstate;
Wirte_Net_Stat(connectstate);
prevpingstate = "pingerror";
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] net_state_Thread Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] net_state_Thread Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] net_state_Thread 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] net_state_Thread 오류 : " + E + Environment.NewLine);
}
}
}
private delegate void myDelegate_button(Button btn);
private void Wirte_PointSetBtn(Button btn) ////관제점 재 등록
{
try
{
if (this.PointSetBtn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_PointSetBtn);
this.Invoke(d, btn);
}
else
{
this.PointSetBtn.PerformClick();
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_PointSetBtn Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_PointSetBtn Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_PointSetBtn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_PointSetBtn 오류 : " + E + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Wirte_Conn_iCos_Btn(Button btn) ////관제점 재 등록
{
try
{
if (this.Conn_iCos_Btn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_Conn_iCos_Btn);
this.Invoke(d, btn);
}
else
{
this.Conn_iCos_Btn.PerformClick();
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_Conn_iCos_Btn Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_Conn_iCos_Btn Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_Conn_iCos_Btn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_Conn_iCos_Btn 오류 : " + E + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Wirte_state_ProStartBtn(Button btn) //시작버튼 초기화
{
try
{
if (this.ProStartBtn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_state_ProStartBtn);
this.Invoke(d, btn);
}
else
{
this.ProStartBtn.Enabled = true;
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_state_ProStartBtn Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_state_ProStartBtn Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_state_ProStartBtn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_state_ProStartBtn 오류 : " + E + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Wirte_state_PointSetBtn(Button btn) //관제점 버튼 초기화
{
try
{
if (this.PointSetBtn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_state_PointSetBtn);
this.Invoke(d, btn);
}
else
{
this.PointSetBtn.Enabled = true;
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_state_PointSetBtn Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_state_PointSetBtn Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_state_PointSetBtn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_state_PointSetBtn 오류 : " + E + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Wirte_state_Conn_iCos_Btn(Button btn) //ICOS 연결 버튼 초기화
{
try
{
if (this.Conn_iCos_Btn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_state_Conn_iCos_Btn);
this.Invoke(d, btn);
}
else
{
this.Conn_iCos_Btn.Enabled = true;
}
}
catch (Exception E)
{
LFC.Log("[Form] Wirte_state_Conn_iCos_Btn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_state_Conn_iCos_Btn 오류 : " + E + Environment.NewLine);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Wirte_ProStopBtn(Button btn) //ICOS 연결 버튼 초기화
{
try
{
if (this.ProStopBtn.InvokeRequired)
{
myDelegate_button d = new myDelegate_button(Wirte_ProStopBtn);
this.Invoke(d, btn);
}
else
{
this.ProStopBtn.PerformClick();
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_ProStopBtn Error : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_ProStopBtn Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_ProStopBtn 오류 : " + E + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " [Form] Wirte_ProStopBtn 오류 : " + E + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private delegate void myDelegate_error(string theValue);
private void Wirte_logtxt(string theValue) //통신상태 변화 Form text box에 적용 함수
{
try
{
if (this.LogTxt.InvokeRequired)
{
myDelegate_error d = new myDelegate_error(Wirte_logtxt);
this.Invoke(d, new object[] { theValue });
}
else
{
this.LogTxt.AppendText(theValue);
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_logtxt Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_logtxt 오류 : " + E + Environment.NewLine);
}
}
}
private delegate void myDelegate_state(string theValue);
private void Wirte_Net_Stat(string theValue) //통신상태 변화 Form text box에 적용 함수
{
try
{
if (this.Net_Stat.InvokeRequired)
{
myDelegate_state d = new myDelegate_state(Wirte_Net_Stat);
this.Invoke(d, new object[] { theValue });
}
else
{
this.Net_Stat.Text = theValue;
}
}
catch (Exception E)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("[Form] Wirte_Net_Stat Error : " + E + Environment.NewLine);
}
else//한글
{
LFC.Log("[Form] Wirte_Net_Stat 오류 : " + E + Environment.NewLine);
}
}
}
private void Form_Shown(object sender, EventArgs e) //Form 나타날때, 동작 함수
{
string ReturnValue = iCos4Connect();
if (ReturnValue == "SUCCESS")
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Successful iCOS connection");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Successful iCOS connection" + Environment.NewLine);
}
else//한글
{
LFC.Log("iCOS 접속 성공");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS 접속 성공" + Environment.NewLine);
}
EndTxt.Clear();
StartTxt.Text = Convert.ToString(DateTime.Now);
Conn_iCos_Btn.Enabled = false;
ProStartBtn.Enabled = false;
ProStopBtn.Enabled = true;
PointSetBtn.Enabled = true;
PointUnRegBtn.Enabled = false;
FileSettingBtn.Enabled = false;
FileMatchBtn.Enabled = false;
FileExpBtn.Enabled = false;
//PointSetBtn.PerformClick();
}
else
{
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS connection failed" + Environment.NewLine);
LFC.Log("iCOS connection failed" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS 접속 실패" + Environment.NewLine);
LFC.Log("iCOS 접속 실패" + Environment.NewLine);
}
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
public void ProStartBtn_Click(object sender, EventArgs e) //시작 버튼 클릭 함수
{
int nNet = Convert.ToInt32(iCosSocket.GetConnectionStatus(szICOS_ID));
string strRet = nNet.ToString();
if (strRet == "1")
{
//FolderBrowserDialog();
//if (toolStripStatusLabel1.Text != "")
//{
try
{
FirstCheck FC = new FirstCheck();
string returnvalue = FC.Check_DailyData(); // Hour, Daily 테이블 삽입 및 업데이트
if (returnvalue == "error")
{
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Program DB connection error" + Environment.NewLine);
LFC.Log("[Form] Program DB connection error" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 프로그램 DB 접속 오류" + Environment.NewLine);
LFC.Log("[Form] 프로그램 DB 접속 오류" + Environment.NewLine);
}
return;
}
EndTxt.Clear();
StartTxt.Text = Convert.ToString(DateTime.Now);
ProStartBtn.Enabled = false; // 시작버튼 비활성화.
ProStopBtn.Enabled = true;
FileSettingBtn.Enabled = false;
FileMatchBtn.Enabled = false;
FileExpBtn.Enabled = false;
AllValueCheck_btn.Enabled = true;
RequestValue_btn.Enabled = true;
OneMinute_Insert OMI = new OneMinute_Insert();
OMI.Today_PeakMinMax();
OMI.Year_PeakMinMax();
MTT.timer2start();
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Start DGW operation" + Environment.NewLine);
LFC.Log("[Form] Start DGW operation" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " DGW 작동 시작" + Environment.NewLine);
LFC.Log("[Form] DGW 작동 시작" + Environment.NewLine);
}
}
catch (Exception eProStart)
{
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Program DB connection error" + Environment.NewLine);
LFC.Log("[Form] Program DB connection error" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 프로그램 DB 접속 오류 : " + eProStart + Environment.NewLine);
LFC.Log("[Form] 프로그램 DB 접속 오류 : " + eProStart + Environment.NewLine);
}
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Not connected to ICOS" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Not connected to ICOS" + Environment.NewLine);
}
else//한글
{
LFC.Log("ICOS와 연결 되지 않았습니다." + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " ICOS와 연결 되지 않았습니다." + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void ProStopBtn_Click(object sender, EventArgs e) //스탑 버튼 클릭 함수
{
try
{
ProStartBtn.Enabled = true;
ProStopBtn.Enabled = false;
FileSettingBtn.Enabled = true;
FileMatchBtn.Enabled = true;
FileExpBtn.Enabled = true;
EndTxt.Text = Convert.ToString(DateTime.Now);
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Abort the program" + Environment.NewLine);
LFC.Log("Abort the program" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 프로그램 중단" + Environment.NewLine);
LFC.Log("프로그램 중단" + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
MTT.timer2Stop();
}
catch (Exception ex)
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Program interruption error : " + ex + Environment.NewLine);
}
else//한글
{
LFC.Log("프로그램 중단 오류 : " + ex + Environment.NewLine);
}
}
}
private void ProSetBtn_Click(object sender, EventArgs e) //접속 설정 클릭 함수
{
SettingForm SF = new SettingForm();
SF.Text = (Enable_EnglishMode ? "setup" : "설정");
SF.label11.Text = (Enable_EnglishMode ? "BEMS database" : "BEMS 데이타베이스");
SF.label12.Text = (Enable_EnglishMode ? "MMI connect" : "MMI 접속");
SF.label9.Text = (Enable_EnglishMode ? "Air conditioning period" : "냉방기간");
SF.label16.Text = (Enable_EnglishMode ? "Heating period" : "난방기간");
SF.SettingFormSave.Text = (Enable_EnglishMode ? "Save" : "저장");
SF.SettingFormExit.Text = (Enable_EnglishMode ? "Close" : "닫기");
SF.ShowDialog();
}
private void ProPathBtn_Click(object sender, EventArgs e)//프로젝트 설정 클릭 함수
{
System.Diagnostics.Process.Start("explorer.exe", Environment.CurrentDirectory);
}
///
/// 셋팅파일 불러오기 버튼
///
///
///
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")))
{
if (Enable_EnglishMode)//영어
{
MessageBox.Show("File not found");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " File not found" + Environment.NewLine);
LFC.Log("File not found : " + Environment.NewLine);
}
else//한글
{
MessageBox.Show("파일을 찾을 수 없음");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 파일을 찾을 수 없음" + Environment.NewLine);
LFC.Log("파일을 찾을 수 없음 : " + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
public void FolderBrowserDialog()
{
toolStripStatusLabel1.Text = Environment.CurrentDirectory;
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Routing complete" + Environment.NewLine);
LogTxt.AppendText(toolStripStatusLabel1 + Environment.NewLine);
LFC.Log("Routing complete : " + toolStripStatusLabel1 + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 경로 설정 완료" + Environment.NewLine);
LogTxt.AppendText(toolStripStatusLabel1 + Environment.NewLine);
LFC.Log("경로 설정 완료 : " + toolStripStatusLabel1 + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
private void EraseLog_Click(object sender, EventArgs e) // 로그 박스에 로그 기록 삭제 함수
{
LogTxt.Clear();
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
private void Form_FormClosing(object sender, FormClosingEventArgs e)// 프로그램 종료 이벤트
{
if (MessageBox.Show((Enable_EnglishMode ? "Do you want to exit the program?" : "프로그램을 종료하시겠습니까?"), (Enable_EnglishMode ? "End" : "종료"), MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (MTT.timer2 != null)
MTT.timer2Stop();
Application.ExitThread();
for (int i = 0; i < 1000000; i++) {; }
// 프로세스 종료
Application.Exit();
// 프로세스가 남아있다면 최종 종료 (2개의 프로젝트가 공존하고 Application.ProductName 값이 2개다
System.Diagnostics.Process[] mProcess = System.Diagnostics.Process.GetProcessesByName(Application.ProductName);
foreach (System.Diagnostics.Process p in mProcess)
p.Kill();
if (Enable_EnglishMode)//영어
{
LFC.Log("The program has been terminated by the user." + Environment.NewLine);
}
else//한글
{
LFC.Log("사용자에 의해 프로그램이 종료되었습니다." + Environment.NewLine);
}
// 최종 정리 (보완코드 : 크로스 스레드 문제 발생 여지가 있으므로 사용주의)
Environment.Exit(0);
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Program termination canceled by user.");
}
else//한글
{
LFC.Log("사용자에 의해 프로그램 종료가 취소되었습니다.");
}
e.Cancel = true;
return;
}
}
private void PointSetBtn_Click(object sender, EventArgs e) //관제점 등록 함수
{
int nNet = Convert.ToInt32(iCosSocket.GetConnectionStatus(szICOS_ID));
string strRet = nNet.ToString();
if (strRet == "1")
{
ReadTag(); //관제점 등록
Conn_iCos_Btn.Enabled = false;
AllValueCheck_btn.Enabled = true;
RequestValue_btn.Enabled = true;
ProStartBtn.Enabled = true;
PointUnRegBtn.Enabled = true;
PointSetBtn.Enabled = false;
ProStartBtn.PerformClick();
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Not connected to ICOS." + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Not connected to ICOS." + Environment.NewLine);
}
else//한글
{
LFC.Log("ICOS와 연결 되지 않았습니다." + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " ICOS와 연결 되지 않았습니다." + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Conn_iCos_Btn_Click(object sender, EventArgs e) //iCOS 연결 클릭 함수
{
string ReturnValue = iCos4Connect(); //iCOS 연결
if (ReturnValue == "SUCCESS")
{
StartTxt.Text = Convert.ToString(DateTime.Now);
EndTxt.Clear();
Conn_iCos_Btn.Enabled = false;
ProStartBtn.Enabled = false;
ProStopBtn.Enabled = true;
PointSetBtn.Enabled = true;
PointUnRegBtn.Enabled = true;
//PointSetBtn.PerformClick();
if (Enable_EnglishMode)//영어
{
LFC.Log("Successful iCOS connection" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Successful iCOS connection" + Environment.NewLine);
}
else//한글
{
LFC.Log("iCOS 접속 성공" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS 접속 성공" + Environment.NewLine);
}
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("iCOS connection failed" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS connection failed" + Environment.NewLine);
}
else//한글
{
LFC.Log("iCOS 접속 실패" + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " iCOS 접속 실패" + Environment.NewLine);
}
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
private void PointUnRegBtn_Click(object sender, EventArgs e) //관제점 해제 클릭 함수
{
int nNet = Convert.ToInt32(iCosSocket.GetConnectionStatus(szICOS_ID));
string strRet = nNet.ToString();
if (strRet == "1")
{
int i = UnReg(); //관제점 해제
if (i == 1)
{
PointUnRegBtn.Enabled = false;
AllValueCheck_btn.Enabled = false;
RequestValue_btn.Enabled = false;
ProStartBtn.Enabled = false;
PointSetBtn.Enabled = true;
ProStopBtn.PerformClick();
}
else
{
PointUnRegBtn.Enabled = true;
}
}
else
{
if (Enable_EnglishMode)//영어
{
LFC.Log("Not connected to ICOS." + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Not connected to ICOS." + Environment.NewLine);
}
else//한글
{
LFC.Log("ICOS와 연결 되지 않았습니다." + Environment.NewLine);
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " ICOS와 연결 되지 않았습니다." + Environment.NewLine);
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
private void Btn_TagSetFile_Click(object sender, EventArgs e) //TagSetFile 클릭 함수, TagSetFile 파일 생성
{
Creating_Setting_File CSF = new Creating_Setting_File();
CSF.Create_Point_File();
}
private void Btn_SettingFile_Click(object sender, EventArgs e)//SettingFile 클릭 함수, SettingFile 파일 생성
{
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);
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText("*** current time : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
LFC.Log("*** current time : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText("*** 현재 시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
LFC.Log("*** 현재 시간 : " + 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명.
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText('"' + tmp[1] + '"' + " value : " + iCosSocket.IcosGetTagValue(tmp[1]) + Environment.NewLine);
LFC.Log('"' + tmp[1] + '"' + " value : " + iCosSocket.IcosGetTagValue(tmp[1]));
}
else//한글
{
LogTxt.AppendText('"' + tmp[1] + '"' + " 의 값 : " + iCosSocket.IcosGetTagValue(tmp[1]) + Environment.NewLine);
LFC.Log('"' + tmp[1] + '"' + " 의 값 : " + iCosSocket.IcosGetTagValue(tmp[1]));
}
}
LogTxt.AppendText("**********************************" + Environment.NewLine);
LFC.Log("**********************************" + Environment.NewLine);
}
catch (Exception er)
{
if (Enable_EnglishMode)//영어
{
MessageBox.Show("Error occurred");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Error occurred : " + er);
LFC.Log("Error occurred = " + er);
}
else//한글
{
MessageBox.Show("오류 발생");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 오류 발생 : " + er);
LFC.Log("오류 발생 = " + er);
}
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
private void RequestValue_btn_Click(object sender, EventArgs e) //특정 값 출력 함수
{
if (RequestValue.Text != "")
{
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText("*** current time : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
LFC.Log("*** current time : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText("*** 현재 시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
LFC.Log("*** 현재 시간 : " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " ***" + Environment.NewLine);
}
try
{
string tmp = RequestValue.Text; //태그값
if (Enable_EnglishMode)//영어
{
LogTxt.AppendText('"' + tmp + '"' + " value : " + iCosSocket.IcosGetTagValue(tmp) + Environment.NewLine);
LFC.Log(tmp + " value : " + iCosSocket.IcosGetTagValue(tmp) + Environment.NewLine);
}
else//한글
{
LogTxt.AppendText('"' + tmp + '"' + " 의 값 : " + iCosSocket.IcosGetTagValue(tmp) + Environment.NewLine);
LFC.Log(tmp + " 의 값 : " + iCosSocket.IcosGetTagValue(tmp) + Environment.NewLine);
}
LogTxt.AppendText("**********************************" + Environment.NewLine);
LFC.Log("**********************************" + Environment.NewLine);
}
catch (Exception er)
{
if (Enable_EnglishMode)//영어
{
MessageBox.Show("Error occurred");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " Error occurred : " + er);
LFC.Log("Error occurred : " + er);
}
else//한글
{
MessageBox.Show("오류 발생");
LogTxt.AppendText(Convert.ToString(DateTime.Now) + " 오류 발생 : " + er);
LFC.Log("오류 발생 : " + er);
}
}
}
else
{
if (Enable_EnglishMode)//영어
{
MessageBox.Show("No confirmation value.");
}
else//한글
{
MessageBox.Show("확인 값이 없습니다.");
}
return;
}
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
private void RequestValue_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 8) //백스페이스할때, 데이터 삭제
{
if (RequestValue.Text.Length != 0)
{
RequestValue.Text = RequestValue.Text.Substring(0, RequestValue.Text.Length - 1);
RequestValue.Select(RequestValue.Text.Length, 0);
e.Handled = true;
}
else
{
e.Handled = true;
}
}
else
{
RequestValue.Select(RequestValue.Text.Length, 0); //현재 데이터 뒤로 포커스 이동
}
}
private void RequestValue_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.Control && e.KeyCode == Keys.A) //Ctrl + A 동작
{
((TextBox)sender).SelectAll();
}
if (e.Control && e.KeyCode == Keys.C) //Ctrl + C 동작
{
((TextBox)sender).Copy();
}
if (e.Control && e.KeyCode == Keys.V) //Ctrl + V 동작
{
((TextBox)sender).Paste();
}
if (e.Control && e.KeyCode == Keys.X) //Ctrl + X 동작
{
((TextBox)sender).Cut();
}
}
private void LogTxt_TextChanged(object sender, EventArgs e)
{
if (LogTxt.Lines.Length >= 5000)
{
LogTxt.Clear();
LogTxt.Select(LogTxt.Text.Length, 0);
LogTxt.ScrollToCaret();
}
}
}
}