最近在做一个数据上传的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=12
fiveMinuter=300
[文件目录]
fileReserve=E:\mine\template
fileReserveBuffer=E:\mine\template\buffer
[ftp]
ftpurl=192.168.100.19:31
file=lxx
username=guor
password=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<string> listFiveMinuter = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//分站编号
rowStr += data[5] + separator;
break;
case "2":
//传感器编号
rowStr += data[6] + separator;
break;
case "3":
//传感器类型
rowStr += ss_transducer_type + separator;
break;
case "4":
//安装地点
rowStr += data[4] + separator;
break;
case "5":
//io类型
rowStr += ss_transducer_type_io + separator;
break;
case "6":
//状态
rowStr += ss_transducer_value + separator;
break;
case "7":
//煤矿代码
rowStr += cs_mine_code + separator;
break;
case "8":
//数据生成时间
rowStr += data[7] + separator;
break;
default:
break;
}
}
rowStr += "\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"\r\n","\r\n");
// 关联文件
string filename = configIni.ReadValue("文件目录","fileReserve")+"\\"+fileName+".txt";
//创建或覆盖文件
File.WriteAllText(@filename, rowStr, Encoding.GetEncoding("gb2312"));
Log(filename+"-开关量显示文件!");
fileFtpUpload(rowStr,filename,fileName);
}
//何岗煤矿全局模拟量定时显示
void createAnalogDisplay(string analogDisplayFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = analogDisplayFields.Split(',');
foreach (string key in CMD_all_Hash.Keys){
if (key.Contains("A")){
//数值、状态、延展状态、名称、安装地点、分站编号、传感器编号、时间
string[] data = (string[])CMD_all_Hash[key];
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//分站编号
rowStr += data[5] + separator;
break;
case "2":
//传感器编号
rowStr += data[6] + separator;
break;
case "3":
//传感器类型
rowStr += typeIni.ReadValue("传感器类型",data[3]) + separator;
break;
case "4":
//安装地点
rowStr += data[4] + separator;
break;
case "5":
//值
rowStr += data[0] + separator;
break;
case "6":
//状态
rowStr += getState(data[1],"A") + separator;
break;
case "7":
//煤矿代码
rowStr += cs_mine_code + separator;
break;
case "8":
//数据生成时间
rowStr += data[7] + separator;
break;
default:
break;
}
}
rowStr += "\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"\r\n","\r\n");
// 关联文件
string filename = configIni.ReadValue("文件目录","fileReserve")+"\\"+fileName+".txt";
//创建或覆盖文件
File.WriteAllText(@filename, rowStr, Encoding.GetEncoding("gb2312"));
Log(filename+"-模拟量显示文件!");
fileFtpUpload(rowStr,filename,fileName);
}
//-----------------------------------------------基本定义文件------------------------------------
//模拟量初始化数据
void createAQMC(string AQMCFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
StringBuilder builder = new StringBuilder();
string[] fields = AQMCFields.Split(',');
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd/HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
foreach(string key in CMD101_Hash.Keys){
if(key.Contains("A")){
string[] data = (string[])CMD101_Hash[key];
//模拟量断电下限
string ss_analog_pofflow = "";
//模拟量断电上限
string ss_analog_poffhigh = "";
//模拟量复电下限
string ss_analog_ponlow = "";
//模拟量复电上限
string ss_analog_ponhigh = "";
//上限断电区域
string ss_poffarea_namehigh = "";
//下限断电区域
string ss_poffarea_namelow = "";
foreach (string key102 in CMD102_Hash.Keys){
string[] data102 = (string[])CMD102_Hash[key102];
if(key.Equals(key102)){
string[] channels = new string[0];
if (data102[1] != null) {
channels = bitChannel(int.Parse(data102[1]),8);
}
foreach (string channel in channels){
string code = formatToTwo(data102[2]) + "C" + formatToTwo(channel);
string[] tpProperty_c = (string[])(CMD101_Hash[code]);
if(tpProperty_c!=null) {
//区域定义
string[] workarea_property = getProperty_workarea(tpProperty_c[42]);
if(workarea_property==null){
continue;
}
if ("0".Equals(data102[3])) {
//上限断电区域
ss_poffarea_namehigh = workarea_property[3];
break;
}
if ("1".Equals(data102[3])) {
//下限断电区域
ss_poffarea_namelow = workarea_property[3];
break;
}
}
}
string format = getFormat(data[41],"format");
if ("0".Equals(data102[3])){
//模拟量断电上限
ss_analog_poffhigh = float.Parse(data102[0]).ToString(format);
//模拟量复电上限
ss_analog_ponhigh = float.Parse(data102[7]).ToString(format);
}
if ("1".Equals(data102[3])){
//模拟量断电下限
ss_analog_pofflow = float.Parse(data102[0]).ToString(format);
//模拟量复电下限
ss_analog_ponlow = float.Parse(data102[7]).ToString(format);
}
}
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//系统类型
rowStr += "1"+separator;
break;
case "2":
//分站编号
rowStr += data[26]+separator;
break;
case "3":
//传感器编号
rowStr += data[24]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr += ss_transducer_point+separator;
break;
case "5":
//传感器名称
rowStr += station_nameIni.ReadValue("测点名称",data[41])+separator;
break;
case "6":
//传感器类型代码
rowStr += transducer_name_codeIni.ReadValue("传感器类型的代码","模拟量")+separator;
break;
case "7":
//单位
rowStr += data[34]+separator;
break;
case "8":
//量程下限
string ss_analog_lower = float.Parse(data[33]).ToString(getFormat(data[41],"format"));
rowStr += ss_analog_lower+separator;
break;
case "9":
//量程上限
string ss_analog_high = float.Parse(data[31]).ToString(getFormat(data[41],"format"));
rowStr += ss_analog_high+separator;
break;
case "10":
//报警下限
string ss_analog_alarmlow = float.Parse(data[32]).ToString(getFormat(data[41],"format"));
rowStr += ss_analog_alarmlow+separator;
break;
case "11":
//报警上限
string ss_analog_alarmhigh = float.Parse(data[30]).ToString(getFormat(data[41],"format"));
rowStr += ss_analog_alarmhigh+separator;
break;
case "12":
//模拟量断电下限
rowStr += ss_analog_pofflow+separator;
break;
case "13":
//模拟量断电上限
rowStr += ss_analog_poffhigh+separator;
break;
case "14":
//模拟量复电下限
rowStr += ss_analog_ponlow+separator;
break;
case "15":
//模拟量复电上限
rowStr += ss_analog_ponhigh+separator;
break;
case "16":
//上限断电区域
rowStr += ss_poffarea_namehigh+separator;
break;
case "17":
//下限断电区域
rowStr += ss_poffarea_namelow+separator;
break;
case "18":
//设备使用标记
rowStr += "0"+separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
string title = "KJ;AQMC|"+cs_mine_code+";"+cs_data_time+";"+sum+"~";
string fileSaveName = file_name_save+"\\"+fileName+cs_file_time+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr+"||");
string ret = builder.ToString().Replace("~\r\n||","~||");
File.WriteAllText(@fileSaveName, ret, Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--模拟量初始化数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//开关量初始化数据
void createAQKC(string AQKCFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
StringBuilder builder = new StringBuilder();
string[] fields = AQKCFields.Split(',');
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd/HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
foreach(string key in CMD101_Hash.Keys){
if(key.Contains("C")||key.Contains("D")){
string[] data = (string[])CMD101_Hash[key];
//0态断电
int ss_transducer_outage0 = 0;
//0态断电区域
string ss_transducer_outage_area0 = "";
//1态断电
int ss_transducer_outage1 = 0;
//1态断电区域
string ss_transducer_outage_area1 = "";
//2态断电
string ss_transducer_outage2 = "";
if(!data[38].Equals("")){
ss_transducer_outage2 = "0";
}
//2态断电区域
string ss_transducer_outage_area2 = "";
foreach (string key102 in CMD102_Hash.Keys){
string[] data102 = (string[])CMD102_Hash[key102];
if(key.Equals(key102)){
string[] channels = new string[0];
if (data102[1] != null) {
channels = bitChannel(int.Parse(data102[1]),8);
}
foreach (string channel in channels){
string code = formatToTwo(data102[2]) + "C" + formatToTwo(channel);
string[] tpProperty_c = (string[])(CMD101_Hash[code]);
if(tpProperty_c!=null){
//区域定义
string[] workarea_property = getProperty_workarea(tpProperty_c[42]);
if(workarea_property==null){
continue;
}
if ("0".Equals(data102[3])){
//0态断电
ss_transducer_outage0 = 1;
//0态断电区域
ss_transducer_outage_area0 = workarea_property[3];
}else if ("1".Equals(data102[3])){
//1态断电
ss_transducer_outage1 = 1;
//1态断电区域
ss_transducer_outage_area1 = workarea_property[3];
}else if("2".Equals(data102[3])){
//2态断电
ss_transducer_outage2 = "1";
//2态断电区域
ss_transducer_outage_area2 = workarea_property[3];
}
}
}
}
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//系统类型
rowStr += "1"+separator;
break;
case "2":
//分站编号
rowStr += data[26]+separator;
break;
case "3":
//传感器编号
rowStr += data[24]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr += ss_transducer_point+separator;
break;
case "5":
//传感器名称
rowStr += station_nameIni.ReadValue("测点名称",data[41])+separator;
break;
case "6":
//传感器类型代码
if(key.Contains("C")){
rowStr += transducer_name_codeIni.ReadValue("传感器类型的代码","开关量")+separator;
}else{
rowStr += transducer_name_codeIni.ReadValue("传感器类型的代码","控制量")+separator;
}
break;
case "7":
//0态含义
rowStr += data[36]+separator;
break;
case "8":
//0态告警
rowStr += data[18].Equals("1")?"1":"0"+separator;
break;
case "9":
//0态断电
rowStr += ss_transducer_outage0 + separator;
break;
case "10":
//0态断电区域
rowStr += ss_transducer_outage_area0 + separator;
break;
case "11":
//1态含义
rowStr += data[37] + separator;
break;
case "12":
//1态告警
rowStr += data[18].Equals("9")?"1":"0"+separator;
break;
case "13":
//1态断电
rowStr += ss_transducer_outage1 + separator;
break;
case "14":
//1态断电区域
rowStr += ss_transducer_outage_area1 + separator;
break;
case "15":
//2态含义
rowStr += data[38] + separator;
break;
case "16":
//2态告警
rowStr += separator;
break;
case "17":
//2态断电
rowStr += ss_transducer_outage2 + separator;
break;
case "18":
//2态断电区域
rowStr += ss_transducer_outage_area2 + separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
string title = "KJ;AQKC|"+cs_mine_code+";"+cs_data_time+";"+sum+"~";
string fileSaveName = file_name_save+"\\"+fileName+cs_file_time+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr+"||");
string ret = builder.ToString().Replace("~\r\n||","~||");
File.WriteAllText(@fileSaveName, ret, Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--开关量初始化数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//开关量状态变化
void createAQKD(string AQKDFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
StringBuilder builder = new StringBuilder();
string[] fields = AQKDFields.Split(',');
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string cs_data_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
foreach(string key in CMD106_Hash.Keys){
if(key.Contains("D")){
string[] data = (string[])CMD106_Hash[key];
string[] data101 = (string[])CMD101_Hash[key];
//是否告警
string isAlarm = "0";
//是否断电
string isOutage = "0";
//传感器运行状态代码
double exstatus = double.Parse(data[2]);
int exstate = (int) exstatus;
string[] str_d = bitChannel(exstate,8);
if(str_d[1].Equals("1")){
isOutage = "1";
}
if(str_d[2].Equals("1")){
isAlarm = "1";
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//系统类型
rowStr += 1+separator;
break;
case "2":
//分站编号
rowStr += data[3]+separator;
break;
case "3":
//传感器编号
rowStr += data[1]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data101[21].Equals("")||data101[22].Equals("")){
ss_transducer_point = data101[21]+data101[22];
}else{
ss_transducer_point = data101[21]+"\\"+data101[22];
}
rowStr += ss_transducer_point+separator;
break;
case "5":
//传感器名称
rowStr += station_nameIni.ReadValue("测点名称",data101[41])+separator;
break;
case "6":
//当前状态
rowStr += getState(data[6],"D") + separator;
break;
case "7":
//是否告警
rowStr += isAlarm + separator;
break;
case "8":
//是否断电
rowStr += isOutage + separator;
break;
case "9":
//数据生成时间
rowStr += cs_data_time + separator;
break;
case "10":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data101[41]);
rowStr += cs_mine_code+"01"+"KG"+transducer_code+key + separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
sum++;
}
}
if(rowStr.Equals("")){
return;
}
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
//文件内容更新时间,数据个数,保留;
string other = ";";
string save = ";";
string title = cs_data_time+";"+sum+other+save+"~";
string fileSaveName = file_name_save+"\\"+cs_mine_code+"_"+fileName+"_"+cs_file_time+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr+"||");
string ret = builder.ToString().Replace("~\r\n||","~||");
File.WriteAllText(@fileSaveName, ret, Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--开关量状态变化文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//工作面信息数据
void createGzmxx(string gzmxxFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = gzmxxFields.Split(',');
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
JObject obj = JObject.Parse(CMD104);
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
for(int k=0;k<fields.Length;k++){
string field = fields[k].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//工作面编号
rowStr += data[2]+separator;
break;
case "2":
//工作面名称
rowStr += data[3]+separator;
break;
case "3":
//工作面类型编号(工作面类型为哪个值 去对应附录4)
rowStr += workface_typeIni.ReadValue("工作面类型",data[3])+separator;
break;
default:
break;
}
}
rowStr += "\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"\r\n","\r\n");
string other = "0";
string save = "0";
string title = cs_mine_code+","+cs_data_time+","+sum+","+other+","+save;
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--工作面信息数据生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//分站信息数据文件
void createFzxx(string fzxxFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = fzxxFields.Split(',');
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
foreach(string key in CMD101_FZ_Hash.Keys){
string[] data = (string[])CMD101_FZ_Hash[key];
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//传感器编号
rowStr += formatToTwo(data[26])+separator;
break;
case "2":
//工作面编号(分站所在工作面的编号,该编号对应工作面信息文件中的工作面编号)
rowStr += data[42]+separator;
break;
case "3":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr += ss_transducer_point+separator;
break;
case "4":
//分站规格型号(分站的规格型号)
rowStr += separator;
break;
case "5":
//分站其它属性
rowStr += "0"+separator;
break;
default:
break;
}
}
rowStr += "\r\n";
sum++;
}
rowStr = rowStr.Replace(separator+"\r\n","\r\n");
string other = "0";
string save = "0";
string title = cs_mine_code+","+cs_data_time+","+sum+","+other+","+save;
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--分站信息数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//控制关系数据文件
void createCdkzgx(string fields102,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = fields102.Split(',');
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
foreach (string key in CMD102_Hash.Keys){
if(key.Contains("A")||key.Contains("C")||key.Contains("D")){
string[] data = (string[])CMD102_Hash[key];
//测试状态的过滤
bool bss = false;
for(int k=0;k<strI;k++){
if(strArray[k].Equals(key)){
bss = true;
}
}
if(bss){
continue;
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//源测点编号
rowStr += formatToTwo(data[13])+data[10]+formatToTwo(data[11])+separator;
break;
case "2":
//目的测点编号
rowStr += formatToTwo(data[2])+"C"+formatToTwo(data[1])+separator;
break;
case "3":
//断电门限
string ss_outage_value = "";
if(key.Contains("A")){
ss_outage_value = formatToDouble(data[0]);
}else{
ss_outage_value = data[0];
}
rowStr += ss_outage_value+separator;
break;
case "4":
//复电门限
string ss_analog_value = "";
if(key.Contains("A")){
ss_analog_value = formatToDouble(data[7]);
}else{
ss_analog_value = data[7];
}
rowStr += ss_analog_value+separator;
break;
case "5":
//馈电传感器编号
rowStr += separator;
break;
default:
break;
}
}
rowStr += "\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"\r\n","\r\n");
string other = "0";
string save = "0";
string title = cs_mine_code+","+cs_data_time+","+sum+","+other+","+save;
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--控制关系数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//传感器描述文件(开关量测点属性)
void createCDDY(string DFields,string AFields,string separator,string fileName){
string[] array_D = createCDDY_D(DFields,separator);
string[] array_A = createCDDY_A(AFields,separator);
string rowStr_D = array_D[0];
string rowStr_A = array_A[0];
string rowStr = rowStr_D+rowStr_A+"||";
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
rowStr = rowStr.Replace("\r\n||","||");
int sum_D = int.Parse(array_D[1]);
int sum_A = int.Parse(array_A[1]);
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
string other = "";
string save = "";
//系统型号;系统名称;生产厂家;文件内容更新时间;开关量点数;模拟量点数;多态点数;0;0;累计量点数;备用;备用;
string title = "01"+";"+"安全监控系统"+";"+configIni.ReadValue("生产厂家","factory")+";"+cs_data_time+";"+sum_D+";"+sum_A+";0;0;0;0;"+other+";"+save+"~";
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--传感器描述文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//传感器描述文件(开关量测点属性)
string[] createCDDY_D(string DFields,string separator){
int sum = 0;
string rowStr = "";
string[] fields = DFields.Split(',');
string[] array = new string[2];
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
rowStr += cs_mine_code+"01"+"KG"+transducer_code+key + separator;
break;
case "2":
//分站号
rowStr += cs_mine_code+"01"+"KG"+transducer_code+data[26] + separator;
break;
case "3":
//测点名称
rowStr += data[22] + separator;
break;
case "4":
//测点所属区域名称
string ss_transducer_area = "";
if(getProperty_workarea(data[42])!=null&&getProperty_area(getProperty_workarea(data[42])[1])!=null){
ss_transducer_area = getProperty_area(getProperty_workarea(data[42])[1])[2];
}
if(ss_transducer_area.Equals("")&&getProperty_workarea(data[42])!=null){
ss_transducer_area = getProperty_workarea(data[42])[3];
}
rowStr += ss_transducer_area + separator;
break;
case "5":
//传感器所在区域的位置编码
rowStr += data[42] + separator;
break;
case "6":
//开描述
if(data[46].Equals("1")){
rowStr += "开" + separator;
}else{
rowStr += separator;
}
break;
case "7":
//停描述
if(data[46].Equals("0")){
rowStr += "关" + separator;
}else{
rowStr += separator;
}
break;
case "8":
//报警状态
if(data[46].Equals("1")){
rowStr += "1" + separator;
}else{
rowStr += separator;
}
break;
case "9":
//解报状态
if(data[46].Equals("0")){
rowStr += "0" + separator;
}else{
rowStr += separator;
}
break;
case "10":
//断电状态
string ss_outage_value = separator;
if(CMD102_Hash.ContainsKey(key)){
//控制定义-控制限
ss_outage_value = ((string[])CMD102_Hash[key])[0];
}
rowStr += ss_outage_value + separator;
break;
case "11":
//复电状态
string ss_analog_value = "";
if(CMD102_Hash.ContainsKey(key)){
//控制定义-回差限
ss_analog_value = ((string[])CMD102_Hash[key])[7];
}
rowStr += ss_analog_value + separator;
break;
case "12":
//传感器关联关系
//(1)如该测点 A 与断电器 B、馈电器 C 存在关系, 则描述为:D-B-断电区域的区域名称(多个区域 之间用“&”隔离):K-C
//(2)如该测点 A,与 B 互为主备关系,则描述为 Z-B。
//(3)如存在多个相同关系,中间有“◇”隔离。
//闭锁关系 B 主备关系 Z 关联风门 G 断电关系 D 控制关系 K 调节关系 T 保护关系 H
//D-B-断电区域的区域名称
if(!getSs_poffarea_name(key).Equals("")){
rowStr += "D-B-" + getSs_poffarea_name(key) + separator;
}else{
rowStr += "";
}
break;
default:
break;
}
}
rowStr += "~\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_d in m_str){
rowStr += list_d;
}
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//传感器描述文件(开关量测点属性)
string[] createCDDY_A(string AFields,string separator){
int sum = 0;
string rowStr = "";
string[] fields = AFields.Split(',');
string[] array = new string[2];
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
rowStr += cs_mine_code+"01"+"MN"+transducer_code+key + separator;
break;
case "2":
//分站号
rowStr += cs_mine_code+"01"+"MN"+transducer_code + data[26] + separator;
break;
case "3":
//测点名称
rowStr += data[41] + separator;
break;
case "4":
//测点所属区域名称
string ss_transducer_area = "";
if(getProperty_workarea(data[42])!=null&&getProperty_area(getProperty_workarea(data[42])[1])!=null){
ss_transducer_area = getProperty_area(getProperty_workarea(data[42])[1])[2];
}
if(ss_transducer_area.Equals("")&&getProperty_workarea(data[42])!=null){
ss_transducer_area = getProperty_workarea(data[42])[3];
}
rowStr += ss_transducer_area + separator;
break;
case "5":
//传感器所在区域的位置编码
rowStr += data[42] + separator;
break;
case "6":
//测点值单位
rowStr += data[34] + separator;
break;
case "7":
//高量程
rowStr += formatToDouble(data[31])+separator;
break;
case "8":
//低量程
rowStr += formatToDouble(data[33])+separator;
break;
case "9":
//上限报警门限
rowStr += formatToDouble(data[30])+separator;
break;
case "10":
//上限解报门限
rowStr += formatToDouble(data[30])+separator;
break;
case "11":
//下限报警门限
rowStr += formatToDouble(data[32])+separator;
break;
case "12":
//下限解报门限
rowStr += formatToDouble(data[32])+separator;
break;
case "13":
//上限断电门限
string ss_outage_value_up = separator;
if(CMD102_Hash.ContainsKey(key)){
if(((string[])CMD102_Hash[key])[3].Equals("0")){
//控制定义-控制限
ss_outage_value_up = formatToDouble(((string[])CMD102_Hash[key])[0]);
}
}
rowStr += ss_outage_value_up+separator;
break;
case "14":
//上限复电门限
string ss_analog_value_up = "";
if(CMD102_Hash.ContainsKey(key)){
if(((string[])CMD102_Hash[key])[3].Equals("0")){
//控制定义-回差限
ss_analog_value_up = formatToDouble(((string[])CMD102_Hash[key])[7]);
}
}
rowStr += ss_analog_value_up+separator;
break;
case "15":
//下限断电门限
string ss_outage_value_low = separator;
if(CMD102_Hash.ContainsKey(key)){
if(((string[])CMD102_Hash[key])[3].Equals("1")){
//控制定义-控制限
ss_outage_value_low = formatToDouble(((string[])CMD102_Hash[key])[0]);
}
}
rowStr += ss_outage_value_low+separator;
break;
case "16":
//下限复电门限
string ss_analog_value_low = "";
if(CMD102_Hash.ContainsKey(key)){
if(((string[])CMD102_Hash[key])[3].Equals("1")){
//控制定义-回差限
ss_analog_value_low = formatToDouble(((string[])CMD102_Hash[key])[7]);
}
}
rowStr += ss_analog_value_low+separator;
break;
case "17":
//传感器关联关系
//D-B-断电区域的区域名称
if(!getSs_poffarea_name(key).Equals("")){
rowStr += "D-B-" + getSs_poffarea_name(key) + separator;
}else{
rowStr += "";
}
break;
default:
break;
}
}
rowStr += "~\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_d in m_str){
rowStr += list_d;
}
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//-----------------------------测点信息数据文件-------------------------------------------------------------------------
void createDev(string devFields,string separator,string fileName){
string[] array_A = createDev_A(devFields,separator);
string[] array_D = createDev_D(devFields,separator);
string[] array_C = createDev_C(devFields,separator);
string rowStr_A = array_A[0];
string rowStr_D = array_D[0];
string rowStr_C = array_C[0];
string rowStr = rowStr_A+rowStr_D+rowStr_C;
rowStr = rowStr.Replace(",\r\n","\r\n");
int sum_A = int.Parse(array_A[1]);
int sum_D = int.Parse(array_D[1]);
int sum_C = int.Parse(array_C[1]);
int sum = sum_A+sum_D+sum_C;
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
//string other = "";
string save = "";
string title = cs_mine_code+","+cs_data_time+","+sum+","+save;
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--测点信息数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//测点信息数据文件-模拟量
string[] createDev_A(string devFields,string separator){
int sum = 0;
string rowStr_A = "";
string[] fields = devFields.Split(',');
string[] array = new string[2];
List<string> m_strA = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//分站编号
rowStr_A += formatToTwo(data[26])+separator;
break;
case "2":
//传感器编号
rowStr_A += formatToTwo(data[26])+data[23]+formatToTwo(data[24])+separator;
break;
case "3":
//工作面编号
rowStr_A += data[42]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr_A += ss_transducer_point+separator;
break;
case "5":
//传感器名称
string ss_transducer_name_code = transducerIni.ReadValue("传感器名称",data[41]);
if(ss_transducer_name_code.Equals("")){
ss_transducer_name_code = transducerIni.ReadValue("传感器名称","其它模拟量");
}
rowStr_A += ss_transducer_name_code+separator;
break;
case "6":
//传感器类型代码
rowStr_A += transducer_name_codeIni.ReadValue("传感器类型的代码","模拟量")+separator;
break;
case "7":
//单位
rowStr_A += data[34]+separator;
break;
case "8":
//模拟量量程下限
rowStr_A += formatToDouble(data[33])+separator;
break;
case "9":
//模拟量量程上限
rowStr_A += formatToDouble(data[31])+separator;
break;
case "10":
//模拟量报警下限
rowStr_A += formatToDouble(data[32])+separator;
break;
case "11":
//模拟量报警上限
rowStr_A += formatToDouble(data[30])+separator;
break;
case "12":
//断电值
string ss_outage_value = separator;
if(CMD102_Hash.ContainsKey(key)){
//控制定义-控制限
ss_outage_value = formatToDouble(((string[])CMD102_Hash[key])[0]);
}
rowStr_A += ss_outage_value+separator;
break;
case "13":
//复电值
string ss_analog_value = "";
if(CMD102_Hash.ContainsKey(key)){
//控制定义-回差限
ss_analog_value = formatToDouble(((string[])CMD102_Hash[key])[7]);
}
rowStr_A += ss_analog_value+separator;
break;
case "14":
//断电区域
rowStr_A += getSs_poffarea_name(key)+separator;
break;
default:
break;
}
}
rowStr_A += "\r\n";
m_strA.Add(rowStr_A);
rowStr_A = "";
sum++;
}
}
rowStr_A = "";
m_strA.Sort();
foreach (string list_a in m_strA){
rowStr_A += list_a;
}
array[0] = rowStr_A;
array[1] = sum.ToString();
return array;
}
//测点信息数据文件-开关量
string[] createDev_D(string devFields,string separator){
int sum = 0;
string rowStr_D = "";
string[] fields = devFields.Split(',');
string[] array = new string[2];
List<string> m_strD = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//分站编号
rowStr_D += formatToTwo(data[26])+separator;
break;
case "2":
//传感器编号
rowStr_D += formatToTwo(data[26])+data[23]+formatToTwo(data[24])+separator;
break;
case "3":
//工作面编号
rowStr_D += data[42]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr_D += ss_transducer_point+separator;
break;
case "5":
//传感器名称
string ss_transducer_name_code = transducerIni.ReadValue("传感器名称",data[41]);
if(ss_transducer_name_code.Equals("")){
ss_transducer_name_code = transducerIni.ReadValue("传感器名称","其它开关量");
}
rowStr_D += ss_transducer_name_code+separator;
break;
case "6":
//传感器类型代码
rowStr_D += transducer_name_codeIni.ReadValue("传感器类型的代码","开关量")+separator;
break;
case "7":
//单位
rowStr_D += separator;
break;
case "8":
//模拟量量程下限
rowStr_D += separator;
break;
case "9":
//模拟量量程上限
rowStr_D += separator;
break;
case "10":
//模拟量报警下限
rowStr_D += separator;
break;
case "11":
//模拟量报警上限
rowStr_D += separator;
break;
case "12":
//断电值
string ss_outage_value = separator;
if(CMD102_Hash.ContainsKey(key)){
//控制定义-控制限
ss_outage_value = ((string[])CMD102_Hash[key])[0];
}
rowStr_D += ss_outage_value+separator;
break;
case "13":
//复电值
string ss_analog_value = "";
if(CMD102_Hash.ContainsKey(key)){
//控制定义-回差限
ss_analog_value = ((string[])CMD102_Hash[key])[7];
}
rowStr_D += ss_analog_value+separator;
break;
case "14":
//断电区域
rowStr_D += getSs_poffarea_name(key)+separator;
break;
default:
break;
}
}
rowStr_D += "\r\n";
m_strD.Add(rowStr_D);
rowStr_D = "";
sum++;
}
}
rowStr_D = "";
m_strD.Sort();
foreach (string list_d in m_strD){
rowStr_D += list_d;
}
array[0] = rowStr_D;
array[1] = sum.ToString();
return array;
}
//测点信息数据文件-控制量
string[] createDev_C(string devFields,string separator){
int sum = 0;
string rowStr_C = "";
string[] fields = devFields.Split(',');
string[] array = new string[2];
List<string> m_strC = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//分站编号
rowStr_C += formatToTwo(data[26])+separator;
break;
case "2":
//传感器编号
rowStr_C += formatToTwo(data[26])+data[23]+formatToTwo(data[24])+separator;
break;
case "3":
//工作面编号
rowStr_C += data[42]+separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr_C += ss_transducer_point+separator;
break;
case "5":
//传感器名称
string ss_transducer_name_code = transducerIni.ReadValue("传感器名称",data[41]);
if(ss_transducer_name_code.Equals("")){
ss_transducer_name_code = transducerIni.ReadValue("传感器名称","其它控制器");
}
rowStr_C += ss_transducer_name_code+separator;
break;
case "6":
//传感器类型代码
rowStr_C += transducer_name_codeIni.ReadValue("传感器类型的代码","控制量")+separator;
break;
case "7":
//单位
rowStr_C += separator;
break;
case "8":
//模拟量量程下限
rowStr_C += separator;
break;
case "9":
//模拟量量程上限
rowStr_C += separator;
break;
case "10":
//模拟量报警下限
rowStr_C += separator;
break;
case "11":
//模拟量报警上限
rowStr_C += separator;
break;
case "12":
//断电值
string ss_outage_value = separator;
if(CMD102_Hash.ContainsKey(key)){
//控制定义-控制限
ss_outage_value = ((string[])CMD102_Hash[key])[0];
}
rowStr_C += ss_outage_value+separator;
break;
case "13":
//复电值
string ss_analog_value = "";
if(CMD102_Hash.ContainsKey(key)){
//控制定义-回差限
ss_analog_value = ((string[])CMD102_Hash[key])[7];
}
rowStr_C += ss_analog_value+separator;
break;
case "14":
//断电区域
rowStr_C += getSs_poffarea_name(key)+separator;
break;
default:
break;
}
}
rowStr_C += "\r\n";
m_strC.Add(rowStr_C);
rowStr_C = "";
sum++;
}
}
rowStr_C = "";
m_strC.Sort();
foreach (string list_c in m_strC){
rowStr_C += list_c;
}
array[0] = rowStr_C;
array[1] = sum.ToString();
return array;
}
//------------------------------------------统计数据文件------------------------------------------------------
//统计数据文件list
void createJktjsj_list(string fiveMinuFields,string separator,string fileName){
//传感器代码
string ss_transducer_code = "";
//模拟量检测值
string ss_analog_value = "";
List<string> list = new List<string>();
List<string> list_state = new List<string>();
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<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[0].Equals("A")){
//传感器代码
ss_transducer_code = formatToTwo(data[3])+"A"+formatToTwo(data[1]);
ss_analog_value = data[5];
//传感器编号+数值
string strs = ss_transducer_code +","+ ss_analog_value;
string stateStr = ss_transducer_code+","+data[6]+","+data[2];
//测试状态的过滤
bool bss = false;
for(int k=0;k<strI;k++){
if(strArray[k].Equals(ss_transducer_code)){
bss = true;
}
}
if(!bss){
list.Add(strs);
list_state.Add(stateStr);
}
}
}
}
}
createCodeStateHash(list_state);
createCodeValHash(list);
//获取平均值、最大值、最小值
getAvgMaxMin();
//统计数据文件
createJktjsj(fiveMinuFields,separator,fileName);
listFiveMinuter.Clear();
}
//统计数据文件
void createJktjsj(string fiveMinuFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = fiveMinuFields.Split(',');
StringBuilder builder = new StringBuilder();
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string cs_data_time = getCurrentTime();
DateTime et = DateTime.Now.AddSeconds(-double.Parse("300"));
string cs_data_time_begin = et.ToString("yyyy-MM-dd/HH:mm:ss");
foreach (string key in key_avg_Hash.Keys){
if(key.Contains("A")){
List<float> list = (List<float>)key_avg_Hash[key];
string[] data = (string[])CMD101_Hash[key];
//工作状态
string ss_transducer_state = "";
//状态
int state = 0;
List<int> list_state = (List<int>)key_state_Hash[key];
for(int i = 0;i<list_state.Count;i++){
state = list_state[i];
string hex = Convert.ToString(state,16);
ss_transducer_state = stateIni.ReadValue("状态","A-"+hex);
switch(hex){
case "10" :
ss_transducer_state = "正常";
break;
case "11" :
ss_transducer_state = "超下限";
break;
case "12" :
ss_transducer_state = "超上限";
break;
case "f8" :
ss_transducer_state = "负漂";
break;
case "f9" :
ss_transducer_state = "溢出";
break;
case "fe" :
ss_transducer_state = "断线";
break;
case "ff" :
ss_transducer_state = "中断";
break;
case "80" :
ss_transducer_state = "未知";
break;
}
}
//延展状态
int exstate = 0;
List<int> list_exstate = (List<int>)key_exstate_Hash[key];
for(int i = 0;i<list_exstate.Count;i++){
exstate = list_exstate[i];
string[] str_a = bitChannel(exstate,8);
if (exstate == 0){
ss_transducer_state = "正常";
}
if (str_a[0].Equals("1")){
ss_transducer_state = "调试";
}
if (str_a[1].Equals("1")){
ss_transducer_state = "断电";
}
if (str_a[2].Equals("1")){
ss_transducer_state = "报警";
}
if (str_a[3].Equals("1")){
ss_transducer_state = "预警";
}
if (str_a[4].Equals("1")){
ss_transducer_state = "伪数据";
}
if (str_a[5].Equals("1")){
ss_transducer_state = "异常数据";
}
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//安全监控系统分站代码
rowStr += key.Substring(0,3) + "F00" + separator;
break;
case "2":
//传感器编号代码
rowStr += key+ separator+"~";
break;
case "3":
//最大值
rowStr += formatToDouble(list[1].ToString())+ separator;
break;
case "4":
//最大值时间
rowStr += getTime_Hash[key+formatToDouble(list[1].ToString())].ToString()+ separator;
break;
case "5":
//最小值
rowStr += formatToDouble(list[2].ToString())+ separator;
break;
case "6":
//最小值时间
rowStr += getTime_Hash[key+formatToDouble(list[2].ToString())].ToString()+ separator;
break;
case "7":
//平均值
rowStr += formatToDouble(list[0].ToString())+ separator;
break;
case "8":
//系统类型
rowStr += "1" + separator;
break;
case "9":
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
rowStr += ss_transducer_point+separator;
break;
case "10":
//传感器名称
rowStr += station_nameIni.ReadValue("测点名称",data[41])+separator;
break;
case "11":
//统计开始时间
rowStr += cs_data_time_begin+separator;
break;
case "12":
//统计结束时间
rowStr += cs_data_time+separator;
break;
case "13":
//工作状态
rowStr += ss_transducer_state+separator;
break;
case "14":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
string transducer_code = transducer_typeIni.ReadValue("传感器类型编码表",data[41]);
rowStr += cs_mine_code+"01"+"MN"+transducer_code+key + separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
string other = "";
string save = "";
string title = cs_data_time+";"+sum+";"+other+";"+save;
string fileSaveName = file_name_save+"\\"+cs_mine_code+"_"+fileName+"_"+cs_file_time+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr+"||");
string ret = builder.ToString().Replace("~\r\n||","~||");
File.WriteAllText(@fileSaveName, ret.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--统计数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//-----------------------------------------------实时数据文件------------------------------------
//实时数据 每10秒生成一次,含所有测点数据
void createAQSS(string AQSSFields,string separator,string fileName){
int sum = 0;
string rowStr = "";
string[] fields = AQSSFields.Split(',');
StringBuilder builder = new StringBuilder();
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string cs_data_time = getCurrentTime();
foreach(string key in CMD_all_Hash.Keys){
if(key.Contains("A")||key.Contains("C")||key.Contains("D")){
//值 状态 拓展状态 名称
string[] data = (string[])CMD_all_Hash[key];
string[] data101 = (string[])CMD101_Hash[key];
//当前监测值
string format = getFormat(data[3],"format");
float ss_transducer_value = 0;
//显示值
string ss_transducer_show_value = "";
if(key.Contains("A")){
ss_transducer_value = float.Parse(double.Parse(data[0]).ToString(format));
ss_transducer_show_value = ss_transducer_value.ToString();
}else{
if(data[0].Equals("1")){
ss_transducer_show_value = "开";
}else if(data[0].Equals("0")){
ss_transducer_show_value = "关";
}
}
//当前状态
string ss_transducer_state = "";
if(key.Contains("A")){
ss_transducer_state = getState(data[1],"A");
}else if(key.Contains("D")){
ss_transducer_state = getState(data[1],"D");
}else if(key.Contains("C")){
ss_transducer_state = getState(data[1],"C");
}
for(int i=0;i<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//系统类型
rowStr += "1" + separator;
break;
case "2":
//分站编号
rowStr += data101[26]+ separator;
break;
case "3":
//传感器编号
rowStr += data101[23]+ separator;
break;
case "4":
//安装地点
string ss_transducer_point = "";
if(data101[21].Equals("")||data101[22].Equals("")){
ss_transducer_point = data101[21]+data101[22];
}else{
ss_transducer_point = data101[21]+"\\"+data101[22];
}
rowStr += ss_transducer_point+separator;
break;
case "5":
//传感器名称
rowStr += station_nameIni.ReadValue("测点名称",data[3])+separator;
break;
case "6":
//当前监测值
rowStr += ss_transducer_value+separator;
break;
case "7":
//显示值
rowStr += ss_transducer_show_value+separator;
break;
case "8":
//当前状态
rowStr += ss_transducer_state+separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
sum++;
}
}
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
string title = "KJ;AQSS|"+cs_mine_code+";"+cs_data_time+";"+sum+"~";
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr+"||");
string ret = builder.ToString().Replace("~\r\n||","~||");
File.WriteAllText(@fileSaveName, ret, Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--实时数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//实时数据文件
void createRtdata(string rtdataFields,string separator,string fileName){
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
string[] array_A = createRtdata_A(rtdataFields,separator);
string[] array_D = createRtdata_D(rtdataFields,separator);
string[] array_C = createRtdata_C(rtdataFields,separator);
string rowStr_A = array_A[0];
string rowStr_D = array_D[0];
string rowStr_C = array_C[0];
string rowStr = rowStr_A+rowStr_D+rowStr_C;
rowStr = rowStr.Replace(",\r\n","\r\n");
int sum_A = int.Parse(array_A[1]);
int sum_D = int.Parse(array_D[1]);
int sum_C = int.Parse(array_C[1]);
int sum = sum_A+sum_D+sum_C;
//string other = "0";
string save = "";
string title = cs_mine_code+","+cs_data_time+","+sum+","+editSign+","+save;
editSign = 0;
string fileSaveName = file_name_save+"\\"+fileName+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--实时数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//实时数据文件-模拟量
string[] createRtdata_A(string rtdataFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = rtdataFields.Split(',');
List<string> m_str = new List<string>();
//全量数据
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//传感器编号
rowStr += key+separator;
break;
case "2":
//值
rowStr += formatToDouble(data[0])+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"A")+separator;
break;
default:
break;
}
}
rowStr += "\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//实时数据文件-开关量
string[] createRtdata_D(string rtdataFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = rtdataFields.Split(',');
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//传感器编号
rowStr += key+separator;
break;
case "2":
//值
string ss_transducer_value = "";
int status = int.Parse(data[1]);
string hex = Convert.ToString(status,16);
switch(hex){
case "0":
//数字量0态
ss_transducer_value = "1";
break;
case "1":
//数字量1态
ss_transducer_value = "0";
break;
case "2":
//数字量2态
ss_transducer_value = "0";
break;
case "ff":
//中断
ss_transducer_value = "0";
break;
case "80":
//未知
ss_transducer_value = "0";
break;
default:
break;
}
rowStr += ss_transducer_value+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"D")+separator;
break;
default:
break;
}
}
rowStr += "\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//实时数据文件-数字量
string[] createRtdata_C(string rtdataFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = rtdataFields.Split(',');
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//传感器编号
rowStr += key+separator;
break;
case "2":
//值
string ss_transducer_value = "";
int status = int.Parse(data[1]);
string hex = Convert.ToString(status,16);
switch(hex){
case "0":
//馈电正常
ss_transducer_value = "0";
break;
case "1":
//馈电异常
ss_transducer_value = "1";
break;
case "ff":
//中断
ss_transducer_value = "1";
break;
case "80":
//未知
ss_transducer_value = "1";
break;
default:
break;
}
rowStr += ss_transducer_value+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"C")+separator;
break;
default:
break;
}
}
rowStr += "\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//实时数据文件
void createSSSJ(string SSSJFields,string separator,string fileName){
StringBuilder builder = new StringBuilder();
string cs_data_time = getCurrentTime();
string[] array_A = createSSSJ_A(SSSJFields,separator);
string[] array_D = createSSSJ_D(SSSJFields,separator);
string[] array_C = createSSSJ_C(SSSJFields,separator);
string rowStr_A = array_A[0];
string rowStr_D = array_D[0];
string rowStr_C = array_C[0];
string rowStr = rowStr_A+rowStr_D+rowStr_C+"||";
rowStr = rowStr.Replace(separator+"~\r\n","~\r\n");
rowStr = rowStr.Replace("\r\n||","||");
int sum_A = int.Parse(array_A[1]);
int sum_D = int.Parse(array_D[1]);
int sum_C = int.Parse(array_C[1]);
int sum = sum_A+sum_D+sum_C;
string save = "";
string title = cs_data_time+";"+sum+";"+save+"~";
string cs_file_time = DateTime.Now.ToString("yyyyMMddHHmmss",new System.Globalization.DateTimeFormatInfo());
string fileSaveName = file_name_save+"\\"+cs_mine_code+"_"+fileName+"_"+cs_file_time+".txt";
builder.Append(title+"\r\n");
builder.Append(rowStr);
File.WriteAllText(@fileSaveName, builder.ToString(), Encoding.GetEncoding("gb2312"));
Log(fileSaveName+"--实时数据文件生成成功!");
fileFtpUpload(rowStr,fileSaveName,fileName);
}
//实时数据文件-模拟量
string[] createSSSJ_A(string SSSJFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = SSSJFields.Split(',');
List<string> m_str = new List<string>();
//全量数据
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
rowStr += cs_mine_code+"01"+"MN"+transducer_code+key + separator;
break;
case "2":
//值
rowStr += formatToDouble(data[0])+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"A")+separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//实时数据文件-开关量
string[] createSSSJ_D(string SSSJFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = SSSJFields.Split(',');
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
rowStr += cs_mine_code+"01"+"KG"+transducer_code+key + separator;
break;
case "2":
//值
string ss_transducer_value = "";
int status = int.Parse(data[1]);
string hex = Convert.ToString(status,16);
switch(hex){
case "0":
//数字量0态
ss_transducer_value = "0";
break;
case "1":
//数字量1态
ss_transducer_value = "1";
break;
case "2":
//数字量2态
ss_transducer_value = "2";
break;
case "ff":
//中断
ss_transducer_value = "2";
break;
case "80":
//未知
ss_transducer_value = "2";
break;
default:
break;
}
rowStr += ss_transducer_value+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"D")+separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//实时数据文件-数字量
string[] createSSSJ_C(string SSSJFields,string separator){
string rowStr = "";
int sum = 0;
string[] fields = SSSJFields.Split(',');
List<string> m_str = new List<string>();
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<fields.Length;i++){
string field = fields[i].Replace("[","").Replace("]","").Trim();
switch (field){
case "1":
//测点编号(矿井编码+系统编码+传感器数值类型编码+传感器类型编码+原系统测点编码)
//传感器类型编码
rowStr += cs_mine_code+"01"+"KG"+transducer_code+key + separator;
break;
case "2":
//值
string ss_transducer_value = "";
int status = int.Parse(data[1]);
string hex = Convert.ToString(status,16);
switch(hex){
case "0":
//馈电正常
ss_transducer_value = "1";
break;
case "1":
//馈电异常
ss_transducer_value = "1";
break;
case "ff":
//中断
ss_transducer_value = "0";
break;
case "80":
//未知
ss_transducer_value = "2";
break;
default:
break;
}
rowStr += ss_transducer_value+separator;
break;
case "3":
//传感器运行状态代码
rowStr += getState(data[1],"C")+separator;
break;
default:
break;
}
}
rowStr += "~\r\n";
m_str.Add(rowStr);
rowStr = "";
sum++;
}
}
rowStr = "";
m_str.Sort();
foreach (string list_a in m_str){
rowStr += list_a;
}
string[] array = new string[2];
array[0] = rowStr;
array[1] = sum.ToString();
return array;
}
//------------------------------------接收数据并存入本地hashtable-------------------------------------------
//测点定义数据
Hashtable CMD101_Hash = new Hashtable();
void InitCMD101(string cs_data_time){
strI = 0;
CMD101_Hash.Clear();
JObject obj = JObject.Parse(CMD101);
//过滤为空的数据
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count+1];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
data[content1.Count] = cs_data_time;
//传感器编号(26-分站编号,23-测点getState类型,24-测点号)
string code = formatToTwo(data[26])+data[23]+formatToTwo(data[24]);
//测试状态的过滤
if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){
strArray[strI] = code;
strI++;
}
CMD101_Hash[code] = data;
}
}
}
//分站数据
Hashtable CMD101_FZ_Hash = new Hashtable();
void InitCMD101_fz(){
CMD101_FZ_Hash.Clear();
JObject obj = JObject.Parse(CMD101);
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
//测试状态的过滤
if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){
continue;
}
string code = formatToTwo(data[26]);
//42-区域编号
if(CMD101_FZ_Hash.ContainsKey(code)&&data[42].Equals("0")){
continue;
}
CMD101_FZ_Hash[code] = data;
}
}
}
//控制定义数据
Hashtable CMD102_Hash = new Hashtable();
void InitCMD102(){
CMD102_Hash.Clear();
JObject obj = JObject.Parse(CMD102);
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
string code = formatToTwo(data[13]) + data[10] + formatToTwo(data[11]);
CMD102_Hash[code] = data;
}
}
}
//增量数据
Hashtable CMD106_Hash = new Hashtable();
void InitCMD106(){
CMD106_Hash.Clear();
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<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
string code = formatToTwo(data[3]) + data[0] + formatToTwo(data[1]);
CMD106_Hash[code] = data;
}
}
}
//全量数据
Hashtable CMD_all_Hash = new Hashtable();
void InitCMD_all(){
CMD_all_Hash.Clear();
JObject obj = JObject.Parse(CMD101);
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[23].Equals("A")||data[23].Equals("D")||data[23].Equals("C")){
if(bitChannel(int.Parse(data[18]),16)[3].Equals("1")){
continue;
}
//安装地点
string ss_transducer_point = "";
if(data[21].Equals("")||data[22].Equals("")){
ss_transducer_point = data[21]+data[22];
}else{
ss_transducer_point = data[21]+"\\"+data[22];
}
//获取数据生成时间
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
//数值、状态、延展状态、名称、安装地点、分站编号、传感器编号、时间
string code = formatToTwo(data[26])+data[23]+formatToTwo(data[24]);
string[] array = {data[46],data[44],data[45],data[41],ss_transducer_point,data[26],data[24],time};
CMD_all_Hash[code] = array;
}
}
}
JObject obj106 = JObject.Parse(CMD106);
int nLen106 = obj106["CONTENT"].ToString().Trim().Length;
if(nLen106>0){
JArray content106 = (JArray)obj106["CONTENT"];
for(int i=0;i<content106.Count;i++){
JArray content1 = (JArray)content106[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[0].Equals("A")||data[0].Equals("D")||data[0].Equals("C")){
string code = formatToTwo(data[3])+data[0]+formatToTwo(data[1]);
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
//数值、状态、延展状态、名称、安装地点、分站编号、传感器编号、时间
string[] data1 = (string[])CMD_all_Hash[code];
if(data1!=null){
string[] array = {data[5],data[6],data[2],data1[3],data1[4],data1[5],data1[6],time};
CMD_all_Hash[code] = array;
}
}
}
}
}
//键值hashtable
Hashtable key_val_Hash = new Hashtable();
void createCodeValHash(List<string> 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<float> list1 = new List<float>();
list1.Add(float.Parse(value));
key_val_Hash[key] = list1;
}else {
List<float> list1 = (List<float>)key_val_Hash[key];
list1.Add(float.Parse(value));
key_val_Hash[key] = list1;
}
}
list = new List<string>();
}
//求平均值
Hashtable key_avg_Hash = new Hashtable();
void getAvgMaxMin(){
key_avg_Hash.Clear();
foreach (string key in key_val_Hash.Keys){
List<float> list = (List<float>)key_val_Hash[key];
float sum = 0;
foreach(float list_value in list){
sum += list_value;
}
List<float> list_val = new List<float>();
//平均值
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<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[0].Equals("A")){
string code = formatToTwo(data[3]) + data[0] + formatToTwo(data[1]);
string code_value = code + formatToDouble(data[5]);
getTime_Hash[code_value] = time;
}
}
}
}
//状态hashtable
Hashtable key_state_Hash = new Hashtable();
//延展状态hashtable
Hashtable key_exstate_Hash = new Hashtable();
//获取五分钟内测点对应的状态集合
void createCodeStateHash(List<string> 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<int> list1 = new List<int>();
list1.Add(int.Parse(state));
key_state_Hash[key] = list1;
} else {
List<int> list1 = (List<int>)key_state_Hash[key];
list1.Add(int.Parse(state));
key_state_Hash[key] = list1;
}
if (!key_exstate_Hash.ContainsKey(key)) {
List<int> list1 = new List<int>();
list1.Add(int.Parse(exstate));
key_exstate_Hash[key] = list1;
} else {
List<int> list1 = (List<int>)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<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[1].Equals(str)){
return data;
}
}
}
return null;
}
//工作面定义(获取安装地点数据--工作面) 根据工作面编号
string[] getProperty_workarea(string str){
JObject obj = JObject.Parse(CMD104);
int nLen = obj["CONTENT"].ToString().Trim().Length;
if(nLen>0){
JArray content = (JArray)obj["CONTENT"];
for(int i=0;i<content.Count;i++){
JArray content1 = (JArray)content[i];
string[] data = new string[content1.Count];
for(int j=0;j<content1.Count;j++){
data[j] = content1[j].ToString();
}
if(data[2].Equals(str)){
return data;
}
}
}
return null;
}
//获取断电区域
string getSs_poffarea_name(string key){
string ss_poffarea_name = "";
foreach (string key102 in CMD102_Hash.Keys){
string[] data102 = (string[])CMD102_Hash[key102];
if(key.Equals(key102)){
string[] channels = new string[0];
if (data102[1] != null) {
//data102[1] 被控通道位
channels = bitChannel(int.Parse(data102[1]),8);
}
foreach (string channel in channels){
string code = formatToTwo(data102[2]) + "C" + formatToTwo(channel);
string[] tpProperty_c = (string[])(CMD101_Hash[code]);
if(tpProperty_c!=null) {
//区域定义 工作面定义104-42-区域编号
string[] workarea_property = getProperty_workarea(tpProperty_c[42]);
if(workarea_property==null){
continue;
}
//断电区域名称
ss_poffarea_name = workarea_property[3];
break;
}
}
}
}
return ss_poffarea_name;
}
//测点所属区域名称
private string getSs_transducer_point(string key){
string[] data = (string[])CMD101_Hash[key];
//安装地点
string ss_transducer_point = "";
if(getProperty_workarea(data[42])!=null){
ss_transducer_point = getProperty_workarea(data[42])[3];
}
//string point_str = configIni.ReadValue("地点","AddrOrWNameOrRName");
if(getProperty_workarea(data[42])!=null&&getProperty_area(getProperty_workarea(data[42])[1])!=null){
ss_transducer_point = getProperty_area(getProperty_workarea(data[42])[1])[2];
}
// if(point_str.Equals("addr")){
// ss_transducer_point = data[22];
// }else if(point_str.Equals("wname")){
// if(getProperty_workarea(data[42])!=null){
// ss_transducer_point = getProperty_workarea(data[42])[3];
// }
// }else if(point_str.Equals("rname")){
// if(getProperty_workarea(data[42])!=null&&getProperty_area(getProperty_workarea(data[42])[1])!=null){
// ss_transducer_point = getProperty_area(getProperty_workarea(data[42])[1])[2];
// }
// }
return ss_transducer_point;
}
string getCurrentTime(){
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss",new System.Globalization.DateTimeFormatInfo());
}
//转换数据格式
string formatToTwo(string str){
return double.Parse(str).ToString("00");
}
string formatToDouble(string str){
return double.Parse(str).ToString("0.00");
}
//----------------------------------------FTP上传-----------------------------------------------------
//ftp上传
string ftpServerIP;
string ftpRemotePath;
string ftpUserID = null;
string ftpPassword = null;
string ftpURI;
Boolean ftp_buffer = true;
Boolean ftp_boo = true;
string ftpUpload(string filename){
ftpServerIP = configIni.ReadValue("ftp","ftpurl");
ftpRemotePath = configIni.ReadValue("ftp","file");
ftpUserID = configIni.ReadValue("ftp","username");
ftpPassword = configIni.ReadValue("ftp","password");
ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
string ret = Upload(filename);
return ret;
}
//根据generateFile.txt判断是否使用FTP上传
string isFTP(){
string isNeed = "";
//读取generateFile.txt文件内容
JArray array = readGenerateFile();
foreach (JObject items in array){
string resource = items["resource"].ToString();
if(resource.Equals("FTP")){
isNeed = items["isNeed"].ToString();
}
}
return isNeed;
}
//上传
string Upload(string filename){
string ret = "success";
FileInfo fileInf = new FileInfo(filename);
string uri = ftpURI + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
if (ftpUserID != null){
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
}
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.UsePassive = false;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
try {
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0) {
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
strm.Close();
fs.Close();
} catch (Exception ex) {
ret = "error";
//throw new Exception("Ftphelper Upload Error --> " + 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);
}
}
}
}