CRVM-redis-6/client/IClientMainForm.cs
2025-11-07 02:02:31 +08:00

1556 lines
55 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using CRVM.CIDExcuter;
using CRVM.Entity;
using System.IO;
using ICService;
using System.ServiceModel;
using System.Threading.Tasks;
using CRVM.Utility;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Drawing;
using System.ComponentModel;
namespace CRVM
{
struct FileReview
{
public string fileType;
public string filePath;
public bool readOK;
}
public partial class IClientMainForm : Form
{
[DllImport("kernel32.dll")]
static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);
private bool isReview = false;
private bool isRollInfoRead = false;
private enum SystemStatus { off = 0, start = 1, stop = 2, pause = 3 }
private SystemStatus sysStatus = SystemStatus.off;
Callback back;
InstanceContext instanceContext;
DuplexChannelFactory<IPushMessage> channelFactory;
IPushMessage proxy;
string uid;
private DateTime ConnectLastTime;
MessageShowForm nodata_form;
bool nodata_rcv = true;
private Machine mac;
private Machine macReview;
private DataProcessCenter dpc;
private Plotting onlinePlot;
private PlottingReview reviewPlot;
private Plot_energy reviewPlot_Energy;
private IViewHelper fileHelper;
private DbHelper dbHelper;
private ToolStripLabel labelAlarmNow;
private ToolStripComboBox comBoxAlarmNow;
private ToolStripLabel labelAlarmLast;
private ToolStripComboBox comBoxAlarmLast;
public delegate void Shda();
private DateTime stoptime;
private DateTime starttime;
private bool firsttime = true;
//测试
private DateTime St1;
private int st1Times = 0;
AlarmShowForm alarmForm;//报警弹窗 显示报警机架
public IClientMainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
backgroundWorker_fileRead.DoWork += backgroundWorker_fileRead_DoWork;
backgroundWorker_fileRead.RunWorkerCompleted += backgroundWorker_fileRead_RunWorkerCompleted;
SysParam.Instance.searchStartTime = DateTime.Now.AddDays(-1);
SysParam.Instance.searchEndTime = DateTime.Now;
SysParam.Instance.appPath = Application.StartupPath;
ConfigHelper.GetInstance(SysParam.Instance.appPath + "\\AppSetting.config");
ConfigHelper.GetInstance("").InitialData();
dbHelper = DbHelper.GetInstance(SysParam.Instance.appPath);
if (!dbHelper.LoadConfigData(dbHelper))
{
MessageBox.Show("数据库配置文件丢失或损坏!");
}
dbHelper.SetL2Connect();
dbHelper.SetLocalConnect();
dbHelper.isStart = true;
InitialSetting();
DbHelper.GetInstance("").autoUpdateAlarmParam();//数据库报警参数更新
}
private void InitialSetting()
{
//标签控件初始化
ServerStartView();
if (comBoxAlarmNow == null && labelAlarmNow == null)
{
//Alarm_Info_show();
}
btStop.Enabled = false;
btPause.Enabled = false;
connectStatusStrip.Text = " ";
connectStatusStrip.BackColor = System.Drawing.Color.RoyalBlue;
this.btnAlarmVisual.Image = global::client.Properties.Resources.;
tableLayoutPanel4.Visible = false;
tableLayoutPanel2.ColumnStyles[2].Width = 0;
tableLayoutPanel2.ColumnStyles[2].SizeType = SizeType.Absolute;
}
#region
private void ServerStartView()
{
titileSet titile0 = new titileSet();
titile0.change += new titileSet.Change(titile0_change);
titile0.labelText = "通道选择 ";
tableLayoutPanel3.Controls.Add(titile0, 0, 0);
titile0 = new titileSet();
titile0.change += new titileSet.Change(titile1_change);
titile0.labelText = "瞬时波形 ";
tableLayoutPanel3.Controls.Add(titile0, 0, 2);
titile0 = new titileSet();
titile0.change += new titileSet.Change(titile2_change);
titile0.labelText = "趋势波形 ";
tableLayoutPanel3.Controls.Add(titile0, 0, 4);
titile0 = new titileSet();
titile0.change += new titileSet.Change(titile3_change);
titile0.labelText = "显示方式 ";
tableLayoutPanel3.Controls.Add(titile0, 0, 6);
if (sysStatus == SystemStatus.off)
{
//online
panel1.Controls.Clear();
panel2.Controls.Clear();
panel3.Controls.Clear();
panel4.Controls.Clear();
ChannelSelect cs = new ChannelSelect();
cs.Dock = DockStyle.Fill;
panel1.Controls.Add(cs);
GraCheckedTime gct = new GraCheckedTime();
gct.Dock = DockStyle.Fill;
panel2.Height = 256;
panel2.Controls.Add(gct);
GraCheckedEnergy gce = new GraCheckedEnergy();
gce.Dock = DockStyle.Fill;
panel3.Controls.Add(gce);
GraphOrder go = new GraphOrder();
go.Dock = DockStyle.Fill;
panel4.Controls.Add(go);
}
}
private void titile3_change(bool opend)
{
changeVisible(panel4, opend);
}
private void titile2_change(bool opend)
{
changeVisible(panel3, opend);
}
private void titile1_change(bool opend)
{
changeVisible(panel2, opend);
}
private void titile0_change(bool opend)
{
changeVisible(panel1, opend);
}
private void changeVisible(Panel panel, bool opened)
{
if (opened)
{
panel.Visible = true;
}
else
{
panel.Visible = false;
}
}
#endregion
void dpc_DataChanged(OrginalCollectDataEventArgs e)
{
}
void back_MacDataChanged(object sender, MacDataEventArgs e)
{
st1Times++;
ConnectLastTime = DateTime.Now;
nodata_rcv = false;
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
for (int j = 0; j < SysParam.Instance.samplePoint; j++)
{
mac.Stand[i].vib[j] = e.data.vibData[i * SysParam.Instance.samplePoint + j];
}
}
for (int i = 0; i < e.data.standSpeed.Length; i++)
{
mac.Stand[i].speed = e.data.standSpeed[i];
}
mac.lengthSpeed = e.data.lenthSpeed;
mac.cutted = e.data.cutState;
mac.stripLength = e.data.stripLength;
if (dpc == null)
{
return;
}
dpc.DataProcess();
//Console.WriteLine("start time: "+St1.ToString("HH:mm:ss fff") + $",times:{st1Times}"+$" diff time:{(ConnectLastTime-St1).TotalMilliseconds/200}");
if (mac.cutted)
{
DevelopLog.DeBug.WriteLogFile("back_MacDataChanged", "start time: " + St1.ToString("HH:mm:ss fff") + String.Format(",times:{0}", st1Times) + String.Format(" diff time:{0}", (ConnectLastTime - St1).TotalMilliseconds / 200));
}
}
private void start_Click(object sender, EventArgs e)
{
//测试
St1 = DateTime.Now;
st1Times = 0;
needRing = false;
isRollInfoRead = false;
bool isCanConnect = false;
ConnectLastTime = DateTime.Now;
Timer_Graph.Interval = 200;
starttime = DateTime.Now;
if ((starttime - stoptime).Seconds < 5 && firsttime == false)
{
MessageShowForm form = new MessageShowForm("警告", "操作太过频繁,请稍后!");
form.ShowDialog();
return;
}
new Task(() => DeleteFile()).Start();
try
{
back = new Callback();
back.MacDataChanged += new MacDataHandle(back_MacDataChanged);
instanceContext = new InstanceContext(back);
channelFactory = new DuplexChannelFactory<IPushMessage>(instanceContext, "services");
proxy = channelFactory.CreateChannel();
uid = Guid.NewGuid().ToString();
proxy.Login(uid);
isCanConnect = true;
//if (backgroundWorker_ConnectTest.IsBusy)
//{
// MessageShowForm form = new MessageShowForm("警告", "操作太过频繁,请稍后!");
// form.ShowDialog();
// return;
//}
//else
//{
// backgroundWorker_ConnectTest.RunWorkerAsync();
//}
recordLog("打开数据采集");
}
catch (Exception)
{
DialogResult dr = MessageBox.Show("与服务端建立连接失败!点击确定退出,点击取消可继续使用回放历史数据功能。", "问题提示", MessageBoxButtons.OKCancel);
recordLog("与服务端建立连接失败!");
if (dr == DialogResult.OK)
{
this.Close();
}
}
if (!isCanConnect)
{
return;
}
sysStatus = SystemStatus.start;
mainFormRefresh();
mac = new Machine(SysParam.Instance.channelCount, SysParam.Instance.samplePoint, SysParam.Instance.timePoints, SysParam.Instance.energyPoints);
mac.lenCountStart = 0;
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
mac.Stand[i].alarm_L_Times_ck = SysParam.Instance.channel[i].alarmTimes_l;
mac.Stand[i].alarm_M_Times_ck = SysParam.Instance.channel[i].alarmTimes_m;
mac.Stand[i].alarm_H_Times_ck = SysParam.Instance.channel[i].alarmTimes_h;
mac.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].alarmConfig);
}
dpc = new DataProcessCenter(mac);
dpc.DataChanged += new ComeNewDataHandle(dpc_DataChanged);
CloseDocumnet("Plotting");
IDockContent dock = IsExistDocumnet("Plotting");
if (dock == null)
{
onlinePlot = new Plotting(mac);
onlinePlot.Show(dockPanel1, DockState.Document);
}
Timer_Graph.Start();
SysParam.Instance.onlineList.Clear();
firsttime = false;
}
private void stop_Click(object sender, EventArgs e)
{
needRing = false;
stoptime = DateTime.Now;
DialogResult dir = MessageBox.Show("确定停止采集数据吗?", "信息提示框", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dir == DialogResult.OK)
{
try
{
if (proxy != null)
{
proxy.Leave(uid);
}
}
catch (Exception ex)
{
//throw;
DevelopLog.DeBug.WriteLogFile("stop_Click", ex.Message);
}
sysStatus = SystemStatus.stop;
Timer_Graph.Interval = 200;
//if (backgroundWorker_ConnectTest.IsBusy)
//{
// backgroundWorker.CancelAsync();
//}
SysParam.Instance.onlineList.Clear();
mainFormRefresh();
if (dpc != null)
{
dpc.Stop();
}
Timer_Graph.Stop();
Timer_Graph_Tick(sender, e);
recordLog("关闭数据采集");
timer1.Stop();
dpc = null;
}
else
{
return;
}
}
private void pause_Click(object sender, EventArgs e)
{
if (sysStatus == SystemStatus.start)
{
sysStatus = SystemStatus.pause;
Timer_Graph.Stop();
//提取轧制距离列表用于后续数据点显示
mac.distance_Pause = mac.distance_Running.ToArray();
onlinePlot.IsShowMenuStrip(true);
}
else if (sysStatus == SystemStatus.pause)
{
sysStatus = SystemStatus.start;
Timer_Graph.Start();
onlinePlot.IsShowMenuStrip(false);
}
mainFormRefresh();
}
private IDockContent IsExistDocumnet(string name)
{
IDockContent b = null;
foreach (IDockContent content in dockPanel1.Documents)
{
if (content.DockHandler.TabText == name)
{
b = content;
break;
}
}
return b;
}
private void CloseDocumnet(string name)
{
foreach (IDockContent content in dockPanel1.Documents)
{
if (content.DockHandler.TabText == name)
{
//content.DockHandler.Dispose();
content.DockHandler.Close();
break;
}
}
}
private void Timer_Graph_Tick(object sender, EventArgs e)
{
int timeElapsed = (DateTime.Now - ConnectLastTime).Seconds;
if (timeElapsed > 15)
{
if (nodata_form == null || nodata_form.IsDisposed)
{
//DevelopLog.DeBug.WriteLogFile("Timer:", ConnectLastTime.ToString());
recordLog("未接收到服务器发送的任何数据,请查看服务端是否开启!");
nodata_form = new MessageShowForm("警告", "未接收到服务器发送的任何数据,请查看服务端是否开启!");
nodata_form.Show();
}
else
{
nodata_form.Activate();
nodata_form.WindowState = FormWindowState.Normal;
}
Timer_Graph.Interval = 10000;
}
else
{
Timer_Graph.Interval = 200;
}
if (timeElapsed > 1)//与服务器数据断开超过1秒
{
DevelopLog.DeBug.WriteLogFile("Timer_Graph_Tick", String.Format("与服务端断开链接超过1s超时时间{0}s", timeElapsed));
proxy = channelFactory.CreateChannel();
//uid = Guid.NewGuid().ToString();//不要改变uid此处该行注释
proxy.Login(uid);
}
//if (timeElapsed > 1)//与服务器数据断开超过1秒
//{
// DevelopLog.DeBug.WriteLogFile("Timer_Graph_Tick", $"与服务端断开链接超过1s超时时间{timeElapsed}s");
// try
// {
// if (proxy != null)
// {
// proxy.Leave(uid);
// }
// proxy = channelFactory.CreateChannel();
// uid = Guid.NewGuid().ToString();
// proxy.Login(uid);
// //recordLog("数据采集与服务端重连");
// }
// catch (Exception ex)
// {
// //throw;
// DevelopLog.DeBug.WriteLogFile("Timer_Graph_Tick", ex.Message);
// //recordLog("数据采集与服务端重连");
// }
//}
if (onlinePlot != null)
{
//图表刷新
if (onlinePlot.InvokeRequired)
onlinePlot.Invoke(new Shda(onlinePlot.GraRefresh));
else
onlinePlot.GraRefresh();
}
if (!isReview)
{
distance_Strip.Text = "轧制距离: " + mac.stripLength.ToString("00000.0") + "m ";
cutLenSpeedStrip.Text = "出口速度: " + mac.lengthSpeed.ToString("0000") + "m/min";
}
if (dpc.alarmInfoNowChanged)
{
dpc.alarmInfoNowChanged = false;
/*comBoxAlarmNow.Items.Clear();
comBoxAlarmNow.Text = "";
comBoxAlarmNow.Items.AddRange(dpc.alarmInfoNow.ToArray());
if (comBoxAlarmNow.Items.Count > 0)
{
comBoxAlarmNow.SelectedIndex = comBoxAlarmNow.Items.Count - 1;
}*/
//Console.WriteLine($"dpc.alarmInfoNowMG.Count:{dpc.alarmInfoNowMG.Count},mac.cutted:{mac.cutted}");
if (dpc.alarmInfoNowMG.Count == 0)
{
return;
}
string alarmText = "";
for (int i = 0; i < dpc.alarmInfoNowMG.Count; i++)
{
alarmText += dpc.alarmInfoNowMG[i] + "\r\n\r\n";
}
alarmShowText.Text = alarmText;
panel6.BackColor = System.Drawing.Color.Red;
if (alarmForm == null)
{
alarmForm = new AlarmShowForm(this);
int x = this.Location.X + this.Width / 2 - alarmForm.Width / 2;
Point point = new Point(x, 0);
alarmForm.Location = point;
alarmForm.StartPosition = FormStartPosition.Manual;
alarmForm.ShowDialog();
}
else
{
if (alarmForm.IsDisposed)
{
alarmForm = new AlarmShowForm(this);
int x = this.Location.X + this.Width / 2 - alarmForm.Width / 2;
Point point = new Point(x, 0);
alarmForm.Location = point;
alarmForm.StartPosition = FormStartPosition.Manual;
alarmForm.ShowDialog();
}
}
if (AlarmDataChangEvent != null)
{
AlarmDataChangEvent.Invoke(new Alarmdata(dpc.alarmInfoNowMG));
}
}
if (dpc.alarmInfoNowMG.Count == 0)
{
panel6.BackColor = System.Drawing.Color.FromArgb(224, 224, 224);
}
if (dpc.alarmInfoLastChanged)
{
dpc.alarmInfoLastChanged = false;
if (dpc.alarmInfoLast != null)
{
/*comBoxAlarmLast.Items.Clear();
comBoxAlarmLast.Items.AddRange(dpc.alarmInfoLast);
comBoxAlarmLast.SelectedIndex = comBoxAlarmLast.Items.Count - 1;*/
}
}
//if (SysParam.Instance.alarmingType == 0)
//{
// if (alarmForm != null)
// {
// alarmForm.Visible = false;
// }
//}
//else if (SysParam.Instance.alarmingType == 1)
//{
// if (alarmForm != null)
// {
// alarmForm.Visible = false;
// }
//}
//else if (SysParam.Instance.alarmingType == 2)
////报警时
//{
// if (alarmForm == null)
// {
// alarmForm = new AlarmShowForm(this);
// int x = this.Location.X + this.Width / 2 - alarmForm.Width / 2;
// Point point = new Point(x, 0);
// alarmForm.Location = point;
// alarmForm.StartPosition = FormStartPosition.Manual;
// alarmForm.ShowDialog();
// }
// else
// {
// alarmForm.Visible = true;
// }
// if (AlarmDataChangEvent != null)
// {
// AlarmDataChangEvent.Invoke(null);
// }
/*else
{
if (alarmForm.IsDisposed)
{
alarmForm = new AlarmShowForm(this);
int x = this.Location.X + this.Width / 2 - alarmForm.Width / 2;
Point point = new Point(x, 0);
alarmForm.Location = point;
alarmForm.StartPosition = FormStartPosition.Manual;
alarmForm.ShowDialog();
}
}*/
//}
}
private void Timer_CoilInfo_Tick(object sender, EventArgs e)
{
//this.Timer_CoilInfo.Interval = DbHelper.GetInstance("").Freq * 1000;
//if (!backgroundWorker.IsBusy && dbHelper.isStart)
//{
// backgroundWorker.RunWorkerAsync();
//}
//if (dbHelper.isStart == false)
//{
// connectStatusStrip.BackColor = System.Drawing.Color.Red;
// connectStatusStrip.Text = "系统与L2的数据连接尚未开启......";
//}
}
private void btnViewOut_Click(object sender, EventArgs e)
{
isReview = false;
mainFormRefresh();
CloseDocumnet("PlottingReview");
CloseDocumnet("Plot_energy");
if (sysStatus != SystemStatus.off)
{
IDockContent dock = IsExistDocumnet("Plotting");
if (dock == null)
{
onlinePlot = new Plotting(mac);
onlinePlot.Show(dockPanel1, DockState.Document);
}
}
}
private void btnViewIn_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog1.FileName;
//DataRead(filePath);//打开文件
if (File.Exists(filePath))
{
isReview = true;
mainFormRefresh();
if (backgroundWorker_fileRead.IsBusy)
{
MessageBox.Show("正在读取文件....");
}
else
{
backgroundWorker_fileRead.RunWorkerAsync(filePath);
}
}
}
}
void FileExistsCheck(object sender, string filePath)
{
if (File.Exists(filePath))
{
//DataRead(filePath);
isReview = true;
mainFormRefresh();
//DataRead(filePath);
if (backgroundWorker_fileRead.IsBusy)
{
MessageBox.Show("正在读取文件....");
}
else
{
backgroundWorker_fileRead.RunWorkerAsync(filePath);
}
}
else
{
MessageBox.Show("查找的文件不存在");
}
}
void backgroundWorker_fileRead_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
FileReview fileStruct = new FileReview();
fileStruct = (FileReview)e.Result;
if (fileStruct.readOK)
{
if (fileStruct.fileType == "0")
{
DataReview();//检查能量文件是否存在后再回放
new Task(() => GetFileCoilInfo(fileStruct.filePath, true)).Start();
}
else
{
DataReviewEnergy();//能量数据回放
new Task(() => GetFileCoilInfo(fileStruct.filePath, false)).Start();
}
}
}
void backgroundWorker_fileRead_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
string filePath = e.Argument.ToString();
FileReview fileStruct = new FileReview();
fileStruct.filePath = filePath;
if (fileHelper == null)
fileHelper = new IViewHelper(filePath);
else
fileHelper.ReadFile(filePath);
if (fileHelper.FileOk)
{
string alarmFilePath = fileHelper.selectAlarmFile(filePath);
ConfigHelper.GetOrigInstance(alarmFilePath);
if (filePath.Contains(".txt"))
{
if (filePath.Contains("original"))
{
string fileName = filePath.Replace("original", "energy");///////////读取能量信息 20151112
if (File.Exists(fileName))
{
fileHelper.ReadFile(fileName);
}
else
{
MessageBox.Show("能量数据文件不存在");
}
macReview = new Machine(SysParam.Instance.channelCount, 1, 1, 1);
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
macReview.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].reAlarmConfig);
}
fileStruct.fileType = "0";
fileStruct.readOK = true;
//DataReview();//检查能量文件是否存在后再回放
//new Task(() => GetFileCoilInfo(filePath, true)).Start();
}
else
{
if (File.Exists(filePath))
{
fileHelper.ReadFile(filePath);
}
else
{
MessageBox.Show("能量数据文件不存在");
}
macReview = new Machine(SysParam.Instance.channelCount, 1, 1, 1);
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
macReview.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].reAlarmConfig);
}
fileStruct.fileType = "1";
fileStruct.readOK = true;
//DataReviewEnergy();//能量数据回放
//new Task(() => GetFileCoilInfo(filePath, false)).Start();
}
}
else if (filePath.Contains(".dat"))
{
string fileName1 = filePath.Replace("original", "energy");
string fileName = fileName1.Replace(".dat", ".txt");
if (File.Exists(fileName))
{
fileHelper.ReadFile(fileName);
}
else
{
MessageBox.Show("能量数据文件不存在");
}
macReview = new Machine(SysParam.Instance.channelCount, 1, 1, 1);
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
macReview.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].reAlarmConfig);
}
fileStruct.fileType = "0";
fileStruct.readOK = true;
}
}
else
{
fileStruct.readOK = false;
MessageBox.Show("文件已损坏!");
}
e.Result = fileStruct;
}
private void DataReviewEnergy()
{
CloseDocumnet("PlottingReview");
CloseDocumnet("Plotting");
CloseDocumnet("Plot_energy");
reviewPlot_Energy = new Plot_energy(fileHelper, macReview);
reviewPlot_Energy.Show(this.dockPanel1, DockState.Document);
}
private void DataRead(string filePath)
{
if (fileHelper == null)
fileHelper = new IViewHelper(filePath);
else
fileHelper.ReadFile(filePath);
if (fileHelper.FileOk)
{
isReview = true;
mainFormRefresh();
string alarmFilePath = fileHelper.selectAlarmFile(filePath);
ConfigHelper.GetOrigInstance(alarmFilePath);
if (filePath.Contains(".txt"))
{
if (filePath.Contains("original"))
{
string fileName = filePath.Replace("original", "energy");///////////读取能量信息 20151112
if (File.Exists(fileName))
{
fileHelper.ReadFile(fileName);
}
else
{
MessageBox.Show("能量数据文件不存在");
}
macReview = new Machine(SysParam.Instance.channelCount, 1, 1, 1);
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
macReview.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].reAlarmConfig);
}
DataReview();//检查能量文件是否存在后再回放
new Task(() => GetFileCoilInfo(filePath, true)).Start();
}
else
{
DataReviewEnergy();//能量数据回放
new Task(() => GetFileCoilInfo(filePath, false)).Start();
}
}
else if (filePath.Contains(".dat"))
{
string fileName1 = filePath.Replace("original", "energy");
string fileName = fileName1.Replace(".dat", ".txt");
if (File.Exists(fileName))
{
fileHelper.ReadFile(fileName);
}
else
{
MessageBox.Show("能量数据文件不存在");
}
macReview = new Machine(SysParam.Instance.channelCount, 1, 1, 1);
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
macReview.Stand[i].SetAlarmFred(SysParam.Instance.channel[i].reAlarmConfig);
}
DataReview();//检查能量文件是否存在后再回放
new Task(() => GetFileCoilInfo(filePath, true)).Start();
}
//DbHelper.GetInstance("").RollDataInfo(macReview);
}
else
{
MessageBox.Show("文件已损坏!");
}
}
private void DataReview()
{
CloseDocumnet("PlottingReview");
CloseDocumnet("Plotting");
CloseDocumnet("Plot_energy");
reviewPlot = new PlottingReview(fileHelper, macReview);
reviewPlot.Show(dockPanel1, DockState.Document);
}
private void mainFormRefresh()
{
if (isReview)
{
Timer_Graph.Stop();
btReviewExit.Visible = true;
btstart.Enabled = false;
btPause.Enabled = false;
btStop.Enabled = false;
//btrollInfo.Enabled = true;
if (labelAlarmNow != null)
{
labelAlarmNow.Visible = false;
comBoxAlarmNow.Visible = false;
labelAlarmLast.Visible = false;
comBoxAlarmLast.Visible = false;
}
connectStatusStrip.Visible = false;
filename_Strip.Visible = true;
distance_Strip.Visible = false;
cutLenSpeedStrip.Visible = false;
if (panel2.Height != 287)
{
panel2.Controls.Clear();
GraCheckedTimeRe gctr = new GraCheckedTimeRe();
gctr.Dock = DockStyle.Fill;
panel2.Height = 287;
panel2.Controls.Add(gctr);
}
}
else
{
btReviewExit.Visible = false;
if (labelAlarmNow != null)
{
labelAlarmNow.Visible = true;
comBoxAlarmNow.Visible = true;
labelAlarmLast.Visible = true;
comBoxAlarmLast.Visible = true;
}
connectStatusStrip.Visible = true;
filename_Strip.Visible = false;
distance_Strip.Visible = true;
cutLenSpeedStrip.Visible = true;
if (panel2.Height != 256)
{
panel2.Controls.Clear();
GraCheckedTime gct = new GraCheckedTime();
gct.Dock = DockStyle.Fill;
panel2.Height = 256;
panel2.Controls.Add(gct);
}
if (sysStatus == SystemStatus.start || sysStatus == SystemStatus.pause)
{
if (sysStatus == SystemStatus.start)
{
Timer_Graph.Start();
btStop.Enabled = true;
btPause.Image = client.Properties.Resources.Pause_64;
btPause.Text = "暂停";
}
else
{
btStop.Enabled = false;
btPause.Image = client.Properties.Resources.Refresh_64;
btPause.Text = "继续";
}
btstart.Enabled = false;
btPause.Enabled = true;
//btSetAlarm.Enabled = false;
btSetStore.Enabled = false;
btSetPassword.Enabled = false;
btdatabase.Enabled = false;
//btrollInfo.Enabled = false;
}
if (sysStatus == SystemStatus.stop || sysStatus == SystemStatus.off)
{
btstart.Enabled = true;
btPause.Enabled = false;
btPause.Image = client.Properties.Resources.Pause_64;
btPause.Text = "暂停";
btStop.Enabled = false;
btSetAlarm.Enabled = true;
btSetStore.Enabled = true;
btSetPassword.Enabled = true;
btdatabase.Enabled = true;
//btrollInfo.Enabled = true;
}
}
}
//显示打开文件的钢卷信息
private void GetFileCoilInfo(string fileNameStr, bool isOrigData)
{
//查询该钢卷信息
DataTable dt = new DataTable();
macReview.review_coldcoilno = "";
macReview.review_extThick = "";
macReview.review_alloyCode = "";
macReview.review_steelGrade = "";
macReview.review_width = "";
filename_Strip.Text = "文件名:" + fileNameStr.Substring(fileNameStr.Length - 18, 18);
if (isOrigData)
{
dt = DbHelper.GetInstance("").GetCoilInfoByOriginPath(fileNameStr, macReview);
}
else
{
dt = DbHelper.GetInstance("").GetCoilInfoByEnergyPath(fileNameStr, macReview);
}
if (macReview.review_coldcoilno != "")
{
filename_Strip.Text = "文件名:" + fileNameStr.Substring(fileNameStr.Length - 18, 18) + " | 冷卷号:" + macReview.review_coldcoilno + " | 出钢记号:" + macReview.review_alloyCode + " | 宽度:" + macReview.review_width + "mm | 出口厚度:" + macReview.review_extThick + "mm";
}
/*else
{
filename_Strip.Text = "文件名:" + fileNameStr.Substring(fileNameStr.Length - 18, 18);
}*/
}
private void Alarm_Info_show()
{
labelAlarmNow = new ToolStripLabel();
comBoxAlarmNow = new ToolStripComboBox();
comBoxAlarmNow.Alignment = ToolStripItemAlignment.Right;
comBoxAlarmNow.Width = 400;
comBoxAlarmNow.DropDownHeight = 150;
comBoxAlarmNow.DropDownWidth = 400;
toolStrip1.Items.Add(comBoxAlarmNow);
toolStrip1.Items.Add(labelAlarmNow);
labelAlarmNow.Text = "当前报警信息:";
labelAlarmNow.Alignment = ToolStripItemAlignment.Right;
labelAlarmLast = new ToolStripLabel();
comBoxAlarmLast = new ToolStripComboBox();
comBoxAlarmLast.Alignment = ToolStripItemAlignment.Right;
comBoxAlarmLast.Width = 400;
comBoxAlarmLast.DropDownHeight = 150;
comBoxAlarmLast.DropDownWidth = 400;
toolStrip1.Items.Add(comBoxAlarmLast);
toolStrip1.Items.Add(labelAlarmLast);
labelAlarmLast.Text = "上次报警信息:";
labelAlarmLast.Alignment = ToolStripItemAlignment.Right;
}
private void sysconfig_Click(object sender, EventArgs e)
{
//login log = new login();
//log.ShowDialog();
//if (log.DialogResult == DialogResult.OK)
{
SetDataStorageForm newForm = new SetDataStorageForm();
newForm.ShowDialog();
}
}
private void setdisplay_Click(object sender, EventArgs e)
{
SetDisplayForm disForm = new SetDisplayForm();
disForm.ShowDialog();
}
private void setalarm_Click(object sender, EventArgs e)
{
login log = new login();
log.ShowDialog();
if (log.DialogResult == DialogResult.OK)
{
DbHelper.GetInstance("").autoUpdateAlarmParam();
SetAlarmForm newForm = new SetAlarmForm();
newForm.ShowDialog();
}
}
private void setpassword_Click(object sender, EventArgs e)
{
login log = new login();
log.ShowDialog();
if (log.DialogResult == DialogResult.OK)
{
SetPasswordForm newForm = new SetPasswordForm();
newForm.ShowDialog();
}
}
private void help_Click(object sender, EventArgs e)
{
//HelpForm help = new HelpForm();
//help.Show();
string path = AppDomain.CurrentDomain.BaseDirectory;
string url = path + "用户使用手册.pdf"; //
try
{
// 使用应用打开
Process.Start(new ProcessStartInfo(url) { UseShellExecute = true });
}
catch (Win32Exception ex) // 捕获无浏览器异常
{
if (ex.ErrorCode == -2147467259)
MessageBox.Show(String.Format("打开\"{0}\"失败:{1}", url, ex.Message));
}
catch (Exception ex)
{
MessageBox.Show(String.Format("打开\"{0}\"失败:{1}", url, ex.Message));
}
}
private void rollInfo_Click(object sender, EventArgs e)
{
if (isReview)
{
OriginRollForm form = new OriginRollForm(macReview);
form.StartPosition = FormStartPosition.CenterScreen;
form.ShowDialog();
}
else
{
OnlineRollForm form = new OnlineRollForm();
form.StartPosition = FormStartPosition.CenterScreen;
form.ShowDialog();
}
}
private void dataSearch_Click(object sender, EventArgs e)
{
DataSearchForm data = new DataSearchForm();
data.showdata += new ShowGridData(FileExistsCheck);
data.ShowDialog();
}
private void database_Click(object sender, EventArgs e)
{
login log = new login();
log.ShowDialog();
if (log.DialogResult == DialogResult.OK)
{
DataAccessForm newForm = new DataAccessForm(dbHelper);
newForm.ShowDialog();
if (newForm.DialogResult == DialogResult.OK)
{
Timer_CoilInfo.Start();
this.Timer_CoilInfo.Interval = DbHelper.GetInstance("").Freq * 1000;
}
if (newForm.DialogResult == DialogResult.No)
{
Timer_CoilInfo.Stop();
}
}
}
private void IClientMainForm_FormClosing(object sender, FormClosingEventArgs e)
{
/*needRing = false;
DialogResult dir = MessageBox.Show("确定退出本系统吗?", "信息提示框", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dir == DialogResult.OK)
{
try
{
if (dpc != null)
{
dpc.Stop();
}
}
catch (Exception)
{
throw;
}
ConfigHelper.GetInstance("").SaveConfig(Application.StartupPath);
recordLog("退出客户端");
}
else
{
e.Cancel = true;
}*/
needRing = false;
stoptime = DateTime.Now;
DialogResult dir = MessageBox.Show("确定停止采集数据吗?", "信息提示框", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dir == DialogResult.OK)
{
try
{
if (proxy != null)
{
proxy.Leave(uid);
}
}
catch
{
//throw;
}
sysStatus = SystemStatus.stop;
Timer_Graph.Interval = 200;
//if (backgroundWorker_ConnectTest.IsBusy)
//{
// backgroundWorker.CancelAsync();
//}
SysParam.Instance.onlineList.Clear();
//mainFormRefresh();
if (dpc != null)
{
dpc.Stop();
}
Timer_Graph.Stop();
//Timer_Graph_Tick(sender, e);
ConfigHelper.GetInstance("").SaveConfig(Application.StartupPath);
dbHelper.SaveAlarmParam(ConfigHelper.GetInstance("").GetAlarmParam());//保存数据库
recordLog("退出客户端");
}
else
{
e.Cancel = true;
}
}
private void toolStripLabel1_Click(object sender, EventArgs e)
{
tableLayoutPanel3.Visible = tableLayoutPanel3.Visible ? false : true;
}
private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
//string msg = "00";
//bool ischange = false;
//try
//{
// //获取钢卷信息
// DbHelper.GetInstance("").UpdateLocalCoilInfo();
// msg = "10";
// //获取在线轧辊信息
// DataTable onlineRollData = dbHelper.GetL2OnlineRollInfo();
// for (int i = 0; i < onlineRollData.Rows.Count; i++)
// {
// string rollno = onlineRollData.Rows[i]["rollno"].ToString().Trim();
// if (!SysParam.Instance.onlineList.Contains(rollno))
// {
// ischange = true;
// break;
// }
// }
// if (ischange && sysStatus == SystemStatus.start)
// {
// dbHelper.RollDataInfo(mac, onlineRollData);
// //dbHelper.UpdateLocalRollData(onlineRollData);客户端不存储轧辊信息
// SysParam.Instance.onlineList = new List<string>();
// for (int i = 0; i < onlineRollData.Rows.Count; i++)
// {
// string rollno = onlineRollData.Rows[i]["rollno"].ToString().Trim();
// SysParam.Instance.onlineList.Add(rollno);
// }
// ischange = false;
// }
// msg = "11";
//}
//catch (Exception ex)
//{
//}
//backgroundWorker.ReportProgress(0, msg);
}
private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
//if (e.UserState.ToString() == "00")
//{
// connectStatusStrip.Text = "获取L2钢卷信息异常请查看本系统与L2数据库的连接......";
// connectStatusStrip.BackColor = System.Drawing.Color.Red;
//}
//else if (e.UserState.ToString() == "10")
//{
// connectStatusStrip.Text = "获取L2在线轧辊信息异常请查看本系统与L2数据库的连接......";
// connectStatusStrip.BackColor = System.Drawing.Color.Red;
//}
//else if (e.UserState.ToString() == "11")
//{
// connectStatusStrip.Text = "获取L2在线轧辊信息正常...获取L2钢卷信息正常......";
// connectStatusStrip.BackColor = System.Drawing.Color.RoyalBlue;
//}
}
private void timer_delFile_Tick(object sender, EventArgs e)
{
new Task(() => DeleteFile()).Start();
}
private void DeleteFile()
{
string driveStr = SysParam.Instance.savePath.Substring(0, 2);
System.IO.DriveInfo drive = new System.IO.DriveInfo(driveStr);
long availabelfreespace = drive.AvailableFreeSpace / 1024 / 1024 / 1024;//剩余空间转换为G
long needFreespace = availabelfreespace - 20;//至少预留20个G的空间
if (needFreespace <= 0)
{
DirectoryInfo savedir = new DirectoryInfo(SysParam.Instance.savePath + "\\");
FileComparer fc = new FileComparer();
DirectoryInfo[] dirList = savedir.GetDirectories();
Array.Sort(dirList, fc);//根据时间排序
if (dirList.Length > 0)
{
if (Directory.Exists(dirList[0].FullName))
{
Directory.Delete(dirList[0].FullName, true);
}
}
}
//删除创建日期早于一定天数的文件夹
foreach (string dirStr in Directory.GetDirectories(SysParam.Instance.savePath))
{
DirectoryInfo dir = new DirectoryInfo(dirStr);
if (dir.CreationTime < DateTime.Now.AddDays(-SysParam.Instance.saveDaysAlarm))
{
if (Directory.Exists(dirStr))
{
Directory.Delete(dirStr, true);
}
}
}
DataTable noalarmdata = dbHelper.GetCoilInfoByDate(false, DateTime.Now.AddDays(-360), DateTime.Now.AddDays(-SysParam.Instance.saveDaysNoAlarm));
DataTable alarmdata = dbHelper.GetCoilInfoByDate(true, DateTime.Now.AddDays(-360), DateTime.Now.AddDays(-SysParam.Instance.saveDaysAlarm));
for (int i = 0; i < noalarmdata.Rows.Count; i++)
{
if (File.Exists(noalarmdata.Rows[i]["origpath"].ToString().Trim()))
{
File.Delete(noalarmdata.Rows[i]["origpath"].ToString().Trim());
}
if (File.Exists(noalarmdata.Rows[i]["energypath"].ToString().Trim()))
{
File.Delete(noalarmdata.Rows[i]["energypath"].ToString().Trim());
}
}
for (int i = 0; i < alarmdata.Rows.Count; i++)
{
if (File.Exists(alarmdata.Rows[i]["origpath"].ToString().Trim()))
{
File.Delete(alarmdata.Rows[i]["origpath"].ToString().Trim());
}
if (File.Exists(alarmdata.Rows[i]["energypath"].ToString().Trim()))
{
File.Delete(alarmdata.Rows[i]["energypath"].ToString().Trim());
}
}
}
private void backgroundWorker_ConnectTest_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
while (true)
{
try
{
proxy.Update(uid);
}
catch (Exception)
{
try
{
proxy = channelFactory.CreateChannel();
proxy.Login(uid);
}
catch (Exception)
{
backgroundWorker_ConnectTest.ReportProgress(0, "reconnect failed");
break;
}
}
if (sysStatus == SystemStatus.stop)
{
try
{
proxy.Leave(uid);
}
catch (Exception)
{
}
break;
}
}
}
private void backgroundWorker_ConnectTest_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
MessageShowForm form = new MessageShowForm("警告", e.UserState.ToString());
form.ShowDialog();
}
private void timer_RollInfo_Tick(object sender, EventArgs e)
{
if (dbHelper != null && mac != null)
{
if (isRollInfoRead == false || mac.lengthSpeed < 50)
{
DataTable rolldata = dbHelper.GetL2OnlineRollInfo();
if (rolldata.Rows.Count == 0)
{
return;
}
dbHelper.RollDataInfo(mac, rolldata);
isRollInfoRead = true;
}
}
}
public delegate void AlarmDataHandle(Alarmdata data);
public event AlarmDataHandle AlarmDataChangEvent;
public class Alarmdata : EventArgs
{
public List<string> alarmInfo;
public Alarmdata(List<string> alarmInfo)
{
this.alarmInfo = new List<string>();
for (int i = 0; i < alarmInfo.Count; i++)
{
this.alarmInfo.Add(alarmInfo[i]);
}
}
}
//设置实时报警信息兰的显示/隐藏
private void btnAlarmVisual_Click(object sender, EventArgs e)
{
//if (!isReview)
{
if (tableLayoutPanel4.Visible == true)
{
tableLayoutPanel4.Visible = false;
tableLayoutPanel2.ColumnStyles[2].Width = 0;
tableLayoutPanel2.ColumnStyles[2].SizeType = SizeType.Absolute;
this.btnAlarmVisual.Image = global::client.Properties.Resources.;
}
else
{
tableLayoutPanel4.Visible = true;
tableLayoutPanel2.ColumnStyles[2].Width = 241;
tableLayoutPanel2.ColumnStyles[2].SizeType = SizeType.Absolute;
this.btnAlarmVisual.Image = global::client.Properties.Resources.;
}
}
}
private void alarmRing_Click(object sender, EventArgs e)
{
SetAlarmRingForm ringForm = new SetAlarmRingForm();
ringForm.ShowDialog();
}
AlarmRing ring = new AlarmRing();
private void timer1_Tick(object sender, EventArgs e)
{
ring.Ring();
}
bool needRing = false;
bool needVoice = false;
private void timer2_Tick(object sender, EventArgs e)
{
needRing = false;
needVoice = false;
if ((SysParam.Instance.alarming1 && SysParam.Instance.isStand1Ring) || (SysParam.Instance.alarming2 && SysParam.Instance.isStand2Ring) ||
(SysParam.Instance.alarming3 && SysParam.Instance.isStand3Ring) || (SysParam.Instance.alarming4 && SysParam.Instance.isStand4Ring) ||
(SysParam.Instance.alarming5 && SysParam.Instance.isStand5Ring) || SysParam.Instance.alarming6 && SysParam.Instance.isStand6Ring)
//if (SysParam.Instance.alarmingType == 2)
{
//需要播放报警铃声
needRing = true;
}
/*for (int i = 5; i >= 1; i--)
{
for (int j = 3; j >= 1; j--)
{
if (SysParam.Instance.ringflag[i - 1, j - 1])
{
needVoice = true;
}
}
}*/
//needVoice = true;
if (needRing)
{
if (timer1.Enabled == false)
{
ring.Ring();
}
timer1.Enabled = true;
timer1.Interval = 200;
timer1.Start();
}
else
{
timer1.Enabled = false;
timer1.Stop();
}
}
private void btn_logInfo_Click(object sender, EventArgs e)
{
LogForm form = new LogForm();
form.ShowDialog();
}
private void recordLog(string logInfo)
{
if (dbHelper != null)
{
dbHelper.recordLogInfo("CLIENT", logInfo);
}
}
private void IClientMainForm_FormClosed(object sender, FormClosedEventArgs e)
{
Process curProcess = Process.GetCurrentProcess();
IntPtr handle = curProcess.Handle;
TerminateProcess(handle, 0);
}
}
}