2025-07-16 18:08:40 +08:00
|
|
|
|
|
|
|
|
using JinYuan.DataConvertLib;
|
|
|
|
|
using JinYuan.Helper;
|
|
|
|
|
using JinYuan.Models;
|
|
|
|
|
using MiniExcelLibs;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace LargeSquareOne
|
|
|
|
|
{
|
|
|
|
|
public partial class FrmVariableConfig : Form
|
|
|
|
|
{
|
|
|
|
|
public FrmVariableConfig()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
|
|
|
|
this.cmb_DataType.DataSource = Enum.GetNames(typeof(DataType));
|
|
|
|
|
|
|
|
|
|
this.dgv_Main.AutoGenerateColumns = false;
|
|
|
|
|
|
|
|
|
|
List<Group> TotalGroups = GetALLGroups();
|
|
|
|
|
|
|
|
|
|
TotalVariables = GetALLVariables();
|
|
|
|
|
|
|
|
|
|
this.cmb_GroupName.SelectedIndexChanged += Cmb_GroupName_SelectedIndexChanged;
|
|
|
|
|
|
|
|
|
|
if (TotalGroups.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
foreach (var item in TotalGroups)
|
|
|
|
|
{
|
|
|
|
|
this.cmb_GroupName.Items.Add(item.GroupName);
|
|
|
|
|
}
|
|
|
|
|
this.cmb_GroupName.SelectedIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Cmb_GroupName_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RefreshVariable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 减少闪烁
|
|
|
|
|
protected override CreateParams CreateParams
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
CreateParams cp = base.CreateParams;
|
|
|
|
|
cp.ExStyle |= 0x02000000;
|
|
|
|
|
return cp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 无边框拖动
|
|
|
|
|
private Point mPoint;
|
|
|
|
|
private void Panel_MouseDown(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
mPoint = new Point(e.X, e.Y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Panel_MouseMove(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Button == MouseButtons.Left)
|
|
|
|
|
{
|
|
|
|
|
this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private string groupPath = Application.StartupPath + "\\Config\\Group.xlsx";
|
|
|
|
|
|
|
|
|
|
private string variablePath = Application.StartupPath + "\\Config\\Variable.xlsx";
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 总变量地址
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<Variable> TotalVariables = new List<Variable>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 单一通信组地址
|
|
|
|
|
/// </summary>
|
|
|
|
|
private List<Variable> SignelVariables = new List<Variable>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取所有通信组
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private List<Group> GetALLGroups()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
return MiniExcel.Query<Group>(groupPath).ToList();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return new List<Group>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取所有变量
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private List<Variable> GetALLVariables()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
return MiniExcel.Query<Variable>(variablePath).ToList();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return new List<Variable>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 根据通信组名称筛选
|
|
|
|
|
private List<Variable> GetVariablesByGroupName(string groupName)
|
|
|
|
|
{
|
|
|
|
|
if (groupName.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
return TotalVariables;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return TotalVariables.FindAll(x => x.GroupName == groupName).ToList();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 更新变量集合
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void RefreshVariable()
|
|
|
|
|
{
|
|
|
|
|
var list = GetVariablesByGroupName(this.cmb_GroupName.Text.Trim());
|
|
|
|
|
this.dgv_Main.DataSource = null;
|
|
|
|
|
if (list != null && list.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
SignelVariables = list;
|
|
|
|
|
this.dgv_Main.DataSource = list;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断变量名称是否存在
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="variableName"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private bool IsVariableNameExits(string variableName)
|
|
|
|
|
{
|
|
|
|
|
return TotalVariables.FindAll(c => c.VarName == variableName).ToList().Count < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region 增删改通信组
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 增加
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_Add_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string varName = this.txt_VarName.Text.Trim();
|
|
|
|
|
if (varName.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "变量名称不能为空!", "添加变量").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IsVariableNameExits(varName))
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "变量名称已存在!", "添加变量").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TotalVariables.Add(new Variable()
|
|
|
|
|
{
|
|
|
|
|
VarName = varName,
|
|
|
|
|
VarAddress = this.txt_VarAddress.Text,
|
|
|
|
|
Start = this.txt_Start.Text.Trim(),
|
|
|
|
|
OffsetOrLenght = Convert.ToUInt16(this.num_OffsetOrLenght.Value),
|
|
|
|
|
DataType = this.cmb_DataType.Text.Trim(),
|
|
|
|
|
GroupName = this.cmb_GroupName.Text.Trim(),
|
|
|
|
|
PosAlarm = this.chk_PosAlarm.Checked,
|
|
|
|
|
NegAlarm = this.chk_NegAlarm.Checked,
|
|
|
|
|
Scale = Convert.ToSingle(this.num_Scale.Value),
|
|
|
|
|
Offset = Convert.ToSingle(this.num_Offset.Value),
|
|
|
|
|
Remark = this.txt_Remark.Text.Trim()
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true);
|
|
|
|
|
|
|
|
|
|
//刷新数据
|
|
|
|
|
RefreshVariable();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(3, "添加变量失败:" + ex.Message, "添加变量").Show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 删除
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_Delete_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string varName = this.txt_VarName.Text.Trim();
|
|
|
|
|
|
|
|
|
|
if (varName.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请选择需要删除的变量!", "删除变量").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (IsVariableNameExits(varName))
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "变量名称不存在!", "变量信组").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TotalVariables.RemoveAll(c => c.VarName == varName);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true);
|
|
|
|
|
|
|
|
|
|
//刷新数据
|
|
|
|
|
RefreshVariable();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
new FrmMsgBoxOutWithAck(3, "删除变量失败:" + ex.Message, "删除变量").Show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 修改
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void btn_Modify_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string varName = this.txt_VarName.Text.Trim();
|
|
|
|
|
if (varName.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "请选择需要修改的变量!", "修改变量").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (IsVariableNameExits(varName))
|
|
|
|
|
{
|
|
|
|
|
new FrmMsgBoxOutWithAck(2, "变量名称已存在!", "修改变量").Show();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var variable = TotalVariables.Find(c => c.VarName == varName);
|
|
|
|
|
|
|
|
|
|
variable.VarAddress = this.txt_VarAddress.Text.Trim();
|
|
|
|
|
variable.Start = this.txt_Start.Text.Trim();
|
|
|
|
|
variable.OffsetOrLenght = Convert.ToUInt16(this.num_OffsetOrLenght.Value);
|
|
|
|
|
variable.DataType = this.cmb_DataType.Text.Trim();
|
|
|
|
|
variable.GroupName = this.cmb_GroupName.Text.Trim();
|
|
|
|
|
variable.PosAlarm = this.chk_PosAlarm.Checked;
|
|
|
|
|
variable.NegAlarm = this.chk_NegAlarm.Checked;
|
|
|
|
|
variable.Scale = Convert.ToSingle(this.num_Scale.Value);
|
|
|
|
|
variable.Offset = Convert.ToSingle(this.num_Offset.Value);
|
|
|
|
|
variable.Remark = this.txt_Remark.Text.Trim();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true);
|
|
|
|
|
|
|
|
|
|
//刷新数据
|
|
|
|
|
RefreshVariable();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
new FrmMsgBoxOutWithAck(3, "修改变量失败:" + ex.Message, "修改变量").Show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
private void btn_Close_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
this.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 行号
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void dgv_Main_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
DataGridViewHelper.DgvRowPostPaint((DataGridView)sender, e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 默认为空显示特定字符
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void dgv_Main_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
object value = this.dgv_Main.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
|
|
|
|
|
|
|
|
|
|
if (e.ColumnIndex == 6 || e.ColumnIndex == 7)
|
|
|
|
|
{
|
|
|
|
|
if (value != null)
|
|
|
|
|
{
|
|
|
|
|
e.Value = value.ToString() == "True" ? "启用" : "禁用";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (value == null || value.ToString().Length == 0)
|
|
|
|
|
{
|
|
|
|
|
e.Value = "---";
|
2025-07-31 11:18:43 +08:00
|
|
|
}
|
|
|
|
|
;
|
2025-07-16 18:08:40 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 选中行显示
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
private void dgv_Main_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.RowIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int index = e.RowIndex;
|
|
|
|
|
UpdateVariable(SignelVariables[e.RowIndex]); //Variable variable
|
2025-07-31 11:18:43 +08:00
|
|
|
|
2025-07-16 18:08:40 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateVariable(Variable variable)
|
|
|
|
|
{
|
|
|
|
|
if (variable != null)
|
|
|
|
|
{
|
|
|
|
|
this.cmb_GroupName.Text = variable.GroupName;
|
|
|
|
|
this.txt_VarName.Text = variable.VarName;
|
|
|
|
|
this.txt_VarAddress.Text = variable.VarAddress;
|
|
|
|
|
this.txt_Start.Text = variable.Start;
|
|
|
|
|
this.num_OffsetOrLenght.Value = variable.OffsetOrLenght;
|
|
|
|
|
this.cmb_DataType.Text = variable.DataType;
|
|
|
|
|
this.chk_NegAlarm.Checked = variable.NegAlarm;
|
|
|
|
|
this.chk_PosAlarm.Checked = variable.PosAlarm;
|
|
|
|
|
this.num_Scale.Value = Convert.ToDecimal(variable.Scale);
|
|
|
|
|
this.num_Offset.Value = Convert.ToDecimal(variable.Offset);
|
|
|
|
|
this.txt_Remark.Text = variable.Remark;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|