You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3114 lines
124 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
using System.Drawing.Printing;
using ZXingDemo;
using System.Net;
using System.IO;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Threading;
namespace YD10
{
public partial class Form1 : Form
{
SerialPort serialPort = new SerialPort();
public Form1()
{
InitializeComponent();
}
private float X; private float Y;
//获取控件的width、height、left、top、字体大小的值
//存放在控件的Tag属性中
private void setTag(Control cons)
{
//遍历窗体中的控件
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if (con.Controls.Count > 0)
setTag(con);
}
}
//根据窗体大小调整控件大小
private void setControls(float newx, float newy, Control cons)
{
//遍历窗体中的控件,重新设置控件的值
foreach (Control con in cons.Controls)
{
string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值并分割后存储字符串数组
float a = Convert.ToSingle(mytag[0]) * newx;//根据窗体缩放比例确定控件的值,宽度
con.Width = (int)a;//宽度
a = Convert.ToSingle(mytag[1]) * newy;//高度
con.Height = (int)(a);
a = Convert.ToSingle(mytag[2]) * newx;//左边距离
con.Left = (int)(a);
a = Convert.ToSingle(mytag[3]) * newy;//上边缘距离
con.Top = (int)(a);
Single currentSize = Convert.ToSingle(mytag[4]) * newy;//字体大小
con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
if (con.Controls.Count > 0)
{
setControls(newx, newy, con);
}
}
}
//
void Form1_Resize(object sender, EventArgs e)
{
}
int flag_yd07close = 0;
public void ShowMessage(bool message1, bool message2, bool message3,string printname,string znum)
{
flag_yd07close = 1;
yd_ble = message1;
checkBox2.Checked = message2;
checkBox3.Checked = message3;
comboBox1.Text = printname;
comboBox2.Text = znum;
}
private void Form1_Load(object sender, EventArgs e)
{
if (checkBox3.Checked)
{
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "设备IMEI";
dataGridView2.Rows[index].Cells[1].Value = readConfig[2].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "设备ICCID";
dataGridView2.Rows[index].Cells[1].Value = readConfig[3].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产日";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[5].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产月份";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[6].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产年份";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[7].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "流水号";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[8].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "批次号";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[14].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "供应商编码";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[13].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "物料编码";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[12].threshold;
}
read_set();
if (che_kind == "YD07k")
{
if (serialPort.IsOpen)
{
_yd_disconnet();
serialPort.Close();
}//关闭串口
// 创建 Form3 的实例
Form3 form3 = new Form3(this);
// 隐藏 Form1
this.Hide();
// 显示 Form3
form3.ShowDialog();
return;
}
//timer1.Enabled = true;
//timer2.Enabled = true;
cmbBox_Port_Update();
my_set();
read();
GetPrinter();
// 添加第四列(按钮列)
DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn
{
Name = "ButtonColumn", // 列的名称
HeaderText = "操作", // 列头显示的文本
Text = "写", // 按钮显示的文本
AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
UseColumnTextForButtonValue = true, // 将按钮文本设置为列的值
DefaultCellStyle = new DataGridViewCellStyle
{
Font = new Font("宋体", 9), // 设置按钮字体为 Arial大小为 12加粗
}
};
dataGridView2.Columns.Add(buttonColumn);
// 注册按钮点击事件
dataGridView2.CellClick += DataGridView2_CellClick;
//set_ready();
ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, sslPolicyErrors) => true;
this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件
X = this.Width;//获取窗体的宽度
Y = this.Height;//获取窗体的高度
setTag(this);//调用方法
}
string[] rsrp_ck,rsrq_ck;
string product,rssi,sinr;
int wd1, wd2,gnss;
private void read()
{
string strLoadConfigFilePath = Application.StartupPath + @"\YD10参考信息.json";//路径
try
{
using (StreamReader configFile = new StreamReader(strLoadConfigFilePath))
{
string str_data_json = configFile.ReadToEnd(); //这一步至关重要 差一点写错了
JObject object_data_prase_json = (JObject)JsonConvert.DeserializeObject(str_data_json);
if (object_data_prase_json != null)
{
product=(string)object_data_prase_json["打印名称设置"];
for (int i = 0; i < readConfig.Length; i++)
{
readConfig[i].Svalue = (string)object_data_prase_json[readConfig[i].name];
int ret_index = 0;
if (readConfig[i].name == "RSSI值")
{
ret_index = readConfig[i].Svalue.IndexOf("(雅迪");
rssi = readConfig[i].Svalue.Substring(0,ret_index);
}
if (readConfig[i].name == "SINR值")
{
ret_index = readConfig[i].Svalue.IndexOf("(雅迪");
sinr = readConfig[i].Svalue.Substring(0, ret_index);
}
if (readConfig[i].name == "RSRP值")
{
rsrp_ck = readConfig[i].Svalue.Split('~');
}
if (readConfig[i].name == "RSRQ值")
{
rsrq_ck = readConfig[i].Svalue.Split('~');
}
if (readConfig[i].name == "外电电压值")
{
wd1 = Convert.ToInt32(readConfig[i].Svalue.Substring(0, 2))-Convert.ToInt32(readConfig[i].Svalue.Substring(5,1));
wd2 = Convert.ToInt32(readConfig[i].Svalue.Substring(0, 2)) + Convert.ToInt32(readConfig[i].Svalue.Substring(5, 1));
}
if (readConfig[i].name == "GNSS SNR值")
{
gnss = Convert.ToInt32(readConfig[i].Svalue.Substring(0, 2));
}
}
for (int i = 0; i < writeConfig.Length; i++)
{
writeConfig[i].Svalue = (string)object_data_prase_json[writeConfig[i].name];
}
for (int i = 0; i < readConfig.Length; i++)
{
readConfig[i].status = (bool)object_data_prase_json[readConfig[i].name + "status"];
}
for (int i = 0; i < writeConfig.Length; i++)
{
writeConfig[i].status = (bool)object_data_prase_json[writeConfig[i].name + "status"];
}
}
}
}
catch (Exception)
{
}
}
bool yd_ble = false;
string che_kind = "";
private void read_set()
{
// string strLoadConfigFilePath = Application.StartupPath + @"\配置.json";//路径
string strLoadConfigFilePath = Path.Combine(Application.StartupPath, "配置.json");
try
{
using (StreamReader configFile = new StreamReader(strLoadConfigFilePath))
{
string str_data_json = configFile.ReadToEnd(); //这一步至关重要 差一点写错了
JObject object_data_prase_json = (JObject)JsonConvert.DeserializeObject(str_data_json);
if (object_data_prase_json != null)
{
che_kind= (string)object_data_prase_json["车型"];
comboBox1.Text = (string)object_data_prase_json["打印机"];
comboBox2.Text = (string)object_data_prase_json["张数"];
checkBox2.Checked = (bool)object_data_prase_json["自动打印机"];
yd_ble = (bool)object_data_prase_json["自动蓝牙连接"];
checkBox3.Checked = (bool)object_data_prase_json["号码校验"];
}
// configFile.Close(); // 显式关闭文件(可选,通常不需要)
}
}
catch (Exception ex)
{
MessageBox.Show($"发生错误: {ex.Message}");
}
}
private void cmbBox_Port_Update()
{
cmbPort.Items.Clear();
RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
if (keyCom != null)
{
string[] sSubKeys = keyCom.GetValueNames();
foreach (string sName in sSubKeys)
{
string sValue = (string)keyCom.GetValue(sName);
cmbPort.Items.Add(sValue);
}
}
}
////<summary>
//把十六进制格式的字符串转换成字节数组。
//</summary>
//<param name="pString">要转换的十六进制格式的字符串</param>
//<returns>返回字节数组。</returns>
public static byte[] getBytesFromString(string pString)
{
string[] str = pString.Split(' '); //把十六进制格式的字符串按空格转换为字符串数组。
byte[] bytes = new byte[str.Length]; //定义字节数组并初始化,长度为字符串数组的长度。
for (int i = 0; i < str.Length; i++) //遍历字符串数组,把每个字符串转换成字节类型赋值给每个字节变量。
bytes[i] = Convert.ToByte(Convert.ToInt32(str[i], 16));
return bytes; //返回字节数组。
}
//把字节数组转为十六进制字符串
public static string getStringFromBytes(byte[] pByte)
{
string str = ""; //定义字符串类型临时变量。
//遍历字节数组把每个字节转换成十六进制字符串不足两位前面添“0”以空格分隔累加到字符串变量里。
for (int i = 0; i < pByte.Length; i++)
str += (pByte[i].ToString("X").PadLeft(2, '0') + " ");
str = str.TrimEnd(' '); //去掉字符串末尾的空格。
return str; //返回字符串临时变量。
}
// /16进制转字符串
static string ushortToHexString(ushort value)
{
byte[] bytes = BitConverter.GetBytes(value); // 将ushort转换为字节数组
//if (BitConverter.IsLittleEndian) // 检查系统是否为小端字节序
//{
// Array.Reverse(bytes); // 如果是小端字节序,需要反转字节数组
//}
// 将每个字节转换为两位的十六进制字符串,并拼接
string hexString = string.Join(" ", bytes.Select(b => b.ToString("X2")));
return hexString;
}
// CRC16-CCITT (0xFFFF)算法实现
public static ushort ComputeChecksum(byte[] data)
{
ushort crc = 0xFFFF; // 初始化 CRC 为 0xFFFF
foreach (byte b in data)
{
crc ^= b; // 确保 b 是一个整数
for (int i = 0; i < 8; i++)
{
if ((crc & 0x0001) != 0)
{
crc = (ushort)((crc >> 1) ^ 0xA001); // 0xA001 是 0x8005 按位颠倒后的结果
}
else
{
crc = (ushort)(crc >> 1);
}
}
}
return crc;
}
// 将十六进制字符串转换为CRC16校验码的字符串格式"XX XX"
public static string crc16(string hexString)
{
// 将十六进制字符串转换为字节数组
byte[] data = getBytesFromString(hexString);
// 计算CRC16校验码
ushort crc = ComputeChecksum(data);
// 将校验码转换为字符串格式("XX XX"
return $"{(crc >> 8):X2} {(crc & 0xFF):X2}";
}
// 将字符串中的每个字符转换为十六进制字符串
public static string StringToHex(string str)
{
string hexString = "";
foreach (char c in str)
{
hexString += ((int)c).ToString("X2") + " "; // 每个字符转换为两位的十六进制字符串,并用空格分隔
}
return hexString.Trim(); // 去掉尾部多余的空格
}
static string Int32ToTwoHexBytes(int value)
{
// 提取低8位和高8位
byte low8 = (byte)(value & 0xFF); // 低8位
byte high8 = (byte)((value >> 8) & 0xFF); // 高8位
// 转换为两位的十六进制字符串
string lowHex = low8.ToString("X2"); // 低8位的十六进制字符串
string highHex = high8.ToString("X2"); // 高8位的十六进制字符串
return $"{lowHex} {highHex}";
}
public static int ConvertToAsciiHex(string input)
{
// 将输入的字符串转换为 int32 类型的数值
int intValue = int.Parse(input);
// 将 int32 类型的数值转换为十六进制表示(字符串形式)
string hexString = intValue.ToString("X");
// 获取十六进制表示的第一个字符(假设只关心第一个字符)
char hexChar = hexString[0];
// 返回该字符的 ASCII 码值
return (int)hexChar;
}
private void send(string data)
{
if (serialPort.IsOpen)
{
byte[] temdata1 = getBytesFromString(data);
serialPort.Write(temdata1, 0, temdata1.Length); //发到串口
}
else
{
txtStatus.Text = "请先打开串口!!";
}
//this.Invoke(new Action(() =>
//{
// label2.Text = "send:" +data;
//}));
}
int flag_readn = 0;
//建立连接
private void _yd_connet()
{
string head = "59 44 ";
string data = "07 02 00 10 03";
string end = head + data + " " + crc16(data) + " 4B 4A";
send(end);
}
//断开连接
private void _yd_disconnet()
{
string head = "59 44 ";
string data = "07 02 00 10 00";
string end = head + data + " " + crc16(data) + " 4B 4A";
send(end);
}
//心跳包
private void yd_heart()
{
string head = "59 44 ";
string data = "07 02 00 3E 00" ;
string end = head + data + " " + crc16(data) + " 4B 4A";
send(end);
}
//交互指令
private void yd_rid_opt(UInt16 cmd)
{
string head = "59 44 ";
string data = "07 04 00 31 00 " + ushortToHexString(cmd);
string end = head + data + " " + crc16(data) + " 4B 4A";
send(end);
}
//读
private void yd_did_read_one(UInt16 cmd)
{
string head = "59 44 ";
string data = "07 03 00 22 " + ushortToHexString(cmd);
string end = head + data + " " + crc16(data) + " 4B 4A";
send(end);
}
//写
private void yd_did_write_one(UInt16 cmd, string data)
{
if (checkBox3.Checked)
{
return;
}
string cmd_data = "";
if (cmd == 0xcf40)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 99)
{
cmd_data = Convert.ToInt32(data).ToString("X2");
}
else
{
}
}
if (cmd == 0xcf41)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 254)
{
cmd_data = Convert.ToInt32(data).ToString("X2");
}
else
{
}
}
if (cmd == 0xcf42)
{
if (data == "IOT")
{
cmd_data = StringToHex("E");
}
if (data == "BCM")
{
cmd_data = StringToHex("D");
}
else
{
}
}
if (cmd == 0xcf43)
{
if (data == "嘉为")
{
cmd_data = StringToHex("2");
}
if (data == "高兴新")
{
cmd_data = StringToHex("6");
}
if (data == "如新")
{
cmd_data = StringToHex("9");
}
}
if (cmd == 0xcf44)
{
if (data == "无锡雅迪")
{
cmd_data = StringToHex("1");
}
if (data == "天津雅迪")
{
cmd_data = StringToHex("2");
}
if (data == "浙江雅迪")
{
cmd_data = StringToHex("3");
}
if (data == "广州雅迪")
{
cmd_data = StringToHex("4");
}
if (data == "成都雅迪")
{
cmd_data = StringToHex("5");
}
if (data == "越南雅迪")
{
cmd_data = StringToHex("6");
}
}
if (cmd == 0xcf45)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 31)
{
cmd_data = StringToHex(data.Substring(0,1));
yd_did_write_one(0xcf46, data.Substring(1,1));
}
}
if (cmd == 0xcf46)
{
cmd_data = StringToHex(data);
}
if (cmd == 0xcf47)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 12)
{
cmd_data = ConvertToAsciiHex(data).ToString("X");
}
}
if (cmd == 0xcf48 )
{
if (Convert.ToInt32(data.Substring(0, 1)) >= 0 && Convert.ToInt32(data.Substring(0, 1)) <= 9)
{
cmd_data = StringToHex(data.Substring(0, 1));
yd_did_write_one(0xcf49, data.Substring(1, 1));
}
}
if (cmd == 0xcf49)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 9)
{
cmd_data = StringToHex(data);
}
}
if (cmd == 0xcf4a)
{
if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 999999)
{
cmd_data = StringToHex(data)+" 00";
}
}
if (cmd == 0xcf4b)
{
if (data.Length<65) {
cmd_data = StringToHex(data) + " 00";
}
}
if (cmd == 0xcf4c)
{
if (data.Length < 65535)
{
cmd_data = Int32ToTwoHexBytes(Convert.ToInt32(data));
}
}
if (cmd == 0xcf4d)
{
string hexString = Convert.ToInt32(data).ToString("X8");
cmd_data = $"{hexString.Substring(6, 2)} {hexString.Substring(4, 2)} {hexString.Substring(2, 2)} {hexString.Substring(0, 2)}";
}
if (cmd == 0xcf4e)
{
if (data.Length < 17)
{
cmd_data = StringToHex(data) + " 00";
}
}
if (cmd == 0xcf4f)
{
if (data.Length < 7)
{
cmd_data = StringToHex(data) + " 00";
}
}
if (cmd == 0xcf50)
{
if (data.Length < 10)
{
cmd_data = StringToHex(data) + " 00 00 00";
}
}
string head = "59 44 ";
string data2 = "07 "+ ((cmd_data.Length+1)/3+3).ToString("X2") + " 00 2E " + ushortToHexString(cmd)+" " + cmd_data;
string end = head + data2 + " " + crc16(data2) + " 4B 4A";
send(end);
}
//自动测试
private void zd_test(int i)
{
if (this.Text.IndexOf("YD10") != -1) {
if (i < 26)
{
ushort did = Convert.ToUInt16(readConfig[i].DID, 16);
yd_did_read_one(did);
}
else if (i > 25)
{
ushort did = Convert.ToUInt16(writeConfig[i - 26].DID, 16);
if (did == 0xcf46)
{
yd_did_read_one(0xcf45);
}
if (did == 0xcf49)
{
yd_did_read_one(0xcf48);
}
yd_did_read_one(did);
}
}
else if (this.Text.IndexOf("YD07") != -1)
{
}
}
private void btnOpen_usb_Click(object sender, EventArgs e)
{
if (btnOpen_usb.Text == "打开")
{
try
{
if (!serialPort.IsOpen)
{
serialPort.PortName = cmbPort.Text;
serialPort.BaudRate = 115200; //波特率
serialPort.DataBits = 8; //数据位
serialPort.StopBits = StopBits.One; //停止位
serialPort.Parity = Parity.None; //奇偶校验
serialPort.Open();//打开串口
}
btnOpen_usb.Text = "关闭";
txtStatus.Text = "串口已打开!";
serialPort.DataReceived += new SerialDataReceivedEventHandler(PortReceivedHandle); //加载接收事件
}
catch
{
txtStatus.Text = "串口打开错误或串口不存在!";
}
}
else //关闭串口
try
{
if (serialPort.IsOpen)
{
serialPort.Close(); //关闭串口
btnOpen_usb.Text = "打开";
txtStatus.Text = "串口已关闭!";
flag_heart = 0;
out_time = -1;
_yd_disconnet();
flag_connet = 0;
clean();
//button1.Text = "开始检测";
}
}
catch
{
txtStatus.Text = "串口关闭错误或串口不存在!";
}
}
// 将十六进制字符串转换为整数
public static int HexStringToInt(string hexString)
{
// 移除字符串中的所有空格
string cleanedHexString = hexString.Replace(" ", "");
// 将十六进制字符串转换为整数
int result = Convert.ToInt32(cleanedHexString, 16);
return result;
}
private void PortReceivedHandle(object sender, SerialDataReceivedEventArgs e)
{
try
{
//第一部分 串口接收
SerialPort serialport = (SerialPort)(sender);
System.Threading.Thread.Sleep(200);
int n = serialport.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
//writeA883SmtLog(smt_log_path,"n = "+ Convert.ToString(n), 0, 2);
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
serialport.Read(buf, 0, n);//读取缓冲数据
serialport.DiscardInBuffer(); //清空接收中断buffer
//str_result = Encoding.UTF8.GetString(buf);
//byte[] str16_result = getBytesFromString(str_result);
string str_result = getStringFromBytes(buf);
int ret_index = -1;
//if (buf[0]==0x59 && buf[1]==0x44 && buf[2]==0x0f) //找到头
//{
// int data_len = buf[4] << 8 | buf[3];
// byte[] data= buf.Skip(2 + 1 + 2).Take(data_len).ToArray();
// int crc = buf[2 + 1 + 2 + data_len] << 8 | buf[2 + 1 + 2 + data_len + 1];
// byte[] end = buf.Skip(2 + 1 + 2 + data_len + 2).Take(data_len + 2 + 2).ToArray();
// // 校验CRC
// byte[] tmp = buf.Skip(2).Take(data_len+1+2).ToArray();
// int tmp_crc16 = HexStringToInt(crc16(getStringFromBytes(tmp)));
// if (crc == tmp_crc16)
// {
// if (end[0] == 0x4b && end[1] == 0x4a)
// {
// recvAnalz(data,data_len);
// }
// }
//}
int index = 0; // 当前处理的索引
while (index < buf.Length)
{
// 检查头部
if (index + 5 < buf.Length && buf[index] == 0x59 && buf[index + 1] == 0x44 && buf[index + 2] == 0x0f)
{
// 提取数据长度
int data_len = buf[index + 4] << 8 | buf[index + 3];
// 提取数据部分
byte[] data = buf.Skip(index + 2 + 1 + 2).Take(data_len).ToArray();
// 提取CRC部分
int crc = buf[index + 2 + 1 + 2 + data_len] << 8 | buf[index + 2 + 1 + 2 + data_len + 1];
// 提取结束标志部分
byte[] end = buf.Skip(index + 2 + 1 + 2 + data_len + 2).Take(2).ToArray();
// 提取用于CRC校验的数据
byte[] tmp = buf.Skip(index + 2).Take(data_len + 1 + 2).ToArray();
// 计算CRC
int tmp_crc16 = HexStringToInt(crc16(getStringFromBytes(tmp)));
// 校验CRC
if (crc == tmp_crc16)
{
// 校验结束标志
if (end.Length == 2 && end[0] == 0x4b && end[1] == 0x4a)
{
// 处理有效数据
Heart = true;
recvAnalz(data, data_len);
//this.Invoke(new Action(() =>
//{
// label2.Text = str_result ;
//}));
}
}
}
// 移动到下一组数据
index++;
}
}
catch (Exception)
{
}
}
int flag_gnss = 0,acc_bl=1000;
string year = "", day = "";
string[] numbers;
//响应数据分析
private void recvAnalz(byte[] data, int data_len)
{
ushort cmd = data[0];
Heart = true;
switch (cmd)
{
case 0x7f://错误码
if (data[1] == 0x10)
{
if (data[2] == 0x12)
{
this.Invoke(new Action(() =>
{
label2.Text = "连接/断开:不受支持的子功能";
}));
}
if (data[2] == 0x13)
{
this.Invoke(new Action(() =>
{
label2.Text = "连接/断开:消息长度或格式不正确";
}));
}
}
if (data[1] == 0x3E)
{
if (data[2] == 0x12)
{
this.Invoke(new Action(() =>
{
label2.Text = "心跳:不受支持的子功能";
}));
}
if (data[2] == 0x13)
{
this.Invoke(new Action(() =>
{
label2.Text = "心跳:消息长度或格式不正确";
}));
}
}
if (data[1] == 0x22)
{
if (data[2] == 0x13)
{
this.Invoke(new Action(() =>
{
label2.Text = "读:消息长度或格式不正确";
}));
}
}
if (data[1] == 0x2E)
{
if (data[2] == 0x13)
{
this.Invoke(new Action(() =>
{
label2.Text = "写:消息长度或格式不正确";
}));
}
if (data[2] == 0x31)
{
this.Invoke(new Action(() =>
{
label2.Text = "写不支持的DID或DID为只读DID";
}));
}
if (data[2] == 0x72)
{
this.Invoke(new Action(() =>
{
label2.Text = "写:写出错";
}));
}
}
if (data[1] == 0x31)
{
if (data[2] == 0x13)
{
this.Invoke(new Action(() =>
{
label2.Text = "交互:消息长度或格式不正确";
}));
}
if (data[2] == 0x31)
{
this.Invoke(new Action(() =>
{
label2.Text = "交互不支持的DID或DID为只读DID";
}));
}
if (data[2] == 0x72)
{
this.Invoke(new Action(() =>
{
label2.Text = "交互:写出错";
}));
}
}
break;
case 0x50://建立连接
if (data[1] == 0x03)
{
this.Invoke(new Action(() =>
{
label2.Text = "连接成功";
}));
yd_heart();
flag_connet = 0;
flag_result = 0;
flag_heart = 1;
}
if (data[1] == 0x00)//断开连接
{
}
break;
case 0x7e://心跳报文
if (data[1] == 0x00)
{
//Heart = true;
}
break;
case 0x62://读响应
ushort did = (ushort)((data[2] << 8) | data[1]);
string DID = ((data[2] << 8) | data[1]).ToString("X4");
// 查找特定 value 对应的 name
int index = Array.FindIndex(readConfig, myUnitClass => myUnitClass.DID == DID);
//数字
if ((did >= 0xCF81) && (did <= 0xCF8C) || (did == 0xCF08) || (did == 0xCF09) || (did == 0xCF0C))
{
if (did == 0xCF85)
{
readConfig[index].threshold = string.Join(", ", data.Skip(3).Select(s8 => (s8 > 127) ? s8 - 256 : s8));
// 使用 Split 方法按逗号拆分字符串
numbers = readConfig[index].threshold.Split(',');
flag_gnss = 1;
}
else if ((did == 0xCF86) || (did == 0xCF87))
{
readConfig[index].threshold = ((data[3] > 127) ? data[3] - 256 : data[3]).ToString() + "dbm";
readConfig[index].Ivalue = Convert.ToInt32(((data[3] > 127) ? data[3] - 256 : data[3]).ToString());
}
else if ((did == 0xCF88) || (did == 0xCF89))
{
readConfig[index].threshold = ((data[3] > 127) ? data[3] - 256 : data[3]).ToString() + "db";
readConfig[index].Ivalue = Convert.ToInt32(((data[3] > 127) ? data[3] - 256 : data[3]).ToString());
}
else if (did == 0xCF0C)
{
readConfig[index].threshold =Convert.ToString((data[4] << 8) | data[3]);
}
else
{
readConfig[index].threshold = Convert.ToString(data[3]);
readConfig[index].Ivalue = Convert.ToInt32(readConfig[index].threshold);
}
}
// 显示字符串
if (((did >= 0xCF00) && (did <= 0xCF06)) || (did == 0xCF0A) || (did == 0xCF0B) || (did == 0xCF80) && data[3]!=0xff)
{
readConfig[index].threshold = string.Join("", data.Skip(3).Select(b => (char)b)).Replace("\0", "");
}
// BCD 字符串
if (did == 0xCF07 && data[3] != 0xff)
{
readConfig[index].threshold = string.Concat(data.Skip(3).Select(b => (char)b)).Replace("\0", "");
}
//读写分组
int index2 = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.DID == DID);
// 数字1
if ((did == 0xCF40) || (did == 0xCF41))
{
writeConfig[index2].threshold = Convert.ToString(data[3]).PadLeft(2, '0');
}
if (did == 0xCF42)
{
if (data[3] == 0xff)
{
writeConfig[index2].threshold = "0xFF";
}
else
{
char character = (char)data[3];
if (character == 'E')
{
writeConfig[index2].threshold = "IOT";
}
if (character == 'D')
{
writeConfig[index2].threshold = "BCM";
}
}
}
if (did == 0xCF43)
{
if (data[2] == 0xff)
{
writeConfig[index2].threshold = "0xFF";
}
else
{
char character = (char)data[3];
if (character == '2')
{
writeConfig[index2].threshold = "嘉为";
}
if (character == '6')
{
writeConfig[index2].threshold = "高新兴";
}
if (character == '9')
{
writeConfig[index2].threshold = "如新";
}
}
}
if (did == 0xCF44)
{
if (data[2] == 0xff)
{
writeConfig[index2].threshold = "0xFF";
}
else
{
char character = (char)data[3];
writeConfig[index2].threshold = character + ".";
if (character == '1')
{
writeConfig[index2].threshold += "无锡";
}
if (character == '2')
{
writeConfig[index2].threshold += "天津";
}
if (character == '3')
{
writeConfig[index2].threshold += "浙江";
}
if (character == '4')
{
writeConfig[index2].threshold += "广州";
}
if (character == '5')
{
writeConfig[index2].threshold += "成都";
}
if (character == '6')
{
writeConfig[index2].threshold += "越南";
}
writeConfig[index2].threshold += "雅迪";
}
}
if ((did == 0xCF45))
{
day = Convert.ToString((char)data[3]);
//writeConfig[index2].threshold = Convert.ToString((char)data[3]);
}
if (did == 0xCF47)
{
string years =Convert.ToString( (char)data[3]);
string yeadrss = Convert.ToInt32(years,16).ToString("D2");
writeConfig[index2].threshold = yeadrss;
}
if ((did == 0xCF48))
{
year = Convert.ToString((char)data[3]);
}
if ((did == 0xCF4A) || (did == 0xCF4B) || (did == 0xCF4E) || (did == 0xCF4F) || (did == 0xCF50) )
{
writeConfig[index2].threshold = string.Join("", data.Skip(3).Select(b => (char)b)).Replace("\0", "");
}
// 数字2
if (did == 0xCF4C)
{
writeConfig[index2].threshold = Convert.ToString((data[4] << 8) | data[3]);
}
// 数字4
if (did == 0xCF4D)
{
writeConfig[index2].threshold = Convert.ToString((data[6] << 24 | data[5] << 16 | data[4] << 8 | data[3]));
if (Convert.ToInt32(writeConfig[index2].threshold)>0)
{
acc_bl = Convert.ToInt32(writeConfig[index2].threshold);
}
}
if ((did == 0xCF46))
{
writeConfig[index2].threshold = day + Convert.ToString((char)data[3]);
yd_did_read_one(0xcf45);
}
if ((did == 0xCF49))
{
writeConfig[index2].threshold = year+ Convert.ToString((char)data[3]);
yd_did_read_one(0xcf48);
}
break;
case 0x6e://写响应
ushort did2 = (ushort)((data[2] << 8) | data[1]);
//string DID2 = ((data[2] << 8) | data[1]).ToString("X4");
//int index3= Array.FindIndex(writeConfig, myUnitClass => myUnitClass.DID ==DID2);
//writeConfig[index3].threshold = "";
yd_did_read_one(did2);
this.Invoke(new Action(() =>
{
label2.Text = "写入成功";
}));
flag_write = 0;
break;
case 0x71://交互指令
if (data[1] == 0x00)
{
}
break;
}
}
struct myUnitClass
{
public string DID; //DID
public string name; //名称
public string threshold;
public bool status;
public Int64 Ivalue;
public bool Bvalue;
public string Svalue;
public byte[] Fvalue;
public string sw; //是pass 还是fail , 用于pass排在上上方
};
myUnitClass[] readConfig = new myUnitClass[26];
myUnitClass[] writeConfig = new myUnitClass[15];
myUnitClass[] alm_readConfig = new myUnitClass[23];
myUnitClass[] alm_writeConfig = new myUnitClass[5];
private void my_set()
{
//------只读1次-----
readConfig[0].DID = "CF00";
readConfig[0].name = "串口诊断协议版本号";
readConfig[0].status = true;
readConfig[1].DID = "CF01";
readConfig[1].name = "软件版本号";
readConfig[1].status = true;
readConfig[2].DID = "CF02";
readConfig[2].name = "设备IMEI";
readConfig[2].status = true;
readConfig[3].DID = "CF03";
readConfig[3].name = "设备ICCID";
readConfig[3].status = true;
readConfig[4].DID = "CF04";
readConfig[4].name = "GNSS产品型号";
readConfig[4].status = true;
readConfig[5].DID = "CF05";
readConfig[5].name = "GNSS软件版本号";
readConfig[5].status = true;
readConfig[6].DID = "CF06";
readConfig[6].name = "GNSS硬件版本号";
readConfig[6].status = true;
readConfig[7].DID = "CF07";
readConfig[7].name = "SPI FLASH ID";
readConfig[7].status = true;
readConfig[8].DID = "CF08";
readConfig[8].name = "BOOT底层软件版本";
readConfig[8].status = true;
readConfig[9].DID = "CF09";
readConfig[9].name = "BOOT升级协议版本";
readConfig[9].status = true;
readConfig[10].DID = "CF0A";
readConfig[10].name = "通信协议版本号";
readConfig[10].status = true;
readConfig[11].DID = "CF0B";
readConfig[11].name = "备份区软件版本号";
readConfig[11].status = true;
readConfig[12].DID = "CF0C";
readConfig[12].name = "OTA零部件编码";
readConfig[12].status = true;
//------只读N次-----
readConfig[13].DID = "CF80";
readConfig[13].name = "OTA域名";
readConfig[13].status = true;
readConfig[14].DID = "CF81";
readConfig[14].name = "拨号状态";
readConfig[14].status = true;
readConfig[15].DID = "CF82";
readConfig[15].name = "驻网状态";
readConfig[15].status = true;
readConfig[16].DID = "CF83";
readConfig[16].name = "服务器连接状态";
readConfig[16].status = true;
readConfig[17].DID = "CF84";
readConfig[17].name = "GNSS定位状态";
readConfig[17].status = true;
readConfig[18].DID = "CF85";
readConfig[18].name = "GNSS SNR值";
readConfig[18].status = true;
readConfig[19].DID = "CF86";
readConfig[19].name = "RSSI值";
readConfig[19].status = true;
readConfig[20].DID = "CF87";
readConfig[20].name = "RSRP值";
readConfig[20].status = true;
readConfig[21].DID = "CF88";
readConfig[21].name = "RSRQ值";
readConfig[21].status = true;
readConfig[22].DID = "CF89";
readConfig[22].name = "SINR值";
readConfig[22].status = true;
readConfig[23].DID = "CF8A";
readConfig[23].name = "ACC管脚电平状态";
readConfig[23].status = true;
readConfig[24].DID = "CF8B";
readConfig[24].name = "外电电压值";
readConfig[24].status = true;
readConfig[25].DID = "CF8C";
readConfig[25].name = "K线通讯状态";
readConfig[25].status = true;
////新增YD07K
///
//readConfig[26].DID = "CF0D";
//readConfig[26].name = "GSENSOR地址";
//readConfig[26].status = true;
//readConfig[27].DID = "CF8D";
//readConfig[27].name = "六轴数据校准值";
//readConfig[27].status = true;
//readConfig[28].DID = "CF8E";
//readConfig[28].name = "六轴传感器状态";
//readConfig[28].status = true;
//readConfig[29].DID = "CF8F";
//readConfig[29].name = "音频文件状态";
//readConfig[29].status = true;
//readConfig[30].DID = "CF90";
//readConfig[30].name = "外电电平";
//readConfig[30].status = true;
//---alm读节点----
alm_readConfig[0].DID = "CF01";
alm_readConfig[0].name = "alm软件版本号";
alm_readConfig[0].status = true;
alm_readConfig[1].DID = "CFA0";
alm_readConfig[1].name = "ACC1输出";
alm_readConfig[1].status = true;
alm_readConfig[2].DID = "CFA1";
alm_readConfig[2].name = "ACC1预充";
alm_readConfig[2].status = true;
alm_readConfig[3].DID = "CFA2";
alm_readConfig[3].name = "ACC2输出";
alm_readConfig[3].status = true;
alm_readConfig[4].DID = "CFA3";
alm_readConfig[4].name = "ACC2预充";
alm_readConfig[4].status = true;
alm_readConfig[5].DID = "CFA4";
alm_readConfig[5].name = "ACC1输入";
alm_readConfig[5].status = true;
alm_readConfig[6].DID = "CFA5";
alm_readConfig[6].name = "机械钥匙";
alm_readConfig[6].status = true;
alm_readConfig[7].DID = "CFA6";
alm_readConfig[7].name = "ACC2输入";
alm_readConfig[7].status = true;
alm_readConfig[8].DID = "CFA7";
alm_readConfig[8].name = "右转向灯输入";
alm_readConfig[8].status = true;
alm_readConfig[9].DID = "CFA8";
alm_readConfig[9].name = "蓝牙指示灯输出";
alm_readConfig[9].status = true;
alm_readConfig[10].DID = "CFA9";
alm_readConfig[10].name = "双闪输出";
alm_readConfig[10].status = true;
alm_readConfig[11].DID = "CFAA";
alm_readConfig[11].name = "轮动输入";
alm_readConfig[11].status = true;
alm_readConfig[12].DID = "CFAB";
alm_readConfig[12].name = "左转向灯输入";
alm_readConfig[12].status = true;
alm_readConfig[13].DID = "CFAC";
alm_readConfig[13].name = "MOTO_A输出";
alm_readConfig[13].status = true;
alm_readConfig[14].DID = "CFAD";
alm_readConfig[14].name = "MOTO_B输出";
alm_readConfig[14].status = true;
alm_readConfig[15].DID = "CFAE";
alm_readConfig[15].name = "锁电机输出";
alm_readConfig[15].status = true;
alm_readConfig[16].DID = "CFAF";
alm_readConfig[16].name = "电磁阀输出";
alm_readConfig[16].status = true;
alm_readConfig[17].DID = "CFB0";
alm_readConfig[17].name = "一键启动输入";
alm_readConfig[17].status = true;
alm_readConfig[18].DID = "CFB1";
alm_readConfig[18].name = "坐垫感应输入";
alm_readConfig[18].status = true;
alm_readConfig[19].DID = "CFB2";
alm_readConfig[19].name = "外电电压值";
alm_readConfig[19].status = true;
alm_readConfig[20].DID = "CFB3";
alm_readConfig[20].name = "K线通讯";
alm_readConfig[20].status = true;
alm_readConfig[21].DID = "CFB4";
alm_readConfig[21].name = "蓝牙连接";
alm_readConfig[21].status = true;
alm_readConfig[22].DID = "CFB5";
alm_readConfig[22].name = "弹簧振子";
alm_readConfig[22].status = true;
//---alm写节点----
alm_writeConfig[0].DID = "CF4D";
alm_writeConfig[0].name = "外电电压AD比例值";
alm_writeConfig[0].status = true;
alm_writeConfig[1].DID = "CF61";
alm_writeConfig[1].name = "音量等级";
alm_writeConfig[1].status = true;
alm_writeConfig[2].DID = "CF62";
alm_writeConfig[2].name = "声音主题";
alm_writeConfig[2].status = true;
alm_writeConfig[3].DID = "CF63";
alm_writeConfig[3].name = "ACC电压AD分压比例值";
alm_writeConfig[3].status = true;
alm_writeConfig[4].DID = "CF64";
alm_writeConfig[4].name = "蓝牙MCA地址";
alm_writeConfig[4].status = true;
//-----读写----
writeConfig[0].DID = "CF40";
writeConfig[0].name = "硬件版本号";
writeConfig[0].status = true;
writeConfig[1].DID = "CF41";
writeConfig[1].name = "产品型号";
writeConfig[1].status = true;
writeConfig[2].DID = "CF42";
writeConfig[2].name = "产品识别码";
writeConfig[2].status = true;
writeConfig[3].DID = "CF43";
writeConfig[3].name = "产商识别码";
writeConfig[3].status = true;
writeConfig[4].DID = "CF44";
writeConfig[4].name = "客户识别码";
writeConfig[4].status = true;
// writeConfig[6].DID = "CF45";
// writeConfig[6].name = "生产日十位";
writeConfig[5].DID = "CF46";
writeConfig[5].name = "生产日";
writeConfig[5].status = true;
writeConfig[6].DID = "CF47";
writeConfig[6].name = "生产月份";
writeConfig[6].status = true;
// writeConfig[7].DID = "CF48";
//writeConfig[7].name = "生产年份十位";
writeConfig[7].DID = "CF49";
writeConfig[7].name = "生产年份";
writeConfig[7].status = true;
writeConfig[8].DID = "CF4A";
writeConfig[8].name = "流水号";
writeConfig[8].status = true;
writeConfig[9].DID = "CF4B";
writeConfig[9].name = "服务器域名";
writeConfig[9].status = true;
writeConfig[10].DID = "CF4C";
writeConfig[10].name = "服务器端口号";
writeConfig[10].status = true;
writeConfig[11].DID = "CF4D";
writeConfig[11].name = "外电电压AD比列值";
writeConfig[11].status = true;
writeConfig[12].DID = "CF4E";
writeConfig[12].name = "物料编码";
writeConfig[12].status = true;
writeConfig[13].DID = "CF4F";
writeConfig[13].name = "供应商编码";
writeConfig[13].status = true;
writeConfig[14].DID = "CF50";
writeConfig[14].name = "批次号";
writeConfig[14].status = true;
}
int index = 0;
int index2 = 0, flag_dy = 0;
string flag_pass = "FAIL";
private void timer1_Tick(object sender, EventArgs e)
{
if (serialPort.IsOpen && flag_heart == 0 ) //串口打开且无心跳 进入连接流程
{
out_time = 0;
flag_connet = 1;
}
if (!checkBox3.Checked)
{
//this.dataGridView1.Rows.Clear();
///---------初始化------------
if (index < 1)
{
for (int i = 0; i < readConfig.Length; i++)
{
if (readConfig[i].status)
{
index = this.dataGridView1.Rows.Add();
dataGridView1.Rows[index].Cells[0].Value = readConfig[i].name;
dataGridView1.Rows[index].Cells[1].Value = readConfig[i].threshold;
}
}
//for (int i = 0; i < alm_readConfig.Length; i++)
//{
// if (alm_readConfig[i].status)
// {
// index = this.dataGridView1.Rows.Add();
// dataGridView1.Rows[index].Cells[0].Value = alm_readConfig[i].name;
// dataGridView1.Rows[index].Cells[1].Value = alm_readConfig[i].threshold;
// }
//}
}
if (index2 < 1)
{
for (int i = 0; i < writeConfig.Length; i++)
{
if (writeConfig[i].status)
{
index2 = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index2].Cells[0].Value = writeConfig[i].name;
dataGridView2.Rows[index2].Cells[1].Value = writeConfig[i].threshold;
}
}
//for (int i = 0; i < alm_writeConfig.Length; i++)
//{
// if (alm_readConfig[i].status)
// {
// index2 = this.dataGridView2.Rows.Add();
// dataGridView2.Rows[index2].Cells[0].Value = alm_writeConfig[i].name;
// dataGridView2.Rows[index2].Cells[1].Value = alm_writeConfig[i].threshold;
// }
//}
}
///---------测试中------------
int smt_result = 1;
if (index <= 0 || index2 <= 0)
{
return;
}
for (int i = 0; i <= index; i++)
{
string name = (string)dataGridView1.Rows[i].Cells[0].Value;
// 查找特定 value 对应的 name
int readindex = Array.FindIndex(readConfig, myUnitClass => myUnitClass.name == name.ToString());
dataGridView1.Rows[i].Cells[1].Value = readConfig[readindex].threshold;
if (readConfig[readindex].name == "拨号状态" || readConfig[readindex].name == "驻网状态" ||
readConfig[readindex].name == "服务器连接状态" || readConfig[readindex].name == "GNSS定位状态" ||
readConfig[readindex].name == "K线通讯状态")
{
if (readConfig[readindex].threshold == "1")
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "GNSS SNR值")
{
int snr_cnt = 0;
if (flag_gnss == 1)
{
for (int a = 0; a < 4; a++)
{
if (Convert.ToInt64(numbers[a]) >= gnss)
{
snr_cnt++;
}
}
}
if (snr_cnt == 4)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "RSSI值")
{
if (readConfig[readindex].Ivalue >= Convert.ToInt32(rssi) && readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "SINR值")
{
if (readConfig[readindex].Ivalue >= Convert.ToInt32(sinr) && readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "RSRP值")
{
if (readConfig[readindex].Ivalue <= Convert.ToInt32(rsrp_ck[0]) && readConfig[readindex].Ivalue >= Convert.ToInt32(rsrp_ck[1]) &&
readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "RSRQ值")
{
if (readConfig[readindex].Ivalue <= Convert.ToInt32(rsrq_ck[0]) && readConfig[readindex].Ivalue >= Convert.ToInt32(rsrq_ck[1]) &&
readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "ACC管脚电平状态")
{
if (readConfig[readindex].Ivalue == Convert.ToInt32(readConfig[readindex].Svalue) && readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else if (readConfig[readindex].name == "外电电压值")
{
if (readConfig[readindex].Ivalue <=wd2 && readConfig[readindex].Ivalue >= wd1 && readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else
{
if (readConfig[readindex].Svalue != null)
{
if (readConfig[readindex].threshold == readConfig[readindex].Svalue)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
else
{
if (readConfig[readindex].threshold != "" && readConfig[readindex].threshold != null)
{
dataGridView1.Rows[i].Cells[2].Value = "pass";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView1.Rows[i].Cells[2].Value = "fail";
dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
}
}
}
int rowIndex = -1;
if (dataGridView2.IsCurrentCellInEditMode)
{
DataGridViewCell currentCell = dataGridView2.CurrentCell;
rowIndex = currentCell.RowIndex; // 当前单元格的行索引
// 获取编辑控件
}
int write_result = 1;
for (int i = 0; i <= index2; i++)
{
string name2 = (string)dataGridView2.Rows[i].Cells[0].Value;
// 查找特定 value 对应的 name
int writeindex = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.name == name2.ToString());
if (i != rowIndex)
{
dataGridView2.Rows[i].Cells[1].Value = writeConfig[writeindex].threshold;
}
if (writeConfig[writeindex].name == "物料编码")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_wl)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf4e, bd_wl);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "供应商编码")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_cs)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf4f, bd_cs);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "生产日")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_day)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf45, bd_day);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "生产月份")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_month)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf47, bd_month);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "生产年份")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_year)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf48, bd_year);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "流水号")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_ls)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf4a, bd_ls);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else if (writeConfig[writeindex].name == "批次号")
{
if (flag_sn == 1)
{
if (writeConfig[writeindex].threshold == bd_ls)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
yd_did_write_one(0xcf50, bd_ls);
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "")
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
else
{
if (writeConfig[writeindex].Svalue != null)
{
if (writeConfig[writeindex].threshold == writeConfig[writeindex].Svalue)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
else
{
if (writeConfig[writeindex].threshold != "" && writeConfig[writeindex].threshold != null)
{
dataGridView2.Rows[i].Cells[2].Value = "pass";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green;
writeConfig[writeindex].Bvalue = true;
smt_result *= 1;
write_result *= 1;
}
else
{
dataGridView2.Rows[i].Cells[2].Value = "fail";
dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red;
writeConfig[writeindex].Bvalue = false;
smt_result *= 0;
write_result *= 0;
}
}
}
}
if (flag_heart == 0)
{
return;
}
if (write_result ==0 && flag_sn == 1)
{
for (int i = 0; i < writeConfig.Length; i++)
{
if (writeConfig[i].Svalue != null && writeConfig[i].Svalue != "(不填)")
{
string hexString = writeConfig[i].DID;
ushort did = ushort.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
yd_did_write_one(did, writeConfig[i].Svalue);
}
}
}
if (smt_result == 0 && flag_sn==1)
{
label2.BackColor = Color.DarkGray;
flag_result = 0;
}
if (smt_result == 0)
{
label2.BackColor = Color.DarkGray;
flag_result = 0;
}
if (smt_result == 1)
{
label2.Text = "测试通过"+out_time;
label2.BackColor = Color.Green;
flag_result = 1;
flag_pass = "PASS";
//-----结束测试-----
//flag_heart = 0;
//out_time = -1;
//_yd_disconnet();
//flag_connet = 0;
//button1.Text = "开始测试";
if (checkBox2.Checked == true && comboBox1.Text != "" && flag_dy == 0 && flag_sn==1)
{
save_zb();
PaperSize paperSize = new PaperSize("Custom", 260, 75); // 宽度500 高度700
// paperSize.RawKind = (int)PaperKind.Custom;
printDocument1.DefaultPageSettings.PaperSize = paperSize;
printDocument1.DefaultPageSettings.Landscape = false;
printDocument1.DefaultPageSettings.Margins.Top = 0;
printDocument1.DefaultPageSettings.Margins.Left = 0;
pagesToPrint = Convert.ToInt32(comboBox2.Text);
//PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
//printPreviewDialog.Document = printDocument1;
//try
//{
// printPreviewDialog.ShowDialog();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}
printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = comboBox1.Text; //"导出为WPS PDF"; //
printDocument1.Print();
flag_dy = 1;
}
}
}
if (checkBox3.Checked)
{
int smt_result = 1;
dataGridView2.Rows[0].Cells[1].Value = readConfig[2].threshold;
dataGridView2.Rows[1].Cells[1].Value = readConfig[3].threshold;
dataGridView2.Rows[2].Cells[1].Value = writeConfig[5].threshold;
dataGridView2.Rows[3].Cells[1].Value = writeConfig[6].threshold;
dataGridView2.Rows[4].Cells[1].Value = writeConfig[7].threshold;
dataGridView2.Rows[5].Cells[1].Value = writeConfig[8].threshold;
dataGridView2.Rows[6].Cells[1].Value = writeConfig[14].threshold;
dataGridView2.Rows[7].Cells[1].Value = writeConfig[13].threshold;
dataGridView2.Rows[8].Cells[1].Value = writeConfig[12].threshold;
if (jy_imei == readConfig[2].threshold && readConfig[2].threshold != "")
{
dataGridView2.Rows[0].Cells[2].Value = "pass";
dataGridView2.Rows[0].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[0].Cells[2].Value = "fail";
dataGridView2.Rows[0].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_iccid == readConfig[3].threshold && readConfig[3].threshold != "")
{
dataGridView2.Rows[1].Cells[2].Value = "pass";
dataGridView2.Rows[1].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[1].Cells[2].Value = "fail";
dataGridView2.Rows[1].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_year == writeConfig[7].threshold && jy_year == bd_year && bd_year == writeConfig[7].threshold && writeConfig[7].threshold != "")
{
dataGridView2.Rows[2].Cells[2].Value = "pass";
dataGridView2.Rows[2].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[2].Cells[2].Value = "fail";
dataGridView2.Rows[2].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_month == writeConfig[6].threshold && jy_month == bd_month && bd_month == writeConfig[6].threshold && writeConfig[6].threshold != "")
{
dataGridView2.Rows[3].Cells[2].Value = "pass";
dataGridView2.Rows[3].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[3].Cells[2].Value = "fail";
dataGridView2.Rows[3].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_day == writeConfig[5].threshold && jy_day == bd_day && bd_day == writeConfig[5].threshold && writeConfig[5].threshold != "")
{
dataGridView2.Rows[4].Cells[2].Value = "pass";
dataGridView2.Rows[4].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[4].Cells[2].Value = "fail";
dataGridView2.Rows[4].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_ls == writeConfig[8].threshold && jy_ls == bd_ls && bd_ls == writeConfig[8].threshold && writeConfig[8].threshold != "")
{
dataGridView2.Rows[5].Cells[2].Value = "pass";
dataGridView2.Rows[5].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[5].Cells[2].Value = "fail";
dataGridView2.Rows[5].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_ls == writeConfig[14].threshold && jy_ls == bd_ls && bd_ls == writeConfig[14].threshold && writeConfig[14].threshold != "")
{
dataGridView2.Rows[6].Cells[2].Value = "pass";
dataGridView2.Rows[6].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[6].Cells[2].Value = "fail";
dataGridView2.Rows[6].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_cs == writeConfig[13].threshold && jy_cs == bd_cs && bd_cs == writeConfig[13].threshold && writeConfig[13].threshold != "")
{
dataGridView2.Rows[7].Cells[2].Value = "pass";
dataGridView2.Rows[7].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[7].Cells[2].Value = "fail";
dataGridView2.Rows[7].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (jy_wl == writeConfig[12].threshold && jy_wl == bd_wl && bd_wl == writeConfig[12].threshold && writeConfig[12].threshold != "")
{
dataGridView2.Rows[8].Cells[2].Value = "pass";
dataGridView2.Rows[8].Cells[2].Style.BackColor = Color.Green;
smt_result *= 1;
}
else
{
dataGridView2.Rows[8].Cells[2].Value = "fail";
dataGridView2.Rows[8].Cells[2].Style.BackColor = Color.Red;
smt_result *= 0;
}
if (smt_result == 1)
{
string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4);
if (str_get_sn == textBox3.Text)
{
smt_result *= 1;
label10.Text = " ";
}
else
{
smt_result *= 0;
label10.Text = "SN号有误";
label10.ForeColor = Color.Red;
}
}
else
{
return;
}
if (smt_result == 1)
{
label2.Text = "测试通过";
label2.BackColor = Color.Green;
flag_pass = "PASS";
flag_result = 1;
//flag_heart = 0;
//out_time = -1;
//_yd_disconnet();
//flag_connet = 0;
//button1.Text = "开始测试";
}
}
}
private void DataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
{
// 检查是否点击了按钮列
if (e.ColumnIndex == dataGridView2.Columns["ButtonColumn"].Index && e.RowIndex >= 0)
{
// 获取点击的行索引
//flag_write = 1;
int rowIndex = e.RowIndex;
object name = dataGridView2.Rows[rowIndex ].Cells[0].Value;
// 查找特定 value 对应的 name
int index = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.name == name.ToString());
UInt16 did = Convert.ToUInt16(writeConfig[index].DID, 16);
// object cellValue = dataGridView2.Rows[rowIndex].Cells[1].Value;
string data = writeConfig[e.RowIndex].threshold;
yd_did_write_one(did,data);
writeConfig[rowIndex].threshold = "";
//MessageBox.Show($"Button clicked in row {rowIndex + 1}"); // 行索引从 0 开始,显示时加 1
}
}
private void cmbPort_DropDown(object sender, EventArgs e)
{
cmbBox_Port_Update();
}
private string get_date_time()
{
string strdate = string.Empty;
strdate = DateTime.Now.ToString();
return strdate;
}
string tempData=" ";
private void save_zb()
{
string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4);
string str_sw = "X" + writeConfig[1].threshold + readConfig[1].threshold.Substring(0, 2) + readConfig[1].threshold.Substring(3, 2);
tempData = tempData + get_date_time() + "," + "E-2" + writeConfig[0].threshold + "," +
str_sw + "," +str_get_sn+ ","+readConfig[2].threshold+","+ readConfig[3].threshold+","+flag_pass;
writeA883SmtLogCSV2(tempData);
tempData = " ";
}
public static void CreateDirectoryOrFile(string newFileName)
{
string strdate = string.Empty;
strdate = DateTime.Now.ToString();
string str = "";
if (strdate.IndexOf("/") != -1)
{
str = strdate.Replace("/", "_");
}
string[] sArray = str.Split(' ');//
//string path = Application.StartupPath + @"\configfile\研发\" + sArray[0];
// string path = @"C:\YD10日志\";//+ sArray[0];
string path = Application.StartupPath + @"\YD10日志\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
/*
if (!File.Exists(path + "\\"))
{
File.Create(path + "\\" + newFileName).Close();
}
*/
}
}
public void writeA883SmtLogCSV2(string data)//保存路径, 索引设备
{
CreateDirectoryOrFile("FileName.log");
string strdate = string.Empty;
strdate = DateTime.Now.ToString();
string str = "";
string str2 = "";
string testtime = DateTime.Now.ToShortTimeString().ToString();
if (strdate.IndexOf("/") != -1)
{
str = strdate.Replace("/", "_");
}
if (testtime.IndexOf(":") != -1)
{
str2 = testtime.Replace(":", "点");
}
// 使用正确的 Split 方法
string[] sArray = str.Split(' '); // 以空格分隔
string smt_log_path2 = Application.StartupPath + @"\YD10日志\";
string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2,4);
//判断是否已经有了这个文件
FileStream fs = null;
StreamWriter sw = null;
try
{
if (!System.IO.File.Exists($"{smt_log_path2}\\{sArray[0]}.CSV"))//路径 日期 序列号
{
//没有则创建这个文件
fs = new FileStream($"{smt_log_path2}\\{sArray[0]}.CSV", FileMode.Create, FileAccess.Write);//创建
sw = new StreamWriter(fs);
}
else
{
/*
fs = new FileStream($"{smt_log_path1}\\{My_Log[LogIndex_T].Barcode}_{sArray[0]}.log", FileMode.Open, FileAccess.Write);
sw = new StreamWriter(fs);*/
sw = File.AppendText($"{smt_log_path2}\\{sArray[0]}.CSV");
}
sw.WriteLine(data);
if (sw != null)
{
sw.Close();
}
if (fs != null)
{
fs.Close();
}
}
catch (Exception ex)
{
if (sw != null)
{
sw.Close();
}
if (fs != null)
{
fs.Close();
}
}
//My_Log[LogIndex_T].Status = false;
}
int time = 0,time_over=0, flag_connet=0,flag_heart,time2=0,flag_print=0;
private int pagesToPrint; // 要打印的张数
private BarCodeClass bcc = new BarCodeClass();
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//if ( flag_print == 0) //保存数据
//{
// save_zb();
//}
if (flag_print == 1)
{
string tm2 = "#3-868022069907587 898604F3102340070986&39121-A081-01003560820240724000001";
bcc.QuickMarkHeight = 100;
bcc.QuickMarkWidth = 100;
Image image2 = bcc.CreateQuickMark(tm2);
e.Graphics.DrawImage(image2, 175, 8, 70, 70);
e.Graphics.DrawString("雅 迪 科 技 集 团 有 限 公 司", new Font(new FontFamily("宋体"), 9, FontStyle.Bold), System.Drawing.Brushes.Black, 28, 0);
e.Graphics.DrawString("名称IOT (JW) 供应商代码:35608", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 13);
e.Graphics.DrawString("物料编码39110-0047-0100", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 23);
e.Graphics.DrawString("电压:48-72V", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 130, 23);
e.Graphics.DrawString("HW:E-213", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 33);
e.Graphics.DrawString("类型:一键启动/无电池/无手柄", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 50, 33);
e.Graphics.DrawString("SW:X450805", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 43);
//e.Graphics.DrawString("SN:" + myConfig[6].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 70, 43);
e.Graphics.DrawString("IMEI:868022069907587", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 53);
e.Graphics.DrawString("ICCID:898604F3102340070986" + readConfig[3].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 63);
flag_print = 0;
}
else
{
string tm = "#3-" + readConfig[2].threshold + " " + readConfig[3].threshold + "&" + writeConfig[12].threshold + "3560820" +
writeConfig[7].threshold + writeConfig[6].threshold + writeConfig[5].threshold + writeConfig[8].threshold;
string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4);
string str_sw = "X" + writeConfig[1].threshold + readConfig[1].threshold.Substring(0, 2) + readConfig[1].threshold.Substring(3, 2);
bcc.QuickMarkHeight = 100;
bcc.QuickMarkWidth = 100;
Image image = bcc.CreateQuickMark(tm);
e.Graphics.DrawImage(image, 175, 8, 70, 70);
e.Graphics.DrawString("雅 迪 科 技 集 团 有 限 公 司", new Font(new FontFamily("宋体"), 9, FontStyle.Bold), System.Drawing.Brushes.Black, 28, 0);
e.Graphics.DrawString("名称:"+ product + " 供应商代码:" + writeConfig[13].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 13);
e.Graphics.DrawString("物料编码:" + writeConfig[12].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 23);
//e.Graphics.DrawString("电压:48-72V", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 130, 23);
e.Graphics.DrawString("HW:" +"E-2"+ writeConfig[0].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 33);
// e.Graphics.DrawString("类型:一键启动/无电池/无手柄", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 50, 33);
e.Graphics.DrawString("SW:" + str_sw, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 43);
e.Graphics.DrawString("SN:" + str_get_sn, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 70, 43);
e.Graphics.DrawString("IMEI:" + readConfig[2].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 53);
e.Graphics.DrawString("ICCID:" + readConfig[3].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 63);
}
pagesToPrint--;
if (pagesToPrint <= 0)
{
e.HasMorePages = false;
}
else
{
e.HasMorePages = true;
}
}
private void dataGridView2_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView2.IsCurrentCellInEditMode)
{
DataGridViewCell currentCell = dataGridView2.CurrentCell;
int rowIndex = currentCell.RowIndex; // 当前单元格的行索引
if (e.RowIndex == rowIndex)
{
object newValue = dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
writeConfig[e.RowIndex].threshold = (string)newValue;
flag_write = 1;
time2 = 20;
}
}
}
public void GetPrinter()
{
//string strList = "";
//System.Drawing.Printing.PrinterSettings.StringCollection PrinterList = System.Drawing.Printing.PrinterSettings.InstalledPrinters;
//foreach (var item in PrinterList)
//{
// strList += item + ",";
// comboBox1.Items.Add(item);
//}
//return strList;
PrintDocument printDoc = new PrintDocument();
PrinterSettings printerSettings;
foreach (string printerName in PrinterSettings.InstalledPrinters)
{
printerSettings = new PrinterSettings();
printerSettings.PrinterName = printerName;
printDoc.PrinterSettings = printerSettings;
if (printerName!= "Microsoft Print to PDF") {
comboBox1.Items.Add(printerName);
}
//Console.WriteLine(printerName);
}
}
private void button3_Click(object sender, EventArgs e)
{
PaperSize paperSize = new PaperSize("Custom", 260, 75); // 宽度500 高度700
// paperSize.RawKind = (int)PaperKind.Custom;
printDocument1.DefaultPageSettings.PaperSize = paperSize;
printDocument1.DefaultPageSettings.Landscape = false;
printDocument1.DefaultPageSettings.Margins.Top = 0;
printDocument1.DefaultPageSettings.Margins.Left = 0;
pagesToPrint = 1;
printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = comboBox1.Text; //"导出为WPS PDF"; //
printDocument1.Print();
}
string bd_wl="", bd_cs = "", bd_year = "", bd_year2 = "", bd_month = "", bd_day = "", bd_day1 = "", bd_ls = "";
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
JObject setData_jsonObject = new Newtonsoft.Json.Linq.JObject();
if (flag_yd07close == 0)
{
setData_jsonObject.Add("车型", "YD10");
}
else
{
setData_jsonObject.Add("车型", "YD07k");
}
setData_jsonObject.Add("打印机", comboBox1.Text);
setData_jsonObject.Add("张数", comboBox2.Text);
setData_jsonObject.Add("自动打印机", checkBox2.Checked);
setData_jsonObject.Add("自动蓝牙连接", yd_ble);
setData_jsonObject.Add("号码校验", checkBox3.Checked);
string config_file_str = setData_jsonObject.ToString();
//string savePath = Application.StartupPath + @"\配置.json";
string savePath = Path.Combine(Application.StartupPath, "配置.json");
System.IO.File.WriteAllText(savePath, config_file_str, Encoding.UTF8);
//this.Invoke(new Action(() =>
//{
//
//}));
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void yD10ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Text = "YD10上位机测试V1.9";
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
int flag_save = 0;
private void yD07KToolStripMenuItem_Click(object sender, EventArgs e)
{
//this.Text = "YD07K上位机测试V1.9";
if (serialPort.IsOpen)
{
_yd_disconnet();
serialPort.Close();
}//关闭串口
// 创建 Form3 的实例
Form3 form3 = new Form3(this);
// 隐藏 Form1
this.Hide();
// 显示 Form3
form3.ShowDialog();
//this.Close();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
save_zb();
PaperSize paperSize = new PaperSize("Custom", 260, 75); // 宽度500 高度700
// paperSize.RawKind = (int)PaperKind.Custom;
printDocument1.DefaultPageSettings.PaperSize = paperSize;
printDocument1.DefaultPageSettings.Landscape = false;
printDocument1.DefaultPageSettings.Margins.Top = 0;
printDocument1.DefaultPageSettings.Margins.Left = 0;
pagesToPrint = 1;//Convert.ToInt32(comboBox2.Text);
printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = comboBox1.Text; //"导出为WPS PDF"; //
printDocument1.Print();
}
string jy_iccid = "", jy_imei = "", jy_wl = "", jy_cs = "", jy_year = "", jy_month = "", jy_day="", jy_ls = "";
private void textBox2_TextChanged(object sender, EventArgs e)
{
//#3-868022069907587 898604F3102340070986&39121-A081-01003560820240724000001
if (textBox2.Text.Length == 74)
{
jy_imei = textBox2.Text.Substring(3, 15);
jy_iccid = textBox2.Text.Substring(19, 20);
jy_wl= textBox2.Text.Substring(40, 15);
jy_cs = textBox2.Text.Substring(55, 5);
jy_year= textBox2.Text.Substring(62,2 );
jy_month = textBox2.Text.Substring(64, 2);
jy_day = textBox2.Text.Substring(66, 2);
jy_ls = textBox2.Text.Substring(68, 6);
label7.Text = "";
}
else
{
jy_iccid = "";
jy_imei = "";
jy_wl = "";
jy_cs = "";
jy_year = "";
jy_month = "";
jy_day = "";
jy_ls = "";
if (textBox2.Text.Length != 0)
{
label7.Text = "长度有误";
}
else
{
label7.Text = "";
}
}
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
if (checkBox3.Checked)
{
textBox2.Enabled = true;
textBox3.Enabled = true;
index = 0;
index2 = 0;
this.dataGridView1.Rows.Clear();
this.dataGridView2.Rows.Clear();
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "设备IMEI";
dataGridView2.Rows[index].Cells[1].Value = readConfig[2].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "设备ICCID";
dataGridView2.Rows[index].Cells[1].Value = readConfig[3].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产日";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[5].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产月份";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[6].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "生产年份";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[7].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "流水号";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[8].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "批次号";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[14].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "供应商编码";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[13].threshold;
index = this.dataGridView2.Rows.Add();
dataGridView2.Rows[index].Cells[0].Value = "物料编码";
dataGridView2.Rows[index].Cells[1].Value = writeConfig[12].threshold;
}
else
{
textBox2.Enabled = false;
textBox3.Enabled = false;
index = 0;
index2 = 0;
this.dataGridView1.Rows.Clear();
this.dataGridView2.Rows.Clear();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
int flag_sn = 0;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length == 34)
{
bd_wl = textBox1.Text.Substring(0, 15);
bd_cs = textBox1.Text.Substring(15, 5);
bd_year = textBox1.Text.Substring(22, 2);
bd_month = textBox1.Text.Substring(24, 2);
bd_day = textBox1.Text.Substring(26, 2);
bd_ls = textBox1.Text.Substring(28, 6);
//bd_sn= textBox1.Text.Substring(23, 1)+ textBox1.Text.Substring(25, 1)+ textBox1.Text.Substring(26, 2)+ textBox1.Text.Substring(31, 3);
label5.Text = "";
flag_sn = 1;
}
else
{
bd_wl ="";
bd_cs = "";
bd_year = "";
bd_year2 = "";
bd_month = "";
bd_day = "";
bd_day1 = "";
bd_ls = "";
//bd_sn = "";
flag_sn = 0;
if (textBox1.Text.Length != 0)
{
label5.Text = "长度有误";
}
else
{
label5.Text = "";
}
}
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
PaperSize paperSize = new PaperSize("Custom", 260, 75); // 宽度500 高度700
// paperSize.RawKind = (int)PaperKind.Custom;
printDocument1.DefaultPageSettings.PaperSize = paperSize;
printDocument1.DefaultPageSettings.Landscape = false;
printDocument1.DefaultPageSettings.Margins.Top = 0;
printDocument1.DefaultPageSettings.Margins.Left = 0;
pagesToPrint = 1;
flag_print = 1;
printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = comboBox1.Text; //"导出为WPS PDF"; //
printDocument1.Print();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Form2Closed += Form2_Closed;
form2.Show();
}
private void Form2_Closed()
{
read();
index = 0;
index2 = 0;
this.dataGridView1.Rows.Clear();
this.dataGridView2.Rows.Clear();
}
int out_time = -1, flag_result=1;
//private void button1_Click(object sender, EventArgs e)
//{
// if (!serialPort.IsOpen)
// {
// txtStatus.Text = "请先打开串口!";
// return;
// }
// if (button1.Text=="开始测试")
// {
// clean();
// out_time = 0;
// label2.Text = "测试开始";
// //_yd_disconnet();
// flag_connet = 1;
// button1.Text ="结束测试";
// }
// else if (button1.Text == "结束测试")
// {
// flag_heart = 0;
// _yd_disconnet();
// flag_connet = 0;
// out_time = -1;
// button1.Text = "开始测试";
// label2.Text = "测试已结束";
// }
//}
private void clean()
{
for (int i = 0; i < readConfig.Length; i++)
{
readConfig[i].threshold = "";
}
for (int i = 0; i < writeConfig.Length; i++)
{
writeConfig[i].threshold = "";
writeConfig[i].Bvalue = false;
}
this.Invoke(new Action(() =>
{
label2.Text = "等待测试";
label2.BackColor = Color.DarkGray;
}));
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
flag_gnss = 0;
heart_out = 0;
flag_dy = 0;
flag_result = 0;
flag_pass = "FAIL";
Heart = false;
heart = false;
}
int did_i, flag_write,heart_out,time_heart;
bool heart=false, Heart=false;
private void timer2_Tick(object sender, EventArgs e)
{
time++;
time2++;
time_heart++; //15次约为1s
//超时机制
if (time2 > 15 /*&& out_time<120 */&& out_time>=0)
{
time2 = 0;
out_time++;
if (flag_result == 0)
{
label2.Text = "测试开始" + out_time;
}
//if (flag_connet == 1 && out_time > 10)
//{
// label2.Text = "连接超时";
// label2.BackColor = Color.Red;
// flag_heart = 0;
// flag_connet = 0;
// out_time = -1;
// button1.Text = "开始测试";
//}
//else
//{
// label2.Text = "连接中..." + Convert.ToString(out_time);
//}
//if (out_time>=120)
//{
// label2.Text = "测试超时";
// label2.BackColor = Color.Red;
// flag_heart = 0;
// flag_connet = 0;
// out_time = -1;
// button1.Text = "开始测试";
//}
}
//
if (flag_connet==1)
{
label2.Text = "连接中...";
_yd_connet();
}
if (time > 30 && flag_heart==1) //3s发送一次心跳包改为2s
{
time = 0;
yd_heart();
}
if (time_heart >=8 && flag_heart == 1) //500ms来检测一次保活
{
time_heart = 0;
if (!Heart && heart)//说明心跳断开一次
{
heart_out++;
if (heart_out >= 10)//5S不回复说明设备已经离线
{
//-----结束测试-----
flag_heart = 0;
out_time = -1;
_yd_disconnet();
flag_connet = 0;
//button1.Text = "开始测试";
label2.Text = "设备已离线";
clean();
}
}
else
{
heart = Heart;
Heart = false;
heart_out = 0;
}
}
if (flag_write == 1 && time2>0)
{
time2--;
if (time2==0)
{
flag_write = 0;
label2.Text = "写入响应超时";
}
}
if (flag_heart == 1 && flag_write == 0)
{
zd_test(did_i);
did_i++;
if (did_i > 40)
{
did_i = 0;
}
}
}
}
}