博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取websocket数据,C#小窗口程序,FTP上传,一切皆配置
阅读量:7091 次
发布时间:2019-06-28

本文共 27183 字,大约阅读时间需要 90 分钟。

hot3.png

最近在做一个数据上传的C#程序,通过获取websocket数据,读取ini配置文件,依据相关文档完成数据上传。

ini配置文件展示

[煤矿代码]CS_MINE_CODE=411481B0012010000011[IP地址(KJ66的IP地址)]URL=192.168.100.23[备用IP地址]backupUrl=192.168.100.231[端口号]PORT=9999[文件时间间隔]intervalTime=12fiveMinuter=300[文件目录]fileReserve=E:\mine\templatefileReserveBuffer=E:\mine\template\buffer[ftp]ftpurl=192.168.100.19:31file=lxxusername=guorpassword=123[备用IP地址]backupUrl=192.168.100.23

界面展示

一切皆配置

[{	"resource":"FTP",	"separator":",",    "isNeed":"0"},{	"resource":"DEV",	"filename": "devcgq",	"fields":[1,3,2,4,5,6,7,8,9,10,11,12,13],	"separator":",",	"filter":"([15]==0)&&([12]==1)",	"isNeed":"1"},{	"resource":"RTDATA",	"filename": "ssdata",	"fields":[1,2,3],	"separator":",",	"filter":"([15]==0)&&([12]==1)",	"isNeed":"1"}]

配置文件中数字含义

[dev]1=分站编号2=传感器编号3=工作面编号4=安装地点5=传感器名称6=传感器类型代码7=单位8=量程下限9=量程上限10=报警下限11=报警上限12=断电值13=复电值14=断电区域[rtdata]1=传感器编号2=实时测量值3=测点状态

程序源码

/* * Created by SharpDevelop. * User: Administrator * Date: 2018/9/27 星期四 * Time: 8:49 *  * To change this template use Tools | Options | Coding | Edit Standard Headers. */using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Text;using System.Windows.Forms;using Newtonsoft.Json.Linq;using WebSocket4Net;namespace DataUploadTemplate{	public partial class MainForm : Form{		public MainForm(){			//The InitializeComponent() call is required for Windows Forms designer support.			InitializeComponent();			iniReader();			InitUI();			if(isFTP().Equals("0")){				setFtpEnabled();			}			//首先判断列表框中的项是否大于0			if(logReveal.Items.Count > 0){				//清空所有项				logReveal.Items.Clear();			}		}				//读取ini配置文件-----------------------------begin-------------------------------------------------------		//基本信息		MainForm configIni = null;		//状态		MainForm stateIni = null;		//延展状态		MainForm exstateIni = null;		//传感器名称代码		MainForm transducerIni = null;		//传感器类型的代码		MainForm transducer_name_codeIni = null;		//生成文件		MainForm templateIni = null;		//文件字段		MainForm generateFileIni = null;		//工作面类型		MainForm workface_typeIni = null;		//测点名称		MainForm station_nameIni = null;		//传感器类型		MainForm typeIni = null;		//开关量IO类型		MainForm switch_io_dIni = null;		//控制量IO类型		MainForm switch_io_cIni = null;		//传感器类型编码表		MainForm transducer_typeIni = null;		//煤矿名称		string cs_mine_code = "";		//存储路径		string file_name_save = "";		//读取INI配置文件		void iniReader(){			//基本信息			configIni = new MainForm("./config.ini");			//状态			stateIni = new MainForm("./state.ini");			//延展状态			exstateIni = new MainForm("./exstate.ini");			//传感器名称代码			transducerIni = new MainForm("./transducer.ini");			//传感器类型的代码			transducer_name_codeIni = new MainForm("./transducer_name_code.ini");			//生成文件			templateIni = new MainForm("./template.ini");			//文件字段			generateFileIni = new MainForm("./generateFile.ini");			//工作面类型			workface_typeIni = new MainForm("./workface_type.ini");			//测点名称			station_nameIni = new MainForm("./station_name.ini");			//传感器类型			typeIni = new MainForm("./type.ini");			//开关量IO类型			switch_io_dIni = new MainForm("./switch_io_d.ini");			//控制量IO类型			switch_io_cIni = new MainForm("./switch_io_c.ini");			//传感器类型编码表			transducer_typeIni = new MainForm("./transducer_type.ini");			//煤矿名称			cs_mine_code = configIni.ReadValue("煤矿代码","CS_MINE_CODE");			//存储路径			file_name_save = configIni.ReadValue("文件目录","fileReserve");		}				//读取ini文件		// 声明INI文件的写操作函数 WritePrivateProfileString()		[System.Runtime.InteropServices.DllImport("kernel32")]		static extern long WritePrivateProfileString(string section, string key, string val, string filePath);		// 声明INI文件的读操作函数 GetPrivateProfileString()		[System.Runtime.InteropServices.DllImport("kernel32")]		static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);		string sPath = null;		public MainForm(string path){			this.sPath = path;		}				string ReadValue(string section, string key){			// 每次从ini中读取多少字节			System.Text.StringBuilder temp = new System.Text.StringBuilder(255);			// section=配置节,key=键名,temp=上面,path=路径			GetPrivateProfileString(section, key, "", temp, 255, sPath);			return temp.ToString();		}				//congig.ini路径		static string INIFileName =Path.Combine(Directory.GetCurrentDirectory(), "config.ini");		//写入ini文件		void WriteValue(string SECTION,string key, string value){			if (!File.Exists(INIFileName)){				FileStream fs = new FileStream(INIFileName, FileMode.OpenOrCreate);			}			WritePrivateProfileString(SECTION, key, value, INIFileName);			return;		}				//-----------------------------------连接websocket----------------------------------------------		void websocket_MessageReceived(object sender, MessageReceivedEventArgs e){			MessageReceivedEventArgs responseMsg = (MessageReceivedEventArgs)e; //接收服务端发来的消息			string strMsg = responseMsg.Message;			recieveMessage(strMsg);		}				Boolean websocketConn = true;		void websocket_Closed(object sender, EventArgs e){			if(websocketConn){				Log("websocekt connect fail!启用备用IP!");				connectWebsocketBackup();			}else{				Log("websocekt connect fail! 请确认KJ66 IP地址的准确性!");				websocketConn = false;			}		}		void websocket_Opened(object sender, EventArgs e){			Log("websocket_Opened");		}				//websocket连接		void connectWebsocket(){			string url = configIni.ReadValue("IP地址(KJ66的IP地址)","URL");			string port = configIni.ReadValue("端口号","PORT");			websocket = new WebSocket("ws://"+url+":"+port);			websocket.Opened += websocket_Opened;			websocket.Closed += websocket_Closed;			websocket.MessageReceived += websocket_MessageReceived;			websocket.Open();		}				//备用websocket连接		private void connectWebsocketBackup(){			string url = configIni.ReadValue("备用IP地址","backupUrl");			string port = configIni.ReadValue("端口号","PORT");			websocket = new WebSocket("ws://"+url+":"+port);			websocket.Opened += websocket_Opened;			websocket.Closed += websocket_Closed;			websocket.MessageReceived += websocket_MessageReceived;			websocket.Open();			websocketConn = false;		}				//------------------------------------接收websocket数据-------------------------------------------		//测点定义		string CMD101 = "";		//控制定义		string CMD102 = "";		//区域定义		string CMD103 = "";		//工作面定义		string CMD104 = "";		//位置定义		string CMD105 = "";		//增量数据		string CMD106 = "";				//测试状态测点集合		string[] strArray = new string[2048];		int strI = 0;		WebSocket websocket = null;		List
listFiveMinuter = new List
(); Boolean bFiveMinute = false; long lLastTimeFiveMinute = 0; Boolean bStart30 = false; long lLastTime30 = 0; //修改标志 int editSign = 0; void recieveMessage(string jsonText){ var obj = JObject.Parse(jsonText); var id = obj["CMD_ID"].ToString(); switch (id) { case "101": CMD101 = jsonText; editSign = 1; break; case "102": CMD102 = jsonText; break; case "103": CMD103 = jsonText; break; case "104": CMD104 = jsonText; break; case "105": CMD105 = jsonText; break; case "106": CMD106 = jsonText; break; default: break; } //根据类型不同分别创建XML文件 if(!CMD101.Equals("")&&!CMD102.Equals("")&&!CMD103.Equals("")&&!CMD104.Equals("")&&!CMD105.Equals("")&&!CMD106.Equals("")){ //获取数据生成时间 string cs_data_time = getCurrentTime(); try{ //接收数据并存入本地hashtable //测点定义数据 InitCMD101(cs_data_time); //控制定义 InitCMD102(); //分站数据 InitCMD101_fz(); getValueByIndex(); }catch(Exception e){ Log(e.Message); } CMD102 = ""; CMD103 = ""; CMD104 = ""; CMD105 = ""; } if(!CMD101.Equals("")&&!CMD106.Equals("")){ try{ InitCMD106(); listFiveMinuter.Add(CMD106); string cs_data_time = getCurrentTime(); //全量数据hash化 InitCMD_all(); //生成实时状态下的所需文件 getValueBySSSJ(); //存储模拟量测点值对应时间 getTimeJktjsj(cs_data_time); }catch(Exception e){ Log(e.Message); } } long lCurrentTime30 = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; if(!bStart30){ lLastTime30 = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; bStart30 = true; } if(bStart30 && ((lCurrentTime30-lLastTime30)>=long.Parse(configIni.ReadValue("文件时间间隔","intervalTime")))){ lLastTime30 = lCurrentTime30; try{ //何岗煤矿传感器全局定时显示(模拟量显示、开关量显示、实时数据) getValueByAllAnalogDisplay(); }catch(Exception e){ Log(e.Message); } } //等待五分钟执行监测文件 long lCurrentTime = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; if(!bFiveMinute){ lLastTimeFiveMinute = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; bFiveMinute = true; } if(bFiveMinute && ((lCurrentTime-lLastTimeFiveMinute)>=long.Parse(configIni.ReadValue("文件时间间隔","fiveMinuter")))){ lLastTimeFiveMinute = lCurrentTime; try{ //统计数据文件 getValueByIndexFive(); }catch(Exception e){ Log(e.Message); } } } //获取配置文件中-基本定义文件 void getValueByIndex(){ //读取generateFile.txt文件内容 JArray array = readGenerateFile(); string fileName = ""; foreach (JObject items in array){ string resource = items["resource"].ToString(); string separator = items["separator"].ToString(); string isNeed = items["isNeed"].ToString(); if(isNeed.Equals("0")){ continue; } switch (resource){ case "DEV": string devFields = items["fields"].ToString(); fileName = items["filename"].ToString(); //测点信息数据文件 createDev(devFields,separator,fileName); break; case "控制关系定义": string fields102 = items["fields"].ToString(); fileName = items["filename"].ToString(); createCdkzgx(fields102,separator,fileName); break; case "分站定义": string fzxxFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createFzxx(fzxxFields,separator,fileName); break; case "工作面定义": string gzmxxFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createGzmxx(gzmxxFields,separator,fileName); break; case "模拟量初始化": string AQMCFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createAQMC(AQMCFields,separator,fileName); break; case "开关量初始化": string AQKCFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createAQKC(AQKCFields,separator,fileName); break; case "传感器描述文件": string fields = items["fields"].ToString(); var obj = JObject.Parse(fields); string CDDYFields_A = obj["A"].ToString(); string CDDYFields_D = obj["D"].ToString(); string CDDYFields_C = obj["C"].ToString(); fileName = items["filename"].ToString(); string CDDY_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo()); string CDDY_filePath = cs_mine_code+"_"+fileName+"_"+CDDY_time; createCDDY(CDDYFields_D,CDDYFields_A,separator,CDDY_filePath); break; default: break; } } } //获取配置文件中-实时状态文件 void getValueBySSSJ(){ //读取generateFile.txt文件内容 JArray array = readGenerateFile(); string fileName = ""; foreach (JObject items in array){ string resource = items["resource"].ToString(); string separator = items["separator"].ToString(); string isNeed = items["isNeed"].ToString(); if(isNeed.Equals("0")){ continue; } switch (resource){ case "RTDATA": string rtdataFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createRtdata(rtdataFields,separator,fileName); break; case "开关量状态变化": string AQKDFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createAQKD(AQKDFields,separator,fileName); break; default: break; } } } //获取配置文件中-分钟累计文件 void getValueByIndexFive(){ string cs_data_time = getCurrentTime(); //读取generateFile.txt文件内容 JArray array = readGenerateFile(); string fileName = ""; foreach (JObject items in array){ string resource = items["resource"].ToString(); string separator = items["separator"].ToString(); string isNeed = items["isNeed"].ToString(); if(isNeed.Equals("0")){ continue; } switch (resource){ case "五分钟统计文件": string fiveMinuFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createJktjsj_list(fiveMinuFields,separator,fileName); break; default: break; } } } //-------------------------------------------何岗煤矿传感器全局定时显示--------------------------- void getValueByAllAnalogDisplay(){ //读取generateFile.txt文件内容 JArray array = readGenerateFile(); string fileName = ""; foreach (JObject items in array){ string resource = items["resource"].ToString(); string separator = items["separator"].ToString(); string isNeed = items["isNeed"].ToString(); if(isNeed.Equals("0")){ continue; } switch (resource){ case "模拟量显示": string analogDisplayFields = items["fields"].ToString(); fileName = items["filename"].ToString(); //何岗煤矿全局模拟量定时显示 createAnalogDisplay(analogDisplayFields,separator,fileName); break; case "开关量显示": string switchDisplayFields = items["fields"].ToString(); fileName = items["filename"].ToString(); //何岗煤矿全局开关量定时显示 createSwitchDisplay(switchDisplayFields,separator,fileName); break; case "实时数据": string AQSSFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createAQSS(AQSSFields,separator,fileName); break; case "实时数据文件": string SSSJFields = items["fields"].ToString(); fileName = items["filename"].ToString(); createSSSJ(SSSJFields,separator,fileName); break; } } } //何岗煤矿全局开关量定时显示 void createSwitchDisplay(string switchDisplayFields,string separator,string fileName){ int sum = 0; string rowStr = ""; string[] fields = switchDisplayFields.Split(','); foreach (string key in CMD_all_Hash.Keys){ if (key.Contains("C")||key.Contains("D")){ //数值、状态、延展状态、名称、安装地点、分站编号、传感器编号、时间 string[] data = (string[])CMD_all_Hash[key]; //类型 int ss_transducer_type = 0; //io类型 string ss_transducer_type_io = ""; //状态 string ss_transducer_value = ""; if(key.Contains("D")){ //类型 ss_transducer_type = 1; //io类型 ss_transducer_type_io = switch_io_dIni.ReadValue("开关量输入I/0类型",data[3]); //状态 ss_transducer_value = getState(data[2],"D"); }else if(key.Contains("C")){ //类型 ss_transducer_type = 2; //io类型 ss_transducer_type_io = switch_io_cIni.ReadValue("开关量控制输出I/O类型",data[3]); //状态 ss_transducer_value = getState(data[2],"C"); } for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
m_str = new List
(); foreach (string key in CMD101_Hash.Keys){ if(key.Contains("D")){ string[] data = (string[])CMD101_Hash[key]; string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[41]); for(int i=0;i
m_str = new List
(); foreach (string key in CMD101_Hash.Keys){ if(key.Contains("A")){ string[] data = (string[])CMD101_Hash[key]; string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[41]); for(int i=0;i
m_strA = new List
(); foreach(string key in CMD101_Hash.Keys){ if(key.Contains("A")){ //测试状态的过滤 string[] data = (string[])CMD101_Hash[key]; if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){ continue; } for(int i=0;i
m_strD = new List
(); foreach(string key in CMD101_Hash.Keys){ if(key.Contains("D")){ string[] data = (string[])CMD101_Hash[key]; if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){ continue; } for(int i=0;i
m_strC = new List
(); foreach(string key in CMD101_Hash.Keys){ if(key.Contains("C")){ string[] data = (string[])CMD101_Hash[key]; if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){ continue; } for(int i=0;i
list = new List
(); List
list_state = new List
(); string cs_data_time = getCurrentTime(); //定义数据列表 foreach(string key in CMD101_Hash.Keys){ if(key.Contains("A")){ string[] data = (string[])CMD101_Hash[key]; //过滤测试测点 if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){ continue; } //传感器编号+数值 string strs = key+","+data[46]; string stateStr = key+","+data[44]+","+data[45]; list.Add(strs); list_state.Add(stateStr); } } //增量数据106的数值、状态集合 foreach (string jsonList in listFiveMinuter){ JObject obj = JObject.Parse(jsonList); int nLen = obj["CONTENT"].ToString().Trim().Length; if(nLen>0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
list = (List
)key_avg_Hash[key]; string[] data = (string[])CMD101_Hash[key]; //工作状态 string ss_transducer_state = ""; //状态 int state = 0; List
list_state = (List
)key_state_Hash[key]; for(int i = 0;i
list_exstate = (List
)key_exstate_Hash[key]; for(int i = 0;i
m_str = new List
(); //全量数据 foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("A")){ string[] data = (string[])CMD_all_Hash[key]; string[] data101 = (string[])CMD101_Hash[key]; for(int i=0;i
m_str = new List
(); foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("D")){ string[] data = (string[])CMD_all_Hash[key]; string[] data101 = (string[])CMD101_Hash[key]; for(int i=0;i
m_str = new List
(); foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("C")){ string[] data = (string[])CMD_all_Hash[key]; string[] data101 = (string[])CMD101_Hash[key]; for(int i=0;i
m_str = new List
(); //全量数据 foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("A")){ string[] data = (string[])CMD_all_Hash[key]; string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[3]); for(int i=0;i
m_str = new List
(); foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("D")){ //数值、状态、延展状态、名称、安装地点、分站编号、传感器编号、时间 string[] data = (string[])CMD_all_Hash[key]; string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[3]); for(int i=0;i
m_str = new List
(); foreach(string key in CMD_all_Hash.Keys){ if(key.Contains("C")){ string[] data = (string[])CMD_all_Hash[key]; string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[3]); for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content106 = (JArray)obj106["CONTENT"]; for(int i=0;i
list){ key_val_Hash.Clear(); foreach(string list_value in list){ string[] sArray=list_value.Split(',') ; //传感器编号 string key = sArray[0]; //数值 string value = sArray[1]; if (!key_val_Hash.ContainsKey(key)) { List
list1 = new List
(); list1.Add(float.Parse(value)); key_val_Hash[key] = list1; }else { List
list1 = (List
)key_val_Hash[key]; list1.Add(float.Parse(value)); key_val_Hash[key] = list1; } } list = new List
(); } //求平均值 Hashtable key_avg_Hash = new Hashtable(); void getAvgMaxMin(){ key_avg_Hash.Clear(); foreach (string key in key_val_Hash.Keys){ List
list = (List
)key_val_Hash[key]; float sum = 0; foreach(float list_value in list){ sum += list_value; } List
list_val = new List
(); //平均值 float ss_analog_avgvalue = sum/list.Count; //最大值 float ss_analog_maxvalue = list.Max(); //最小值 float ss_analog_minvalue = list.Min(); list_val.Add(ss_analog_avgvalue); list_val.Add(ss_analog_maxvalue); list_val.Add(ss_analog_minvalue); key_avg_Hash.Add(key,list_val); } } //存储模拟量测点值对应时间 Hashtable getTime_Hash = new Hashtable(); void getTimeJktjsj(string time){ foreach(string key in CMD101_Hash.Keys){ if(key.Contains("A")){ string[] data = (string[])CMD101_Hash[key]; //测点操作状态 if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){ continue; } string code_value = key+formatToDouble(data[46]); getTime_Hash[code_value] = time; } } JObject obj = JObject.Parse(CMD106); int nLen = obj["CONTENT"].ToString().Trim().Length; if(nLen>0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
list_state){ key_state_Hash.Clear(); key_exstate_Hash.Clear(); foreach(string list in list_state){ string[] sArray=list.Split(',') ; string key = sArray[0]; string state = sArray[1]; string exstate = sArray[2]; if (!key_state_Hash.ContainsKey(key)) { List
list1 = new List
(); list1.Add(int.Parse(state)); key_state_Hash[key] = list1; } else { List
list1 = (List
)key_state_Hash[key]; list1.Add(int.Parse(state)); key_state_Hash[key] = list1; } if (!key_exstate_Hash.ContainsKey(key)) { List
list1 = new List
(); list1.Add(int.Parse(exstate)); key_exstate_Hash[key] = list1; } else { List
list1 = (List
)key_exstate_Hash[key]; list1.Add(int.Parse(exstate)); key_exstate_Hash[key] = list1; } } } //----------------------------------------------通用函数------------------------------------------------------------ //读取generateFile.txt文件内容 JArray readGenerateFile(){ StreamReader sr = new StreamReader("./generateFile.txt",Encoding.UTF8); StringBuilder builder = new StringBuilder(); string line; while ((line = sr.ReadLine()) != null){ builder.Append(line); } JArray array = JArray.Parse(builder.ToString()); return array; } //读取KJ66.txt配置文件,获取数据格式和单位 string getFormat(string name,string str){ StreamReader sr = new StreamReader("./kj66.txt",Encoding.GetEncoding("gb2312")); StringBuilder builder = new StringBuilder(); string line; while ((line = sr.ReadLine()) != null){ builder.Append(line); } JObject obj = JObject.Parse(builder.ToString()); JArray array = (JArray)obj["simulate"]; foreach (JObject items in array){ if(items["name"].ToString().Equals(name)){ if(str.Equals("format")){ return items[str].ToString(); } if(str.Equals("unit")){ return items[str].ToString(); } } } sr.Close(); return null; } //获取测点状态 string getState(string state,string type){ string ss_transducer_status = ""; int status = int.Parse(state); string hex = Convert.ToString(status,16); ss_transducer_status = stateIni.ReadValue("状态",type+"-"+hex); return ss_transducer_status; } //检测传感器状态 string[] bitChannel(int ctbit,int num){ string[] channel = new string[num]; for (int i = 0; i < channel.Length; i++){ if((ctbit&0x1)==1){ channel[i]="1"; }else{ channel[i]="0"; } ctbit = ctbit>>1; } return channel; } //区域定义(获取安装地点数据--区域) string[] getProperty_area(string str){ JObject obj = JObject.Parse(CMD103); int nLen = obj["CONTENT"].ToString().Trim().Length; if(nLen>0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
0){ JArray content = (JArray)obj["CONTENT"]; for(int i=0;i
" + ex.Message); } return ret; } //ftp具体文件上传 void fileFtpUpload(string rowStr,string fileSaveName,string fileName){ if(isFTP().Equals("1")){ string ret = ftpUpload(fileSaveName); if(ret.Equals("success")){ //上传缓存数据文件 ftpBufferFile(); Log(fileSaveName+"-"+fileName+"文件-ftp上传成功!"); }else{ Log(fileSaveName+"-"+fileName+"文件-ftp上传失败!"); ftp_boo = true; string time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo()); fileSaveName = configIni.ReadValue("文件目录","fileReserveBuffer")+"\\"+fileName+"文件"+time+".txt"; File.WriteAllText(@fileSaveName, rowStr, Encoding.GetEncoding("gb2312")); } } } //ftp上传缓存文件 void ftpBufferFile(){ if(ftp_boo){ string path = configIni.ReadValue("文件目录","fileReserveBuffer"); DirectoryInfo folder = new DirectoryInfo(path); foreach (FileInfo file in folder.GetFiles("*.txt")){ ftpUpload(file.FullName); if(ftp_buffer){ Log(path+"--ftp上传缓存成功!"); ftp_buffer = false; } } DeleteFolder(path); ftp_boo = false; } } //清空缓存中文件 void DeleteFolder(string dir){ foreach (string d in Directory.GetFileSystemEntries(dir)){ if (File.Exists(d)){ FileInfo fi = new FileInfo(d); if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1){ fi.Attributes = FileAttributes.Normal; } File.Delete(d);//直接删除其中的文件 }else{ DirectoryInfo d1 = new DirectoryInfo(d); if (d1.GetFiles().Length != 0){ DeleteFolder(d1.FullName);//递归删除子文件夹 } Directory.Delete(d); } } } //----------------------------------------窗口程序------------------------------------------------------ //输入框不可为空 int textIsNull(){ if (this.minecode.Text.Trim().Equals("")) { Log("煤矿代码不能为空"); this.minecode.Focus(); return 1; } if (this.url.Text.Trim().Equals("")) { Log("IP地址不能为空"); this.url.Focus(); return 1; } if (this.backupUrl.Text.Trim().Equals("")) { Log("备用IP地址不能为空"); this.backupUrl.Focus(); return 1; } if (this.port.Text.Trim().Equals("")) { Log("端口号不能为空"); this.port.Focus(); return 1; } if (this.intervalTime.Text.Trim().Equals("")) { Log("时间间隔不能为空"); this.intervalTime.Focus(); return 1; } return 0; } void SaveBtnClick(object sender, EventArgs e){ int isNull = textIsNull(); //生成config.ini文件 generateIni(); //读取ini配置文件 iniReader(); if(isNull==0){ //输入框置不可选 setEnabled(); setFtpEnabled(); //获取KJ66数据 connectWebsocket(); Log("保存成功!"); Log("websocket connecting..."); } } void FileReserveBtnClick(object sender, EventArgs e){ FolderBrowserDialog path = new FolderBrowserDialog(); path.ShowDialog(); this.fileReserve.Text = path.SelectedPath; } void FileReserveBufferBtnClick(object sender, EventArgs e){ FolderBrowserDialog path = new FolderBrowserDialog(); path.ShowDialog(); this.fileReserveBuffer.Text = path.SelectedPath; } //生成config.ini文件 void generateIni(){ WriteValue("煤矿代码","CS_MINE_CODE", this.minecode.Text); WriteValue("IP地址(KJ66的IP地址)","URL", this.url.Text); WriteValue("备用IP地址","backupUrl", this.backupUrl.Text); WriteValue("端口号","PORT", this.port.Text); WriteValue("文件时间间隔","intervalTime", this.intervalTime.Text); WriteValue("文件目录","fileReserve", this.fileReserve.Text); WriteValue("ftp","ftpurl", this.ftpurl.Text); WriteValue("ftp","file", this.ftpfile.Text); WriteValue("ftp","username", this.ftpusername.Text); WriteValue("ftp","password", this.ftppassword1.Text); WriteValue("文件目录","fileReserveBuffer", this.fileReserveBuffer.Text); } //config.ini页面初始化 void InitUI(){ this.minecode.Text = configIni.ReadValue("煤矿代码","CS_MINE_CODE"); this.url.Text = configIni.ReadValue("IP地址(KJ66的IP地址)","URL"); this.backupUrl.Text = configIni.ReadValue("备用IP地址","backupUrl"); this.port.Text = configIni.ReadValue("端口号","PORT"); this.intervalTime.Text = configIni.ReadValue("文件时间间隔","intervalTime"); this.fileReserve.Text = configIni.ReadValue("文件目录","fileReserve"); this.ftpurl.Text = configIni.ReadValue("ftp","ftpurl"); this.ftpfile.Text = configIni.ReadValue("ftp","file"); this.ftpusername.Text = configIni.ReadValue("ftp","username"); this.ftppassword1.Text = configIni.ReadValue("ftp","password"); this.fileReserveBuffer.Text = configIni.ReadValue("文件目录","fileReserveBuffer"); this.minecode.Focus(); } //输入框置不可选 void setEnabled(){ this.saveBtn.Enabled = false; this.minecode.Enabled = false; this.url.Enabled = false; this.backupUrl.Enabled = false; this.port.Enabled = false; this.intervalTime.Enabled = false; this.fileReserveBtn.Enabled = false; } //FTP输入框置不可选 void setFtpEnabled(){ this.ftpurl.Enabled = false; this.ftpfile.Enabled = false; this.ftpusername.Enabled = false; this.ftppassword1.Enabled = false; this.fileReserveBufferBtn.Enabled = false; } //listBox输出日志 private delegate void DoLog(string msg);//代理 void Log(string msg){ if (this.InvokeRequired){ DoLog doLog = new DoLog(Log); this.Invoke(doLog, new object[] { msg }); }else{ if (logReveal.Items.Count > 20) { logReveal.Items.RemoveAt(0); } msg = DateTime.Now.ToLocalTime().ToString() + " " + msg; logReveal.Items.Add(msg); } } }}

 

转载于:https://my.oschina.net/u/4006148/blog/2252460

你可能感兴趣的文章
Oracle中修改某个字段可以为空
查看>>
[ USACO 2007 FEB ] Lilypad Pond (Gold)
查看>>
[ USACO 2017 FEB ] Why Did the Cow Cross the Road III (Gold)
查看>>
postman抓包
查看>>
最大稳定极值区域(MSER)检测
查看>>
面向对象设计的六大原则《转》
查看>>
如何解决CorelDRAW中尖突问题
查看>>
Javascript实现Web颜色值转换
查看>>
拼接日期填写表单
查看>>
工控系统安全问题汇总(一)
查看>>
4、SpringBoot------邮件发送(2)
查看>>
无耻上海电信,尽然插广告!!!
查看>>
java创建二叉树并递归遍历二叉树
查看>>
JSON必知必会
查看>>
安全站点导航
查看>>
Oracle Job
查看>>
收集一些有意思的ASCII程序注释(持续收集中,希望大家踊跃贡献)
查看>>
做网站的各种推荐网
查看>>
CS文件密码加密类
查看>>
leetcode 10. 正则表达式匹配
查看>>