using System.Collections.Generic ;
using System.ComponentModel ;
using System.Drawing ;
using Mesnac.Controls.Base ;
using System ;
using Mesnac.Controls.Default ;
using System.Drawing.Design ;
using System.Collections ;
using System.Windows.Forms ;
using System.ComponentModel.Design ;
using System.Globalization ;
using Mesnac.Basic ;
using Mesnac.Codd.Session ;
using System.Data ;
using System.Text ;
using Mesnac.Compressor.Entity ;
using System.Threading ;
using System.Reflection ;
using Mesnac.Compressor.Station ;
using PLCManager ;
using System.IO ;
using Mesnac.Controls.Feeding ;
using System.Windows.Forms.Design ;
using Mesnac.Gui.Edit.Dialog ;
using System.Runtime.Serialization.Formatters.Binary ;
using HslCommunication.Core ;
using System.Linq ;
using System.Runtime.Serialization ;
namespace Mesnac.Controls.Compressor
{
[ToolboxBitmap(typeof(Mixer2), "ICONS.mixer.bmp")] //新添加的代码
public partial class StationButton : FeedingControl
{
private List < DesignAction > _clickActionList = new List < DesignAction > ( ) ;
private List < DesignAction > _keyDownActionList = new List < DesignAction > ( ) ;
private List < DesignAction > _keyUpActionList = new List < DesignAction > ( ) ;
private bool _mcVisible = true ; //保存可见性
private bool _mcEnabled = true ; //保存可用性
private bool _isValid = true ; //保存有效性
private object _mcvalue ;
DbHelper dbHelper = DataSourceFactory . Instance . GetDbHelper ( "DataSource1" ) ;
private const int dataStateIndex = 1 ;
private const int MaxData = 6000 ;
private const int dataLength = 90 ; //读取数据长度,字
public event EventHandler ReshreshStationData ;
private int dataIndex = - 1 ;
private bool FirstRead = true ;
IByteTransform ByteTransform = new ReverseBytesTransform ( ) ;
public StationButton ( )
{
InitializeComponent ( ) ;
this . textBox1 . ReadOnly = true ;
this . textBox1 . Multiline = true ;
//this.textBox1.Size = new Size(150,150);
this . textBox1 . BackColor = Color . LightCyan ;
this . textBox2 . BackColor = Color . LightCyan ;
this . textBox3 . BackColor = Color . LightCyan ;
this . pressureSwitch1 . Status = Mesnac . Controls . Feeding . PressureSwitch . Statuses . ylNormal ;
panel5 . Parent = this . pictureBox1 ;
this . panel5 . BackColor = Color . Transparent ;
SetDefautText ( ) ;
}
public StationButton ( IContainer container )
{
//container.Add(this);
InitializeComponent ( ) ;
}
public List < DesignAction > ClickActionList
{
get
{
return this . _clickActionList ;
}
set
{
this . _clickActionList = value ;
}
}
public List < DesignAction > KeyDownActionList
{
get { return _keyDownActionList ; }
set { _keyDownActionList = value ; }
}
public List < DesignAction > KeyUpActionList
{
get { return _keyUpActionList ; }
set { _keyUpActionList = value ; }
}
[Description("工位"), Category("工位信息")]
public Image picture
{
get
{
return this . pictureBox1 . Image ;
}
set
{
this . pictureBox1 . Image = value ;
}
}
private Station _station
{
get
{
Station st = new Station ( ) ;
if ( ! string . IsNullOrEmpty ( MCStationName ) )
{
string name = MCStationName ;
string [ ] arry = name . Split ( ':' ) ;
if ( arry . Length > 1 )
{
st . StationID = arry [ 0 ] ;
st . StationName = arry [ 1 ] ;
}
}
else
{
st . StationID = "" ;
st . StationName = "" ;
}
return st ;
}
}
[Editor(typeof(PropertyGridFileItem), typeof(System.Drawing.Design.UITypeEditor))]
[Description("工位"), Category("工位信息")]
/// <summary>
/// 工位名称
/// </summary>
public string MCStationName
{
get ;
set ;
}
private StationInfo _stationInfo ;
public StationInfo StationInfo
{
get
{
if ( _stationInfo = = null )
{
InitStationInfo ( ) ;
}
return _stationInfo ;
}
}
private void InitStationInfo ( )
{
if ( string . IsNullOrEmpty ( _station . StationID ) )
{
return ;
}
try
{
if ( dbHelper = = null )
{
return ;
}
dbHelper . ClearParameter ( ) ;
dbHelper . CommandType = CommandType . Text ;
dbHelper . CommandText = "" ;
string sql = "Exec SP_Pro_getStationInfo @StationID" ;
dbHelper . AddParameter ( "@StationID" , _station . StationID ) ;
dbHelper . CommandText = sql ;
DataTable ds = ( DataTable ) dbHelper . ToDataTable ( ) ;
GetInfoName ( ds ) ;
}
catch ( Exception e )
{
ICSharpCode . Core . LoggingService . Error ( "网络服务器请求失败" + e . ToString ( ) ) ;
return ;
}
}
private void GetInfoName ( DataTable dt )
{
//工位表
DataTable dt2 = dt ;
try
{
_stationInfo = new StationInfo ( ) ;
if ( dt2 ! = null & & dt2 . Rows . Count > 0 )
{
///工位一参数
_stationInfo . stationID = dt2 . Rows [ 0 ] [ "StationID" ] . ToString ( ) ;
_stationInfo . StationCode = dt2 . Rows [ 0 ] [ "StationCode" ] . ToString ( ) ;
_stationInfo . StationName = dt2 . Rows [ 0 ] [ "StationName" ] . ToString ( ) ;
_stationInfo . TableName = dt2 . Rows [ 0 ] [ "TableName" ] . ToString ( ) ;
_stationInfo . PreTableName = dt2 . Rows [ 0 ] [ "PreTableName" ] . ToString ( ) ;
_stationInfo . ParaCount = Convert . ToInt32 ( dt2 . Rows [ 0 ] [ "paraCount" ] ) ;
_stationInfo . StationType = dt2 . Rows [ 0 ] [ "Type_Class" ] . ToString ( ) ;
_stationInfo . lineID = dt2 . Rows [ 0 ] [ "LineID" ] . ToString ( ) ;
_stationInfo . barcodeHead = dt2 . Rows [ 0 ] [ "barcodeHead" ] . ToString ( ) ;
_stationInfo . IfMainline = Convert . ToInt32 ( dt2 . Rows [ 0 ] [ "LineTypeFlag" ] ) = = 1 ;
_stationInfo . PLCName = dt2 . Rows [ 0 ] [ "PLCName" ] . ToString ( ) . Trim ( ) ;
if ( dt2 . Rows [ 0 ] [ "PLCBlock" ] . ToString ( ) ! = "" )
{
_stationInfo . PLCBlock = Convert . ToInt32 ( dt2 . Rows [ 0 ] [ "PLCBlock" ] ) ;
}
_stationInfo . NGTakeStation = Convert . ToInt32 ( dt2 . Rows [ 0 ] [ "IsNGStation" ] ) > 0 ;
ICSharpCode . Core . LoggingService . Debug ( "---------------------加载工位信息--------------------" + "\r\n" ) ;
ICSharpCode . Core . LoggingService . Debug ( "|工位序号:" + _stationInfo . stationID + ",工位编号:" + _stationInfo . StationCode + ",工位名称:" + _stationInfo . StationName + ",产线编号" + _stationInfo . lineID + "|\r\n" ) ;
ICSharpCode . Core . LoggingService . Debug ( "---------------------工位信息完成--------------------" + "\r\n" ) ;
}
}
catch ( Exception e )
{
ICSharpCode . Core . LoggingService . Error ( "参数获取错误:" + e . ToString ( ) ) ;
}
}
public object read = new object ( ) ;
public void OnRerefreshData ( )
{
lock ( read )
{
//if ()
//{
StationInfo . Data . NewFlag = false ;
//plc复位
//ResetPLCState(TextName);
ThreadPool . QueueUserWorkItem ( new WaitCallback ( SaveStationdata ) , StationInfo ) ;
}
}
public void PreWorkThread ( )
{
lock ( read )
{
ThreadPool . QueueUserWorkItem ( new WaitCallback ( PreStationWork ) , StationInfo ) ;
}
//ICSharpCode.Core.LoggingService.Debug("》》》》》》动态生成程序集!");
}
private void ResetPLCState ( string EquipKey )
{
object [ ] data = new object [ 1 ] ;
data [ 0 ] = 0 ;
PlcData . Instance . PlcWriteByEquipKey ( EquipKey , dataStateIndex , data ) ;
}
public void PreStationWork ( object o )
{
//ICSharpCode.Core.LoggingService.Debug("》》》》》》动态生成程序集!");
var station = o as StationInfo ;
if ( station = = null )
{
return ;
}
#region 生成动态处理类
string stationType = station . StationType ;
//根据类型,动态生成业务类
Assembly assembly = Assembly . GetExecutingAssembly ( ) ; // 获取当前程序集
string AssemName = "Mesnac.Compressor.Station." + stationType ;
var obj = assembly . CreateInstance ( AssemName , true ) ;
var stationManager = obj as IStation ;
# endregion
stationManager = ReflectClass ( stationType ) ;
if ( stationManager = = null )
{
ICSharpCode . Core . LoggingService . Debug ( "工位类型不存在" + stationType + " 工位:" + station . StationCode ) ;
return ;
}
//ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + " 开始上传数据。托盘号:" + station.Data.RFIDNo);
//ICSharpCode.Core.LoggingService.Debug("》》》》》》动态生成程序集完成!");
stationManager . PrepareWork ( station ) ;
}
public void SaveStationdata ( object o )
{
var station = o as StationInfo ;
if ( station = = null )
{
return ;
}
#region 生成动态处理类
string stationType = station . StationType ;
//根据类型,动态生成业务类
Assembly assembly = Assembly . GetExecutingAssembly ( ) ; // 获取当前程序集
string AssemName = "Mesnac.Compressor.Station." + stationType ;
var obj = assembly . CreateInstance ( AssemName , true ) ;
var stationManager = obj as IStation ;
# endregion
stationManager = ReflectClass ( stationType ) ;
if ( stationManager = = null )
{
ICSharpCode . Core . LoggingService . Debug ( "工位类型不存在" + stationType + " 工位:" + station . StationCode ) ;
return ;
}
//ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + " 开始上传数据。托盘号:" + station.Data.RFIDNo);
stationManager . HandleData ( station ) ;
}
private object _stationone ;
private int time = 0 ;
public static byte [ ] Serialize ( object obj )
{
BinaryFormatter bf = new BinaryFormatter ( ) ;
MemoryStream stream = new MemoryStream ( ) ;
bf . Serialize ( stream , obj ) ;
byte [ ] datas = stream . ToArray ( ) ;
stream . Dispose ( ) ;
return datas ;
}
public void ReceiveData ( object bytes , string stationcode )
{
try
{
byte [ ] buff = Serialize ( bytes ) ;
if ( buff ! = null )
{
Console . WriteLine ( DateTime . Now + "》》》工位:" + stationcode + ",循环扫描数据:" + bytesToHexStr ( buff , buff . Length ) ) ;
}
return ;
}
catch ( Exception ex )
{
return ;
}
}
public static string bytesToHexStr ( byte [ ] bytes , int iLen )
{
StringBuilder sb = new StringBuilder ( ) ;
if ( bytes ! = null )
{
for ( int i = 0 ; i < iLen ; i + + )
{
sb . Append ( bytes [ i ] . ToString ( "X2" ) ) ;
}
}
return sb . ToString ( ) ;
}
private object _mcValue ;
public object MCValue
{
get
{
return _mcValue ;
}
set
{
try
{
//Console.WriteLine(DateTime.Now + "》》》工位:" + StationInfo.StationCode + ",循环扫描数据");
if ( value = = null )
{
ClearText ( ) ;
return ;
}
//ReceiveData(value, StationInfo.StationCode);
//数据没有变化,直接返回
object [ ] objectarray1 ;
if ( ! TryObject ( value , out objectarray1 ) )
{
return ;
}
//if (StationInfo.StationCode == "140")
//{
// int test1 = SingleConvertToInt(objectarray1, 1);
// int test2 = SingleConvertToInt(objectarray1, 2);
// if (test1 == 1 || test2 == 1)
// {
// ICSharpCode.Core.LoggingService.Error("》》》工位:" + StationInfo.StationCode + ",检测点位D12501,值:" + test1 + ",D12502, 值:" + test2);
// }
// ICSharpCode.Core.LoggingService.Debug("》》》工位:" + StationInfo.StationCode + ",检测点位D12501,值:" + test1 + ",D12502, 值:" + test2);
//}
//if (StationInfo.StationCode == "150")
//{
// int test1 = SingleConvertToInt(objectarray1, 1);
// int test2 = SingleConvertToInt(objectarray1, 2);
// if (test1 == 1 || test2 == 1)
// {
// ICSharpCode.Core.LoggingService.Error("》》》工位:" + StationInfo.StationCode + ",检测点位D12801,值:" + test1 + ",D12802, 值:" + test2);
// }
// ICSharpCode.Core.LoggingService.Debug("》》》工位:" + StationInfo.StationCode + ",检测点位D12801,值:" + test1 + ",D12802, 值:" + test2);
//}
if ( value = = _mcValue )
{
return ;
}
time + + ;
object [ ] objectarray ;
if ( ! TryObject ( value , out objectarray ) )
{
return ;
}
_mcValue = value ;
if ( StationInfo . StationName . Contains ( "性能测试" ) )
{
try
{
StationInfo . Data = SiemensParaFormart ( objectarray , StationInfo . ParaCount ) ;
}
catch ( Exception ex )
{
ICSharpCode . Core . LoggingService . Debug ( "接收数据失败" + ex . ToString ( ) ) ;
}
}
else
{
StationInfo . Data = ParaFormart ( objectarray , StationInfo . ParaCount ) ;
}
SetText ( ) ;
if ( StationInfo . Data . AskWork )
{
//这里需要判断上工位结果是否OK
ICSharpCode . Core . LoggingService . Debug ( "工位:" + StationInfo . StationCode + " 收到作业请求信号" ) ;
PreWorkThread ( ) ;
}
////有新数据
if ( isConnect & & StationInfo . Data . NewFlag )
{
ICSharpCode . Core . LoggingService . Debug ( "工位:" + StationInfo . StationCode + " 收到作业完成信号,开始上传数据。托盘号:" + StationInfo . Data . RFIDNo ) ;
OnRerefreshData ( ) ;
}
}
catch ( Exception e )
{
Console . WriteLine ( e . ToString ( ) ) ;
}
}
}
private string _textName = null ;
public string TextName
{
get
{
return _textName ;
}
set
{
_textName = value ;
}
}
public bool isConnect { get ; set ; }
private string _state = "" ;
public string State
{
get
{
return _state ;
}
set
{
_state = value ;
}
}
public string NewMachineID = "" ;
public string OldMachineID
{
get ;
set ;
}
public string MachineName = "" ;
private string _productCount = "" ;
public string productCount
{
get
{
return _productCount ;
}
set
{
_productCount = value ;
}
}
#region 数据解析
public stationPara SiemensParaFormart ( object [ ] obj , int paraCount )
{
byte [ ] bytes = obj . Select ( o = > Convert . ToByte ( o ) ) . ToArray ( ) ;
string str = Convert . ToString ( Convert . ToInt32 ( bytes [ 2 ] ) , 2 ) . PadLeft ( 8 , '0' ) ;
string [ ] items = new string [ 8 ] ;
for ( int i = 0 ; i < items . Length ; i + + )
{
items [ i ] = str [ i ] . ToString ( ) ;
}
Array . Reverse ( items ) ;
//byte[] bools = ByteTransform.TransByte(bytes, 2,1);
isConnect = Convert . ToInt32 ( items [ 0 ] ) = = 1 ;
State = stateString ( Convert . ToInt32 ( items [ 1 ] ) ) ;
stationPara sinfo = new stationPara ( ) ;
int index = 0 ;
//ArrayList array = ConvertToBit(obj, index);
//Array(array);
//sinfo.Restart = Convert.ToInt32(bools[2]) == 1;
//sinfo.QGCT = Convert.ToInt32(bools[5]) == 1;
//NG放行
//sinfo.ReWork = Convert.ToInt32(bools[6]) == 1;
//OK放行
//sinfo.DP_OpenFlag = Convert.ToInt32(bools[7]) == 1;
//是否重投
if ( sinfo . Restart )
{
//ICSharpCode.Core.LoggingService.Info(StationInfo.StationCode + ",开始重投");
}
//是否有主线二维码
sinfo . BarcodeUpdate = Convert . ToInt32 ( items [ 3 ] ) = = 1 ;
//是否有支线二维码
sinfo . MaterialBarcodeUpdate = Convert . ToInt32 ( items [ 4 ] ) = = 1 ;
index + + ;
//自动模式
//重构,收到作业或放行请求才进行解析
//PLC工作请求信号
sinfo . AskWork = ByteTransform . TransInt16 ( bytes , 5 ) > 0 ;
index + + ;
//放行请求
sinfo . MaskID = ByteTransform . TransInt16 ( bytes , 7 ) ;
//Console.WriteLine(sinfo.BarcodeUpdate);
sinfo . NewFlag = newData ( sinfo . MaskID ) ;
index + = 3 ;
//当前机种号
sinfo . machineID = ByteTransform . TransByte ( bytes , 13 ) ;
NewMachineID = sinfo . machineID . ToString ( ) ;
index + + ;
//托盘号
int intNum = ByteTransform . TransByte ( bytes , 15 ) ;
//支线条码状态
index + + ;
bool [ ] bools2 = ByteTransform . TransBool ( bytes , 16 , 1 ) ;
ArrayList array2 = ConvertToList ( bools2 ) ;
//数据保存区
index + + ;
sinfo . ProductOkNg = ByteTransform . TransByte ( bytes , 19 ) ;
index + + ;
//线体代号ABC'
int gongxu = ByteTransform . TransByte ( bytes , 21 ) ;
sinfo . RFIDNo = string . Format ( "{0:X}" , gongxu ) + intNum . ToString ( ) . PadLeft ( 2 , '0' ) ;
index + = 1 ;
//sinfo.productDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//这里不用日期了
if ( sinfo . BarcodeUpdate | | sinfo . MaterialBarcodeUpdate )
{
GetBarcodeList ( bytes , index , ref sinfo ) ;
}
index = 180 ;
for ( int i = 0 ; i < paraCount ; i + + )
{
dataUnite du = new dataUnite ( ) ;
du . actValue = ByteTransform . TransSingle ( bytes , index ) . ToString ( ) ;
du . MaxValue = ByteTransform . TransSingle ( bytes , index + 4 ) . ToString ( ) ;
du . MinValue = ByteTransform . TransSingle ( bytes , index + 8 ) . ToString ( ) ;
du . result = ByteTransform . TransInt32 ( bytes , index + 12 ) ;
du . Remark = ByteTransform . TransInt32 ( bytes , index + 16 ) . ToString ( ) ;
index + = 20 ;
sinfo . SavedataList . Add ( du ) ;
}
if ( sinfo . MaskID = = 1 )
{
foreach ( var row in sinfo . SavedataList )
{
ICSharpCode . Core . LoggingService . Debug ( "------------------------" ) ;
ICSharpCode . Core . LoggingService . Debug ( "|生产值:" + row . actValue + "|" ) ;
ICSharpCode . Core . LoggingService . Debug ( "------------------------" ) ;
}
}
return sinfo ;
}
/// <summary>
/// 单工位数据解析
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public stationPara ParaFormart ( object [ ] obj , int paraCount )
{
stationPara sinfo = new stationPara ( ) ;
int index = 0 ;
ArrayList array = ConvertToBit ( obj , index ) ;
Arraylist ( array ) ;
sinfo . Restart = Convert . ToInt32 ( array [ 2 ] ) = = 1 ;
sinfo . QGCT = Convert . ToInt32 ( array [ 5 ] ) = = 1 ;
//NG放行
sinfo . ReWork = Convert . ToInt32 ( array [ 6 ] ) = = 1 ;
//OK放行
sinfo . DP_OpenFlag = Convert . ToInt32 ( array [ 7 ] ) = = 1 ;
//是否重投
if ( sinfo . Restart )
{
//ICSharpCode.Core.LoggingService.Info(StationInfo.StationCode + ",开始重投");
}
//是否有主线二维码
sinfo . BarcodeUpdate = Convert . ToInt32 ( array [ 3 ] ) = = 1 ;
//是否有支线二维码
sinfo . MaterialBarcodeUpdate = Convert . ToInt32 ( array [ 4 ] ) = = 1 ;
index + + ;
//自动模式
if ( ( int ) obj [ 1 ] = = 1 )
{
}
//重构,收到作业或放行请求才进行解析
//PLC工作请求信号
sinfo . AskWork = SingleConvertToInt ( obj , index ) > 0 ; / /
index + + ;
//放行请求
sinfo . MaskID = SingleConvertToInt ( obj , index ) ;
sinfo . NewFlag = newData ( sinfo . MaskID ) ;
index + = 3 ;
//当前机种号
sinfo . machineID = SingleConvertToInt ( obj , index ) ;
NewMachineID = sinfo . machineID . ToString ( ) ;
index + + ;
//托盘号
int intNum = SingleConvertToInt ( obj , index ) ;
//支线条码状态
index + + ;
ArrayList array2 = ConvertToBit ( obj , index ) ;
//数据保存区
index + + ;
sinfo . ProductOkNg = SingleConvertToInt ( obj , index ) ;
index + + ;
//线体代号ABC'
int gongxu = SingleConvertToInt ( obj , index ) ;
sinfo . RFIDNo = string . Format ( "{0:X}" , gongxu ) + intNum . ToString ( ) . PadLeft ( 2 , '0' ) ;
index + = 1 ;
//sinfo.productDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//这里不用日期了
if ( sinfo . BarcodeUpdate | | sinfo . MaterialBarcodeUpdate )
{
GetBarcodeList ( obj , array2 , index , ref sinfo ) ;
}
index + = 90 ;
for ( int i = 0 ; i < paraCount ; i + + )
{
dataUnite du = new dataUnite ( ) ;
du . actValue = ConvertToString ( obj , index ) ;
du . MaxValue = ConvertToString ( obj , index + 2 ) ;
du . MinValue = ConvertToString ( obj , index + 4 ) ;
du . result = ConvertToInt ( obj , index + 6 ) ;
du . Remark = ConvertToString ( obj , index + 8 ) ;
index + = 10 ;
sinfo . SavedataList . Add ( du ) ;
}
if ( sinfo . MaskID > 0 )
{
foreach ( var row in sinfo . SavedataList )
{
ICSharpCode . Core . LoggingService . Debug ( "------------------------" ) ;
ICSharpCode . Core . LoggingService . Debug ( "|生产值:" + row . actValue + "|" ) ;
ICSharpCode . Core . LoggingService . Debug ( "------------------------" ) ;
}
}
return sinfo ;
}
/// <summary>
/// 卓樱方法 yinzf,如果要换其他产线,这个地方肯定要重新
/// </summary>
/// <param name="buffer"></param>
/// <param name="index"></param>
/// <param name="sinfo"></param>
private void GetBarcodeList ( object [ ] buffer , ArrayList list , int index , ref stationPara sinfo )
{
try
{
//目前只有4个支线
sinfo . subLineList . Clear ( ) ;
for ( int i = 0 ; i < = 5 ; i + + )
{
subLine sl = new subLine ( ) ;
sl . lineID = i . ToString ( ) ;
sl . barcode = "" ;
sinfo . subLineList . Add ( sl ) ;
}
int barcodeLegth = 10 ; //设置单个条码长度
if ( sinfo . BarcodeUpdate )
{
sinfo . ProductBarcode = Getbarcode ( buffer , index , barcodeLegth ) . Trim ( ) ;
}
index = index + 10 ;
if ( sinfo . MaterialBarcodeUpdate )
{
for ( int i = 0 ; i < = 5 ; i + + )
{
bool HaveBarcord = Convert . ToInt32 ( list [ i ] ) = = 1 ; //判断第1位是否为1,此为支线1条码
if ( HaveBarcord )
{
if ( i = = 0 ) //控制器
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , index , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
if ( i = = 1 ) //壳体
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , 30 , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
if ( i = = 2 ) //前盖
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , 40 , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
if ( i = = 3 ) //动盘
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , 50 , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
if ( i = = 4 ) //静盘
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , 60 , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
if ( i = = 5 ) //后盖
{
sinfo . subLineList [ i ] . barcode = Getbarcode ( buffer , 70 , barcodeLegth ) ;
sinfo . MaterialBarcode = sinfo . subLineList [ i ] . barcode . Trim ( ) ;
}
}
}
}
}
catch ( Exception ex )
{
}
}
private void GetBarcodeList ( byte [ ] buffer , int index , ref stationPara sinfo )
{
try
{
//获取条码支线信息
//for (int i = 1; i <= 5; i++)
//{
// subLine sl = new subLine();
// sl.lineID = buffer[index + i].ToString();
// sl.barcode = "";
// sinfo.subLineList.Add(sl);
//}
//int barcodeLegth = 10;//设置单个条码长度
//获取主条码
byte [ ] bytes = new byte [ 20 ] ;
Array . Copy ( buffer , 22 , bytes , 0 , 20 ) ;
//ByteTransform.DataFormat = HslCommunication.Core.DataFormat.DCBA;
//ByteTransform.IsStringReverseByteWord = true;
if ( BitConverter . IsLittleEndian )
{
Array . Reverse ( bytes , 0 , 4 ) ;
Array . Reverse ( bytes , 4 , 4 ) ;
Array . Reverse ( bytes , 8 , 4 ) ;
Array . Reverse ( bytes , 12 , 4 ) ;
Array . Reverse ( bytes , 16 , 4 ) ;
}
sinfo . ProductBarcode = ByteTransform . TransString ( bytes , 0 , 20 , Encoding . ASCII ) ;
}
catch ( Exception ex )
{
ICSharpCode . Core . LoggingService . Debug ( "条码信息获取失败:" + ex . ToString ( ) ) ;
}
}
/// <summary>
/// 判断是否是新数据
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private bool newData2 ( int num )
{
if ( num > dataIndex )
{
//if (dataIndex == -1 && num == MaxData)//第一次也上传
if ( dataIndex = = - 1 & & num ! = 1 ) //开机第一次不上传
{
return false ;
}
dataIndex = num ;
if ( dataIndex = = MaxData )
{
dataIndex = 0 ;
}
return true ;
}
else
{
return false ;
}
}
private bool newData ( int num )
{
if ( num > 0 )
{
return true ;
}
return false ;
}
public virtual string Getbarcode ( object [ ] buffer , int index )
{
return "" ;
}
//南京方法
private string Getbarcode ( object [ ] buffer , int index , int len )
{
string messge = "" ;
try
{
//int len = Convert.ToInt32(buffer[index]) / 2 - 1;
int [ ] orgdata = new int [ len ] ;
for ( int i = 0 ; i < len ; i + + )
{
orgdata [ i ] = Convert . ToInt32 ( buffer [ index + i ] ) ;
}
byte [ ] newdata = new byte [ len * 2 ] ;
for ( int i = 0 ; i < len ; i + + )
{
newdata [ i * 2 ] = ( byte ) ( orgdata [ i ] % 256 ) ;
newdata [ i * 2 + 1 ] = ( byte ) ( orgdata [ i ] / 256 ) ;
}
messge = ASCIIEncoding . ASCII . GetString ( newdata ) . Replace ( "\0" , "" ) . Replace ( "\n" , "" ) . Replace ( "\r" , "" ) . Replace ( "\t" , "" ) ;
}
catch ( Exception ex )
{
ICSharpCode . Core . LoggingService . Debug ( "条码信息获取失败:" + ex . ToString ( ) ) ;
}
return messge ;
}
/// <summary>
/// 杭州方法
/// </summary>
/// <param name="obj"></param>
/// <param name="index"></param>
/// <param name="length"></param>
/// <returns></returns>
//private string Getbarcode(object[] obj, int index, int length)
//{
// StringBuilder builder = new StringBuilder();
// for (int i = 0; i < length; i++)
// {
// string str = this.SingleConvertToInt(obj, index + i).ToString();
// str = "0000" + str;
// str = str.Substring(str.Length - 4, 4);
// builder.Append(str);
// }
// return builder.ToString();
//}
/// <summary>
/// 将数据里的数据解析出来
/// </summary>
/// <param name="array"></param>
private void Arraylist ( ArrayList array )
{
try
{
isConnect = Convert . ToInt32 ( array [ 0 ] ) = = 1 ;
State = stateString ( Convert . ToInt32 ( array [ 1 ] ) ) ;
}
catch
{
}
}
private string ConvertToString ( object [ ] obj , int index )
{
float data = convertTofloat ( obj , index ) ;
return data . ToString ( "F4" ) ;
}
private int ConvertToInt ( object [ ] obj , int index )
{
float fstate = convertTofloat ( obj , index ) ;
return Convert . ToInt32 ( fstate ) ;
}
/// <summary>
/// 单字转Int
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private int SingleConvertToInt ( object [ ] obj , int index )
{
try
{
return Convert . ToInt16 ( obj [ index ] ) ;
}
catch
{
return 0 ;
}
}
public ArrayList ConvertToList ( bool [ ] obj )
{
ArrayList al = new ArrayList ( ) ;
foreach ( bool b in obj )
{
al . Add ( Convert . ToInt16 ( b ) ) ;
}
return al ;
}
public ArrayList ConvertToBit ( object [ ] obj , int index )
{
ArrayList al = new ArrayList ( ) ;
int IntValue = SingleConvertToInt ( obj , index ) ;
for ( int i = 0 ; i < 16 ; i + + )
{
int value = IntValue & 1 ;
al . Add ( value ) ;
IntValue = IntValue > > 1 ;
}
return al ;
}
private string stateString ( int state )
{
switch ( state )
{
case 0 :
return "非自动" ;
case 1 :
return "自动" ;
case 2 :
return "未知" ;
default :
return "未知" ;
}
}
/// <summary>
/// 如果是数组获取第一个字的值, 如果是object获取Int值
/// </summary>
/// <param name="ob"></param>
/// <returns></returns>
private int GetValue ( object ob )
{
//bool isArry = false;
int IntValue = 0 ;
try
{
var value = ob as object [ ] ;
object convertValue ;
if ( value = = null )
{
convertValue = ob ;
}
else
{
convertValue = value [ 0 ] ;
}
IntValue = Convert . ToInt32 ( convertValue ) ;
}
catch
{
IntValue = Convert . ToInt32 ( ob ) ;
}
return IntValue ;
}
private float convertTofloat ( object [ ] buff , int startIndex )
{
try
{
int b = Convert . ToInt32 ( buff [ startIndex ] ) ;
int a = Convert . ToInt32 ( buff [ startIndex + 1 ] ) ;
byte [ ] low = System . BitConverter . GetBytes ( b ) ;
byte [ ] high = System . BitConverter . GetBytes ( a ) ;
byte [ ] abc = new byte [ 4 ] ;
for ( int i = 0 ; i < 2 ; i + + )
{
abc [ i ] = low [ i ] ;
}
for ( int i = 0 ; i < 2 ; i + + )
{
abc [ i + 2 ] = high [ i ] ;
}
return BitConverter . ToSingle ( abc , 0 ) ;
}
catch
{
return - 1 ;
}
}
public Object [ ] floatToObject ( float ff )
{
//正负符号, 默认为0
byte flag = 0 ;
if ( ff < 0 )
{
flag = 128 ;
ff = ff * - 1 ;
}
byte [ ] floatByte = BitConverter . GetBytes ( ff ) ;
byte [ ] lowhByte = new byte [ 4 ] ;
lowhByte [ 0 ] = floatByte [ 0 ] ;
lowhByte [ 1 ] = floatByte [ 1 ] ;
lowhByte [ 2 ] = 0 ;
lowhByte [ 3 ] = 0 ;
byte [ ] highByte = new byte [ 4 ] ;
highByte [ 0 ] = floatByte [ 2 ] ;
highByte [ 1 ] = floatByte [ 3 ] ;
highByte [ 2 ] = 0 ;
highByte [ 3 ] = 0 ;
highByte [ 1 ] = ( byte ) ( highByte [ 1 ] + flag ) ;
UInt32 low = BitConverter . ToUInt32 ( lowhByte , 0 ) ;
int high = BitConverter . ToInt16 ( highByte , 0 ) ;
object [ ] buff = new object [ 2 ] ;
buff [ 0 ] = low ;
buff [ 1 ] = high ;
return buff ;
}
private bool TryObject ( object value , out object [ ] arry )
{
arry = null ;
try
{
arry = ( object [ ] ) value ;
return true ;
}
catch
{
return false ;
}
}
# endregion
public void SetText ( )
{
try
{
if ( isConnect )
{
this . pressureSwitch1 . Status = Mesnac . Controls . Feeding . PressureSwitch . Statuses . ylMove ;
}
else
{
this . pressureSwitch1 . Status = Mesnac . Controls . Feeding . PressureSwitch . Statuses . ylNormal ;
}
this . textBox1 . Text = "名称:" + StationInfo . StationCode + StationInfo . StationName ;
this . textBox2 . Text = "机种:" + getMachineName ( ) ;
this . textBox3 . Text = "状态:" + State ;
}
catch ( Exception ex )
{
ICSharpCode . Core . LoggingService . Debug ( "信息设置失败" + ex . ToString ( ) ) ;
}
}
public void ClearText ( )
{
try
{
this . pressureSwitch1 . Status = Mesnac . Controls . Feeding . PressureSwitch . Statuses . ylNormal ;
this . textBox1 . Text = "名称:" + StationInfo . StationCode + StationInfo . StationName ;
this . textBox2 . Text = "机种:" ;
this . textBox3 . Text = "状态:" ;
}
catch ( Exception ex )
{
ICSharpCode . Core . LoggingService . Debug ( "信息清空失败" + ex . ToString ( ) ) ;
}
}
private string getMachineName ( )
{
if ( ! string . IsNullOrEmpty ( OldMachineID ) | | OldMachineID ! = NewMachineID )
{
try
{
if ( dbHelper = = null )
{
return MachineName ;
}
dbHelper . ClearParameter ( ) ;
dbHelper . CommandType = CommandType . Text ;
dbHelper . CommandText = "" ;
string sql = " SELECT TOP 1 T2.dict_label FROM T_BD_ProductInfo T1 LEFT JOIN dbo.sys_dict_data T2 ON T1.ProductType = T2.dict_value WHERE T2.dict_type = 'productType' AND T1.ProductType = '" + NewMachineID + "'" ;
dbHelper . CommandText = sql ;
object ob = dbHelper . ToScalar ( ) ;
if ( ob ! = null )
{
MachineName = ob . ToString ( ) ;
}
}
catch ( Exception e )
{
ICSharpCode . Core . LoggingService . Error ( "机种获取失败" + e . ToString ( ) ) ;
return MachineName ;
}
OldMachineID = NewMachineID ;
}
return MachineName ;
}
private void SetDefautText ( )
{
this . pressureSwitch1 . Status = Mesnac . Controls . Feeding . PressureSwitch . Statuses . ylNormal ;
this . textBox1 . Text = "名称:\r\n" ;
this . textBox2 . Text = "机种:" ;
this . textBox3 . Text = "状态:" ;
}
#region 属性
public IBaseControl MCRoot
{
get
{
return null ;
}
set
{
;
}
}
#region 数据库的屏蔽,现在用不着
[TypeConverter(typeof(DataSourceConverter))]
[Description("数据连接"), Category("Data")]
public string MCDataSourceID
{
get ;
set ;
}
public MCDataSource MCDataSource
{
get ;
set ;
}
[Description("是否为数据库控件"), Category("Data")]
public bool IsDbControl
{
get ;
set ;
}
[Description("初始化SQL"), Category("Data")]
public string InitDataSource
{
get ;
set ;
}
[Description("执行SQL"), Category("Data")]
public string ActionDataSource
{
get ;
set ;
}
[Description("绑定数据源"), Category("Data")]
public object BindDataSource
{
get ;
set ;
}
[Description("操作类型"), Category("Data")]
public DbOptionTypes DbOptionType
{
get ;
set ;
}
# endregion
[Description("是否可见"), Category("Behavior")]
public bool MCVisible
{
get
{
return this . _mcVisible ;
}
set
{
this . _mcVisible = value = = null ? true : value ;
//if (this.Site.DesignMode)
//{
// this.Visible = true;
//}
//else
//{
// this.Visible = this._mcVisible;
//}
}
}
[Description("是否可用"), Category("Behavior")]
public bool MCEnabled
{
get
{
return this . _mcEnabled ;
}
set
{
this . _mcEnabled = value = = null ? true : value ;
//if (this.Site.DesignMode)
//{
// this.Enabled = true;
//}
//else
//{
// this.Enabled = this._mcEnabled;
//}
}
}
[Description("是否控制权限"), Category("Behavior")]
public bool MCPurview
{
get ;
set ;
}
public bool IsValid
{
get { return _isValid ; }
set { _isValid = value ; }
}
# endregion
private IStation ReflectClass ( string Name )
{
string thisPath = this . GetType ( ) . Assembly . Location ;
string assPath = ( new FileInfo ( thisPath ) ) . Directory + "\\Mesnac.Compressor.Station" ;
//string dllName = "Mesnac.Compressor.Station";
string path = assPath + ".dll" ;
string className = "Mesnac.Compressor.Station." + Name ;
if ( ! File . Exists ( path ) )
{
return null ;
}
Assembly ass = Assembly . LoadFile ( path ) ;
if ( ass = = null )
{
return null ;
}
var classname = ass . CreateInstance ( className , true ) ;
Type type = ass . GetType ( className ) ;
if ( type = = null )
{
return null ;
}
IStation to = ( IStation ) Activator . CreateInstance ( type ) ;
return to ;
}
private void StationButton_Click ( object sender , EventArgs e )
{
FrmStationData frm = new FrmStationData ( _station . StationID , _station . StationName ) ;
frm . ShowDialog ( ) ;
}
}
public class PropertyGridFileItem : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle ( System . ComponentModel . ITypeDescriptorContext context )
{
return UITypeEditorEditStyle . Modal ;
}
public override object EditValue ( System . ComponentModel . ITypeDescriptorContext context , System . IServiceProvider provider , object value )
{
IWindowsFormsEditorService edSvc = ( IWindowsFormsEditorService ) provider . GetService ( typeof ( IWindowsFormsEditorService ) ) ;
if ( edSvc ! = null )
{
// 可以打开任何特定的对话框
FrmStation dialog = new FrmStation ( ) ;
if ( dialog . ShowDialog ( ) . Equals ( DialogResult . OK ) )
{
Station st = new Station ( ) ;
st . StationID = dialog . StationID ;
st . StationName = dialog . StationName ;
string result = dialog . StationID + ":" + dialog . StationName ;
return result ;
}
}
return value ;
}
}
//[TypeConverterAttribute(typeof(StringToHumanTypeConverter))]
public class Station
{
/// <summary>
/// 工位ID
/// </summary>
public string StationID { get ; set ; }
/// <summary>
/// 工位名称
/// </summary>
public string StationName { get ; set ; }
public override string ToString ( )
{
if ( this . StationName ! = null )
{
return this . StationName ;
}
else
{
return base . ToString ( ) ;
}
}
}
}