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