using System;
|
using System.IO;
|
using YX.BLL;
|
using YX.Entity;
|
using System.Net;
|
using System.Text;
|
using YX.WebService;
|
using Newtonsoft.Json;
|
using System.Net.Sockets;
|
using Newtonsoft.Json.Linq;
|
using System.Security.Cryptography;
|
using System.Drawing;
|
using System.Windows.Forms;
|
using System.Threading;
|
using System.Configuration;
|
using EasyModbus; // 引入EasyModbusTCP库 *****
|
using System.IO.Ports;
|
using System.Net.NetworkInformation;
|
|
namespace YX
|
{
|
public partial class Frmwt : WindowParent
|
{
|
Thread receiveDataThread;
|
//声明一个委托类型,该委托类型无输入参数和输出参数
|
public delegate void ProcessDelegate();
|
|
private string ipAddress = ConfigurationManager.AppSettings["IPAddress"]; // 从 App.config 获取 IP 地址配置
|
private int port1 = 502;
|
ModbusClient tcpClient;
|
private bool isTryingToCon = false;
|
private string encryptionKey = "a7x3qsz12edc45tgfrbi67yhnmju89i9";
|
|
public string PSN = "";
|
public string PSN2 = "";
|
public string PSN3 = "";
|
public bool t = true;
|
public Frmwt(string ParentId)
|
{
|
InitializeComponent();
|
|
receiveDataThread = new Thread(new ThreadStart(ReceiveSerialData));
|
receiveDataThread.IsBackground = true;
|
try
|
{
|
receiveDataThread.Start(); // 启动线程
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine($"发生错误:{ex}");
|
}
|
dataGridView1.DataSource = System_Bll.GetSystemLog(FrmLogin.LocalIP, "称重");
|
macBox.Text = GetMacByNetworkInterface();
|
|
}
|
|
private void ReceiveSerialData()
|
{
|
while (true)
|
{
|
ProcessDelegate showProcess = new ProcessDelegate(LabelShow);
|
//string str = "1\n2\n3\n";
|
//str = str.Replace("\n", string.Empty); // 将 \n 替换为空字符串
|
string str = ModbusTCPRead(5, 1).Trim("\n".ToCharArray());
|
if (ModbusTCPRead(5, 1).Trim("\n".ToCharArray()) == "1")
|
{
|
|
try
|
{
|
//PSN = ModbusTCPRead(5, 20).Replace("\n", string.Empty);
|
PSN = ModbusTCPReadString(25, 30).Replace("\0", string.Empty);
|
PSN2 = ModbusTCPReadString(45, 20).Replace("\0", string.Empty);
|
PSN3 = ModbusTCPReadString(65, 20).Replace("\0", string.Empty);
|
label1.Invoke(showProcess);
|
ModbusTCPWrite(5, 10);
|
}
|
catch (Exception e)
|
{
|
ModbusTCPWrite(5, 11);
|
}
|
}
|
}
|
}
|
|
private string ModbusTCPReadString(int startingAddress, int quantity)
|
{
|
ConnectServer(ipAddress, port1);
|
int[] data = tcpClient.ReadHoldingRegisters(startingAddress, quantity); // 读取寄存器数据
|
string strData = ""; // 存储字符串数据
|
//string str = "";
|
//string str1 = "";
|
//string str2 = "";
|
|
for (int i = 0; i < quantity; i++)
|
{
|
//str= data[i].ToString("X");
|
//if (str.Length == 4)
|
//{
|
// str1 = str.Substring(2, 2);
|
// str2 = str.Substring(0, 2);
|
// strData += str1 + str2;
|
//}
|
//if (str.Length == 2)
|
//{
|
// strData += str;
|
//}
|
strData += data[i].ToString("X");
|
}
|
string str66 = hexStrToStr(strData);
|
return hexStrToStr(strData); ;
|
}
|
|
private static string hexStrToStr(string str)
|
{
|
//去除字符串中的空格
|
string[] strT = str.Split(' ');
|
string strA = "";
|
foreach (string strB in strT)
|
{
|
strA += strB;
|
}
|
|
char[] chars = strA.ToCharArray();
|
string returnstr = "";
|
string[] str1 = new string[chars.Length / 2];
|
|
for (int i = 0; i < chars.Length / 2; i++)
|
{
|
string str111 = chars[2 * i].ToString() + chars[2 * i + 1].ToString();
|
uint num = uint.Parse(str111, System.Globalization.NumberStyles.AllowHexSpecifier);
|
char charr = (char)num;
|
returnstr = returnstr + charr;
|
}
|
return returnstr;
|
}
|
|
public void ConnectServer(string ip, int port)
|
{
|
//防止多个事例去重复连接
|
if (isTryingToCon == true)
|
{
|
return;
|
}
|
try
|
{
|
if (tcpClient != null)
|
{
|
tcpClient.Disconnect();
|
}
|
tcpClient = new ModbusClient(ip, port);
|
|
tcpClient.UnitIdentifier = 2; //地址
|
tcpClient.Baudrate = 9600; //波特率
|
tcpClient.Parity = Parity.None; //校验位
|
tcpClient.StopBits = StopBits.One; //停止位
|
tcpClient.ConnectionTimeout = 500;
|
tcpClient.Connect();
|
|
ProcessDelegate LimeColor = new ProcessDelegate(ButtonLimeColor);
|
radioButton1.Invoke(LimeColor);
|
|
isTryingToCon = true;
|
}
|
catch (Exception e)
|
{
|
ProcessDelegate RedColor = new ProcessDelegate(ButtonRedColor);
|
if (this.IsHandleCreated)
|
{
|
radioButton1.Invoke(RedColor);
|
}
|
}
|
}
|
|
private void ButtonRedColor()
|
{
|
radioButton1.BackColor = Color.Red;
|
}
|
|
private void ButtonLimeColor()
|
{
|
radioButton1.BackColor = Color.Lime;
|
}
|
|
/// <param name="startingAddress">寄存器初始地址号</param>
|
/// <param name="quantity">读取位数</param>
|
private string ModbusTCPRead(int startingAddress, int quantity)
|
{
|
ConnectServer(ipAddress, port1);
|
string str = "";
|
try
|
{
|
int[] result = tcpClient.ReadHoldingRegisters(startingAddress, quantity); //寄存器初始地址号
|
StringBuilder builder = new StringBuilder();
|
for (int i = 0; i < result.Length; i++)
|
{
|
builder.Append(Convert.ToString(result[i]) + "\n");
|
}
|
str = builder.ToString();
|
}
|
catch (Exception ex)
|
{
|
isTryingToCon = false;
|
tcpClient.Disconnect();
|
}
|
return str;
|
}
|
|
|
|
/// <param name="address">位置</param>
|
/// <param name="value">写入值</param>
|
private void ModbusTCPWrite(int address, int value)
|
{
|
ConnectServer(ipAddress, port1);
|
try
|
{
|
tcpClient.WriteMultipleRegisters(address, new int[] { value });
|
}
|
catch (Exception ex)
|
{
|
isTryingToCon = false;
|
tcpClient.Disconnect();
|
}
|
}
|
|
private void LabelShow()
|
{
|
string[] b_str = PSN.Split(',');
|
PSNBox.Text = b_str[1];
|
|
JObject jo = WI6027();
|
if (jo == null)
|
{
|
System_Bll.WriteLogToDB(new Entity.Base_Log
|
{
|
CreateUserID = FrmLogin.LoginUserID,
|
CreateUserName = FrmLogin.loginUserName,
|
LocalIP = FrmLogin.LocalIP,
|
LogMessage = "WI6027调用失败!",
|
Type = "称重",
|
ClassName = typeof(FrmLogin).ToString()
|
});
|
return;
|
}
|
var contents = jo["content"];
|
foreach (var content in contents)
|
{
|
LineNameBox.Text = (string)content["Line"];
|
StationBox.Text = (string)content["Station"];
|
StationIDBox.Text = (string)content["StationID"];
|
}
|
if (WI601K(PSNBox.Text))
|
{
|
JObject jo1032 = WI1032(PSNBox.Text, SNMBox.Text, KPNMBox.Text, KPValueBox.Text);
|
if (jo1032 != null)
|
{
|
if (WI6041(PSNBox.Text, SNMBox.Text, KPNMBox.Text, b_str[0]))
|
{
|
System_Bll.WriteLogToDB(new Entity.Base_Log
|
{
|
CreateUserID = FrmLogin.LoginUserID,
|
CreateUserName = FrmLogin.loginUserName,
|
LocalIP = FrmLogin.LocalIP,
|
LogMessage = "重量:" + PSNBox.Text + ",称重条码:" + SNMBox.Text + ",工单号:" + KPNMBox.Text + ",MES条码:" + KPNMBox.Text,
|
Type = "称重",
|
ClassName = typeof(FrmLogin).ToString()
|
});
|
}
|
}
|
}
|
dataGridView1.DataSource = System_Bll.GetSystemLog(FrmLogin.LocalIP, "称重");
|
Refresh();
|
}
|
|
/// <param name="encryptStr">明文</param>
|
/// <param name="key">密钥</param>
|
public static string AES256_Encrypt(string encryptStr, string key)
|
{
|
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
|
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr);
|
RijndaelManaged rDel = new RijndaelManaged();
|
rDel.Key = keyArray;
|
rDel.Mode = CipherMode.ECB;
|
rDel.Padding = PaddingMode.PKCS7;
|
ICryptoTransform cTransform = rDel.CreateEncryptor();
|
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
|
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
|
}
|
|
[Obsolete]
|
private void FrmExpress_FormClosed(object sender, FormClosedEventArgs e)
|
{
|
try
|
{
|
receiveDataThread.Suspend();
|
receiveDataThread.Abort();
|
}
|
catch (Exception ex)
|
{
|
}
|
}
|
public JObject MES_Interface(string textToEncrypt, string encryptionKey)
|
{
|
string par = AES256_Encrypt(textToEncrypt, encryptionKey);
|
WMISoapClient wMISoapClient = new WMISoapClient();
|
string text5 = wMISoapClient.WMI01(par);
|
return (JObject)JsonConvert.DeserializeObject(text5);
|
}
|
|
public JObject WI6027()
|
{
|
string a = "a0:36:9F:6c:0e:95";
|
string WI6027 = "{";
|
WI6027 += "\"user\":\"sys\",";
|
WI6027 += "\"password\":\"sysuser\",";
|
WI6027 += "\"method\":\"MES_BA_WI6027\",";
|
WI6027 += "\"servername\":\"London\",";
|
WI6027 += "\"methodparameter\":{";
|
WI6027 += "\"mac\":\"" + a + "\",";
|
WI6027 += "\"hostName\":\"DESKTOP-UV8I1I0\"";
|
WI6027 += "}}";
|
|
return MES_Interface(WI6027, encryptionKey);
|
}
|
|
public bool WI601K(string BarCode)
|
{
|
//string WI601K = "{\"user\":\"sys\", \"password\":\"sysuser\",\"method\":\"MES_BA_WI601K\",\"servername\":\"TEST_WTMES_Customer\", \"methodparameter\":{\"BarCode\":\"123456789\", \"HostName\":\"liuxingliang-PC\", \"Mac\":\"6A:15:63:C3:CC:EA\" }}\n";
|
string a = "a0:36:9F:6c:0e:95";
|
string WI601K = "{";
|
WI601K += "\"user\":\"sys\",";
|
WI601K += "\"password\":\"sysuser\",";
|
WI601K += "\"method\":\"MES_BA_WI601K\",";
|
WI601K += "\"servername\":\"London\",";
|
WI601K += "\"methodparameter\":{";
|
WI601K += "\"BarCode\":\"" + BarCode + "\",";
|
WI601K += "\"HostName\":\"DESKTOP-UV8I1I0\",";
|
WI601K += "\"Mac\":\"" + a + "\"";
|
WI601K += "}";
|
WI601K += "}";
|
|
JObject jo = MES_Interface(WI601K, encryptionKey);
|
if (jo["state"].ToString() == "false")
|
{
|
t = false;
|
System_Bll.WriteLogToDB(new Entity.Base_Log
|
|
{
|
CreateUserID = FrmLogin.LoginUserID,
|
CreateUserName = FrmLogin.loginUserName,
|
LocalIP = FrmLogin.LocalIP,
|
LogMessage = "WI601K接口调用失败:" + jo["content"].ToString(),
|
Type = "称重",
|
ClassName = typeof(FrmLogin).ToString()
|
});
|
return false;
|
}
|
return true;
|
}
|
public JObject WI1032(string PSN, string S_NM, string KP_NM, string KP_Value)
|
{
|
string WI1032 = "{ ";
|
WI1032 += "\"user\":\"sys\",";
|
WI1032 += "\"password\":\"sysuser\",";
|
WI1032 += "\"method\":\"MES_AS_WI1032\",";
|
WI1032 += "\"servername\":\"London\",";
|
WI1032 += "\"methodparameter\":{ ";
|
WI1032 += "\"PSN\":\"" + PSN + "\","; //PLC读到的
|
WI1032 += "\"S_NM\":\"" + S_NM + "\",";
|
WI1032 += "\"KP_NM\":\"" + KP_NM + "\",";
|
WI1032 += "\"KP_Value\":\"" + KP_NM + "\"";
|
WI1032 += "}}";
|
|
JObject jo = MES_Interface(WI1032, encryptionKey);
|
if (jo["state"].ToString() == "false")
|
{
|
t = false;
|
System_Bll.WriteLogToDB(new Entity.Base_Log
|
{
|
CreateUserID = FrmLogin.LoginUserID,
|
CreateUserName = FrmLogin.loginUserName,
|
LocalIP = FrmLogin.LocalIP,
|
LogMessage = "WI1032接口调用失败:" + jo["content"].ToString(),
|
Type = "称重",
|
ClassName = typeof(FrmLogin).ToString()
|
});
|
return null;
|
}
|
return jo;
|
}
|
|
public bool WI6041(string Line, string Station, string StationID, string PSN)
|
{
|
string WI6041 = "{ ";
|
WI6041 += "\n\"user\":\"sys\", ";
|
WI6041 += "\n\"password\":\"sysuser\", ";
|
WI6041 += "\n\"method\":\"MES_BA_WI6041\", ";
|
WI6041 += "\n\"servername\":\"London\", ";
|
WI6041 += "\n\"methodparameter\":{ ";
|
WI6041 += "\n\"content\":{ ";
|
WI6041 += "\n\"snresult\":{ ";
|
WI6041 += "\n}, ";
|
WI6041 += "\n\"testresult\":{ ";
|
WI6041 += "\n\"psn\":\"" + PSN + "\", ";
|
WI6041 += "\n\"workordernumber\":\"100000236815\", ";
|
WI6041 += "\n\"testStationId\":\"" + StationID + "\", ";
|
WI6041 += "\n\"testStationName\":\"" + Station + "\", ";
|
WI6041 += "\n\"linename\":\"" + Line + "\", ";
|
WI6041 += "\n\"hostname\":\"admin-PC-0930\", ";
|
WI6041 += "\n\"testTime\":\"" + string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Now) + "\", ";
|
WI6041 += "\n\"testModel\":\"S87567GB002_BLK1\", ";
|
WI6041 += "\n\"testWorkID\":\"\", ";
|
WI6041 += "\n\"Fixture\":\"\", ";
|
WI6041 += "\n\"FixtureSN\":\"\", ";
|
WI6041 += "\n\"Powersupply\":\"\", ";
|
WI6041 += "\n\"PowersupplySN\":\"\", ";
|
WI6041 += "\n\"Instrument\":\"\", ";
|
WI6041 += "\n\"InstrumentSN\":\"\", ";
|
WI6041 += "\n\"Operator\":\"\", ";
|
WI6041 += "\n\"testVersion\":\"V1.0.1\" ";
|
WI6041 += "\n}, ";
|
WI6041 += "\n\"itemresult\":[ ";
|
WI6041 += "\n],";
|
WI6041 += "\n\"specialitem\":[ ";
|
WI6041 += "\n] ";
|
WI6041 += "\n}, ";
|
WI6041 += "\n\"state\":\"pass\", ";
|
WI6041 += "\n\"errcode\":\"\", ";
|
WI6041 += "\n\"errmessage\":\"\"} ";
|
WI6041 += "\n}";
|
JObject jo = MES_Interface(WI6041, encryptionKey);
|
if (jo["state"].ToString() == "false")
|
{
|
t = false;
|
System_Bll.WriteLogToDB(new Entity.Base_Log
|
{
|
CreateUserID = FrmLogin.LoginUserID,
|
CreateUserName = FrmLogin.loginUserName,
|
LocalIP = FrmLogin.LocalIP,
|
LogMessage = "WI6041接口调用失败:" + jo["content"].ToString(),
|
Type = "称重",
|
ClassName = typeof(FrmLogin).ToString()
|
});
|
return false;
|
}
|
return true;
|
}
|
|
/// <summary>
|
/// 通过NetworkInterface获取MAC地址
|
/// </summary>
|
/// <returns></returns>
|
public static string GetMacByNetworkInterface()
|
{
|
try
|
{
|
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
|
foreach (NetworkInterface ni in interfaces)
|
{
|
return BitConverter.ToString(ni.GetPhysicalAddress().GetAddressBytes());
|
}
|
}
|
catch (Exception)
|
{
|
}
|
return "00-00-00-00-00-00";
|
}
|
|
}
|
}
|