Files
FootwearTest-20260602/鞋子止滑性能测试仪/Form_Form.cs
2026-06-02 17:41:53 +08:00

291 lines
10 KiB
C#
Raw 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 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);
}
}
}