525 lines
21 KiB
C#
525 lines
21 KiB
C#
using Modbus.Device;
|
|
using System;
|
|
using System.IO.Ports;
|
|
using System.Threading;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
|
|
namespace ControlcBoardsTest
|
|
{
|
|
/// <summary>
|
|
/// MainWindow.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
this.Loaded += MainWindow_Loaded;
|
|
this.Closing += MainWindow_Closing;
|
|
}
|
|
|
|
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
{
|
|
|
|
//停止通道
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, false);
|
|
|
|
|
|
}
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, false);
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, false);
|
|
ModbusHelper.master.Close();
|
|
}
|
|
|
|
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
foreach (var item in SerialPort.GetPortNames())
|
|
{
|
|
com_port.Items.Add(item);
|
|
if (com_port.Items.Count > 0)
|
|
com_port.SelectedIndex = 0;
|
|
}
|
|
|
|
|
|
}
|
|
private byte stationNo;
|
|
private void connButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
//打开串口
|
|
if (!ModbusHelper.master.IsOpen())
|
|
{
|
|
|
|
//创建ModbusRTU主站实例
|
|
ModbusHelper.master.SerialPortInni(serialPort =>
|
|
{
|
|
|
|
//设定串口参数
|
|
serialPort.PortName = com_port.SelectedItem.ToString();
|
|
serialPort.BaudRate = Convert.ToInt32(txt_baudRate.Text.ToString());
|
|
serialPort.Parity = 0;
|
|
serialPort.DataBits = Convert.ToInt32(txt_sataBits.Text.ToString());
|
|
serialPort.StopBits = ModbusHelper.GetSelectedStopBits(Convert.ToDouble(txt_stopBits.Text.ToString()));
|
|
stationNo = Convert.ToByte(txt_stationNo.Text);
|
|
|
|
});
|
|
|
|
ModbusHelper.master.Open();
|
|
if (ModbusHelper.master.IsOpen())
|
|
{
|
|
btn_conn.Content = "断开";
|
|
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, false);
|
|
|
|
Thread.Sleep(100);
|
|
}
|
|
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 0, 24);
|
|
|
|
|
|
foreach (var item in warp_channel.Children)
|
|
{
|
|
if (item is Button)
|
|
{
|
|
var c = (Button)item;
|
|
c.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(c.Tag)] ? Colors.Green : Colors.Red);
|
|
}
|
|
}
|
|
|
|
btn_ElectricMotor1Front.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(16)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor1Back.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(17)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor2Front.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(18)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor2Back.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(19)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor3Front.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(20)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor3Back.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(21)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor4Front.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(22)] ? Colors.Green : Colors.Red);
|
|
btn_ElectricMotor4Back.Background = new SolidColorBrush(CoilsRes[Convert.ToUInt16(23)] ? Colors.Green : Colors.Red);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
btn_conn.Content = "连接";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ModbusHelper.master.Close();
|
|
if (ModbusHelper.master.IsOpen())
|
|
{
|
|
btn_conn.Content = "断开";
|
|
}
|
|
else
|
|
{
|
|
btn_conn.Content = "连接";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
private void Button_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var btn = sender as Button;
|
|
//读取当前状态
|
|
DateTime dt = DateTime.Now;
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, Convert.ToUInt16(btn.Tag), 1);
|
|
Console.WriteLine("=================="+DateTime.Now.Subtract(dt).TotalMilliseconds);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, Convert.ToUInt16(btn.Tag), !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, Convert.ToUInt16(btn.Tag), 1);
|
|
btn.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 电机1正传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_1(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 16, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 16, 1);
|
|
btn_ElectricMotor1Front.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
/// <summary>
|
|
/// 电机1反传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_2(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 17, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 17, 1);
|
|
btn_ElectricMotor1Back.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 电机2正传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_3(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 18, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 18, 1);
|
|
btn_ElectricMotor2Front.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 电机2反传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_4(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 19, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 19, 1);
|
|
btn_ElectricMotor2Back.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
/// <summary>
|
|
/// 电机3正传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_5(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 20, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 20, 1);
|
|
btn_ElectricMotor3Front.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
/// <summary>
|
|
/// 电机3反传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_6(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 21, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 21, 1);
|
|
btn_ElectricMotor3Back.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
/// <summary>
|
|
/// 电机4正传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_7(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 22, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 22, 1);
|
|
btn_ElectricMotor4Front.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
/// <summary>
|
|
/// 电机4反传
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_8(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, false);
|
|
Thread.Sleep(100);
|
|
//读取当前状态
|
|
var CoilsResBefor = ModbusHelper.ReadCoils(stationNo, 23, 1);
|
|
Thread.Sleep(100);
|
|
//写入线圈
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, !CoilsResBefor[0]);
|
|
Thread.Sleep(100);
|
|
//读取写入后状态
|
|
var CoilsRes = ModbusHelper.ReadCoils(stationNo, 23, 1);
|
|
btn_ElectricMotor4Back.Background = new SolidColorBrush(CoilsRes[0] ? Colors.Green : Colors.Red);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 通道1速度
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_9(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleRegister(stationNo, 23, Convert.ToUInt16(txt_channel1Speed.Text));
|
|
Thread.Sleep(100);
|
|
var res = ModbusHelper.ReadHoldingRegisters(stationNo, 23, 1);
|
|
txt_channel1Speed.Text = res[0].ToString();
|
|
}
|
|
/// <summary>
|
|
/// 通道2速度
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_10(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleRegister(stationNo, 27, Convert.ToUInt16(txt_channel2Speed.Text));
|
|
Thread.Sleep(100);
|
|
var res = ModbusHelper.ReadHoldingRegisters(stationNo, 27, 1);
|
|
txt_channel2Speed.Text = res[0].ToString();
|
|
}
|
|
/// <summary>
|
|
/// 通道3速度
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_11(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleRegister(stationNo, 31, Convert.ToUInt16(txt_channel3Speed.Text));
|
|
Thread.Sleep(100);
|
|
var res = ModbusHelper.ReadHoldingRegisters(stationNo, 31, 1);
|
|
txt_channel3Speed.Text = res[0].ToString();
|
|
}
|
|
/// <summary>
|
|
/// 通道4速度
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void Button_Click_12(object sender, RoutedEventArgs e)
|
|
{
|
|
ModbusHelper.WriteSingleRegister(stationNo, 35, Convert.ToUInt16(txt_channel4Speed.Text));
|
|
Thread.Sleep(100);
|
|
var res = ModbusHelper.ReadHoldingRegisters(stationNo, 35, 1);
|
|
txt_channel4Speed.Text = res[0].ToString();
|
|
}
|
|
bool isStill = true;
|
|
Thread alwaysThread;
|
|
private void Button_Click_13(object sender, RoutedEventArgs e)
|
|
{
|
|
|
|
if (btn_always.Content.ToString() == "循环测试开始")
|
|
{
|
|
isStill = true;
|
|
btn_always.Content = "循环测试停止";
|
|
alwaysThread= new Thread(() =>
|
|
{
|
|
|
|
while (isStill)
|
|
{
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
if (i == 17 || i == 19 || i == 21 || i == 23)
|
|
continue;
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, true);
|
|
Thread.Sleep(500);
|
|
}
|
|
Thread.Sleep(5000);
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, false);
|
|
Thread.Sleep(500);
|
|
}
|
|
|
|
Thread.Sleep(5000);
|
|
}
|
|
|
|
});
|
|
alwaysThread.Start();
|
|
}
|
|
else
|
|
{
|
|
isStill = false;
|
|
btn_always.Content = "循环测试开始";
|
|
alwaysThread.Abort();
|
|
}
|
|
|
|
}
|
|
|
|
Thread FrontBackThread;
|
|
|
|
private void btn_FrontBack_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (btn_FrontBack.Content.ToString() == "正反转测试开始")
|
|
{
|
|
isStill = true;
|
|
btn_FrontBack.Content = "正反转测试停止";
|
|
FrontBackThread= new Thread(() =>
|
|
{
|
|
|
|
while (isStill)
|
|
{
|
|
|
|
|
|
|
|
//启动通道
|
|
for (int i = 0; i < 16; i++)
|
|
{
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, true);
|
|
|
|
}
|
|
//正转测试
|
|
ModbusHelper.WriteSingleRegister(stationNo, 23, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16,true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 23, 100);
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 27, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 27, 100);
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 31, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 31, 100);
|
|
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 35, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 35, 100);
|
|
Thread.Sleep(2000);
|
|
//关闭正转
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, false);
|
|
Thread.Sleep(1000);
|
|
|
|
//反转测试
|
|
ModbusHelper.WriteSingleRegister(stationNo, 23, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 23, 100);
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 27, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 27, 100);
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 31, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 31, 100);
|
|
|
|
|
|
ModbusHelper.WriteSingleRegister(stationNo, 35, 30);
|
|
Thread.Sleep(1000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, true);
|
|
ModbusHelper.WriteSingleRegister(stationNo, 35, 100);
|
|
Thread.Sleep(2000);
|
|
//关闭通道
|
|
for (int i = 0; i < 16; i++)
|
|
{
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, false);
|
|
|
|
}
|
|
|
|
//关闭反转
|
|
Thread.Sleep(2000);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, false);
|
|
Thread.Sleep(1000);
|
|
|
|
}
|
|
|
|
});
|
|
FrontBackThread.Start();
|
|
}
|
|
else
|
|
{
|
|
isStill = false;
|
|
btn_FrontBack.Content = "正反转测试开始";
|
|
FrontBackThread.Abort();
|
|
|
|
//停止通道
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, (ushort)i, false);
|
|
|
|
|
|
}
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, 16, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 18, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 20, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 22, false);
|
|
|
|
ModbusHelper.WriteSingleCoil(stationNo, 17, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 19, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 21, false);
|
|
ModbusHelper.WriteSingleCoil(stationNo, 23, false);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|