|
@@ -1,6 +1,8 @@
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Diagnostics;
|
|
|
+using System.Diagnostics.Eventing.Reader;
|
|
|
using System.Drawing;
|
|
|
using System.IO;
|
|
|
using System.IO.Ports;
|
|
@@ -9,7 +11,9 @@ using System.Reflection;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Text.RegularExpressions;
|
|
|
using System.Threading;
|
|
|
+using System.Web;
|
|
|
using System.Windows.Forms;
|
|
|
+using System.Xml.Linq;
|
|
|
//using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
|
|
|
|
namespace Welling_Motor_Debug_Tool
|
|
@@ -55,6 +59,12 @@ namespace Welling_Motor_Debug_Tool
|
|
|
public bool ACK_DisFlag = true;
|
|
|
//Boot版本信息
|
|
|
public string BootInfo = "";
|
|
|
+ //接收指令临时缓存,转string
|
|
|
+ public string CmdRevStrTemp = "";
|
|
|
+ //计时器,用于统计运行时间
|
|
|
+ public Stopwatch stopwatch = new Stopwatch();
|
|
|
+ //力矩传感器检验参数窗口
|
|
|
+ public static TorqueParams TorqueParamsForm = new TorqueParams();
|
|
|
#endregion
|
|
|
|
|
|
#region 故障日志结构体定义
|
|
@@ -118,6 +128,7 @@ namespace Welling_Motor_Debug_Tool
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
|
|
|
+ stopwatch.Start();
|
|
|
//端口初始化
|
|
|
mySerialProcess.Init();
|
|
|
toolStripComboBox_ComNum.Items.AddRange(mySerialProcess.refreshPort());
|
|
@@ -266,7 +277,9 @@ namespace Welling_Motor_Debug_Tool
|
|
|
}
|
|
|
else if (EnterForm1.comboBox_User.Text == "研发测试")
|
|
|
{
|
|
|
- //所有用默认,不处理
|
|
|
+ //隐藏量产界面
|
|
|
+ tabPage_ProductMode_Read.Parent = null;
|
|
|
+ tabPage_ProductMode_Write.Parent = null;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -609,51 +622,47 @@ namespace Welling_Motor_Debug_Tool
|
|
|
ushort PackageID, Cmd;
|
|
|
byte[] Data = new byte[1024];
|
|
|
|
|
|
- while (buffer.Count >= 13)//当buffer中的数据的个数大于等于4个时,即每一帧的数据长度所在位(第4位)出现时
|
|
|
+ try
|
|
|
{
|
|
|
- if (buffer[0] == 0x55 && buffer[1] == 0xAA)//判断帧头
|
|
|
+ while (buffer.Count >= 13)//当buffer中的数据的个数大于等于4个时,即每一帧的数据长度所在位(第4位)出现时
|
|
|
{
|
|
|
- PackageID = (ushort)(buffer[2] * 256 + buffer[3]);
|
|
|
- if ((PackageID == 0x0710) || (PackageID == 0x0715) || (PackageID == 0x07FF) || (PackageID == 0x0720) || (PackageID == 0x0713))
|
|
|
+ if (buffer[0] == 0x55 && buffer[1] == 0xAA)//判断帧头
|
|
|
{
|
|
|
- int CmdLen = buffer[5];
|
|
|
- if (buffer.Count < CmdLen + 11) break;//如果接收到的数据没有达到一帧数据的指定长度, 则执行下次循环
|
|
|
- buffer.RemoveRange(0, 6);//数据达到要求长度后删去帧头,ID,模式,和命令长度
|
|
|
- while (CmdLen > 0) //读取命令段
|
|
|
+ PackageID = (ushort)(buffer[2] * 256 + buffer[3]);
|
|
|
+ if ((PackageID == 0x0710) || (PackageID == 0x0715) || (PackageID == 0x07FF) || (PackageID == 0x0720) || (PackageID == 0x0713))
|
|
|
{
|
|
|
- Cmd = (ushort)(buffer[0] * 256 + buffer[1]);
|
|
|
- DataNum = (byte)(buffer[1]);//命令字的第二个字节的表示数据位的长度
|
|
|
- if (DataNum <= (CmdLen - 2))
|
|
|
+ int CmdLen = buffer[5];
|
|
|
+ if (buffer.Count < CmdLen + 11) break;//如果接收到的数据没有达到一帧数据的指定长度, 则执行下次循环
|
|
|
+ while (CmdLen > 0) //读取命令段
|
|
|
{
|
|
|
- for (int i = 0; i < DataNum; i++)
|
|
|
- {
|
|
|
- Data[i] = buffer[i + 2];
|
|
|
- }
|
|
|
- DataCmdProcess(PackageID, Cmd, Data);//对于不同的命令段,做不同的处理
|
|
|
- buffer.RemoveRange(0, DataNum);//移除处理过的数据段
|
|
|
- CmdLen -= (DataNum + 2);
|
|
|
- if (CmdLen < 2)
|
|
|
+ Cmd = (ushort)(buffer[6] * 256 + buffer[7]);
|
|
|
+ DataNum = (byte)(buffer[7]);//命令字的第二个字节的表示数据位的长度
|
|
|
+ if (DataNum <= (CmdLen - 2))
|
|
|
{
|
|
|
- buffer.RemoveRange(0, CmdLen + 2);
|
|
|
- return;
|
|
|
+ for (int i = 0; i < DataNum; i++)
|
|
|
+ {
|
|
|
+ Data[i] = buffer[i + 8];
|
|
|
+ }
|
|
|
+ buffer.RemoveRange(0, CmdLen + 11);
|
|
|
+ DataCmdProcess(PackageID, Cmd, Data);//对于不同的命令段,做不同的处理
|
|
|
+ DataRevToString(Cmd, Data);//指令数据转为字符串
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- buffer.RemoveRange(0, CmdLen + 11);
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ buffer.RemoveAt(0);//ID不对
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- buffer.RemoveAt(0);//ID不对
|
|
|
+ buffer.RemoveAt(0);//帧头不对,删除帧头高字节
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- buffer.RemoveAt(0);//帧头不对,删除帧头高字节
|
|
|
- }
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -913,27 +922,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
}
|
|
|
}
|
|
|
richTextBox_BikeParam.Text = richTextBox_BikeParam.Text.Substring(0, richTextBox_BikeParam.Text.Length - 2);
|
|
|
- //更新生产模式中整车参数
|
|
|
- textBox_FacModeWheelSize.Text = (Data[1] * 256 + Data[0]).ToString();//周长
|
|
|
- textBox_FacModeSpeedLimit.Text = (Data[5] * 256 + Data[4]).ToString();//限速
|
|
|
- DataTemp = (int)(Data[13] * 256 + Data[12]);//助力方案1
|
|
|
- if (DataTemp == 0) comboBox_FacModeAssist1.SelectedIndex = 0;
|
|
|
- else if (DataTemp == 341) comboBox_FacModeAssist1.SelectedIndex = 1;
|
|
|
- else if (DataTemp == 682) comboBox_FacModeAssist1.SelectedIndex = 2;
|
|
|
- else comboBox_FacModeAssist1.SelectedIndex = 3;
|
|
|
- DataTemp = (int)(Data[15] * 256 + Data[14]);//助力方案2
|
|
|
- if (DataTemp == 0) comboBox_FacModeAssist2.SelectedIndex = 0;
|
|
|
- else if (DataTemp == 341) comboBox_FacModeAssist2.SelectedIndex = 1;
|
|
|
- else if (DataTemp == 682) comboBox_FacModeAssist2.SelectedIndex = 2;
|
|
|
- else comboBox_FacModeAssist2.SelectedIndex = 3;
|
|
|
- DataTemp = (int)(Data[17] * 256 + Data[16]);//灯压
|
|
|
- if (DataTemp == 6) comboBox_FacModeLightVol.SelectedIndex = 0;
|
|
|
- else if (DataTemp == 12) comboBox_FacModeLightVol.SelectedIndex = 1;
|
|
|
- else comboBox_FacModeLightVol.SelectedIndex = 2;
|
|
|
- DataTemp = (int)(Data[21] * 256 + Data[20]);//启动模式
|
|
|
- if (DataTemp == 1) comboBox_FacModeStartMode.SelectedIndex = 0;
|
|
|
- else if (DataTemp == 3) comboBox_FacModeStartMode.SelectedIndex = 2;
|
|
|
- else comboBox_FacModeStartMode.SelectedIndex = 1;
|
|
|
}));
|
|
|
}
|
|
|
break;
|
|
@@ -1012,13 +1000,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
|
|
|
}
|
|
|
richTextBox_AssistParam.Text = richTextBox_AssistParam.Text.Substring(0, richTextBox_AssistParam.Text.Length - 2);
|
|
|
- //更新生产模式中助力参数
|
|
|
- textBox_FacModeStartGain.Text = (Data[1] * 256 + Data[0]).ToString();//零速增益
|
|
|
- textBox_FacModeCircuitK.Text = (Data[45] * 256 + Data[44]).ToString();//电流阶梯
|
|
|
- textBox_FacModeFltCounter.Text = (Data[49] * 256 + Data[48]).ToString();//滤波脉冲
|
|
|
- textBox_FacModeSpeedLimitTh.Text = (Data[55] * 256 + Data[54]).ToString();//限速启动
|
|
|
- textBox_FacModeSpeedLimitEnd.Text = (Data[57] * 256 + Data[56]).ToString();//限速停止
|
|
|
- textBox_FacModeCadencePer.Text = (Data[59] * 256 + Data[58]).ToString();//踏频占比
|
|
|
}));
|
|
|
}
|
|
|
break;
|
|
@@ -1049,6 +1030,55 @@ namespace Welling_Motor_Debug_Tool
|
|
|
for (int i = 0; i < myParams.DebugParam.Count; i++)
|
|
|
{
|
|
|
richTextBox_DebugParam.AppendText(myParams.DebugParam[i] + "=" + Convert.ToString((short)(Data[2 * i + 1] * 256 + Data[2 * i])) + ", ");
|
|
|
+ //模式
|
|
|
+ if ((short)(Data[1] * 256 + Data[0]) == 3)
|
|
|
+ {
|
|
|
+ radioButton_Ctl3.Checked = true;
|
|
|
+ radioButton_Ctl4.Checked = false;
|
|
|
+ radioButton_Ctl5.Checked = false;
|
|
|
+ }
|
|
|
+ else if ((short)(Data[1] * 256 + Data[0]) == 4)
|
|
|
+ {
|
|
|
+ radioButton_Ctl3.Checked = false;
|
|
|
+ radioButton_Ctl4.Checked = true;
|
|
|
+ radioButton_Ctl5.Checked = false;
|
|
|
+ }
|
|
|
+ else if ((short)(Data[1] * 256 + Data[0]) == 5)
|
|
|
+ {
|
|
|
+ radioButton_Ctl3.Checked = false;
|
|
|
+ radioButton_Ctl4.Checked = false;
|
|
|
+ radioButton_Ctl5.Checked = true;
|
|
|
+ }
|
|
|
+ //位置
|
|
|
+ if ((short)(Data[3] * 256 + Data[2]) == 0)
|
|
|
+ {
|
|
|
+ radioButton_Hall0.Checked = true;
|
|
|
+ radioButton_Hall1.Checked = false;
|
|
|
+ radioButton_Hall2.Checked = false;
|
|
|
+ }
|
|
|
+ else if ((short)(Data[3] * 256 + Data[2]) == 1)
|
|
|
+ {
|
|
|
+ radioButton_Hall0.Checked = false;
|
|
|
+ radioButton_Hall1.Checked = true;
|
|
|
+ radioButton_Hall2.Checked = false;
|
|
|
+ }
|
|
|
+ else if ((short)(Data[3] * 256 + Data[2]) == 2)
|
|
|
+ {
|
|
|
+ radioButton_Hall0.Checked = false;
|
|
|
+ radioButton_Hall1.Checked = false;
|
|
|
+ radioButton_Hall2.Checked = true;
|
|
|
+ }
|
|
|
+ //方向
|
|
|
+ if ((short)(Data[7] * 256 + Data[6]) == 0)
|
|
|
+ {
|
|
|
+ radioButton_Dir0.Checked = true;
|
|
|
+ radioButton_Dir1.Checked = false;
|
|
|
+ }
|
|
|
+ else if ((short)(Data[7] * 256 + Data[6]) == 1)
|
|
|
+ {
|
|
|
+ radioButton_Dir0.Checked = false;
|
|
|
+ radioButton_Dir1.Checked = true;
|
|
|
+ }
|
|
|
}
|
|
|
richTextBox_DebugParam.Text = richTextBox_DebugParam.Text.Substring(0, richTextBox_DebugParam.Text.Length - 2);
|
|
|
}));
|
|
@@ -1670,6 +1700,18 @@ namespace Welling_Motor_Debug_Tool
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ private void DataRevToString(ushort CmdTemp, byte[] Data)
|
|
|
+ {
|
|
|
+ CmdRevStrTemp = "";
|
|
|
+ CmdRevStrTemp += Convert.ToString(CmdTemp >> 8, 16).PadLeft(2, '0').ToUpper() + " ";
|
|
|
+ CmdRevStrTemp += Convert.ToString(CmdTemp & 0xFF, 16).PadLeft(2, '0').ToUpper() + " ";
|
|
|
+ ushort len = (ushort)(CmdTemp & 0x00FF);
|
|
|
+ for (int i = 0; i < len ; i++)
|
|
|
+ {
|
|
|
+ CmdRevStrTemp += Convert.ToString(Data[i], 16).PadLeft(2, '0').ToUpper() + " ";
|
|
|
+ }
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
@@ -1946,68 +1988,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 字符串转成字节流
|
|
|
- /// </summary>
|
|
|
- /// <param name="hexStr"></param>
|
|
|
- /// <param name="Flag_Space"></param>
|
|
|
- /// <returns></returns>
|
|
|
- public static byte[] HexStringToBytes(string hexStr, bool Flag_Space)
|
|
|
- {
|
|
|
- if (string.IsNullOrEmpty(hexStr))
|
|
|
- {
|
|
|
- return new byte[0];
|
|
|
- }
|
|
|
- if (hexStr.StartsWith("0x"))
|
|
|
- {
|
|
|
- hexStr = hexStr.Remove(0, 2);
|
|
|
- }
|
|
|
-
|
|
|
- var count = hexStr.Length;
|
|
|
- var byteCount = 0;
|
|
|
- if (Flag_Space == true)//相邻字节含空格
|
|
|
- {
|
|
|
- if ((count % 3) == 0)//最后字节含空格
|
|
|
- {
|
|
|
- byteCount = count / 3;
|
|
|
- }
|
|
|
- else if ((count % 3) == 2)//最后字节不含空格
|
|
|
- {
|
|
|
- byteCount = (count + 1) / 3;
|
|
|
- }
|
|
|
- else//数据无效
|
|
|
- {
|
|
|
- MessageBox.Show("相邻字节请插入空格!", "提示");
|
|
|
- }
|
|
|
- var result = new byte[byteCount];
|
|
|
- for (int ii = 0; ii < byteCount; ++ii)
|
|
|
- {
|
|
|
- var tempBytes = Byte.Parse(hexStr.Substring(3 * ii, 2), System.Globalization.NumberStyles.HexNumber);
|
|
|
- result[ii] = tempBytes;
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
- else if (Flag_Space == false)//相邻字节不含空格
|
|
|
- {
|
|
|
- if (count % 2 == 1)
|
|
|
- {
|
|
|
- MessageBox.Show("请删除相邻字节之间空格!", "提示");
|
|
|
- }
|
|
|
- byteCount = count / 2;
|
|
|
- var result = new byte[byteCount];
|
|
|
- for (int ii = 0; ii < byteCount; ++ii)
|
|
|
- {
|
|
|
- var tempBytes = Byte.Parse(hexStr.Substring(2 * ii, 2), System.Globalization.NumberStyles.HexNumber);
|
|
|
- result[ii] = tempBytes;
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return new byte[0];
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 运行信息清除
|
|
|
/// </summary>
|
|
@@ -2308,6 +2288,27 @@ namespace Welling_Motor_Debug_Tool
|
|
|
ConfigParam[0] = (byte)((写入存储ToolStripMenuItem.Checked) ? 0x01 : 0x00);
|
|
|
ushort uwDataTemp = 0;
|
|
|
string[] strDataTemp = richTextBox_DebugParam.Text.Split(new string[] { ", " }, StringSplitOptions.None);
|
|
|
+
|
|
|
+ //模式
|
|
|
+ if (radioButton_Ctl3.Checked == true)
|
|
|
+ strDataTemp[0] = "整体运行模式=3";
|
|
|
+ else if (radioButton_Ctl4.Checked == true)
|
|
|
+ strDataTemp[0] = "整体运行模式=4";
|
|
|
+ else if (radioButton_Ctl5.Checked == true)
|
|
|
+ strDataTemp[0] = "整体运行模式=5";
|
|
|
+ //位置
|
|
|
+ if (radioButton_Hall0.Checked == true)
|
|
|
+ strDataTemp[1] = "位置获取模式=0";
|
|
|
+ else if (radioButton_Hall1.Checked == true)
|
|
|
+ strDataTemp[1] = "位置获取模式=1";
|
|
|
+ else if (radioButton_Hall2.Checked == true)
|
|
|
+ strDataTemp[1] = "位置获取模式=2";
|
|
|
+ //方向
|
|
|
+ if (radioButton_Dir0.Checked == true)
|
|
|
+ strDataTemp[3] = "旋转方向=0";
|
|
|
+ else if (radioButton_Dir1.Checked == true)
|
|
|
+ strDataTemp[3] = "旋转方向=1";
|
|
|
+
|
|
|
try
|
|
|
{
|
|
|
for (int i = 0; i < strDataTemp.Length; i++)
|
|
@@ -3446,18 +3447,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
LightSwitchStatus = false;
|
|
|
MotorRunStatus = false;
|
|
|
trackBar_FacModeMotorSpeedAdj.Value = 5;
|
|
|
- textBox_FacModeWheelSize.Text = "";
|
|
|
- textBox_FacModeSpeedLimit.Text = "";
|
|
|
- comboBox_FacModeAssist1.SelectedIndex = -1;
|
|
|
- comboBox_FacModeAssist2.SelectedIndex = -1;
|
|
|
- comboBox_FacModeLightVol.SelectedIndex = -1;
|
|
|
- comboBox_FacModeStartMode.SelectedIndex = -1;
|
|
|
- textBox_FacModeStartGain.Text = "";
|
|
|
- textBox_FacModeCircuitK.Text = "";
|
|
|
- textBox_FacModeFltCounter.Text = "";
|
|
|
- textBox_FacModeSpeedLimitTh.Text = "";
|
|
|
- textBox_FacModeSpeedLimitEnd.Text = "";
|
|
|
- textBox_FacModeCadencePer.Text = "";
|
|
|
textBox_FacModeName.Text = "";
|
|
|
textBox_FacModeNum.Text = "";
|
|
|
textBox_FacModeHW.Text = "";
|
|
@@ -3698,59 +3687,7 @@ namespace Welling_Motor_Debug_Tool
|
|
|
if (!MotorRunStatus) //停止状态
|
|
|
{
|
|
|
//设置速度环
|
|
|
- if (radioButton_FacModeDriverCity.Checked | radioButton_FacModeDriverMtb.Checked | radioButton_FacModeDriverLG.Checked == true)
|
|
|
- {
|
|
|
- strDataTemp[0] = "整体运行模式=3";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("请选择电机类型!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- //设置带载类型
|
|
|
- if (label_Load.Text == "空载")
|
|
|
- {
|
|
|
- strDataTemp[10] = "转速环控制器带宽=3";
|
|
|
- }
|
|
|
- else if (label_Load.Text == "带载")
|
|
|
- {
|
|
|
- strDataTemp[10] = "转速环控制器带宽=5";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("请选择带载类型!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- //选择位置模式
|
|
|
- if (label_MotorSensor.Text == "有感")
|
|
|
- {
|
|
|
- if (radioButton_FacModeDriverCity.Checked | radioButton_FacModeDriverMtb.Checked == true)
|
|
|
- strDataTemp[1] = "位置获取模式=1";
|
|
|
- else if (radioButton_FacModeDriverLG.Checked == true)
|
|
|
- strDataTemp[1] = "位置获取模式=2";
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("请选择电机类型!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- else if (label_MotorSensor.Text == "无感")
|
|
|
- {
|
|
|
- strDataTemp[1] = "位置获取模式=0";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("请选择位置模式!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
+ strDataTemp[0] = "整体运行模式=3";
|
|
|
//发送数据
|
|
|
try
|
|
|
{
|
|
@@ -3830,220 +3767,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
numericUpDown_SpeedAdj.Value = trackBar_FacModeMotorSpeedAdj.Value;
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 生产模式读取整车参数
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void button_FacModeBikeParaRead_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- textBox_FacModeWheelSize.Text = "";
|
|
|
- textBox_FacModeSpeedLimit.Text = "";
|
|
|
- comboBox_FacModeAssist1.SelectedIndex = -1;
|
|
|
- comboBox_FacModeAssist2.SelectedIndex = -1;
|
|
|
- comboBox_FacModeLightVol.SelectedIndex = -1;
|
|
|
- comboBox_FacModeStartMode.SelectedIndex = -1;
|
|
|
- mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, (ushort)0x3C00, null);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 生产模式写入整车参数
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void button_FacModeBikeParaSet_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- string BikeDefaultInfo = "轮胎周长=219, 电控传动比=35, 助力最大限速=25, 推行模式限速=6, 前牙盘T数=38, 后牙盘T数=11, 助力方案1=341, 助力方案2=682, 前后灯电压=6, 轮胎周长微调=0, 启动模式=2, 自动关机时间=15";
|
|
|
- var ConfigParam = new byte[28];
|
|
|
- for (int i = 0; i < 28; i++)
|
|
|
- ConfigParam[i] = 0;
|
|
|
- ConfigParam[0] = (byte)(0x01);
|
|
|
- ushort uwDataTemp = 0;
|
|
|
- string[] strDataTemp = BikeDefaultInfo.Split(new string[] { ", " }, StringSplitOptions.None);
|
|
|
- try
|
|
|
- {
|
|
|
- for (int i = 0; i < strDataTemp.Length; i++)
|
|
|
- {
|
|
|
- uwDataTemp = Convert.ToUInt16(strDataTemp[i].Split('=')[1]);
|
|
|
- ConfigParam[2 * i + 2] = (byte)uwDataTemp;
|
|
|
- ConfigParam[2 * i + 3] = (byte)(uwDataTemp >> 8);
|
|
|
- }
|
|
|
- //周长
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeWheelSize.Text);
|
|
|
- ConfigParam[2] = (byte)uwDataTemp;
|
|
|
- ConfigParam[3] = (byte)(uwDataTemp >> 8);
|
|
|
- //限速
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeSpeedLimit.Text);
|
|
|
- ConfigParam[6] = (byte)uwDataTemp;
|
|
|
- ConfigParam[7] = (byte)(uwDataTemp >> 8);
|
|
|
- //助力方案1
|
|
|
- if (comboBox_FacModeAssist1.SelectedIndex == 0) uwDataTemp = 0;
|
|
|
- else if (comboBox_FacModeAssist1.SelectedIndex == 1) uwDataTemp = 341;
|
|
|
- else if (comboBox_FacModeAssist1.SelectedIndex == 2) uwDataTemp = 682;
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("数据格式不正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- ConfigParam[14] = (byte)uwDataTemp;
|
|
|
- ConfigParam[15] = (byte)(uwDataTemp >> 8);
|
|
|
- //助力方案2
|
|
|
- if (comboBox_FacModeAssist2.SelectedIndex == 0) uwDataTemp = 0;
|
|
|
- else if (comboBox_FacModeAssist2.SelectedIndex == 1) uwDataTemp = 341;
|
|
|
- else if (comboBox_FacModeAssist2.SelectedIndex == 2) uwDataTemp = 682;
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("数据格式不正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- ConfigParam[16] = (byte)uwDataTemp;
|
|
|
- ConfigParam[17] = (byte)(uwDataTemp >> 8);
|
|
|
- //灯压
|
|
|
- if (comboBox_FacModeLightVol.SelectedIndex == 0) uwDataTemp = 6;
|
|
|
- else if (comboBox_FacModeLightVol.SelectedIndex == 1) uwDataTemp = 12;
|
|
|
- else
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("数据格式不正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- return;
|
|
|
- }
|
|
|
- ConfigParam[18] = (byte)uwDataTemp;
|
|
|
- ConfigParam[19] = (byte)(uwDataTemp >> 8);
|
|
|
- //启动模式
|
|
|
- if (comboBox_FacModeStartMode.SelectedIndex == 0) uwDataTemp = 1;
|
|
|
- else if (comboBox_FacModeStartMode.SelectedIndex == 2) uwDataTemp = 3;
|
|
|
- else uwDataTemp = 2;
|
|
|
- ConfigParam[22] = (byte)uwDataTemp;
|
|
|
- ConfigParam[23] = (byte)(uwDataTemp >> 8);
|
|
|
-
|
|
|
- mySerialProcess.SendCmd((ushort)0x751, (byte)0x16, (ushort)0x3D1C, ConfigParam);
|
|
|
- }
|
|
|
- catch (Exception)
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("数据格式不正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 生产模式读取助力参数
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void button_FacModeAssistParaRead_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- var ConfigParam = new byte[4];
|
|
|
- textBox_FacModeStartGain.Text = "";
|
|
|
- textBox_FacModeCircuitK.Text = "";
|
|
|
- textBox_FacModeFltCounter.Text = "";
|
|
|
- textBox_FacModeSpeedLimitTh.Text = "";
|
|
|
- textBox_FacModeSpeedLimitEnd.Text = "";
|
|
|
- textBox_FacModeCadencePer.Text = "";
|
|
|
- ConfigParam[0] = (byte)(1 & 0xFF);
|
|
|
- ConfigParam[1] = (byte)(1 >> 8);
|
|
|
- ConfigParam[2] = (byte)(1 & 0xFF);
|
|
|
- ConfigParam[3] = (byte)(1 >> 8);
|
|
|
- mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, (ushort)0x4304, ConfigParam);
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 生产模式写入助力参数
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void button_FacModeAssistParaSet_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- string AssistDefaultInfo = "零速启动增益=4096, 巡航启动增益=4096, 助力转矩曲线编号=1, 助力踏频曲线编号=1, 转矩曲线.a=0, 转矩曲线.b=0, 转矩曲线.c=2048, 转矩曲线.d=137, 踏频曲线.a=0, 踏频曲线.b=0, 踏频曲线.c=35000, 踏频曲线.d=0, 助力启动阈值=80, 助力停止阈值=40, 启动时电流增长阶梯=10, 启动对应踏频脉冲数=32, 转矩滤波对应踏频脉冲数=45, 待速转速=0, 待速最大电流=500, 车速限幅启动阈值=25, 车速限幅停止阈值=27, 踏频占比=1229";
|
|
|
- var ConfigParam = new byte[80];
|
|
|
- for (int i = 0; i < 80; i++)
|
|
|
- ConfigParam[i] = 0;
|
|
|
- ConfigParam[0] = (byte)(0x01);
|
|
|
- ushort uwDataTemp = 0;
|
|
|
- ulong ulDataTemp = 0;
|
|
|
- int index_1 = 0, index_2 = 0;
|
|
|
- string[] strDataTemp = AssistDefaultInfo.Split(new string[] { ", " }, StringSplitOptions.None);
|
|
|
- try
|
|
|
- {
|
|
|
- //因数据类型不同,预处理
|
|
|
- for (int i = 0; i < strDataTemp.Length; i++)
|
|
|
- {
|
|
|
- if (strDataTemp[i].Split('=')[0] == "转矩曲线.a")
|
|
|
- {
|
|
|
- index_1 = i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- for (int i = 0; i < strDataTemp.Length; i++)
|
|
|
- {
|
|
|
- if (strDataTemp[i].Split('=')[0] == "踏频曲线.d")
|
|
|
- {
|
|
|
- index_2 = i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- for (int i = 0; i < strDataTemp.Length; i++)
|
|
|
- {
|
|
|
- ulDataTemp = Convert.ToUInt32(strDataTemp[i].Split('=')[1]);
|
|
|
- if (i < index_1)
|
|
|
- {
|
|
|
- ConfigParam[2 * i + 4] = (byte)ulDataTemp;
|
|
|
- ConfigParam[2 * i + 5] = (byte)(ulDataTemp >> 8);
|
|
|
- }
|
|
|
- else if (i <= index_2)
|
|
|
- {
|
|
|
- ConfigParam[4 * i - 4] = (byte)ulDataTemp;
|
|
|
- ConfigParam[4 * i - 3] = (byte)(ulDataTemp >> 8);
|
|
|
- ConfigParam[4 * i - 2] = (byte)(ulDataTemp >> 16);
|
|
|
- ConfigParam[4 * i - 1] = (byte)(ulDataTemp >> 24);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ConfigParam[2 * i + 20] = (byte)ulDataTemp;
|
|
|
- ConfigParam[2 * i + 21] = (byte)(ulDataTemp >> 8);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //零速增益
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeStartGain.Text);
|
|
|
- ConfigParam[4] = (byte)uwDataTemp;
|
|
|
- ConfigParam[5] = (byte)(uwDataTemp >> 8);
|
|
|
- //电流阶梯
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeCircuitK.Text);
|
|
|
- ConfigParam[48] = (byte)uwDataTemp;
|
|
|
- ConfigParam[49] = (byte)(uwDataTemp >> 8);
|
|
|
- //滤波脉冲
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeFltCounter.Text);
|
|
|
- ConfigParam[52] = (byte)uwDataTemp;
|
|
|
- ConfigParam[53] = (byte)(uwDataTemp >> 8);
|
|
|
- //限速启动
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeSpeedLimitTh.Text);
|
|
|
- ConfigParam[58] = (byte)uwDataTemp;
|
|
|
- ConfigParam[59] = (byte)(uwDataTemp >> 8);
|
|
|
- //限速停止
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeSpeedLimitEnd.Text);
|
|
|
- ConfigParam[60] = (byte)uwDataTemp;
|
|
|
- ConfigParam[61] = (byte)(uwDataTemp >> 8);
|
|
|
- //踏频占比
|
|
|
- uwDataTemp = Convert.ToUInt16(textBox_FacModeCadencePer.Text);
|
|
|
- ConfigParam[62] = (byte)uwDataTemp;
|
|
|
- ConfigParam[63] = (byte)(uwDataTemp >> 8);
|
|
|
-
|
|
|
- mySerialProcess.SendCmd((ushort)0x751, (byte)0x16, (ushort)0x4450, ConfigParam);
|
|
|
- }
|
|
|
- catch (Exception)
|
|
|
- {
|
|
|
- timer_1s.Enabled = false;
|
|
|
- MessageBox.Show("数据格式不正确", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
- timer_1s.Enabled = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 生产模式写入型号
|
|
|
/// </summary>
|
|
@@ -4244,12 +3967,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
|
|
|
//读取一次整车参数
|
|
|
richTextBox_BikeParam.Clear();
|
|
|
- textBox_FacModeWheelSize.Text = "";
|
|
|
- textBox_FacModeSpeedLimit.Text = "";
|
|
|
- comboBox_FacModeAssist1.SelectedIndex = -1;
|
|
|
- comboBox_FacModeAssist2.SelectedIndex = -1;
|
|
|
- comboBox_FacModeLightVol.SelectedIndex = -1;
|
|
|
- comboBox_FacModeStartMode.SelectedIndex = -1;
|
|
|
if (!mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, (ushort)0x3C00, null)) break;
|
|
|
Delay_ms(100);
|
|
|
|
|
@@ -4369,12 +4086,12 @@ namespace Welling_Motor_Debug_Tool
|
|
|
//判断数据是否有效
|
|
|
if ((textBox_FacModeName.Text == "---") || (textBox_FacModeNum.Text == "---"))
|
|
|
{
|
|
|
- MessageBox.Show("SN无效,上传失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ MessageBox.Show("SN无效,保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
break;
|
|
|
}
|
|
|
if ((textBox_FacModeName.Text == string.Empty) || (textBox_FacModeNum.Text == string.Empty))
|
|
|
{
|
|
|
- MessageBox.Show("SN无效,上传失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ MessageBox.Show("SN无效,保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -4673,32 +4390,6 @@ namespace Welling_Motor_Debug_Tool
|
|
|
mySerialProcess.SendCmd((ushort)0x731, (byte)0x0C, (ushort)0x3A02, Code);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 带载类型选择
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void label_Load_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- if (label_Load.Text == "带载")
|
|
|
- label_Load.Text = "空载";
|
|
|
- else if (label_Load.Text == "空载")
|
|
|
- label_Load.Text = "带载";
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 控制模式选择
|
|
|
- /// </summary>
|
|
|
- /// <param name="sender"></param>
|
|
|
- /// <param name="e"></param>
|
|
|
- private void label_MotorSensor_Click(object sender, EventArgs e)
|
|
|
- {
|
|
|
- if (label_MotorSensor.Text == "有感")
|
|
|
- label_MotorSensor.Text = "无感";
|
|
|
- else if (label_MotorSensor.Text == "无感")
|
|
|
- label_MotorSensor.Text = "有感";
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 导出电机故障日志
|
|
|
/// </summary>
|
|
@@ -4734,9 +4425,9 @@ namespace Welling_Motor_Debug_Tool
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- Address = HexStringToBytes(textBox_Address_Begin, false);
|
|
|
+ Address = mySerialProcess.HexStringToBytes(textBox_Address_Begin, false);
|
|
|
Address_Begin = ((UInt32)Address[0] << 24) + ((UInt32)Address[1] << 16) + ((UInt32)Address[2] << 8) + ((UInt32)Address[3]);
|
|
|
- Address = HexStringToBytes(textBox_Address_End, false);
|
|
|
+ Address = mySerialProcess.HexStringToBytes(textBox_Address_End, false);
|
|
|
Addres_End = ((UInt32)Address[0] << 24) + ((UInt32)Address[1] << 16) + ((UInt32)Address[2] << 8) + ((UInt32)Address[3]);
|
|
|
|
|
|
if (Addres_End <= Address_Begin)
|
|
@@ -5534,6 +5225,12 @@ namespace Welling_Motor_Debug_Tool
|
|
|
/// <param name="e"></param>
|
|
|
private void button__FacMode_Start_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
+ if (!mySerialProcess.mySerial.IsOpen)
|
|
|
+ {
|
|
|
+ MessageBox.Show("请检查串口连接!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
TestStart();
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -5874,7 +5571,7 @@ namespace Welling_Motor_Debug_Tool
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- CmdList.Add(HexStringToBytes(fileLineInfo, true));
|
|
|
+ CmdList.Add(mySerialProcess.HexStringToBytes(fileLineInfo, true));
|
|
|
}
|
|
|
streamReader.Close();
|
|
|
int CmdNum = CmdList.Count(); //指令个数
|
|
@@ -6209,7 +5906,7 @@ namespace Welling_Motor_Debug_Tool
|
|
|
Torque = (ushort)Convert.ToInt16(textBox_RunInfo_Torque.Text.Split(' ')[0]);
|
|
|
if (Torque > Max)
|
|
|
Max = Torque;
|
|
|
- if ((Max >= 75) && (Max <= 85) && (ACK_WaitCnt >= 6))
|
|
|
+ if ((Max >= 70) && (Max <= 85) && (ACK_WaitCnt >= 6))
|
|
|
{
|
|
|
label_FacModeTq.BackColor = Color.Green;
|
|
|
richTextBox_FacModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "力矩传感器正常" + " " + textBox_RunInfo_Torque.Text + "\r\n");
|
|
@@ -6786,6 +6483,12 @@ namespace Welling_Motor_Debug_Tool
|
|
|
/// <param name="e"></param>
|
|
|
private void button_CheckModeStart_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
+ if (!mySerialProcess.mySerial.IsOpen)
|
|
|
+ {
|
|
|
+ MessageBox.Show("请检查串口连接!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
CheckTestStart();
|
|
|
}
|
|
|
|
|
@@ -7031,12 +6734,13 @@ namespace Welling_Motor_Debug_Tool
|
|
|
CheckMode_Stop(false);
|
|
|
return;
|
|
|
}
|
|
|
+ label_CheckModeSN.BackColor = Color.Green;
|
|
|
richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "SN一致" + "\r\n");
|
|
|
Delay_ms(500);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- label_CheckModeFWVer.BackColor = Color.Yellow;
|
|
|
+ label_CheckModeSN.BackColor = Color.Yellow;
|
|
|
label_CheckModeStatus.Text = "跳过打标信息确认";
|
|
|
richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "跳过打标信息确认" + "\r\n");
|
|
|
Delay_ms(500);
|
|
@@ -7064,14 +6768,14 @@ namespace Welling_Motor_Debug_Tool
|
|
|
ConfigCmd.Clear();
|
|
|
while (streamReader.Peek() != -1)
|
|
|
{
|
|
|
- string fileLineInfo = streamReader.ReadLine();
|
|
|
+ string fileLineInfo = streamReader.ReadLine(); //读指令名称
|
|
|
if (fileLineInfo.Contains("["))
|
|
|
{
|
|
|
if (fileLineInfo.Contains("助力参数"))
|
|
|
{
|
|
|
fileLineInfo = streamReader.ReadLine();
|
|
|
}
|
|
|
- ConfigCmd.Add(fileLineInfo, streamReader.ReadLine());
|
|
|
+ ConfigCmd.Add(fileLineInfo, streamReader.ReadLine()); //指令名称和指令内容加入字典
|
|
|
}
|
|
|
}
|
|
|
streamReader.Close();
|
|
@@ -7080,39 +6784,181 @@ namespace Welling_Motor_Debug_Tool
|
|
|
richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "读取完成," + "共" + CmdNum.ToString() + "条指令," + "\r\n");
|
|
|
Delay_ms(500);
|
|
|
//逐条读取比较
|
|
|
- for (int i = 0; i < CmdNum; i++)
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ try
|
|
|
+ {
|
|
|
+ foreach (string key in ConfigCmd.Keys)
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "发送读" + key + "指令:" + "\r\n");
|
|
|
+ CmdRevStrTemp = "";
|
|
|
+ if (key.Contains("曲线"))
|
|
|
+ {
|
|
|
+ byte LineNum = 0;
|
|
|
+ var code = new byte[4];
|
|
|
+ LineNum = Convert.ToByte(key.Substring(3, key.Length - 4));
|
|
|
+ if (LineNum <= 5)
|
|
|
+ {
|
|
|
+ code[0] = (byte)(LineNum & 0xFF);
|
|
|
+ code[1] = (byte)((LineNum >> 8) & 0xFF);
|
|
|
+ code[2] = (byte)(LineNum & 0xFF);
|
|
|
+ code[3] = (byte)((LineNum >> 8) & 0xFF);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ code[0] = (byte)(LineNum & 0xFF);
|
|
|
+ code[1] = (byte)((LineNum >> 8) & 0xFF);
|
|
|
+ code[2] = (byte)(5 & 0xFF);
|
|
|
+ code[3] = (byte)((5 >> 8) & 0xFF);
|
|
|
+ }
|
|
|
+ mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, (ushort)myParams.ConfigCheckReadCmd["[助力参数]"], code);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, (ushort)myParams.ConfigCheckReadCmd[key], null);
|
|
|
+ Delay_ms(500);
|
|
|
+ if (CmdRevStrTemp == string.Empty)
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + key + "指令读取失败" + "\r\n");
|
|
|
+ label_CheckModeStatus.Text = "存在故障!";
|
|
|
+ label_CheckModeResult.BackColor = Color.Red;
|
|
|
+ label_CheckModeResult.Text = "测试异常";
|
|
|
+ Delay_ms(500);
|
|
|
+ //存储异常并上传
|
|
|
+ CheckMode_Stop(false);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //比较当前指令,读取的配置文件和返回数据比较
|
|
|
+ string ParamWrite = ConfigCmd[key].Substring(24, ConfigCmd[key].Length - 40).Trim();
|
|
|
+ string ParamRead = "";
|
|
|
+ if (string.Compare(key, "[其它传感器参数]") == 0)
|
|
|
+ ParamRead = CmdRevStrTemp.Substring(90, CmdRevStrTemp.Length - 90).Trim(); //该指令包含力矩参数
|
|
|
+ else
|
|
|
+ ParamRead = CmdRevStrTemp.Substring(6, CmdRevStrTemp.Length - 6).Trim();
|
|
|
+ if (ParamWrite.Contains(ParamRead))
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + key + "一致" + "\r\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + key + "不一致" + "\r\n");
|
|
|
+ label_CheckModeStatus.Text = "存在故障!";
|
|
|
+ label_CheckModeResult.BackColor = Color.Red;
|
|
|
+ label_CheckModeResult.Text = "测试异常";
|
|
|
+ Delay_ms(500);
|
|
|
+ //存储异常并上传
|
|
|
+ CheckMode_Stop(false);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (System.Exception)
|
|
|
+ {
|
|
|
+ timer_1s.Enabled = false;
|
|
|
+ MessageBox.Show("参数检验失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
|
+ timer_1s.Enabled = true;
|
|
|
+ ConfigFileSave(false, localInfo.LocalPath + localInfo.ConfigFileName);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- label_CheckModeFWVer.BackColor = Color.Yellow;
|
|
|
+ label_CheckModeCfg.BackColor = Color.Yellow;
|
|
|
label_CheckModeStatus.Text = "跳过参数检验";
|
|
|
richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "跳过参数检验" + "\r\n");
|
|
|
Delay_ms(500);
|
|
|
}
|
|
|
+ label_CheckModeCfg.BackColor = Color.Green;
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "参数检验正确" + "\r\n");
|
|
|
+ Delay_ms(500);
|
|
|
|
|
|
- //传感器标定检验
|
|
|
- if (checkBox_CheckModeTorque.Checked)
|
|
|
+ //读取力矩传感器
|
|
|
+ do
|
|
|
{
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "读取力矩传感器标定数据" + "\r\n");
|
|
|
+ //发送指令读取力矩传感器标定数据
|
|
|
+ CmdRevStrTemp = "";
|
|
|
+ mySerialProcess.SendCmd((ushort)0x751, (byte)0x11, 0x4000, null);
|
|
|
+ ACK_WaitCnt = 0;
|
|
|
+ while (ACK_WaitCnt <= 2) ; //1s
|
|
|
+ if (CmdRevStrTemp == "---")
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "力矩传感器读取失败" + "\r\n");
|
|
|
+ label_CheckModeStatus.Text = "存在故障!";
|
|
|
+ label_CheckModeResult.BackColor = Color.Red;
|
|
|
+ label_CheckModeResult.Text = "测试异常";
|
|
|
+ Delay_ms(500);
|
|
|
+ //存储异常并上传
|
|
|
+ CheckMode_Stop(false);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "力矩传感器读取成功" + "\r\n");
|
|
|
+ //取力矩传感器数据
|
|
|
+ ushort ZeroInit, Zero1, Zero2, Zero3, ZeroNew;
|
|
|
+ ushort MaxTorque;
|
|
|
+ ushort K1_T, K1, K2_T, K2, K3_T, K3, K4_T, K4;
|
|
|
+ byte[] DataArray = mySerialProcess.HexStringToBytes(CmdRevStrTemp, true);
|
|
|
+ ZeroInit = (ushort)((DataArray[3] << 8) + DataArray[2]);
|
|
|
+ Zero1 = (ushort)((DataArray[5] << 8) + DataArray[4]);
|
|
|
+ Zero2 = (ushort)((DataArray[7] << 8) + DataArray[6]);
|
|
|
+ Zero3 = (ushort)((DataArray[9] << 8) + DataArray[8]);
|
|
|
+ ZeroNew = (ushort)((DataArray[11] << 8) + DataArray[10]);
|
|
|
+ MaxTorque = (ushort)((DataArray[13] << 8) + DataArray[12]);
|
|
|
+ K1_T = (ushort)((DataArray[15] << 8) + DataArray[14]);
|
|
|
+ K1 = (ushort)((DataArray[17] << 8) + DataArray[16]);
|
|
|
+ K2_T = (ushort)((DataArray[19] << 8) + DataArray[18]);
|
|
|
+ K2 = (ushort)((DataArray[21] << 8) + DataArray[20]);
|
|
|
+ K3_T = (ushort)((DataArray[23] << 8) + DataArray[22]);
|
|
|
+ K3 = (ushort)((DataArray[25] << 8) + DataArray[24]);
|
|
|
+ K4_T = (ushort)((DataArray[27] << 8) + DataArray[26]);
|
|
|
+ K4 = (ushort)((DataArray[29] << 8) + DataArray[28]);
|
|
|
+
|
|
|
+ richTextBox_CheckModeLog.AppendText("力矩传感器零点: " + ZeroInit.ToString() + "," + Zero1.ToString() + "," +
|
|
|
+ Zero2.ToString() + "," + Zero3.ToString() + "," + ZeroNew.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("最大力矩: " + MaxTorque.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("力矩传感器标定: " + "[" + K1_T.ToString() + "," + K1.ToString() + "]" + "," +
|
|
|
+ "[" + K2_T.ToString() + "," + K2.ToString() + "]" + "," + "[" + K3_T.ToString() + "," + K3.ToString() + "]" + "," +
|
|
|
+ "[" + K4_T.ToString() + "," + K4.ToString() + "]" + "\r\n");
|
|
|
+
|
|
|
+ //传感器标定检验
|
|
|
+ if (checkBox_CheckModeTorque.Checked)
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText("力矩零点范围: " + TorqueParamsForm.Zero.Min.ToString() + " - " + TorqueParamsForm.Zero.Max.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("K1范围: " + TorqueParamsForm.K1.T.ToString() + "," + TorqueParamsForm.K1.Min.ToString() + " - " + TorqueParamsForm.K1.Max.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("K2范围: " + TorqueParamsForm.K2.T.ToString() + "," + TorqueParamsForm.K2.Min.ToString() + " - " + TorqueParamsForm.K2.Max.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("K3范围: " + TorqueParamsForm.K3.T.ToString() + "," + TorqueParamsForm.K3.Min.ToString() + " - " + TorqueParamsForm.K3.Max.ToString() + "\r\n");
|
|
|
+ richTextBox_CheckModeLog.AppendText("K4范围: " + TorqueParamsForm.K4.T.ToString() + "," + TorqueParamsForm.K4.Min.ToString() + " - " + TorqueParamsForm.K4.Max.ToString() + "\r\n");
|
|
|
+ //与设置值比较
|
|
|
+ if ((ZeroInit <= TorqueParamsForm.Zero.Max) && (ZeroInit >= TorqueParamsForm.Zero.Min)
|
|
|
+ && (K1_T == TorqueParamsForm.K1.T) && (K1 <= TorqueParamsForm.K1.Max) && (K1 >= TorqueParamsForm.K1.Min)
|
|
|
+ && (K2_T == TorqueParamsForm.K2.T) && (K2 <= TorqueParamsForm.K2.Max) && (K2 >= TorqueParamsForm.K2.Min)
|
|
|
+ && (K3_T == TorqueParamsForm.K3.T) && (K3 <= TorqueParamsForm.K3.Max) && (K3 >= TorqueParamsForm.K3.Min)
|
|
|
+ && (K4_T == TorqueParamsForm.K4.T) && (K4 <= TorqueParamsForm.K4.Max) && (K4 >= TorqueParamsForm.K4.Min)
|
|
|
+ )
|
|
|
+ {
|
|
|
+ label_CheckModeTorque.BackColor = Color.Green;
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "力矩传感器标定正常" + "\r\n");
|
|
|
+ Delay_ms(500);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "力矩传感器标定超范围" + "\r\n");
|
|
|
+ label_CheckModeStatus.Text = "存在故障!";
|
|
|
+ label_CheckModeResult.BackColor = Color.Red;
|
|
|
+ label_CheckModeResult.Text = "测试异常";
|
|
|
+ Delay_ms(500);
|
|
|
+ //存储异常并上传
|
|
|
+ CheckMode_Stop(false);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- label_CheckModeFWVer.BackColor = Color.Yellow;
|
|
|
- label_CheckModeStatus.Text = "跳过传感器标定检验";
|
|
|
- richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "跳过传感器标定检验" + "\r\n");
|
|
|
- Delay_ms(500);
|
|
|
- }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ label_CheckModeFWVer.BackColor = Color.Yellow;
|
|
|
+ label_CheckModeStatus.Text = "跳过传感器标定检验";
|
|
|
+ richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "跳过传感器标定检验" + "\r\n");
|
|
|
+ Delay_ms(500);
|
|
|
+ }
|
|
|
+ } while (false);
|
|
|
|
|
|
//测试合格
|
|
|
richTextBox_CheckModeLog.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "测试结束" + "\r\n");
|
|
@@ -7143,6 +6989,100 @@ namespace Welling_Motor_Debug_Tool
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void 调试记录数据ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ System.Diagnostics.Process.Start("explorer.exe", Directory.GetCurrentDirectory());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void 生产记录数据ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ System.Diagnostics.Process.Start("explorer.exe", localInfo.LocalDataPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void 累计运行时间ToolStripMenuItem_MouseHover(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ UInt32 Time = (UInt32)stopwatch.ElapsedMilliseconds / 1000;
|
|
|
+ UInt32 hour = Time / 3600;
|
|
|
+ UInt32 min = (Time % 3600) / 60;
|
|
|
+ UInt32 s = (Time % 60);
|
|
|
+ toolStripMenuItem_RunTime.Text = hour.ToString() + ":" + min.ToString("00") + ":" + s.ToString("00");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void richTextBox_CheckModeLog_TextChanged(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ richTextBox_CheckModeLog.SelectionStart = richTextBox_CheckModeLog.Text.Length;
|
|
|
+ richTextBox_CheckModeLog.ScrollToCaret();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void 力矩传感器检验ToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ EnterForm1.ShowDialog();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (EnterForm1.textBox_Passwd.Text == EnterForm1.UserAccount[EnterForm1.comboBox_User.Text])//检验模式所有用户支持
|
|
|
+ {
|
|
|
+ if (EnterForm1.comboBox_User.Text == "工程配置")
|
|
|
+ {
|
|
|
+ TorqueParamsForm.ShowDialog();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show("权限不支持", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox.Show("密码错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ MessageBox.Show("用户不存在或密码错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void textBox_CheckModeScan_KeyUp(object sender, KeyEventArgs e)
|
|
|
+ {
|
|
|
+ if (e.KeyCode == Keys.Enter)
|
|
|
+ CheckTestStart();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void textBox_FacModeScan_KeyUp(object sender, KeyEventArgs e)
|
|
|
+ {
|
|
|
+ if (e.KeyCode == Keys.Enter)
|
|
|
+ TestStart();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void button_SpeedDec10_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if (numericUpDown_SpeedAdj.Value <= 10)
|
|
|
+ numericUpDown_SpeedAdj.Value = 0;
|
|
|
+ else
|
|
|
+ numericUpDown_SpeedAdj.Value -= 10;
|
|
|
+ }
|
|
|
|
|
|
+ private void button_SpeedAdd10_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if (numericUpDown_SpeedAdj.Value >= 90)
|
|
|
+ numericUpDown_SpeedAdj.Value = 100;
|
|
|
+ else
|
|
|
+ numericUpDown_SpeedAdj.Value += 10;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void button_SpeedDec1_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if (numericUpDown_SpeedAdj.Value <= 1)
|
|
|
+ numericUpDown_SpeedAdj.Value = 0;
|
|
|
+ else
|
|
|
+ numericUpDown_SpeedAdj.Value -= 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void button_SpeedAdd1_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ if(numericUpDown_SpeedAdj.Value >= 99)
|
|
|
+ numericUpDown_SpeedAdj.Value = 100;
|
|
|
+ else
|
|
|
+ numericUpDown_SpeedAdj.Value += 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|