恒石成品库WCS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

594 lines
22 KiB

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Configuration;
using System.Threading;
using System.Text.RegularExpressions;
namespace CommonClassLib
{
/// <summary>
/// 所有进制之间的转换函数库
/// Creator:Richard.liu
/// </summary>
public static class CCarryConvert
{
//add for catl FD3 黑匣子
public static List<string> dark = new List<string>();
static StringBuilder filePath = new StringBuilder();
static StringBuilder returnstr = new StringBuilder();
static StringBuilder strf = new StringBuilder();
static StringBuilder filepath1 = new StringBuilder();
static StringBuilder mydate = new StringBuilder();
static StringBuilder path1 = new StringBuilder();
static StringBuilder pathnew = new StringBuilder();
static string[] files;
static string[] doc = new string[3] { "DarkCasket", "ReceiveAGVDarkCasket", "LoginDarkCasket" };
//add for CATL FD3 黑匣子 记录
static StringBuilder DarkCasketBuff = new StringBuilder(); //zcy
static DateTime DarkCasketStart = DateTime.Now; //zcy
/// <summary>
/// 十进制转二进制
/// </summary>
/// <param name="dec">十进制数</param>
/// <returns>二进制字符串</returns>
//public static string DecimalToBin(decimal dec)
//{
// return Convert.ToString(dec, 2);
//}
/// <summary>
/// 十进制转十六进制
/// </summary>
/// <param name="dec">十进制数</param>
/// <returns>十六进制字符串</returns>
public static string DecimalToHex(byte dec)
{
return Convert.ToString(dec, 16);
}
/// <summary>
/// 十进制转十六进制
/// </summary>
/// <param name="dec"></param>
/// <returns></returns>
public static string DecimalToHex(int dec)
{
return Convert.ToString(dec, 16);
}
/// <summary>
/// 十进制转八进制
/// </summary>
/// <param name="dec">十进制数</param>
/// <returns>八进制字符串</returns>
public static string DecimalToOct(byte dec)
{
return Convert.ToString(dec, 8);
}
/// <summary>
/// 二进制转十进制
/// </summary>
/// <param name="bin">二进制字符串</param>
/// <returns>十进制数</returns>
public static Int32 BinToDecimal(string bin)
{
return Convert.ToInt32(bin, 2);
}
/// <summary>
/// 八进制转十进制
/// </summary>
/// <param name="bin">八进制字符串</param>
/// <returns>十进制数</returns>
public static Int32 OctToDecimal(string Oct)
{
return Convert.ToInt32(Oct, 8);
}
/// <summary>
/// 十六进制转十进制
/// </summary>
/// <param name="bin">十六进制字符串</param>
/// <returns>十进制数</returns>
public static Int32 HexToDecimal(string hex)
{
return Convert.ToInt32(hex, 16);
}
/// <summary>
/// 十六进制转字节型十进制
/// </summary>
/// <param name="bin">十六进制字符串</param>
/// <returns>字节型十进制数</returns>
public static byte HexToByte(string hex)
{
return Convert.ToByte(hex, 16);
}
/// <summary>
/// 在十进制数获得指定bit位的二进制字符:0/1
/// </summary>
/// <param name="Int">十进制数</param>
/// <param name="bitno">比特位</param>
/// <returns></returns>
public static byte GetBitFromInteger(int Int, int bitno)
{
if ((Int & Convert.ToInt32(Math.Pow(2, Convert.ToDouble(bitno)))) == Convert.ToInt32(Math.Pow(2, Convert.ToDouble(bitno))))
{
return 1;
}
else
{
return 0;
}
}
/// <summary>
/// byte[0]存放高八位,byte[1]存放低八位
/// </summary>
/// <param name="_int16"></param>
/// <returns></returns>
public static byte[] GetByteFromInt16(int _int16)
{
char[] cc = new char[1] { '.' };
string[] sp;
byte[] _bytes = new byte[2];
sp = Convert.ToString(_int16 >> 8).Split(cc);
_bytes[0] = Convert.ToByte(sp[0]);
_bytes[1] = Convert.ToByte(_int16 & 255);
return _bytes;
}
public static UInt16 GetInt16FromBytes(byte[] _bytes)
{
UInt16 _int16;
_int16 = Convert.ToUInt16(_bytes[1] + (_bytes[0] * 256));
return _int16;
}
/// <summary>
/// 4个字节的数组,转换为单精度浮点数
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static float ByteToFloat(byte[] bResponse)
{
if (bResponse.Length != 4 )
{
return 0;
}
else
{
Array.Reverse(bResponse);//反转数组元素
return BitConverter.ToSingle(bResponse, 0);
}
}
/// <summary>
/// 读取某一天的通讯日志,就是所谓的黑匣子
/// </summary>
/// <param name="mydate">指定的日期</param>
/// <returns>这一天的所有通讯记录</returns>
public static string ReadCommLog(string mydate)
{
filePath.Remove(0, filePath.Length);
filePath.Append(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()))).Append("\\").Append(mydate + ".log");
StreamReader sr = new StreamReader(filePath.ToString());
if (sr.EndOfStream == false)
{
returnstr.Remove(0, returnstr.Length);
returnstr.Append(sr.ReadToEnd());
sr.Close();
return returnstr.ToString();
}
else
{
sr.Close();
return "";
}
}
/// <summary>
/// 写黑匣子
/// </summary>
/// <param name="mydate"></param>
/// <param name="textline"></param>
/// <returns></returns>
public static bool WriteCommLog(string mydate, string textline)
{
try
{
//20110412
mydate = DateTime.Parse(mydate).ToString("u");
mydate = mydate.Substring(0,10);
filePath.Remove(0, filePath.Length);
filePath.Append(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()))).Append("\\").Append("DarkCasket").Append("\\");
if (Directory.Exists(filePath.ToString()) == false)
{
Directory.CreateDirectory(filePath.ToString());
}
//1--99循环
for (int fcount = 1; fcount <= 99; fcount++)
{
strf.Remove(0, strf.Length);
if (fcount.ToString().Length < 2)
{
strf.Append("0").Append(fcount.ToString());
}
else
{
strf.Append(fcount.ToString());
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath.ToString()).Append(mydate).Append(strf).Append(".log");
if (File.Exists(filepath1.ToString()) == false)
{
NeatenDarkCasket();
using (StreamWriter sw = File.CreateText(filepath1.ToString()))
{
sw.WriteLine("通讯时间**********接口类型**********命令**********地址/端口**********报文内容");
sw.WriteLine(textline);
//20091102
sw.Close();
sw.Dispose();
}//
return true;//20081217
}
else
{
FileInfo ff = new FileInfo(filepath1.ToString());
AppSettingsReader asr = new AppSettingsReader();
long len = (long)asr.GetValue("DarkCasketSize", typeof(long));
if (ff.Length > len)
{
continue;
}
else
{
//add for catl FD3 将原来黑匣子方法注释进行三秒 写一次黑匣子方法
//using (StreamWriter sw = File.AppendText(filepath1.ToString()))
//{
// sw.WriteLine(textline);
// //20091102
// sw.Close();//2000ms
// sw.Dispose();
// //Thread.Sleep(300);
//}
// add catl FD3 黑匣子 傻逼黑匣子 傻逼黑匣子 傻逼黑匣子
#region zcy 新想法每次记录黑匣子写一段时间 一次性写
//目的为了减少字节流关闭的方法
if (DarkCasketBuff.Length == 0)
{
DarkCasketStart = DateTime.Now; //第一行的时间
}
DarkCasketBuff.Append(textline).Append("\n").Append("\r\n");
DateTime currTime = DateTime.Now;
if ((DarkCasketStart.AddSeconds(3) < currTime)) // 与第一行的时间超过10秒,写一次黑匣子
{
StreamWriter sw = File.AppendText(filepath1.ToString());
sw.WriteLine(DarkCasketBuff.ToString());
sw.Close();
sw.Dispose();
DarkCasketBuff.Clear();
}
#endregion
return true;//20081217
}
}
}
//20081217
//99个文件都写满了,删除今天的99个文件重新开始
for (int fcount = 1; fcount <= 99; fcount++)
{
strf.Remove(0, strf.Length);
if (fcount.ToString().Length < 2)
{
strf.Append("0").Append(fcount.ToString());
}
else
{
strf.Append(fcount.ToString());
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath).Append(mydate).Append(strf).Append(".log");
if (File.Exists(filepath1.ToString()) == true)
{
File.Delete(filepath1.ToString());
}
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath).Append(mydate).Append("01.log");
{
using (StreamWriter sw = File.CreateText(filepath1.ToString()))
{
sw.WriteLine("通讯时间**********接口类型**********命令**********地址/端口**********报文内容");
sw.WriteLine(textline);
//20091102
sw.Close();
sw.Dispose();
}
}
return true;
}
catch //(Exception ex)
{
return false;
//throw ex;
}
}
public static bool WriteCommLog(string DarkCasketFolder, string mydate, string textline)
{
try
{
//20110412
mydate = DateTime.Parse(mydate).ToString("u");
mydate = mydate.Substring(0,10);
filePath.Remove(0, filePath.Length);
filePath.Append(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()))).Append("\\");
filePath.Append(DarkCasketFolder).Append("DarkCasket").Append("\\");
if (Directory.Exists(filePath.ToString()) == false)
{
Directory.CreateDirectory(filePath.ToString());
}
//1--99循环
for (int fcount = 1; fcount <= 99; fcount++)
{
strf.Remove(0, strf.Length);
if (fcount.ToString().Length < 2)
{
strf.Append("0").Append(fcount.ToString());
}
else
{
strf.Append(fcount.ToString());
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath).Append(mydate).Append(strf).Append(".log");
if (File.Exists(filepath1.ToString()) == false)
{
NeatenDarkCasket();
using (StreamWriter sw = File.CreateText(filepath1.ToString()))
{
sw.WriteLine("通讯时间**********接口类型**********命令**********地址/端口**********报文内容");
sw.WriteLine(textline);
//20091102
sw.Close();
sw.Dispose();
}//
return true;//20081217
}
else
{
FileInfo ff = new FileInfo(filepath1.ToString());
AppSettingsReader asr = new AppSettingsReader();
long len = (long)asr.GetValue("DarkCasketSize", typeof(long));
if (ff.Length > len)
{
continue;
}
else
{
using (StreamWriter sw = File.AppendText(filepath1.ToString()))
{
sw.WriteLine(textline);
//20091102
sw.Close();
sw.Dispose();
}
return true;//20081217
}
}
}
//20081217
//99个文件都写满了,删除今天的99个文件重新开始
for (int fcount = 1; fcount <= 99; fcount++)
{
strf.Remove(0, strf.Length);
if (fcount.ToString().Length < 2)
{
strf.Append("0").Append(fcount.ToString());
}
else
{
strf.Append(fcount.ToString());
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath).Append(mydate).Append(strf).Append(".log");
if (File.Exists(filepath1.ToString()) == true)
{
File.Delete(filepath1.ToString());
}
}
filepath1.Remove(0, filepath1.Length);
filepath1.Append(filePath).Append(mydate).Append("01.log");
{
using (StreamWriter sw = File.CreateText(filepath1.ToString()))
{
sw.WriteLine("通讯时间**********接口类型**********命令**********地址/端口**********报文内容");
sw.WriteLine(textline);
//20091102
sw.Close();
sw.Dispose();
}
}
return true;
}
catch //(Exception ex)
{
return false;
//throw ex;
}
}
/// <summary>
/// 写黑匣子
/// </summary>
/// <param name="interfacename"></param>
/// <param name="ordername"></param>
/// <param name="addr_port"></param>
/// <param name="message"></param>
public static void WriteDarkCasket(string interfacename, string ordername, string addr_port, byte[] message)
{
strf.Remove(0, strf.Length);
if (message != null)
{
for (int i = 0; i < message.GetLength(0); i++)
{
strf.Append( "-" ).Append( message[i].ToString());
}
}
returnstr.Remove(0, returnstr.Length);
returnstr.Append(DateTime.Now.ToLongTimeString()).Append(":").Append(DateTime.Now.Millisecond).Append("**").Append(interfacename).Append("**").Append(ordername).Append("**").Append(addr_port).Append("**").Append(strf);
CommonClassLib.CCarryConvert.WriteCommLog(DateTime.Today.ToShortDateString(), returnstr.ToString());
}
public static void WriteDarkCasket(string DarkCasketFolder, string interfacename, string ordername, string addr_port, byte[] message)
{
strf.Remove(0, strf.Length);
if (message != null)
{
for (int i = 0; i < message.GetLength(0); i++)
{
strf.Append("-").Append(message[i].ToString());
}
}
returnstr.Remove(0, returnstr.Length);
returnstr.Append(DateTime.Now.ToLongTimeString()).Append(":").Append(DateTime.Now.Millisecond).Append("**").Append(interfacename).Append("**").Append(ordername).Append("**").Append(addr_port).Append("**").Append(strf);
CCarryConvert.WriteCommLog(DarkCasketFolder, DateTime.Today.ToShortDateString(), returnstr.ToString());
}
public static void WriteDarkCasket(string DarkCasketFolder, string interfacename, string ordername, string addr_port, int[] message)
{
strf.Remove(0, strf.Length);
if (message != null)
{
for (int i = 0; i < message.GetLength(0); i++)
{
strf.Append("-").Append(message[i].ToString());
}
}
returnstr.Remove(0, returnstr.Length);
returnstr.Append(DateTime.Now.ToLongTimeString()).Append(":").Append(DateTime.Now.Millisecond).Append("**").Append(interfacename).Append("**").Append(ordername).Append("**").Append(addr_port).Append("**").Append(strf);
CCarryConvert.WriteCommLog(DarkCasketFolder, DateTime.Today.ToShortDateString(), returnstr.ToString());
}
//add for catl FD3 黑匣子卡
public static void WriteDarkCasket(string interfacename, string ordername, string addr_port, string message)
{
dark.Add(interfacename + "|" + ordername + "|" + addr_port + "|" + message);
}
/// <summary>
/// 写黑匣子
/// </summary>
/// <param name="interfacename"></param>
/// <param name="ordername"></param>
/// <param name="addr_port"></param>
/// <param name="message"></param>
public static void kkk(string interfacename, string ordername, string addr_port, string message)
{
returnstr.Remove(0, returnstr.Length);
returnstr.Append(DateTime.Now.ToLongTimeString()).Append(":").Append(DateTime.Now.Millisecond).Append("**").Append(interfacename).Append("**").Append(ordername).Append("**").Append(addr_port).Append("**").Append(message);
CCarryConvert.WriteCommLog(DateTime.Today.ToShortDateString(), returnstr.ToString());
}
public static void WriteDarkCasket(string DarkCasketFolder, string interfacename, string ordername, string addr_port, string message)
{
returnstr.Remove(0, returnstr.Length);
returnstr.Append(DateTime.Now.ToLongTimeString()).Append(":").Append(DateTime.Now.Millisecond).Append("**").Append(interfacename).Append("**").Append(ordername).Append("**").Append(addr_port).Append("**").Append(message);
CCarryConvert.WriteCommLog(DarkCasketFolder, DateTime.Today.ToShortDateString(), returnstr.ToString());
}
/// <summary>
/// 执行整理黑匣子文件;在app.config文件中找到整理周期
/// </summary>
public static void NeatenDarkCasket()
{
try
{
AppSettingsReader asr = new AppSettingsReader();
long FileSum = (long)asr.GetValue("DarkCasketSum", typeof(long));
for (int ii = doc.GetLowerBound(0); ii <= doc.GetUpperBound(0); ii++)
{
filePath.Remove(0, filePath.Length);
filePath.Append(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()))).Append("\\").Append(doc[ii]);
if (Directory.Exists(filePath.ToString()) == false) continue;
files = Directory.GetFiles(filePath.ToString());
Array.Sort(files);//20100521
int fc = files.GetLength(0);
//string strf = string.Empty;
if ((fc - FileSum) < 1) continue;//20100521
for (long fi = 0; fi <= (fc - FileSum - 1); fi++)//20100521
{
File.Delete(files[fi]);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}