Files
6150-HMI/CowainHmi/Axis/DlgAxisPosData.cs
2026-01-15 15:06:36 +08:00

245 lines
9.2 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 CowainHmi.Properties;
using PCHMI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Resources;
using System.Runtime.InteropServices.ComTypes;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;
namespace CowainHmi
{
public partial class DlgAxisPosData : Form
{
private class PosData : INotifyPropertyChanged
{
private string setPos;
private string setVel;
private bool inPos;
private bool safe;
private bool safeLock;
public string PosName { get; set; }
public string SetPos
{
get => setPos;
set
{
setPos = value;
OnPropertyChanged("SetPos");
}
}
public string SetVel
{
get => setVel;
set
{
setVel = value;
OnPropertyChanged("SetVel");
}
}
public bool InPos
{
get => inPos;
set
{
inPos = value;
OnPropertyChanged("InPos");
}
}
public bool Safe
{
get => safe;
set
{
safe = value;
OnPropertyChanged("Safe");
}
}
public bool SafeLock
{
get => safeLock;
set
{
safeLock = value;
OnPropertyChanged("SafeLock");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
private enum UnitType
{
mm,
cm,
m,
deg,
rad
}
private BindingList<PosData> list = new BindingList<PosData>();
private int id;
private int unit;
private string posAddr;
private string dataAddr;
private List<string> posNames;
public DlgAxisPosData(List<string> posNames, string posAddr, string dataAddr, int id, int unit)
{
InitializeComponent();
this.id = id;
this.posAddr = posAddr;
this.dataAddr = dataAddr;
this.posNames = posNames;
this.unit = unit;
for (int i = 0; i < posNames.Count; i++)
{
PosData data = new PosData { PosName = posNames[i] };
list.Add(data);
}
this.dgvAxisPos.AutoGenerateColumns = false;
this.dgvAxisPos.DataSource = list;
}
private async void DlgAxisPosData_Load(object sender, EventArgs e)
{
await GetPosData();
}
private async Task GetPosData()
{
for (int i = 0; i < list.Count; i++)
{
var pos = PCHMI.VL.GET_INT32(0, $"{posAddr}.{id * 384 + i * 12}");
var vel = PCHMI.VL.GET_INT32(0, $"{posAddr}.{id * 384 + i * 12 + 8}");
var inPos = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 56 + i / 8}.{i % 8}");
var safe = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 10 + i / 8}.{i % 8}");
var safeLock = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 6 + i / 8}.{i % 8}");
}
await Task.Delay(300);
for (int i = 0; i < list.Count; i++)
{
var pos = PCHMI.VL.GET_INT32(0, $"{posAddr}.{id * 384 + i * 12}");
var vel = PCHMI.VL.GET_INT32(0, $"{posAddr}.{id * 384 + i * 12 + 8}");
var inPos = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 56 + i / 8}.{i % 8}");
var safe = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 10 + i / 8}.{i % 8}");
var safeLock = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 6 + i / 8}.{i % 8}");
list[i].SetPos = $"{((double)pos / 100.0).ToString("F2")} {(UnitType)unit}";
list[i].SetVel = $"{vel} {(UnitType)unit}/s";
list[i].InPos = inPos > 0 ? true : false;
list[i].Safe = safe > 0 ? true : false;
list[i].SafeLock = safeLock > 0 ? true : false;
}
}
private async void dgvAxisPos_CellClick(object sender, DataGridViewCellEventArgs e)
{
if ((e.ColumnIndex == this.dgvAxisPos.Columns["Edit"].Index || e.ColumnIndex == this.dgvAxisPos.Columns["SetPos"].Index || e.ColumnIndex == this.dgvAxisPos.Columns["SetVel"].Index) && e.RowIndex >= 0)
{
DlgPosEdit dlg = new DlgPosEdit(posNames[e.RowIndex], posAddr, id, e.RowIndex, unit);
var result = dlg.ShowDialog();
if (result == DialogResult.OK)
{
await GetPosData();
}
}
else if (e.ColumnIndex == this.dgvAxisPos.Columns["Teach"].Index && e.RowIndex >= 0)
{
//按下示教按钮,将轴当前位置设置为目标位置
var actPos = PCHMI.VL.GET_INT32(0, $"{dataAddr}.{id * 60 + 24}");
PCHMI.RT.SEND_INT32(0, $"{posAddr}.{id * 384 + e.RowIndex * 12}", actPos);
PCHMI.OPTLOG.WLOG($"手动按下了点位示教按钮Axis{id},点位号:{e.RowIndex},原位置:{list[e.RowIndex].SetPos},新位置:{actPos}");
await GetPosData();
}
else if (e.ColumnIndex == this.dgvAxisPos.Columns["Goto"].Index && e.RowIndex >= 0)
{
//按下Goto按钮
PCHMI.RT.SEND_INT16(0, $"{dataAddr}.{id * 60 + 4}", 0);
await Task.Delay(200);
var actPos = PCHMI.VL.GET_INT32(0, $"{dataAddr}.{id * 60 + 24}");
PCHMI.RT.SEND_INT16(0, $"{dataAddr}.{id * 60 + 4}", (short)(100 + e.RowIndex));
PCHMI.OPTLOG.WLOG($"手动触发了定位按钮Axis{id},点位号:{e.RowIndex},定位前位置:{actPos},目标位置:{list[e.RowIndex].SetPos}");
}
else if (e.ColumnIndex == this.dgvAxisPos.Columns["Safe"].Index && e.RowIndex >= 0)
{
//按下解锁按钮
bool isChecked = PCHMI.VL.GET_BIT(0, $"{dataAddr}.{id * 60 + 10 + e.RowIndex / 8}.{e.RowIndex % 8}") > 0 ? true : false;
//DataGridViewCheckBoxCell chkBoxCell = (DataGridViewCheckBoxCell)dgvAxisPos.Rows[e.RowIndex].Cells[e.ColumnIndex];
//bool isChecked = (bool)chkBoxCell.Value;
if (isChecked)
{
PCHMI.RT.SEND_BIT(0, $"{dataAddr}.{id * 60 + 10 + e.RowIndex / 8}.{e.RowIndex % 8}", 0);
}
else
{
PCHMI.OPTLOG.WLOG($"手动触发解除安全Axis{id},点位{e.RowIndex}");
PCHMI.RT.SEND_BIT(0, $"{dataAddr}.{id * 60 + 10 + e.RowIndex / 8}.{e.RowIndex % 8}", 1);
}
await GetPosData();
}
}
private void dgvAxisPos_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
new DataGridViewStyle().DgvRowPostPaint(dgvAxisPos, e);
}
private void dgvAxisPos_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == this.dgvAxisPos.Columns["InPos"].Index && e.Value != null)
{
bool inPos = (bool)e.Value;
if (inPos) // 根据条件判断
{
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
e.Value = global::CowainHmi.Properties.Resources.;
e.FormattingApplied = true;
}
else
{
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
e.Value = global::CowainHmi.Properties.Resources.;
e.FormattingApplied = true;
}
}
else if (e.ColumnIndex == this.dgvAxisPos.Columns["SafeLock"].Index && e.Value != null)
{
bool safeLock = (bool)e.Value;
if (safeLock) // 根据条件判断
{
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
e.Value = global::CowainHmi.Properties.Resources.;
e.FormattingApplied = true;
}
else
{
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
e.Value = global::CowainHmi.Properties.Resources.;
e.FormattingApplied = true;
}
}
}
}
}