Files
FootwearTest-20260602/鞋子止滑性能测试仪/Form_Form.cs

291 lines
10 KiB
C#
Raw Normal View History

2026-06-02 17:41:53 +08:00
using Modbus.Device;
using Sunny.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Resources;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace
{
public partial class Form_Form : UIForm
{
Modbus_connect mc_PLC;
IModbusSerialMaster master_PLC;
SerialPort sp_PLC;
Modbus_connect mc_ADC;
IModbusSerialMaster master_ADC;
SerialPort sp_ADC;
Data_Change dc=new Data_Change();
Thread thread_ADC_Read;
Thread thread_PLC_Read;
Thread thread_RefshUI;
public static string zhengyali_jiaozhunzhi;
public static string zhengyali_xishu;
public static string moca_1_jiaozhunzhi;
public static string moca_1_xishu;
public static string moca_2_jiaozhunzhi;
public static string moca_2_xishu;
float moca_agv;//摩擦力
public Form_Form()
{
InitializeComponent();
mc_PLC = new Modbus_connect("COM7", 115200);
mc_ADC = new Modbus_connect("COM8", 115200);
master_PLC = mc_PLC.GetModbusMaster();
master_ADC = mc_ADC.GetModbusMaster();
sp_PLC = mc_PLC.GetSerialPort();
sp_ADC = mc_ADC.GetSerialPort();
//获取配置文件中的配置
zhengyali_jiaozhunzhi = ConfigurationManager.AppSettings["正压力校准值"].ToString();
zhengyali_xishu = ConfigurationManager.AppSettings["正压力校准系数"].ToString();
moca_1_jiaozhunzhi = ConfigurationManager.AppSettings["摩擦1校准值"].ToString();
moca_1_xishu = ConfigurationManager.AppSettings["摩擦1校准系数"].ToString();
moca_2_jiaozhunzhi = ConfigurationManager.AppSettings["摩擦2校准值"].ToString();
moca_2_xishu = ConfigurationManager.AppSettings["摩擦2校准系数"].ToString();
//启动线程
thread_ADC_Read = new Thread(new ThreadStart(Read_ADC_Data));
thread_PLC_Read = new Thread(new ThreadStart(Read_PLC_Data));
thread_RefshUI = new Thread(new ThreadStart(RefshUI));
thread_ADC_Read.IsBackground = true;
thread_PLC_Read.IsBackground = true;
thread_RefshUI.IsBackground = true;
thread_ADC_Read.Start();
thread_PLC_Read.Start();
thread_RefshUI.Start();
this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
}
ushort[] data_ADC_Read = new ushort[10];
float ADC_Value_1 = 0;
float ADC_Value_2=0;
float ADC_Value_3=0;
private void Read_ADC_Data()
{
// string erro;
while (true)
{
try
{
data_ADC_Read = master_ADC.ReadHoldingRegisters(1, 0, 8);
ADC_Value_3 =
dc.Change_ADC_ToFloat(dc.UshortToInt1(data_ADC_Read[0], data_ADC_Read[1]),zhengyali_jiaozhunzhi.ToInt() , zhengyali_xishu.ToFloat());
ADC_Value_1 =
dc.Change_ADC_ToFloat(dc.UshortToInt1(data_ADC_Read[6], data_ADC_Read[7]), moca_1_jiaozhunzhi.ToInt(), moca_2_xishu.ToFloat());
ADC_Value_2 =
dc.Change_ADC_ToFloat(dc.UshortToInt1(data_ADC_Read[2], data_ADC_Read[3]), moca_2_jiaozhunzhi.ToInt(), moca_1_xishu.ToFloat());
zhengyali_xishu.ToFloat();
moca_agv = (ADC_Value_1 + ADC_Value_2)*(-1.0F);
Thread.Sleep(10);
}
catch
{
// erro = ex.Message;
// goto 退出;
}
}
// 退出:
// MessageBox.Show("读取ADC数据失败"+erro);
}
ushort[] data_PLC_Read = new ushort[10];
bool[] bools_Read = new bool[10];
float PLC_Value_weiyi = 0;
private void Read_PLC_Data()
{
while (true)
{
try
{
//读取PLC数据
data_PLC_Read = master_PLC.ReadHoldingRegisters(1, 402, 2);
bools_Read = master_PLC.ReadCoils(1,81,10);
PLC_Value_weiyi = dc.UshortToFloat(data_PLC_Read[1], data_PLC_Read[0]);
}
catch
{
}
}
}
private void RefshUI()
{
while (true)
{
if (this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
lb_mocali.Text = moca_agv.ToString("F2");
lb_zhengyali.Text = ADC_Value_3.ToString("F2");
if (bools_Read[0])
{
btn_ceshi.Text = "停止";
btn_ceshi.FillColor = Color.Red;
}
else
{
btn_ceshi.Text = "测试";
btn_ceshi.FillColor = Color.FromArgb(80, 160, 255);
}
if (bools_Read[9])
{
btn_fuwei.Text = "复位中";
btn_fuwei.FillColor = Color.Red;
}
else
{
btn_fuwei.Text = "复位";
btn_fuwei.FillColor = Color.FromArgb(80, 160, 255);
}
}));
Thread.Sleep(10);
}
}
}
private void btn_fuwei_Click(object sender, EventArgs e)
{
try
{
master_PLC.WriteSingleCoil(1,90,true);
master_PLC.WriteSingleCoil(1, 90, false);
}
catch
{
MessageBox.Show("写入失败!");
}
}
private void Form_Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (sp_ADC.IsOpen)
sp_ADC.Close();
if (sp_PLC.IsOpen)
sp_PLC.Close();
thread_ADC_Read?.Abort();
thread_PLC_Read?.Abort();
thread_RefshUI?.Abort();
master_ADC?.Dispose();
master_PLC?.Dispose();
}
float count = 0;
List<string> value_X=new List<string>() { };
List<float> value_Y1 = new List<float>() { };
List<float> value_Y2 = new List<float>() { };
List<float> value_Y3 = new List<float>() { };
List<float> value_Y4 = new List<float>() { };
Random rd = new Random();
private void timer1_Tick(object sender, EventArgs e)
{
if (bools_Read[0])
{
value_X.Add(count.ToString("F2"));
value_Y1.Add(ADC_Value_3);
value_Y2.Add(moca_agv);
value_Y3.Add(PLC_Value_weiyi);
if (ADC_Value_3 != 0)
{
value_Y4.Add(moca_agv / ADC_Value_3);
}
else
{
value_Y4.Add(0);
}
count += 0.01f;
}
}
private void btn_huitu_Click(object sender, EventArgs e)
{
try
{
chart1.Series[0].Points.DataBindXY(value_X, value_Y1);
chart1.Series[1].Points.DataBindXY(value_X, value_Y2);
chart1.Series[2].Points.DataBindXY(value_X, value_Y3);
chart1.Series[3].Points.DataBindXY(value_X, value_Y4);
}
catch (Exception EX)
{
MessageBox.Show(EX.Message);
}
}
private void btn_zhengjiaozhun_Click(object sender, EventArgs e)
{
dc.ChangeData("正压力校准值", dc.UshortToInt1(data_ADC_Read[0], data_ADC_Read[1]).ToString());
zhengyali_jiaozhunzhi = ConfigurationManager.AppSettings["正压力校准值"].ToString();
}
private void btn_mocajiaozhun_Click(object sender, EventArgs e)
{
dc.ChangeData("摩擦1校准值", dc.UshortToInt1(data_ADC_Read[2], data_ADC_Read[3]).ToString());
dc.ChangeData("摩擦2校准值", dc.UshortToInt1(data_ADC_Read[6], data_ADC_Read[7]).ToString());
moca_1_jiaozhunzhi = ConfigurationManager.AppSettings["摩擦1校准值"].ToString();
moca_2_jiaozhunzhi = ConfigurationManager.AppSettings["摩擦2校准值"].ToString();
}
private void btn_ceshi_Click(object sender, EventArgs e)
{
try
{
if (bools_Read[0])
{
master_PLC.WriteSingleCoil(1, 83, true);
master_PLC.WriteSingleCoil(1, 83, false);
}
else
{
master_PLC.WriteSingleCoil(1, 80, true);
master_PLC.WriteSingleCoil(1, 80, false);
value_X.Clear();
value_Y1.Clear();
value_Y2.Clear();
value_Y3.Clear();
value_Y4.Clear();
count = 0.0F;
}
}
catch
{
MessageBox.Show("写入失败!");
}
}
private void btn_setting_Click(object sender, EventArgs e)
{
Form_Setting frm_set = new Form_Setting(mc_PLC);
frm_set.ShowDialog();
}
private void btn_daochu_Click(object sender, EventArgs e)
{
dc.ExportDataTableToExcel(value_X,value_Y1, value_Y2, value_Y3, value_Y4);
}
}
}