Commit 5d42698f 张东亮

存储机构-更新合并

2 个父辈 c4361089 4518c7b1
正在显示 29 个修改的文件 包含 3716 行增加825 行删除
......@@ -5,6 +5,7 @@ AXIS,0,取料升降轴,TakeAxis_Updown,12,HC,,300000,200000,200000,800,10000,10000,10
AXIS,0,取料旋转轴,TakeAxis_Middle,13,HC,,800000,1500000,1500000,1200,8000,30000,10,100,0,0
,,,,,,,,,,,,,,,,
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,,,,
PRO,0,是否使用夹爪(1=使用夹爪,0=用吸盘),UseClampJaw,1,,,,,,,,,,,,
PRO,0,A侧扫码的相机名称(多个用#分隔),CameraNameList_A,GigE:MV-CE200-10GC (00E78064929),,,,,,,,,,,,
PRO,0,B侧扫码的相机名称(多个用#分隔),CameraNameList_B,GigE:MV-CE200-10GC (00E78064929),,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
......@@ -36,22 +37,22 @@ PRO,0,取料升降轴_NG料区放料高点,Updown_P8_NGH,107,,,,,,,,,,,,
PRO,0,取料升降轴_NG料区放料低点,Updown_P9_NGL,108,,,,,,,,,,,,
PRO,0,取料升降轴_B上暂存区放料高点,Updown_P10_BUpperH,109,,,,,,,,,,,,
PRO,0,取料升降轴_B上暂存区放料低点,Updown_P11_BUpperL,110,,,,,,,,,,,,
PRO,0,取料升降轴_B下暂存区取料高点,Updown_P12_AUnderH,111,,,,,,,,,,,,
PRO,0,取料升降轴_B下暂存区取料低点,Updown_P13_AUnderL,112,,,,,,,,,,,,
PRO,0,取料升降轴_B下暂存区取料高点,Updown_P12_BUnderH,111,,,,,,,,,,,,
PRO,0,取料升降轴_B下暂存区取料低点,Updown_P13_BUnderL,112,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,取料旋转轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
PRO,1,取料旋转轴_P2速度,Updown_P2_Speed,109,,,,,,,,,,,,
PRO,2,取料旋转轴_P3速度,Updown_P3_Speed,110,,,,,,,,,,,,
PRO,3,取料旋转轴_P4速度,Updown_P4_Speed,111,,,,,,,,,,,,
PRO,4,取料旋转轴_P5速度,Updown_P5_Speed,112,,,,,,,,,,,,
PRO,5,取料旋转轴_P6速度,Updown_P6_Speed,113,,,,,,,,,,,,
PRO,6,取料旋转轴_P7速度,Updown_P7_Speed,114,,,,,,,,,,,,
PRO,7,取料旋转轴_P8速度,Updown_P8_Speed,115,,,,,,,,,,,,
PRO,8,取料旋转轴_P9速度,Updown_P9_Speed,116,,,,,,,,,,,,
PRO,9,取料旋转轴_P10速度,Updown_P10_Speed,117,,,,,,,,,,,,
PRO,10,取料旋转轴_P11速度,Updown_P11_Speed,118,,,,,,,,,,,,
PRO,11,取料旋转轴_P12速度,Updown_P12_Speed,119,,,,,,,,,,,,
PRO,12,取料旋转轴_P13速度,Updown_P13_Speed,120,,,,,,,,,,,,
PRO,0,取料升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
PRO,1,取料升降轴_P2速度,Updown_P2_Speed,109,,,,,,,,,,,,
PRO,2,取料升降轴_P3速度,Updown_P3_Speed,110,,,,,,,,,,,,
PRO,3,取料升降轴_P4速度,Updown_P4_Speed,111,,,,,,,,,,,,
PRO,4,取料升降轴_P5速度,Updown_P5_Speed,112,,,,,,,,,,,,
PRO,5,取料升降轴_P6速度,Updown_P6_Speed,113,,,,,,,,,,,,
PRO,6,取料升降轴_P7速度,Updown_P7_Speed,114,,,,,,,,,,,,
PRO,7,取料升降轴_P8速度,Updown_P8_Speed,115,,,,,,,,,,,,
PRO,8,取料升降轴_P9速度,Updown_P9_Speed,116,,,,,,,,,,,,
PRO,9,取料升降轴_P10速度,Updown_P10_Speed,117,,,,,,,,,,,,
PRO,10,取料升降轴_P11速度,Updown_P11_Speed,118,,,,,,,,,,,,
PRO,11,取料升降轴_P12速度,Updown_P12_Speed,119,,,,,,,,,,,,
PRO,12,取料升降轴_P13速度,Updown_P13_Speed,120,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,取料旋转轴_待机点,Middle_P1,100,,,,,,,,,,,,
PRO,0,取料旋转轴_A料口取料点,Middle_P2_ATake,101,,,,,,,,,,,,
......
......@@ -41,9 +41,9 @@ DI,2,料屉第14层检测信号,Row_Check_14,29,HC,X29,,,,,,,,,,,,
DI,2,料屉第15层检测信号,Row_Check_15,30,HC,X30,,,,,,,,,,,,
,,,,31,HC,X31,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
DI,1,左前门门禁信号(存储机构),LeftDoor_Limit,32,HC,X32,,,,,,,,,,,,
DI,1,右前门门禁信号(存储机构),RightDoor_Limit,33,HC,X33,,,,,,,,,,,,
DI,1,后门门禁信号(存储机构),BackDoor_Limit,34,HC,X34,,,,,,,,,,,,
DI,2,左前门门禁信号(存储机构),LeftDoor_Limit,32,HC,X32,,,,,,,,,,,,
DI,2,右前门门禁信号(存储机构),RightDoor_Limit,33,HC,X33,,,,,,,,,,,,
DI,2,后门门禁信号(存储机构),BackDoor_Limit,34,HC,X34,,,,,,,,,,,,
DI,1,急停(取料机构),SuddenStop_BTN,35,HC,X35,,,,,,,,,,,,
DI,1,复位(取料机构),Reset_BTN,36,HC,X36,,,,,,,,,,,,
DI,1,光栅信号,SafetyRasterSignal,37,HC,X37,,,,,,,,,,,,
......
......@@ -331,7 +331,14 @@ namespace OnlineStore.DeviceLibrary
}
}
public bool IsBatchMove()
{
if (axisCheckTimer != null && axisCheckTimer.Enabled)
{
return true;
}
return false;
}
#endregion
}
}
......
......@@ -97,6 +97,11 @@ namespace OnlineStore.DeviceLibrary
{
Camera._cam.CloseAll();
}
public static List<string> CameraScan(string cameraName, string deviceName, bool findRightCodeBreak = false, int timeOut = 1500)
{
List<string> nameList = new List<string>() { cameraName };
return CameraScan(nameList, deviceName, findRightCodeBreak, timeOut);
}
private static int ScanCount = 0;
private static int codeCount = ConfigAppSettings.GetIntValue(Setting_Init.CodeCount);
[HandleProcessCorruptedStateExceptions]
......
......@@ -144,26 +144,20 @@ namespace OnlineStore.DeviceLibrary
return false;
}
public static void SaveMoveEquipConfig(BoxEquip_Config config)
public static void SaveBoxConfig(BoxEquip_Config config)
{
try
{
//位置配置到文件中
string appPath = Application.StartupPath;
string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Box);
string boxConfig = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Box);
string configBase = appPath + moveEquipConfig;
string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + config.Id.ToString().PadLeft(2, '0') + ".csv");
allConfigMap[config.Id] = config;
if (!File.Exists(configStr))
{
LogUtil.info("复制配置文件【" + configBase + "】->【" + configStr + "】");
File.Copy(configBase, configStr);
}
bool result = CSVConfigReader.SaveConfig(configStr, config, typeof(BoxEquip_Config));
bool result = CSVConfigReader.SaveConfig(boxConfig, config, typeof(BoxEquip_Config));
if (!result)
{
LogUtil.error("保存配置文件失败:" + configStr);
LogUtil.error("保存配置文件失败:" + boxConfig);
}
}
catch (Exception ex)
......@@ -177,15 +171,13 @@ namespace OnlineStore.DeviceLibrary
{
//位置配置到文件中
string appPath = Application.StartupPath;
string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Input);
string configFile = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Input);
int id = config.Id - 100;
string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + id + ".csv");
allConfigMap[config.Id] = config;
bool result = CSVConfigReader.SaveConfig(configStr, config, typeof(InputEquip_Config));
bool result = CSVConfigReader.SaveConfig(configFile, config, typeof(InputEquip_Config));
if (!result)
{
LogUtil.error("保存配置文件失败:" + configStr);
LogUtil.error("保存配置文件失败:" + configFile);
}
}
catch (Exception ex)
......
......@@ -398,6 +398,12 @@ namespace OnlineStore.DeviceLibrary
{
LogUtil.info(Name + logInfo);
}
protected void MoveLog(string msg)
{
string posId = (MoveInfo.MoveParam != null && MoveInfo.MoveParam.PosInfo != null) ? " [" + MoveInfo.MoveParam.PosInfo.PosId + "][" + MoveInfo.MoveParam.PosInfo.barcode + "]" : "";
LogUtil.info(Name + " " + posId + msg);
}
/// <summary>
/// 阻塞等待IO信号,等到返回true,未等到返回false
/// </summary>c
......
......@@ -115,177 +115,221 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 入料模块复位: 准备开始复位
/// 入料模块复位: 开始回原点,批量轴复位
/// </summary>
IR01_Wait = 1001,
/// <summary>
/// 入料模块复位: 进出轴回原点
/// </summary>
IR02_InoutHome,
/// <summary>
/// 入料模块复位: 进出轴到待机点
/// 入料模块复位: 判断旋转轴是否应该到高点
/// 1,处于A,B,NG料口是,可以直接回取料升降轴。
/// 2,处于A, B两个暂存区时,升降轴先运动到该暂存区的取放料高点,旋转轴再回原点或待机点。
/// </summary>
IR03_InoutToP1,
IR02_UpdownUpMove,
/// <summary>
/// 入料模块复位: 升降轴原点返回,批量轴回原点
/// 入料模块复位: 旋转轴回原点
/// </summary>
IR04_UpdownAxisHome,
IR03_MiddleHome,
/// <summary>
/// 入料模块复位:升降轴到P1
/// 入料模块复位: 旋转轴到待机点
/// </summary>
IR05_UpdownToP1,
IR04_MiddleToP1,
/// <summary>
/// 入料模块复位: 旋转轴原点返回
/// 入料模块复位: 升降轴原点返回
/// </summary>
IR06_MiddleAxisHome,
IR05_UpdownHome,
/// <summary>
/// 入料模块复位: 升降轴,旋转轴到待机点
/// 入料模块复位:升降轴到P1
/// </summary>
IR07_MiddleToP1,
IR06_UpdownToP1,
/// <summary>
/// 入料模块复位: 夹紧气缸放松
/// </summary>
IR08_Clamping_Relax,
IR07_ClampRelax,
/// <summary>
/// 入料模块复位: 等待批量轴复位结束
/// </summary>
IR09_WaitBatchMove,
IR08_WaitBatchMove,
#endregion
#region 入料模块取料 1100 开始
/// <summary>
/// 入料模块取放料:进出轴回到待机点
/// 入库料串取料:升降轴到达P1
/// </summary>
IW01_InoutToP1 = 1101,
II01_UpdownToP1= 1101,
/// <summary>
/// 入料模块取放料:升降轴到待机点P1
/// 入库料串取料A:取料旋转轴SVD13运动到P2(A料口取料点)
/// </summary>
IW02_UpdownToP1,
II02_MIddleToP2,
/// <summary>
/// 入料模块取放料:旋转轴到取料位置P2,
/// 入库料串取料A:取料升降轴SVD12 运动到P2(A料口取料点)
/// </summary>
IW03_MiddleToP2,
II03_UpdownToP2,
/// <summary>
/// 入料模块取放料:重试
/// </summary>
IW04_ReTry,
/// <summary>
/// 入料模块取放料:升降轴下降到P2
/// 入库料串取料B:取料旋转轴SVD13运动到P3(B料口取料点)
/// </summary>
IW05_UpdownToP2,
II05_MIddleToP3,
/// <summary>
/// 入料模块取放料:夹料气缸夹紧
/// 入库料串取料B:取料升降轴SVD12 运动到P3(B料口取料点)
/// </summary>
IW06_Clamping_Work,
II06_UpdownToP3,
/// <summary>
/// 入料模块取放料:升降轴到待机点P1
/// 入库料串取料:夹爪夹紧,判断到位
/// </summary>
IW07_UpdownToP1,
II08_ClampWork,
/// <summary>
/// 入料模块取放料:等待伺服检测信号消失
/// 入库料串取料:升降轴到待机点P1
/// </summary>
IW08_WaitAxisCheck,
II09_UpdownToP1,
/// <summary>
/// 入料模块取放料:进出轴返回P1
/// 入库料串取料:等待伺服检测信号消失,通知料串料盘已离开
/// </summary>
IW09_InoutToP1,
II10_WaitAxisCheck,
/// <summary>
/// 入料模块取放料:测宽度,记录条码高度宽度,开始下一盘预扫码
/// 入库料串取料:测宽度,记录条码高度宽度,开始下一盘预扫码
/// </summary>
IW10_SaveSize,
II11_SaveSize,
/// <summary>
/// 入料模块取放料:根据条码获取目标位置
/// 入库料串取料:获取库位号
/// </summary>
IW11_GetTargetPosition,
II12_GetPosId,
#region 入料->A侧上暂存区 1140
/// <summary>
/// 放料到XRay:开始放料盘到XRay门口,旋转轴到P3
/// 入料->A侧:等待A上暂存区无料
/// </summary>
IW21_MiddleToP3,
II41_WaitNoReel = 1140,
/// <summary>
/// 放料到XRay: 升降轴到P3
/// 入料->A侧:取料升降轴 到P4(A上暂存区放料高点)
/// </summary>
IW22_UpdownToP3,
II42_UpdownToP4,
/// <summary>
/// 放料到XRay:进出轴到P3
/// 入料->A侧:取料旋转轴 到P4(A上暂存区放料点)
/// </summary>
IW23_InoutToP3,
II43_MiddleToP4,
/// <summary>
/// 放料到XRay:等待XRay可放料
/// 入料->A侧:取料升降轴 到P5(A上暂存区放料低点)
/// </summary>
IW24_WaitCanPut,
II44_UpdownToP5,
/// <summary>
/// 入料->A侧:电卡爪放松
/// </summary>
II45_ClampRelax,
/// <summary>
/// 入料->A侧:取料升降轴 到P4(A上暂存区放料高点)
/// </summary>
II46_UpdownToP4,
/// <summary>
/// 入料->A侧:取料旋转轴 到P1(待机点)
/// </summary>
II47_MiddleToP1,
#endregion
#region 入料->B侧上暂存区 1160
/// <summary>
/// 放料到工位:开始放料盘到XRay门口,旋转轴到P4
/// 入料->B侧:等待B上暂存区无料
/// </summary>
IW31_MIddleToP4,
II61_WaitNoReel,
/// <summary>
/// 放料到工位:,升降轴到P4
/// 入料->B侧:取料升降轴 到P8(B上暂存区放料高点)
/// </summary>
IW32_UpdownToP4,
II62_UpdownToP8,
/// <summary>
/// 放料到工位:进出轴到P4
/// 入料->B侧:取料旋转轴 到P5 (B上暂存区放料点)
/// </summary>
IW33_InoutToP4,
II63_MiddleToP5,
/// <summary>
/// 入料->B侧:取料升降轴 到P9 (B上暂存区放料低点)
/// </summary>
II64_UpdownToP9,
/// <summary>
/// 入料->B侧:电卡爪放松
/// </summary>
II65_ClampRelax,
/// <summary>
/// 入料->B侧:取料升降轴 到P8 (B上暂存区放料高点)
/// </summary>
II66_UpdownToP8,
/// <summary>
/// 入料->B侧:取料旋转轴 到P1(待机点)
/// </summary>
II67_MiddleToP1,
#endregion
#region 入料->NG 1180开始
/// <summary>
/// 入料->NG:取料升降轴SVD12 运动到P8(NG料区放料高点)
/// </summary>
II81_UpdownToP8 = 1180,
/// <summary>
/// 放料:夹料气缸放松
/// 入料->NG:取料旋转轴SVD13 运动到P6(NG料区放料点)
/// </summary>
IW41_Clamping_Relax,
II82_MiddleToNg,
/// <summary>
/// 放料完成:进出轴返回P1
/// 入料->NG:取料升降轴SVD12 运动到P9(NG料区放料低点)
/// </summary>
IW42_InoutToP1,
II83_UpdownToP9,
/// <summary>
/// 放料完成:升降轴旋转轴返回P1
/// 入料->NG:电卡爪放松
/// </summary>
IW43_UpdownToP1,
II84_ClampRelax,
/// <summary>
/// 放料完成:旋转轴直接返回P2
/// 入料->NG:取料升降轴SVD12 运动到P8(NG料区放料高点)
/// </summary>
IW44_MiddleToP2,
II85_UpdownToP8,
/// <summary>
/// 放料完成:旋转轴直接返回P2
/// 入料->NG:取料旋转轴SVD13 运动到P1(待机点)
/// </summary>
IW50_InOutToP2,
IW51_Clamping_Relax,
IW52_InOutToP1,
IW53_ResetFinish,
II86_MiddleToP1,
#endregion
#endregion
#region 入料模块批量轴开始复位 1500 开始
/// <summary>
/// 入料模块复位:
/// 入料模块复位:阻挡气缸下降
/// </summary>
IBR01_LocationDown = 1501,
IBR01_StopDown = 1501,
/// <summary>
/// 入料模块复位:若前段末端信号不一致,转动链条3秒
/// </summary>
IBR02_LineRun,
/// <summary>
/// 入料模块复位:料串信号一致,阻挡气缸上升
/// </summary>
IBR03_StopUp,
/// <summary>
/// 入料模块复位:批量轴原点返回
/// </summary>
IBR03_BatchHome,
IBR04_BatchHome,
/// <summary>
/// 入料模块复位:等待100后再回待机点
/// </summary>
IBR04_WaitTime,
IBR05_WaitTime,
/// <summary>
/// 入料模块复位:批量轴到待机点P1
/// </summary>
IBR05_BatchToP1,
IBR06_BatchToP1,
#endregion
......@@ -297,27 +341,25 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
IB01_Wait = 1601,
/// <summary>
/// 料串入料:批量轴到待机点P1,顶升气缸下降
/// 料串入料:批量轴到待机点P1, 阻挡气缸下降
/// </summary>
IB02_BatchAxisToP1,
///// <summary>
///// 料串入料:顶升气缸下降
///// </summary>
//IB03_LocationDown,
/// <summary>
/// 料串入料:链条开始转动
/// </summary>
IB04_LineStart,
/// <summary>
/// 料串入料:等待料串稳定
/// 料串入料:阻挡气缸上升
/// </summary>
IB05_WaitTime,
IB05_StopUp,
/// <summary>
/// 料串入料:定位气缸上升
/// 料串入料:等待料串稳定
/// </summary>
IB06_LocationUp,
IB06_WaitTime,
/// <summary>
/// 料串入料:上料轴开始慢速上升到P3点,等待检测到料盘
/// 料串入料:上料轴开始慢速上升到P2点,等待检测到料盘
/// </summary>
IB07_AxisUpMove,
/// <summary>
......@@ -335,12 +377,12 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 料串入料:当前托盘已离开
/// </summary>
IB11_TrayLeave,
IB11_WaitReelLeave,
/// <summary>
/// 料串入料:料盘已拿走,批量轴到P3,侧高度
/// 料串入料:料盘已拿走,批量轴到P2,侧高度
/// </summary>
IB12_BatchAxisToP3,
IB12_BatchAxisToP2,
/// <summary>
/// 料串入料:记录高度,判断是否还有料盘
......@@ -353,9 +395,9 @@ namespace OnlineStore.DeviceLibrary
IB21_BatchToP1,
/// <summary>
/// 入料结束:顶升气缸下降
/// 入料结束:阻挡气缸下降
/// </summary>
IB22_LocationDown,
IB22_StopDown,
/// <summary>
/// 入料结束:通知agv来拉料串
/// </summary>
......
......@@ -22,7 +22,7 @@ namespace OnlineStore.DeviceLibrary
MoveP = null;
}
public InOutParam(InOutPosInfo inoutInfo, BoxMovePosition linePosition = null)
public InOutParam(InOutPosInfo inoutInfo, LineMoveP linePosition = null)
{
ACStoreP = null; ;
MoveP = linePosition;
......@@ -48,8 +48,14 @@ namespace OnlineStore.DeviceLibrary
}
public InOutPosInfo PosInfo { get; set; }
public BoxMovePosition MoveP { get; set; }
}
public LineMoveP MoveP { get; set; }
/// <summary>
/// 入料机构从哪个料串取料,或出库放到哪个料串
/// 0=未知,1=A侧料串,2=B侧料串
/// </summary>
public int ShelfType{ get; set; }=0;
}
/// <summary>
/// 出入库料盘信息
/// </summary>
......@@ -130,17 +136,8 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 出入库位置信息
/// </summary>
public class BoxMovePosition
{
public BoxMovePosition()
public class LineMoveP
{
}
public BoxMovePosition(BoxEquip_Config Config)
{
}
}
}
......@@ -22,7 +22,10 @@ namespace OnlineStore.DeviceLibrary
private string RfidIP = "";
public int BatchAxisP1 = 0;
public int BatchAxisP2 = 0;
private InputEquip equip
public List<string> DIList = new List<string>();
public List<string> DOList = new List<string>();
private InputEquip Robot
{
get { return StoreManager.XLRStore.inputEquip; }
}
......@@ -31,12 +34,12 @@ namespace OnlineStore.DeviceLibrary
this.EquipType = inType;
this.BatchAxis = axis;
string ioAdd = "L_";
string ioAdd = "_A";
if (EquipType.Equals(1))
{
this.BatchAxisP1 = config.BatchAxisP1_A;
this.BatchAxisP2 = config.BatchAxisP2_B;
ioAdd = "L_";
this.BatchAxisP2 = config.BatchAxisP2_A;
ioAdd = "_A";
AgvName = config.AgvName_A;
this.CameraName = config.CameraNameList_A;
this.RfidIP = config.PRO_RFIP_A;
......@@ -45,98 +48,99 @@ namespace OnlineStore.DeviceLibrary
{
this.BatchAxisP1 = config.BatchAxisP1_B;
this.BatchAxisP2 = config.BatchAxisP2_B;
ioAdd = "R_";
ioAdd = "_B";
AgvName = config.AgvName_B;
this.CameraName = config.CameraNameList_B;
this.RfidIP = config.PRO_RFIP_B;
}
Name = " " + ioAdd + "入料 ";
Name = "入料 " + ioAdd;
MoveInfo = new DeviceMoveInfo(Name);
IO_MAxis_Check = IO_MAxis_Check + ioAdd;
IO_LineIn_Check = IO_LineIn_Check + ioAdd;
IO_LineEnd_Check = IO_LineEnd_Check + ioAdd;
IO_Shelf_StopUp = IO_Shelf_StopUp + ioAdd;
IO_Shelf_StopDown = IO_Shelf_StopDown + ioAdd;
IO_LineStart = IO_LineStart + ioAdd;
IO_LineBack = IO_LineBack + ioAdd;
DIList.Add(IO_MAxis_Check);
DIList.Add(IO_LineIn_Check);
DIList.Add(IO_LineEnd_Check);
DIList.Add(IO_Shelf_StopUp);
DIList.Add(IO_Shelf_StopDown);
DOList.Add(IO_Shelf_StopUp);
DOList.Add(IO_Shelf_StopDown);
DOList.Add(IO_LineStart);
DOList.Add(IO_LineBack);
}
internal void TimerProcess()
{
if (MoveInfo.MoveType.Equals(MoveType.None))
{
if (Robot.MoveInfo.MoveType.Equals(MoveType.Reset) || Robot.MoveInfo.MoveType.Equals(MoveType.RHome))
{
}
else
{
if (Robot.AutoInput && Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
{
StartInstore(new InOutParam ());
}
}
}
else if (MoveInfo.MoveType.Equals(MoveType.Reset))
{
ResetProcess();
}else if (MoveInfo.MoveType.Equals(MoveType.InStore))
{
//IO_In_Start = ioAdd + IO_In_Start;
//IO_In_Status = ioAdd + IO_In_Status;
//IO_LineRun_Start = ioAdd + IO_LineRun_Start;
//IO_LineRun_Back = ioAdd + IO_LineRun_Back;
//IO_DoorClose = ioAdd + IO_DoorClose;
//IO_LineIn_Check = ioAdd + IO_LineIn_Check;
//IO_LineEnd_Check = ioAdd + IO_LineEnd_Check;
//IO_LocationUp_1 = ioAdd + IO_LocationUp_1;
//IO_LocationDown_1 = ioAdd + IO_LocationDown_1;
//IO_LocationUp_2 = ioAdd + IO_LocationUp_2;
//IO_LocationDown_2 = ioAdd + IO_LocationDown_2;
}else if (MoveInfo.MoveType.Equals(MoveType.OutStore))
{
//IO_LocationUp = ioAdd + IO_LocationUp;
//IO_LocationDown = ioAdd + IO_LocationDown;
//IO_AxisTrayCheck = ioAdd + IO_AxisTrayCheck;
}
//判断是否无料串
if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.LOW)
&& Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.LOW)
&& Robot.CylinderIsOk(IO_Shelf_StopUp, IO_Shelf_StopDown) )
{
if (StoreManager.checkWatch(shelfWatch, 10000, true))
{
var agvcallresult = AgvClient.NeedEnter(AgvName, "", Asa.ClientLevel.High);
WorkLog("无料串,:通知agv来送料串AgvName:" + AgvName + ",agvcallresult:" + agvcallresult.ToString());
}
internal void TimerProcess()
}
else if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH)
&& AgvClient.GetAction(AgvName) != Asa.ClientAction.NeedLeave && AgvClient.GetAction(AgvName) != Asa.ClientAction.MayLeave && AgvClient.GetAction(AgvName) != Asa.ClientAction.FinishLeave)
{
//if (MoveInfo.MoveType.Equals(MoveType.None))
//{
// if (equip.MoveInfo.MoveType.Equals(MoveType.Reset) || equip.MoveInfo.MoveType.Equals(MoveType.RHome))
// {
// }
// else
// {
// if (equip.AutoInput && equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
// {
// //WorkLog("启动位置1");
// StartWorking(new WorkParam());
// }
// }
//}
//else if (MoveInfo.MoveType.Equals(MoveType.Reset))
//{
// ResetProcess();
//}
//else if (MoveInfo.MoveType.Equals(MoveType.Working))
//{
// WorkingProcess();
//}
////判断是否无料串
//if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.LOW)
// && equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.LOW)
// && equip.CylinderIsOk(IO_LocationUp_1, IO_LocationDown_1)
// && equip.CylinderIsOk(IO_LocationUp_2, IO_LocationDown_2))
//{
// if (StoreManager.checkWatch(shelfWatch, 10000, true))
// {
// var agvcallresult=AgvClient.NeedEnter(AgvName, "", Asa.ClientLevel.High);
// WorkLog("无料串,:通知agv来送料串AgvName:" + AgvName + ",agvcallresult:" + agvcallresult.ToString());
// }
//}
//else if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH)
// && AgvClient.GetAction(AgvName)!=Asa.ClientAction.NeedLeave && AgvClient.GetAction(AgvName)!=Asa.ClientAction.MayLeave && AgvClient.GetAction(AgvName) != Asa.ClientAction.FinishLeave)
//{
// shelfWatch.Stop();
// AgvClient.SetToNone(AgvName);
//}
shelfWatch.Stop();
AgvClient.SetToNone(AgvName);
}
}
private Stopwatch shelfWatch = new Stopwatch();
public bool Reset(bool needStop = false)
{
//if (Robot.CanStartRun())
//{
// if (needStop)
// {
// StopMove();
// }
// WarnMsg = "";
// alarmType = AlarmType.None;
// MoveInfo.NewMove(MoveType.Reset, StepEnum.IBR01_LocationDown);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
// WorkLog("开始复位,定位气缸下降");
// LocationDown(MoveInfo);
//}
//else
//{
// WarnMsg = Name + "复位失败";
//}
if (Robot.CanStartRun())
{
if (needStop)
{
StopMove();
}
WarnMsg = "";
alarmType = AlarmType.None;
MoveInfo.NewMove(MoveType.Reset);
MoveInfo.NextMoveStep(StepEnum.IBR01_StopDown);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
WorkLog("开始复位,定位气缸下降");
StopDown(MoveInfo);
}
else
{
WarnMsg = Name + "复位失败";
}
return false;
}
......@@ -152,12 +156,12 @@ namespace OnlineStore.DeviceLibrary
return;
}
if (MoveInfo.IsStep(StepEnum.IBR01_LocationDown))
if (MoveInfo.IsStep(StepEnum.IBR01_StopDown))
{
if (equip.IOValue(IO_LineIn_Check).Equals(equip.IOValue(IO_LineEnd_Check)))
if (Robot.IOValue(IO_LineIn_Check).Equals(Robot.IOValue(IO_LineEnd_Check)))
{
LineStop();
MoveInfo.NextMoveStep(StepEnum.IBR03_BatchHome);
MoveInfo.NextMoveStep(StepEnum.IBR04_BatchHome);
WorkLog("复位:批量轴开始回原点");
BatchAxis.HomeMove(MoveInfo);
}
......@@ -166,29 +170,28 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NextMoveStep(StepEnum.IBR02_LineRun);
WorkLog("复位:链条正转3秒");
LineRun(MoveInfo);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
}
}
else if (MoveInfo.IsStep(StepEnum.IBR02_LineRun))
{
LineStop();
MoveInfo.NextMoveStep(StepEnum.IBR03_BatchHome);
MoveInfo.NextMoveStep(StepEnum.IBR04_BatchHome);
WorkLog("复位:批量轴开始回原点");
BatchAxis.HomeMove(MoveInfo);
}
else if (MoveInfo.IsStep(StepEnum.IBR03_BatchHome))
else if (MoveInfo.IsStep(StepEnum.IBR04_BatchHome))
{
MoveInfo.NextMoveStep(StepEnum.IBR04_WaitTime);
MoveInfo.NextMoveStep(StepEnum.IBR05_WaitTime);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
// WorkLog("复位:顶升气缸下降");
// LocationDown(MoveInfo);
}
else if (MoveInfo.IsStep(StepEnum.IBR04_WaitTime))
else if (MoveInfo.IsStep(StepEnum.IBR05_WaitTime))
{
MoveInfo.NextMoveStep(StepEnum.IBR05_BatchToP1);
MoveInfo.NextMoveStep(StepEnum.IBR06_BatchToP1);
WorkLog("复位:批量轴走到待机点");
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, equip.Config.BatchAxis_P1Speed);
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, Robot.Config.BatchAxis_P1Speed);
}
else if (MoveInfo.IsStep(StepEnum.IBR05_BatchToP1))
else if (MoveInfo.IsStep(StepEnum.IBR06_BatchToP1))
{
WorkLog("复位完成");
MoveInfo.EndMove();
......@@ -224,9 +227,8 @@ namespace OnlineStore.DeviceLibrary
#region 左右入料口共有IO
//伺服料盘检测
private string IO_AxisTrayCheck = "MAxis_Check";
private string IO_MAxis_Check = "MAxis_Check";
//料串前端检测
private string IO_LineIn_Check = "LineIn_Check";
//料串到位检测
......@@ -235,25 +237,19 @@ namespace OnlineStore.DeviceLibrary
private string IO_Shelf_StopUp = "Shelf_StopUp";
//料串阻挡下降
private string IO_Shelf_StopDown = "Shelf_StopDown";
//料盘检测
private string IO_ReelCheck = "ReelCheck";
//线体正转
private string IO_LineStart = "LineStart";
//线体反转
private string IO_LineBack = "LineBack";
#endregion
#region 气缸操作
public void LineRun(DeviceMoveInfo moveInfo = null)
{
equip.IOMove(IO_LineBack, IO_VALUE.LOW);
equip.IOMove(IO_LineStart, IO_VALUE.HIGH);
Robot.IOMove(IO_LineBack, IO_VALUE.LOW);
Robot.IOMove(IO_LineStart, IO_VALUE.HIGH);
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineBack, IO_VALUE.LOW));
......@@ -262,8 +258,8 @@ namespace OnlineStore.DeviceLibrary
}
public void LineBack(DeviceMoveInfo moveInfo = null)
{
equip.IOMove(IO_LineBack, IO_VALUE.HIGH);
equip.IOMove(IO_LineStart, IO_VALUE.HIGH);
Robot.IOMove(IO_LineBack, IO_VALUE.HIGH);
Robot.IOMove(IO_LineStart, IO_VALUE.HIGH);
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineBack, IO_VALUE.HIGH));
......@@ -272,14 +268,34 @@ namespace OnlineStore.DeviceLibrary
}
public void LineStop(DeviceMoveInfo moveInfo = null)
{
equip.IOMove(IO_LineBack, IO_VALUE.LOW);
equip.IOMove(IO_LineStart, IO_VALUE.LOW);
Robot.IOMove(IO_LineBack, IO_VALUE.LOW);
Robot.IOMove(IO_LineStart, IO_VALUE.LOW);
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineBack, IO_VALUE.LOW));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineStart, IO_VALUE.LOW));
}
}
public void StopDown(DeviceMoveInfo moveInfo = null)
{
Robot.IOMove(IO_Shelf_StopUp, IO_VALUE.LOW);
Robot.IOMove(IO_Shelf_StopDown, IO_VALUE.HIGH);
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Shelf_StopUp, IO_VALUE.LOW));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Shelf_StopDown, IO_VALUE.HIGH));
}
}
public void StopUp(DeviceMoveInfo moveInfo = null)
{
Robot.IOMove(IO_Shelf_StopDown, IO_VALUE.HIGH);
Robot.IOMove(IO_Shelf_StopUp, IO_VALUE.HIGH);
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Shelf_StopDown, IO_VALUE.HIGH));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Shelf_StopUp, IO_VALUE.HIGH));
}
}
#endregion
private DateTime preCheckAxisTime = DateTime.Now;
......@@ -334,8 +350,8 @@ namespace OnlineStore.DeviceLibrary
}
else if (wait.WaitType.Equals(WaitEnum.W002_IOValue))
{
NotOkMsg = " [" + IOManager.GetDI(wait.IoType, equip.DeviceID).DisplayStr + "=" + wait.IoValue + "]";
wait.IsEnd = equip.IOValue(wait.IoType).Equals(wait.IoValue);
NotOkMsg = " [" + IOManager.GetDI(wait.IoType, Robot.DeviceID).DisplayStr + "=" + wait.IoValue + "]";
wait.IsEnd = Robot.IOValue(wait.IoType).Equals(wait.IoValue);
if (!wait.IsEnd && (!moveInfo.IsStep(StepEnum.IB23_ShelfOut)))
{
......@@ -343,7 +359,7 @@ namespace OnlineStore.DeviceLibrary
//一分钟还未检测到
if (span.TotalSeconds > StoreManager.Config.IOSingle_TimerOut && alarmType <= AlarmType.IoSingleTimeOut)
{
ConfigIO io = equip.Config.getWaitIO(wait.IoType);
ConfigIO io = Robot.Config.getWaitIO(wait.IoType);
WarnMsg = moveInfo.Name + "[" + moveInfo.MoveType + "][" + moveInfo.MoveStep + "] 等待" + NotOkMsg + " 超时 " + Math.Round(span.TotalSeconds, 1) + "秒";
LogUtil.error(WarnMsg, moveInfo.ErrorLogType, moveInfo.logSeconds());
......@@ -359,12 +375,12 @@ namespace OnlineStore.DeviceLibrary
bool isLog = false;
foreach (WaitResultInfo ww in list)
{
if (ww != null && ww.WaitType.Equals(2) && equip.Config.DOList.ContainsKey(ww.IoType))
if (ww != null && ww.WaitType.Equals(2) && Robot.Config.DOList.ContainsKey(ww.IoType))
{
if (IOManager.DOValue(ww.IoType, equip.Config.Id).Equals(ww.IoValue).Equals(false))
if (IOManager.DOValue(ww.IoType, Robot.Config.Id).Equals(ww.IoValue).Equals(false))
{
isLog = true;
equip.IOMove(ww.IoType, ww.IoValue);
Robot.IOMove(ww.IoType, ww.IoValue);
msg += ww.ToStr() + ",";
}
}
......@@ -383,7 +399,7 @@ namespace OnlineStore.DeviceLibrary
else if (wait.WaitType.Equals(WaitEnum.W101_BatchAxisMove))
{
//等待信号亮或者走到绝对位置才停止
if (equip.IOValue(BatchAxis.TargetIoType).Equals(BatchAxis.TargetIoValue))
if (Robot.IOValue(BatchAxis.TargetIoType).Equals(BatchAxis.TargetIoValue))
{
WorkLog(Name + "CheckWaitResult 检测到" + BatchAxis.TargetIoType + "=" + BatchAxis.TargetIoValue + ",停止运行");
BatchAxis.AxisStopCheckMove();
......@@ -459,11 +475,72 @@ namespace OnlineStore.DeviceLibrary
}
#region 提升轴匀速上升处理
public bool LastMoveIsTest = true;
public void BatchAxisToP2(bool isFirstMove = true, bool isWait = true, bool IsTest = false)
{
int targetP2 = BatchAxisP2;
int targetSpeed = Robot.Config.BatchAxis_P2Speed;
if (!isFirstMove)
{
int currPosition = BatchAxis.GetAclPosition();
if (currPosition != -1)
{
targetP2 = currPosition + Robot.Config.Height_ChangeValue * 80;
if (targetP2 > BatchAxisP2)
{
targetP2 = BatchAxisP2;
}
LogUtil.info(Name + " BatchAxisToP2 目标P2: " + targetP2 + "(" + currPosition + ")");
}
//targetSpeed = Config.BatchAxis_P3Speed / 2;
}
// 需要增加定时器,获取验证信号并停止伺服
StartMovePosition = BatchAxis.GetAclPosition();
if (isWait)
{
MoveInfo.TimeOutSeconds = 200;
MoveInfo.CanWhileCount = 0;
MoveInfo.WaitList.Add(WaitResultInfo.WaitBatchAxis(BatchAxis.Config, targetP2, targetSpeed));
}
BatchAxis.Config.TargetPosition = targetP2;
BatchAxis.AbsMove(null, targetP2, targetSpeed);
//开始检测信号
BatchAxis.BatchAxisStartCheck(IO_MAxis_Check, IO_VALUE.HIGH);
LastMoveIsTest = IsTest;
}
#endregion
public string GetMoveStr()
{
if (MoveInfo.MoveType.Equals(MoveType.OutStore))
{
string code = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosInfo.ToStr() : "";
return "料串:" + CurrShelf .ToStr()+ ", 出料:" + " " + MoveInfo.MoveStep + " \r\n" + code + "\n";
}
else if (MoveInfo.MoveType.Equals(MoveType.InStore))
{
string code = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosInfo.ToStr() : "";
return MoveInfo.MoveType + " " + MoveInfo.MoveStep + " " + code + "\n";
return "料串:" + CurrShelf.ToStr() + ", 入料:" + " " + MoveInfo.MoveStep + " " + code + "\n";
}
else
{
if (!String.IsNullOrEmpty(CurrShelf.ShelfRfid))
{
return "空闲中";
}
else
{
return "料串:" + CurrShelf.ShelfRfid;
}
}
}
protected void WorkLog(string msg)
{
LogUtil.info(Name + " [" + MoveInfo.MoveStep + "]" + msg);
}
}
}
......@@ -13,86 +13,95 @@ namespace OnlineStore.DeviceLibrary
partial class BatchMoveBean
{
#region 料串入料处理
internal string CurrShelfId = "";
public ShelfInfo CurrShelf = new ShelfInfo();
private List<string> LastCodeList = new List<string>();
private List<string> NextCodeList = new List<string>();
public bool StartWorking(InOutParam param)
public bool StartInstore(InOutParam param)
{
//if (ProcessShelfOut || ProcessShelfEnter)
//{
// return false;
//}
//if (!Robot.CanStartWork())
//{
// return false;
//}
//if (AgvClient.GetAction(AgvName) == ClientAction.NeedLeave || AgvClient.GetAction(AgvName) == ClientAction.MayLeave)
//{
// //WorkLog("料串入料 :等待AGV来取空料串1");
// return false; ;
//}
//if (Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH) && Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
//{
// //runStatus = RobotRunStatus.Busy;
// MoveInfo.NewMove(MoveType.Working);
// MoveInfo.MoveParam = new WorkParam();
// //判断是哪个工位有料串
// IB05_WaitTime();
//}
//else if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
//{
// MoveInfo.NewMove(MoveType.Working, StepEnum.IB04_LineStart);
// IB04_LineStart();
//}
//else
//{
// LineStop();
// MoveInfo.EndMove();
//}
return true;
if (ProcessShelfOut || ProcessShelfEnter)
{
return false;
}
if (!Robot.CanStartWork())
{
return false;
}
if (AgvClient.GetAction(AgvName) == ClientAction.NeedLeave || AgvClient.GetAction(AgvName) == ClientAction.MayLeave)
{
//WorkLog("料串入料 :等待AGV来取空料串1");
return false; ;
}
private bool UpdateShelfId()
if (Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH) && Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
{
//try
//{
// //判断料串的编码是否正确
// RFIDData rfidD = RFIDManager.ReadRFID(RfidIP);
// CurrShelfId = rfidD.NumStr;
MoveInfo.NewMove(MoveType.InStore);
MoveInfo.MoveParam = new InOutParam();
//判断是哪个工位有料串
// //发送料串信息给调度系统
// // AgvClient.SendRFID(Config.AgvInName, CurrShelfId);
// LogUtil.info(Name + "读取到料串编号:" + CurrShelfId);
//}
//catch (Exception ex)
//{
// LogUtil.error(Name + "UpdateShelfId出错:", ex);
//}
IB05_StopUp();
}
else if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
{
MoveInfo.NewMove(MoveType.InStore);
MoveInfo.NextMoveStep(StepEnum.IB04_LineStart);
IB02_BatchAxisToP1();
}
else
{
LineStop();
MoveInfo.EndMove();
}
return true;
}
private bool UpdateShelfId(int state = 0)
{
try
{
//判断料串的编码是否正确
RFIDData rfidD = RFIDManager.ReadRFID(RfidIP);
CurrShelf = new ShelfInfo(rfidD.StrData, state);
LogUtil.info(Name + "当前料串信息:" + CurrShelf.ToStr());
private void IB04_LineStart()
//TODO 需要保存到配置文件,重启后读取
}
catch (Exception ex)
{
MoveInfo.NextMoveStep(StepEnum.IB04_LineStart);
WorkLog(" 入口检测到料串,流水线转动 3000,等待料串完全进入轨道");
LineRun(MoveInfo);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineIn_Check, IO_VALUE.HIGH));
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineEnd_Check, IO_VALUE.HIGH));
LogUtil.error(Name + "UpdateShelfId出错:", ex);
}
return true;
}
private void IB05_WaitTime()
private void IB05_StopUp()
{
// 定位工位有料串,等待1秒后再次检测
MoveInfo.NextMoveStep(StepEnum.IB05_WaitTime);
WorkLog("定位工位检测到料串: 链条转动, 3秒再次检测");
MoveInfo.NextMoveStep(StepEnum.IB05_StopUp);
WorkLog("定位工位检测到料串: 链条转动,阻挡气缸上升, 3秒再次检测");
LineRun();
StopUp(MoveInfo);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
}
private void IB02_BatchAxisToP1()
{
WorkLog("料串入料 :提升伺服移动到P1,阻挡气缸下降");
MoveInfo.NextMoveStep(StepEnum.IB02_BatchAxisToP1);
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, Robot.Config.BatchAxis_P1Speed);
StopDown();
}
private void IB07_AxisUpMove()
{
MoveInfo.ShelfNoTray = false;
AgvClient.SetToNone(AgvName);
MoveInfo.NextMoveStep(StepEnum.IB07_AxisUpMove);
WorkLog("料串入料 :上料轴开始慢速上升到P2点,等待检测到料盘");
LastCodeList = new List<string>();
NextCodeList = new List<string>();
MoveInfo.ShelfNoTray = false;
BatchAxisToP2(true);
}
protected void WorkingProcess()
{
if (MoveInfo.IsInWait)
......@@ -106,9 +115,7 @@ namespace OnlineStore.DeviceLibrary
#region 入料:料串进入并开始检测托盘
if (MoveInfo.IsStep(StepEnum.IB01_Wait))
{
WorkLog("料串入料 :提升伺服移动到P1,顶升气缸下降");
MoveInfo.NextMoveStep(StepEnum.IB02_BatchAxisToP1);
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, equip.Config.BatchAxis_P1Speed);
IB02_BatchAxisToP1();
}
if (MoveInfo.IsStep(StepEnum.IB02_BatchAxisToP1))
{
......@@ -120,17 +127,20 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.IB04_LineStart))
{
if (AgvClient.GetAction(AgvName) == ClientAction.NeedLeave || AgvClient.GetAction(AgvName) == ClientAction.MayLeave) {
WorkLog("料串入料 :等待AGV来取空料串0");
//return;
}
if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
//if (AgvClient.GetAction(AgvName) == ClientAction.NeedLeave || AgvClient.GetAction(AgvName) == ClientAction.MayLeave) {
// WorkLog("料串入料 :等待AGV来取空料串0");
// //return;
//}
if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
{
IB05_WaitTime();
IB05_StopUp();
}
else if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
else if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH))
{
IB04_LineStart();
MoveInfo.NextMoveStep(StepEnum.IB04_LineStart);
WorkLog(" 入口检测到料串,流水线转动 6000,等待料串完全进入轨道");
LineRun(MoveInfo);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
}
else
{
......@@ -139,105 +149,69 @@ namespace OnlineStore.DeviceLibrary
LogUtil.info(" 未检测到料串,入料结束");
}
}
else if (MoveInfo.IsStep(StepEnum.IB05_WaitTime))
else if (MoveInfo.IsStep(StepEnum.IB06_WaitTime))
{
LineStop();
if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) && Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
{
// UpdateShelfId();
//if (CurrShelfId.EndsWith("00"))
//{
// SendShelfOut(" 料串号【" + CurrShelfId + "】无效 ");
//}
//else
// {
MoveInfo.ShelfNoTray = false;
//定位工位有料串,直接开始入料
MoveInfo.NextMoveStep(StepEnum.IB06_LocationUp);
WorkLog("检测到料串:链条停止转动,定位气缸上升");
AgvClient.SetToNone(AgvName);
// }
UpdateShelfId(1);
if (CurrShelf.ShelfRfid.EndsWith("00"))
{
SendShelfOut(" 料串号【" + CurrShelf.ShelfRfid + "】无效 ");
}
else
{
IB07_AxisUpMove();
}
}
else
{
LineStop();
MoveInfo.EndMove();
WorkLog(" 未检测到料串,链条停止转动,入料结束");
}
}
else if (MoveInfo.IsStep(StepEnum.IB06_LocationUp))
{
MoveInfo.NextMoveStep(StepEnum.IB07_AxisUpMove);
WorkLog("料串入料 :上料轴开始慢速上升到P3点,等待检测到料盘");
LastCodeList = new List<string>();
NextCodeList = new List<string>();
MoveInfo.ShelfNoTray = false;
BatchAxisToP3(true);
}
#endregion
#region 检测到托盘,扫码,取料并放入托盘
//else if (MoveInfo.IsStep(StepEnum.IB07_AxisUpMove))
//{
// CheckHasTray();//==>StepEnum.IB09_ScanCode
//}
else if (MoveInfo.IsStep(StepEnum.IB07_AxisUpMove))
{
CheckHasTray();
}
//else if (MoveInfo.IsStep(StepEnum.IB09_ScanCode))
//{
// WorkLog("IB09_ScanCode");
// MoveInfo.MoveParam = new WorkParam();
// MoveInfo.MoveParam.WareCode = CodeManager.GetValidCode(LastCodeList);
// if (String.IsNullOrEmpty(MoveInfo.MoveParam.WareCode))
// {
// MoveInfo.MoveParam.IsNgReel = true;
// MoveInfo.MoveParam.NgMsg = "无有效条码NG";
// MoveInfo.MoveParam.TargetPosType = 1;
// WorkLog(" 无有效条码,从XRay放到NG箱:" + MoveInfo.MoveParam.ToStr());
// }
// else if (SServerManager.CanConnect())
// {
// int needPosition = 0;
// string msg = SServerManager.Get_VMICheckRLC(Name, MoveInfo.MoveParam.WareCode, out needPosition);
// if (needPosition >= 1 && needPosition <= 3)
// {
// MoveInfo.MoveParam.TargetPosType = needPosition;
// WorkLog(" 【" + MoveInfo.MoveParam.WareCode + "】通过接口获取目标位置:" + needPosition);
// }
// else
// {
// WorkLog(" 【" + MoveInfo.MoveParam.WareCode + "】获取是否测值失败:" + msg);
// MoveInfo.MoveParam.TargetPosType = 1;
// MoveInfo.MoveParam.IsNgReel = true;
// MoveInfo.MoveParam.NgMsg = msg;
// //RobotManager.robot.sQLite.Insert(MoveInfo.MoveParam.WareCode, MoveInfo.MoveParam.PlateW, MoveInfo.MoveParam.PlateH, 0, MoveInfo.MoveParam.NgMsg);
// }
// }
// else {
// MoveInfo.MoveParam.TargetPosType = 1;
// }
// MoveInfo.NextMoveStep(StepEnum.IB10_ScanOK);
// var span = DateTime.Now - MoveInfo.LastSetpTime;
// //LogUtil.ticklog("", MoveInfo.MoveParam.WareCode, span.TotalSeconds, "拍照扫码结束");
// WorkLog("料串入料 :扫码结束【" + MoveInfo.MoveParam.WareCode + "】,等待取料机构来取料," + MoveInfo.MoveParam.ToStr());
//}
//else if (MoveInfo.IsStep(StepEnum.IB11_TrayLeave))
//{
// MoveInfo.NextMoveStep(StepEnum.IB12_BatchAxisToP3);
// WorkLog("料串入料 :料盘已拿走,批量轴到P3,测盘高 ");
// //可删除WaitTime
// MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
// BatchAxisToP3();
//}
//else if (MoveInfo.IsStep(StepEnum.IB12_BatchAxisToP3))
//{
// MoveInfo.NextMoveStep(StepEnum.IB13_SaveHight);
// //可删除WaitTime
// MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
// LastHeight = GetHeight();
// CheckHasTray();
//}
else if (MoveInfo.IsStep(StepEnum.IB09_ScanCode))
{
WorkLog("IB09_ScanCode");
MoveInfo.MoveParam = new InOutParam(new InOutPosInfo("",""));
string code= CodeManager.ProcessCode(LastCodeList);
MoveInfo.MoveParam.PosInfo.barcode = code;
if (String.IsNullOrEmpty(code))
{
MoveInfo.MoveParam.PosInfo.IsNG = true;
MoveInfo.MoveParam.PosInfo.NgMsg = "无有效条码NG";
WorkLog(" 无有效条码NG,需要放入NG箱:" + MoveInfo.MoveParam.PosInfo.ToStr());
}
MoveInfo.NextMoveStep(StepEnum.IB10_ScanOK);
var span = DateTime.Now - MoveInfo.LastSetpTime;
WorkLog("料串入料 :扫码结束【" + code + "】,等待取料机构来取料," + MoveInfo.MoveParam.PosInfo.ToStr());
}
else if (MoveInfo.IsStep(StepEnum.IB11_WaitReelLeave))
{
MoveInfo.NextMoveStep(StepEnum.IB12_BatchAxisToP2);
WorkLog("料串入料 :料盘已拿走,批量轴到P2,测盘高 ");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
BatchAxisToP2 ();
}
else if (MoveInfo.IsStep(StepEnum.IB12_BatchAxisToP2))
{
MoveInfo.NextMoveStep(StepEnum.IB13_SaveHight);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
LastHeight = GetHeight();
CheckHasTray();
}
#endregion
......@@ -245,17 +219,20 @@ namespace OnlineStore.DeviceLibrary
else if (MoveInfo.IsStep(StepEnum.IB21_BatchToP1))
{
MoveInfo.NextMoveStep(StepEnum.IB22_LocationDown);
WorkLog("上料完成 :定位气缸下降");
//TODO 判断是否有空料串,没有的话直接准备出库
MoveInfo.NextMoveStep(StepEnum.IB22_StopDown);
WorkLog("上料完成 :阻挡气缸下降");
StopDown(MoveInfo);
}
else if (MoveInfo.IsStep(StepEnum.IB22_LocationDown))
else if (MoveInfo.IsStep(StepEnum.IB22_StopDown))
{
MoveInfo.NextMoveStep(StepEnum.IB23_ShelfOut);
MoveInfo.TimeOutSeconds = 40;
MoveInfo.OneWaitCanEndStep = true;
bool agvcallresult = AgvClient.NeedLeave(AgvName, CurrShelfId, ClientLevel.High);
WorkLog("上料完成 :通知agv来取料串,等待料串离开AgvName:" + AgvName + ",CurrShelfId:" + CurrShelfId+ ",agvcallresult:"+ agvcallresult.ToString());
bool agvcallresult = AgvClient.NeedLeave(AgvName, CurrShelf.ShelfRfid, ClientLevel.High);
WorkLog("上料完成 :通知agv来取料串,等待料串离开AgvName:" + AgvName + ",CurrShelfId:" + CurrShelf.ShelfRfid + ",agvcallresult:"+ agvcallresult.ToString());
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(60000));
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_LineIn_Check, IO_VALUE.LOW));
}
......@@ -272,9 +249,9 @@ namespace OnlineStore.DeviceLibrary
public void GetTrayOK()
{
if (MoveInfo.MoveType.Equals(MoveType.Working))
if (MoveInfo.MoveType.Equals(MoveType.InStore))
{
MoveInfo.NextMoveStep(StepEnum.IB11_TrayLeave);
MoveInfo.NextMoveStep(StepEnum.IB11_WaitReelLeave);
WorkLog("当前料盘已离开,清理高度,准备开始测高");
LastHeight = 0;
}
......@@ -283,35 +260,7 @@ namespace OnlineStore.DeviceLibrary
LogUtil.error(Name + "当前状态:" + MoveInfo.MoveType + ",GetTrayOK暂不处理");
}
}
//internal string LCodeStr = "";
//internal string GetCurrCode()
//{
// return LCodeStr = CodeManager.GetValidCode(LastCodeList);
//}
private void FI_21_BatchAxisDown()
{
// MoveInfo.NextMoveStep(LineMoveStep.FI_21_BatchAxisDown);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(200));
int maxtPosition = BatchAxisP2 - equip.Config.Height_ChangeValue * 30; //在上料位置基础上下降30mm
int currPositon = BatchAxis.GetAclPosition();
int targetPosition = currPositon - equip.Config.Height_ChangeValue * 30;
if (targetPosition <= BatchAxisP1)
{
targetPosition = BatchAxisP1;
}
else if (targetPosition > maxtPosition)
{
targetPosition = maxtPosition;
}
WorkLog("料盘移栽 :提升轴下降到料盘不溢出(" + (currPositon - equip.Config.Height_ChangeValue * 30) + "):" + targetPosition);
BatchAxis.AbsMove(MoveInfo, targetPosition, equip.Config.BatchAxis_P1Speed);
}
public void YuScanCode()
{
}
private void IB09_ScanCode()
{
......@@ -328,8 +277,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.MoveParam.PosInfo.barcode = CodeManager.ProcessCode(LastCodeList);
MoveInfo.NextMoveStep(StepEnum.IB10_ScanOK);
WorkLog("料盘移栽 :使用预扫码【" + MoveInfo.MoveParam.PosInfo.barcode + "】,等待取料机构来取料");
//WorkLog("料盘移栽 :上料横移取料端");
// CylinderMove(MoveInfo, IO_Type.SL_MoveCylinder_Give, IO_Type.SL_MoveCylinder_Take);
}
else if (isScan)
{
......@@ -339,22 +287,22 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
try
{
//Task<List<string>> scanTask = Task.Factory.StartNew(delegate
//{
// Robot.IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
Task<List<string>> scanTask = Task.Factory.StartNew(delegate
{
Robot.IOMove(IO_Type.CameraLed, IO_VALUE.HIGH);
// LastCodeList = CodeManager.CameraScan(Name, CameraName);
// if (LastCodeList.Count <= 0)
// {
// LastCodeList = CodeManager.CameraScan(Name, CameraName);
// }
// Robot.IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
// return LastCodeList;
//});
LastCodeList = CodeManager.CameraScan( CameraName, Name );
if (LastCodeList.Count <= 0)
{
LastCodeList = CodeManager.CameraScan(CameraName, Name);
}
Robot.IOMove(IO_Type.CameraLed, IO_VALUE.LOW);
return LastCodeList;
});
}
catch (Exception ex)
{
LogUtil.error("FI_13_ScanCode扫码出错:", ex);
LogUtil.error(" IB09_ScanCode 扫码出错:", ex);
}
}
else
......@@ -366,7 +314,7 @@ namespace OnlineStore.DeviceLibrary
private void CheckHasTray()
{
WarnMsg = "";
if (equip.IOValue(IO_AxisTrayCheck).Equals(IO_VALUE.HIGH) && MoveInfo.ShelfNoTray.Equals(false))
if (Robot.IOValue(IO_MAxis_Check).Equals(IO_VALUE.HIGH) && MoveInfo.ShelfNoTray.Equals(false))
{
IB09_ScanCode();
}
......@@ -380,9 +328,9 @@ namespace OnlineStore.DeviceLibrary
if (chaz > BatchAxis.Config.CanErrorCountMax)
{
MoveInfo.NextMoveStep(StepEnum.IB07_AxisUpMove);
WorkLog("料串入料 :CheckHasTray:上料轴开始慢速上升到P3点,等待检测到料盘。currP"+ currP.ToString());
WorkLog("料串入料 :CheckHasTray:上料轴开始慢速上升到P2点,等待检测到料盘。currP"+ currP.ToString());
MoveInfo.ShelfNoTray = false;
BatchAxisToP3();
BatchAxisToP2();
return;
}
}
......@@ -397,44 +345,18 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
WorkLog("送出料串 :" + msg + ",提升伺服到P1点");
BatchAxis.SuddenStop( );
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, equip.Config.BatchAxis_P1Speed);
}
/// <summary>
/// 料串往P3提升,直到检测到料盘
/// </summary>
/// <param name="first">是否是第一次测试料窜是否有盘</param>
private void BatchAxisToP3(bool first=false)
{
int targetP3 = BatchAxisP2;
int targetSpeed = equip.Config.BatchAxis_P3Speed;
MoveInfo.TimeOutSeconds = 200;
MoveInfo.CanWhileCount = 0;
// 需要增加定时器,获取验证信号并停止伺服
StartMovePosition = BatchAxis.GetAclPosition();
if (!first)
{
//如果不是第一次取盘,则每次最多上升16mm
targetP3 = StartMovePosition+equip.Config.Height_ChangeValue*60;
if (targetP3 > BatchAxisP2)
targetP3 = BatchAxisP2;
}
MoveInfo.WaitList.Add(WaitResultInfo.WaitBatchAxis(BatchAxis.Config, targetP3, targetSpeed));
BatchAxis.Config.TargetPosition = targetP3;
BatchAxis.AbsMove(null, targetP3, targetSpeed);
//开始检测信号
BatchAxis.BatchAxisStartCheck(IO_AxisTrayCheck, IO_VALUE.HIGH);
BatchAxis.AbsMove(MoveInfo, BatchAxisP1, Robot.Config.BatchAxis_P1Speed);
}
#endregion
#region 获取料盘高度
private int StartMovePosition = 0;
private int EndMovePosition = 0;
public int StartMovePosition = 0;
public int EndMovePosition = 0;
internal int LastHeight = 0;
private int GetHeight()
public int GetHeight()
{
LastHeight = 0;
int AxisChangeValue = equip.Config.Height_ChangeValue;
int AxisChangeValue = Robot.Config.Height_ChangeValue;
//计算高度
EndMovePosition = BatchAxis.GetAclPosition();
bool isLast = false;
......@@ -500,35 +422,36 @@ namespace OnlineStore.DeviceLibrary
{
Task.Factory.StartNew(delegate
{
CurrShelf = new ShelfInfo();
string logName = Name + "料串 " + rfid + " [AGV->" + AgvName + "] ";
try
{
if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.LOW) && equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.LOW))
if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.LOW) && Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.LOW))
{
LogUtil.info(logName + " 开始转动线体");
ProcessShelfEnter = true;
LineRun();
//等待进料检测信号
bool result = equip.WaitIo(IO_LineIn_Check, IO_VALUE.HIGH, 60000);
bool result = Robot.WaitIo(IO_LineIn_Check, IO_VALUE.HIGH, 60000);
if (!result)
{
LogUtil.error(logName + " 等待 IO_LineIn_Check=High 超时, 等待 IO_LineEnd_Check 信号");
LogUtil.error(logName + $" 等待{ IO_LineIn_Check}=High 超时, 等待 {IO_LineEnd_Check } 信号");
}
else
{
LogUtil.info(logName + "已收到 IO_LineIn_Check=High , 等待 IO_LineEnd_Check 信号");
LogUtil.info(logName + $"已收到 {IO_LineIn_Check}=High , 等待 { IO_LineEnd_Check} 信号");
}
result = equip.WaitIo(IO_LineEnd_Check, IO_VALUE.HIGH, 60000);
result = Robot.WaitIo(IO_LineEnd_Check, IO_VALUE.HIGH, 60000);
if (!result)
{
LogUtil.error(logName + " 等待 IO_LineEnd_Check=High 超时,等待3000后停止转动,发送 FinishEnter");
LogUtil.error(logName + $" 等待 {IO_LineEnd_Check} =High 超时,等待3000后停止转动,发送 FinishEnter");
}
else
{
LogUtil.info(logName + "已收到 IO_LineEnd_Check=High ,等待3000后停止转动,发送 FinishEnter");
LogUtil.info(logName + $"已收到 {IO_LineEnd_Check} =High ,等待3000后停止转动,发送 FinishEnter");
}
//等待200毫秒后停止转动
Thread.Sleep(3000);
......@@ -581,30 +504,31 @@ namespace OnlineStore.DeviceLibrary
try
{
//AgvClient.SetStatus(AgvName, CurrShelfId, ClientAction.None, ClientLevel.High, true);
if (equip.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) || equip.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
if (Robot.IOValue(IO_LineIn_Check).Equals(IO_VALUE.HIGH) || Robot.IOValue(IO_LineEnd_Check).Equals(IO_VALUE.HIGH))
{
ProcessShelfOut = true;
LineBack();
bool result = equip.WaitIo(IO_LineIn_Check, IO_VALUE.LOW, 60000);
bool result = Robot.WaitIo(IO_LineIn_Check, IO_VALUE.LOW, 60000);
if (!result)
{
LogUtil.error(logName + " 等待 IO_LineIn_Check=LOW超时,等待8000后停止转动,发送FinishLeave");
LogUtil.error(logName + $" 等待 { IO_LineIn_Check}=LOW超时,等待8000后停止转动,发送FinishLeave");
}
else
{
LogUtil.info(logName + " 已收到 IO_LineIn_Check=LOW ,等待8000后停止转动,发送FinishLeave");
LogUtil.info(logName + $" 已收到 {IO_LineIn_Check}=LOW ,等待8000后停止转动,发送FinishLeave");
}
//再转动2000
Thread.Sleep(8000);
LineStop();
AgvClient.SetStatus(AgvName, CurrShelfId, ClientAction.FinishLeave, ClientLevel.High, true);
AgvClient.SetStatus(AgvName, CurrShelf.ShelfRfid, ClientAction.FinishLeave, ClientLevel.High, true);
Task.Factory.StartNew(delegate
{
Thread.Sleep(10000);
AgvClient.SetStatus(AgvName, "", ClientAction.None, ClientLevel.High, true);
});
ProcessShelfOut = false;
LogUtil.info(logName + "结束,停止转动,清空料串[" + CurrShelfId + "] ");
LogUtil.info(logName + "结束,停止转动,清空料串[" + CurrShelf.ShelfRfid + "] ");
CurrShelf = new ShelfInfo();
}
else
{
......@@ -635,9 +559,40 @@ namespace OnlineStore.DeviceLibrary
#endregion
protected void WorkLog(string msg)
}
public class ShelfInfo {
public ShelfInfo (string rfid="",int state = 0)
{
this.ShelfRfid = rfid;
this.ShelfState = state;
}
/// <summary>
/// 料串RFID
/// </summary>
public string ShelfRfid = "";
/// <summary>
/// 料串状态,0=未开始,1=入库,2=出库中
/// </summary>
public int ShelfState =0;
public string ToStr()
{
LogUtil.info(Name + " [" + MoveInfo.MoveStep + "]" + msg);
if (ShelfState.Equals(1))
{
return ShelfRfid + "_入库中";
}
else if (ShelfState.Equals(2))
{
return ShelfRfid + "_出库中";
}
else
{
return ShelfRfid;
}
}
}
}
......@@ -22,6 +22,9 @@ namespace OnlineStore.DeviceLibrary
public BatchMoveBean BatchMove_A = null;
public BatchMoveBean BatchMove_B = null;
public AxisBean BatchAxis_A = null;
public AxisBean BatchAxis_B = null;
public ClampJawBean ClampJaw = null;
public bool AutoInput = ConfigAppSettings.GetIntValue(Setting_Init.AutoInput).Equals(1);
public int DefautTargetP = 1;
......@@ -40,14 +43,17 @@ namespace OnlineStore.DeviceLibrary
MiddleAxis = new AxisBean(config.TakeAxis_Middle, Name);
UpdownAxis = new AxisBean(config.TakeAxis_Updown, Name);
AxisBean LeftBatchAxis = new AxisBean(config.BatchAxis_A, Name);
AxisBean RightBatchAxis = new AxisBean(config.BatchAxis_B, Name);
BatchAxis_A = new AxisBean(config.BatchAxis_A, Name);
BatchAxis_B = new AxisBean(config.BatchAxis_B, Name);
moveAxisArray = new AxisBean[] { MiddleAxis, UpdownAxis };
if (config.UseClampJaw.Equals(1))
{
ClampJaw = new ClampJawBean(StoreManager.Config.CLAW_Input);
}
MoveInfo = new DeviceMoveInfo(Name);
BatchMove_A = new BatchMoveBean(Config, LeftBatchAxis, 1);
BatchMove_B = new BatchMoveBean(config, RightBatchAxis, 2);
BatchMove_A = new BatchMoveBean(Config, BatchAxis_A, 1);
BatchMove_B = new BatchMoveBean(config, BatchAxis_B, 2);
}
......@@ -98,13 +104,22 @@ namespace OnlineStore.DeviceLibrary
private void StartReset()
{
WorkLogLevel = 1;
//复位时设置状态为none
AgvClient.SetStatus(Config.AgvName_B);
AgvClient.SetStatus(Config.AgvName_A);
SetWarnMsg("");
alarmType = AlarmType.None;
isInSuddenDown = false;
isNoAirpressure_Check = false;
MoveInfo.NextMoveStep(StepEnum.IR01_Wait);
BatchMove_A.Reset();
BatchMove_B.Reset();
LogInfo($"复位 {MoveInfo.SLog} :批量轴开始复位");
}
protected override void ResetProcess()
{
if (MoveInfo.IsInWait)
......@@ -115,9 +130,119 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
if (MoveInfo.IsStep(StepEnum.IR01_Wait))
{
// 1,处于A,B,NG料口是,可以直接回取料升降轴。
// 2,处于A, B两个暂存区时,升降轴先运动到该暂存区的取放料高点,旋转轴再回原点或待机点。
//验证旋转轴位置 TODO
if (MiddleAxis.IsInPosition(Config.Middle_P4_AUpper))
{
MoveInfo.NextMoveStep(StepEnum.IR02_UpdownUpMove);
LogInfo($"复位 {MoveInfo.SLog}:当前旋转轴在 A上暂存区 {Config.Middle_P4_AUpper},升降轴先到P4:{Config.Updown_P4_AUpperH}");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P4_AUpperH, Config.Updown_P4_Speed);
}
else if (MiddleAxis.IsInPosition(Config.Middle_P7_AUnder))
{
MoveInfo.NextMoveStep(StepEnum.IR02_UpdownUpMove);
LogInfo($"复位{MoveInfo.SLog}:当前旋转轴在 A下暂存区 {Config.Middle_P7_AUnder},升降轴先到P6:{Config.Updown_P6_AUnderH}");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P6_AUnderH, Config.Updown_P6_Speed);
}
else if (MiddleAxis.IsInPosition(Config.Middle_P5_BUpper))
{
MoveInfo.NextMoveStep(StepEnum.IR02_UpdownUpMove);
LogInfo($"复位{MoveInfo.SLog}:当前旋转轴在 B上暂存区 {Config.Middle_P5_BUpper},升降轴先到P10:{Config.Updown_P10_BUpperH}");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P10_BUpperH, Config.Updown_P10_Speed);
}
else if (MiddleAxis.IsInPosition(Config.Middle_P8_BUnder))
{
MoveInfo.NextMoveStep(StepEnum.IR02_UpdownUpMove);
LogInfo($"复位{MoveInfo.SLog}:当前旋转轴在 B下暂存区 {Config.Middle_P8_BUnder},升降轴先到P12{Config.Updown_P12_BUnderH}");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P12_BUnderH, Config.Updown_P12_Speed);
}
else
{
MoveInfo.NextMoveStep(StepEnum.IR03_MiddleHome);
LogInfo("复位{MoveInfo.SLog}:旋转轴回原点");
MiddleAxis.HomeMove(MoveInfo);
}
}
else if (MoveInfo.IsStep(StepEnum.IR02_UpdownUpMove))
{
MoveInfo.NextMoveStep(StepEnum.IR03_MiddleHome);
LogInfo($"复位{MoveInfo.SLog}:旋转轴回原点");
MiddleAxis.HomeMove(MoveInfo);
}
else if (MoveInfo.IsStep(StepEnum.IR03_MiddleHome))
{
MoveInfo.NextMoveStep(StepEnum.IR04_MiddleToP1);
LogInfo($"复位{MoveInfo.SLog}:旋转轴到待机点:" + Config.Middle_P1);
MiddleAxis.AbsMove(MoveInfo, Config.Middle_P1, Config.Middle_P1_Speed);
}
else if (MoveInfo.IsStep(StepEnum.IR04_MiddleToP1))
{
MoveInfo.NextMoveStep(StepEnum.IR05_UpdownHome);
LogInfo($"复位{MoveInfo.SLog}:升降轴原点返回");
UpdownAxis.HomeMove(MoveInfo);
}
else if (MoveInfo.IsStep(StepEnum.IR05_UpdownHome))
{
MoveInfo.NextMoveStep(StepEnum.IR06_UpdownToP1);
LogInfo($"复位{MoveInfo.SLog}:升降轴到P1:" + Config.Updown_P1 + ",夹爪原点返回");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P1, Config.Updown_P1_Speed);
if (Config.UseClampJaw.Equals(1))
{
ClampJaw.GoHome(MoveInfo);
}
}
else if (MoveInfo.IsStep(StepEnum.IR06_UpdownToP1))
{
MoveInfo.NextMoveStep(StepEnum.IR07_ClampRelax);
LogInfo($"复位{MoveInfo.SLog}:夹爪气缸放松");
if (Config.UseClampJaw.Equals(1))
{
ClampJaw.Relax(MoveInfo);
}
}
else if (MoveInfo.IsStep(StepEnum.IR07_ClampRelax))
{
MoveInfo.NextMoveStep(StepEnum.IR08_WaitBatchMove);
LogInfo($"复位{MoveInfo.SLog}:等待左右批量轴模块复位完成");
}
else if (MoveInfo.IsStep(StepEnum.IR08_WaitBatchMove))
{
if ((BatchMove_A.MoveInfo.MoveType.Equals(MoveType.Reset).Equals(false))
&& (BatchMove_B.MoveInfo.MoveType.Equals(MoveType.Reset).Equals(false)))
{
LogInfo("复位完成");
runStatus = RunStatus.Runing;
MoveInfo.EndMove();
}
else if (MoveInfo.IsTimeOut(180))
{
if (BatchMove_A.MoveInfo.MoveType.Equals(MoveType.Reset))
{
WarnMsg = Name + "等待" + BatchMove_A.Name + "复位完成超时[" + MoveInfo.TimeOutSeconds + "]秒";
LogUtil.error(WarnMsg, MoveInfo.ErrorLogType, MoveInfo.logSeconds());
Alarm(AlarmType.IoSingleTimeOut);
}
else
{
WarnMsg = Name + "等待" + BatchMove_B.Name + "复位完成超时[" + MoveInfo.TimeOutSeconds + "]秒";
LogUtil.error(WarnMsg);
Alarm(AlarmType.IoSingleTimeOut);
}
}
}
}
internal override void StopMove()
{
//StopMove时设置状态为none
......@@ -149,9 +274,39 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
BusyMoveProcess();
IOTimeOutProcess();
//判断流水线打开了才可以运行
if (MoveInfo.MoveType.Equals(MoveType.None) && NoErrorAlarm())
{
//若左侧或右侧在等待扫码结束的状态,需要开始去取料
BatchMove_A.TimerProcess();
BatchMove_B.TimerProcess();
if (BatchMove_A.MoveInfo.MoveType.Equals(MoveType.InStore) && BatchMove_A.MoveInfo.IsStep(StepEnum.IB10_ScanOK))
{
LogInfo( "A侧开始取料");
string code = BatchMove_A.MoveInfo.MoveParam.PosInfo.barcode;
InOutPosInfo posInfo = new InOutPosInfo(code, "");
posInfo.NgMsg = BatchMove_A.MoveInfo.MoveParam.PosInfo.NgMsg;
posInfo.IsNG = BatchMove_A.MoveInfo.MoveParam.PosInfo.IsNG;
InOutParam param = new InOutParam(posInfo);
param.ShelfType = 1;
StartInstore(param);
}
else if (BatchMove_B.MoveInfo.MoveType.Equals(MoveType.InStore) && BatchMove_B.MoveInfo.IsStep(StepEnum.IB10_ScanOK))
{
LogInfo("B侧开始取料");
string code = BatchMove_B.MoveInfo.MoveParam.PosInfo.barcode;
InOutPosInfo posInfo = new InOutPosInfo(code, "");
posInfo.NgMsg = BatchMove_B.MoveInfo.MoveParam.PosInfo.NgMsg;
posInfo.IsNG = BatchMove_B.MoveInfo.MoveParam.PosInfo.IsNG;
InOutParam param = new InOutParam(posInfo);
param.ShelfType = 2;
StartInstore(param);
}else
{
//TODO 如果出料暂存区有料,且空料串准备完成,开始出料
}
}
if (NoErrorAlarm())
{
......@@ -163,7 +318,7 @@ namespace OnlineStore.DeviceLibrary
internal bool CanStartWork()
{
//是否可以开始新的料串入料
if (BatchMove_A.MoveInfo.MoveType.Equals(MoveType.Working))
if (BatchMove_A.MoveInfo.MoveType.Equals(MoveType.InStore))
{
StepEnum step = BatchMove_A.MoveInfo.MoveStep;
if (step < StepEnum.IB21_BatchToP1)
......@@ -171,7 +326,7 @@ namespace OnlineStore.DeviceLibrary
return false;
}
}
else if (BatchMove_B.MoveInfo.MoveType.Equals(MoveType.Working))
else if (BatchMove_B.MoveInfo.MoveType.Equals(MoveType.InStore))
{
StepEnum step = BatchMove_B.MoveInfo.MoveStep;
if (step < StepEnum.IB21_BatchToP1)
......@@ -228,12 +383,25 @@ namespace OnlineStore.DeviceLibrary
public bool OpenAllAxis(bool isCheck = true)
{
foreach (AxisBean axis in moveAxisArray)
{
string outMsg = "";
if (!axis.Open(true, out outMsg))
{
LogUtil.info(outMsg);
return false;
}
}
return false;
}
public void CloseAllAxis()
{
foreach (AxisBean axis in moveAxisArray)
{
axis.SuddenStop();
axis.ServoOff();
}
}
}
......
......@@ -15,14 +15,26 @@ namespace OnlineStore.DeviceLibrary
{
protected override bool CheckWaitResult(DeviceMoveInfo moveInfo, WaitResultInfo wait)
{
return false;
}
#region 取放料
#region 入库
public override bool StartInstore(InOutParam param)
{
if (!NoAlarm())
{
LogInfo("报警中,无法开始取放料:" + param.PosInfo.ToStr() );
return false;
}
if (MoveInfo.MoveType.Equals(MoveType.None))
{
MoveInfo.NewMove(MoveType.InStore,param );
MoveInfo.NextMoveStep(StepEnum.II01_UpdownToP1);
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P1, Config.Updown_P1_Speed);
MoveLog($"开始入库{MoveInfo.SLog}: 料串{param.ShelfType},升降轴先返回P1{Config.Updown_P1}");
return true;
}
return false;
}
......@@ -36,10 +48,11 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
}
#endregion
#region 出库
public override bool StartOutstore(InOutParam param)
{
return false;
......@@ -49,9 +62,5 @@ namespace OnlineStore.DeviceLibrary
{
}
#endregion
}
}
......@@ -55,6 +55,13 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary>
[ConfigProAttribute("IsDebug")]
public int IsDebug { get; set; }
/// <summary>
/// PRO,0,是否使用夹爪(1=使用夹爪,0=用吸盘),UseClampJaw,1,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("UseClampJaw")]
public int UseClampJaw { get; set; }
/// <summary>
/// PRO,0,A侧扫码的相机名称(多个用#分隔),CameraNameList_A,GigE:MV-CE200-10GC (00E78064929),,,,,,,,,,,,
/// </summary>
......@@ -173,82 +180,82 @@ namespace OnlineStore.LoadCSVLibrary
[ConfigProAttribute("Updown_P11_BUpperL")]
public int Updown_P11_BUpperL { get; set; }
/// <summary>
/// PRO,0,取料升降轴_B下暂存区取料高点,Updown_P12_AUnderH,111,,,,,,,,,,,,
/// PRO,0,取料升降轴_B下暂存区取料高点,Updown_P12_BUnderH,111,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P12_AUnderH")]
public int Updown_P12_AUnderH { get; set; }
[ConfigProAttribute("Updown_P12_BUnderH")]
public int Updown_P12_BUnderH { get; set; }
/// <summary>
/// PRO,0,取料升降轴_B下暂存区取料低点,Updown_P13_AUnderL,112,,,,,,,,,,,,
/// PRO,0,取料升降轴_B下暂存区取料低点,Updown_P13_BUnderL,112,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P13_AUnderL")]
public int Updown_P13_AUnderL { get; set; }
[ConfigProAttribute("Updown_P13_BUnderL")]
public int Updown_P13_BUnderL { get; set; }
/// <summary>
/// PRO,0,取料旋转轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,取料升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P1_Speed")]
public int Updown_P1_Speed { get; set; }
/// <summary>
/// PRO,1,取料旋转轴_P2速度,Updown_P2_Speed,109,,,,,,,,,,,,
/// PRO,1,取料升降轴_P2速度,Updown_P2_Speed,109,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P2_Speed")]
public int Updown_P2_Speed { get; set; }
/// <summary>
/// PRO,2,取料旋转轴_P3速度,Updown_P3_Speed,110,,,,,,,,,,,,
/// PRO,2,取料升降轴_P3速度,Updown_P3_Speed,110,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P3_Speed")]
public int Updown_P3_Speed { get; set; }
/// <summary>
/// PRO,3,取料旋转轴_P4速度,Updown_P4_Speed,111,,,,,,,,,,,,
/// PRO,3,取料升降轴_P4速度,Updown_P4_Speed,111,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P4_Speed")]
public int Updown_P4_Speed { get; set; }
/// <summary>
/// PRO,4,取料旋转轴_P5速度,Updown_P5_Speed,112,,,,,,,,,,,,
/// PRO,4,取料升降轴_P5速度,Updown_P5_Speed,112,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P5_Speed")]
public int Updown_P5_Speed { get; set; }
/// <summary>
/// PRO,5,取料旋转轴_P6速度,Updown_P6_Speed,113,,,,,,,,,,,,
/// PRO,5,取料升降轴_P6速度,Updown_P6_Speed,113,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P6_Speed")]
public int Updown_P6_Speed { get; set; }
/// <summary>
/// PRO,6,取料旋转轴_P7速度,Updown_P7_Speed,114,,,,,,,,,,,,
/// PRO,6,取料升降轴_P7速度,Updown_P7_Speed,114,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P7_Speed")]
public int Updown_P7_Speed { get; set; }
/// <summary>
/// PRO,7,取料旋转轴_P8速度,Updown_P8_Speed,115,,,,,,,,,,,,
/// PRO,7,取料升降轴_P8速度,Updown_P8_Speed,115,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P8_Speed")]
public int Updown_P8_Speed { get; set; }
/// <summary>
/// PRO,8,取料旋转轴_P9速度,Updown_P9_Speed,116,,,,,,,,,,,,
/// PRO,8,取料升降轴_P9速度,Updown_P9_Speed,116,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P9_Speed")]
public int Updown_P9_Speed { get; set; }
/// <summary>
/// PRO,9,取料旋转轴_P10速度,Updown_P10_Speed,117,,,,,,,,,,,,
/// PRO,9,取料升降轴_P10速度,Updown_P10_Speed,117,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P10_Speed")]
public int Updown_P10_Speed { get; set; }
/// <summary>
/// PRO,10,取料旋转轴_P11速度,Updown_P11_Speed,118,,,,,,,,,,,,
/// PRO,10,取料升降轴_P11速度,Updown_P11_Speed,118,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P11_Speed")]
public int Updown_P11_Speed { get; set; }
/// <summary>
/// PRO,11,取料旋转轴_P12速度,Updown_P12_Speed,119,,,,,,,,,,,,
/// PRO,11,取料升降轴_P12速度,Updown_P12_Speed,119,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P12_Speed")]
public int Updown_P12_Speed { get; set; }
/// <summary>
/// PRO,12,取料旋转轴_P13速度,Updown_P13_Speed,120,,,,,,,,,,,,
/// PRO,12,取料升降轴_P13速度,Updown_P13_Speed,120,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P13_Speed")]
public int Updown_P13_Speed { get; set; }
/// <summary>
/// PRO,0,取料旋转轴_待机点,Middle_P1,100,,,,,,,,,,,,
/// PRO,0,取料升降轴_待机点,Middle_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Middle_P1")]
public int Middle_P1 { get; set; }
......
......@@ -100,6 +100,12 @@
<Compile Include="FrmCrispTray.Designer.cs">
<DependentUpon>FrmCrispTray.cs</DependentUpon>
</Compile>
<Compile Include="inputForm\FrmBatchMove.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="inputForm\FrmBatchMove.Designer.cs">
<DependentUpon>FrmBatchMove.cs</DependentUpon>
</Compile>
<Compile Include="useControl\AxisMoveControl.cs">
<SubType>UserControl</SubType>
</Compile>
......@@ -139,6 +145,18 @@
<Compile Include="ManagerUtil.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="useControl\AxisMoveRectControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="useControl\AxisMoveRectControl.Designer.cs">
<DependentUpon>AxisMoveRectControl.cs</DependentUpon>
</Compile>
<Compile Include="useControl\AxisPointControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="useControl\AxisPointControl.Designer.cs">
<DependentUpon>AxisPointControl.cs</DependentUpon>
</Compile>
<Compile Include="useControl\ClampJawControl.cs">
<SubType>UserControl</SubType>
</Compile>
......@@ -157,6 +175,9 @@
<EmbeddedResource Include="FrmCrispTray.resx">
<DependentUpon>FrmCrispTray.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="inputForm\FrmBatchMove.resx">
<DependentUpon>FrmBatchMove.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="useControl\AxisMoveControl.resx">
<DependentUpon>AxisMoveControl.cs</DependentUpon>
</EmbeddedResource>
......@@ -185,6 +206,12 @@
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="useControl\AxisMoveRectControl.resx">
<DependentUpon>AxisMoveRectControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="useControl\AxisPointControl.resx">
<DependentUpon>AxisPointControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="useControl\ClampJawControl.resx">
<DependentUpon>ClampJawControl.cs</DependentUpon>
</EmbeddedResource>
......
......@@ -409,7 +409,7 @@ namespace OnlineStore.XLRStore
{
boxBean.IsDebug = true;
boxBean.Config.IsDebug = 1;
StoreManager.SaveMoveEquipConfig(boxBean.Config);
StoreManager.SaveBoxConfig(boxBean.Config);
boxBean.ChangeDebug(true);
LogUtil.info(boxBean.Name + "用户切换到调试状态 ");
}
......@@ -424,7 +424,7 @@ namespace OnlineStore.XLRStore
{
boxBean.IsDebug = false;
boxBean.Config.IsDebug = 0;
StoreManager.SaveMoveEquipConfig(boxBean.Config);
StoreManager.SaveBoxConfig(boxBean.Config);
boxBean.ChangeDebug(false);
LogUtil.info(boxBean.Name + "用户切换到正常工作状态 ");
}
......
namespace OnlineStore.XLRStore
{
partial class FrmBatchMove
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmBatchMove));
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.btnScan = new System.Windows.Forms.Button();
this.lblTestMsg = new System.Windows.Forms.Label();
this.btnTestStop = new System.Windows.Forms.Button();
this.btnStartTest = new System.Windows.Forms.Button();
this.axisMoveControl1 = new OnlineStore.XLRStore.AxisMoveControl();
this.lblCurrInfo = new System.Windows.Forms.Label();
this.lblMoveInfo = new System.Windows.Forms.Label();
this.lblWarnMsg = new System.Windows.Forms.Label();
this.panBase = new System.Windows.Forms.Panel();
this.lblName = new System.Windows.Forms.Label();
this.lblStoreStatus = new System.Windows.Forms.Label();
this.btnStart = new System.Windows.Forms.Button();
this.btnSave = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.batchAxisP2 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.batchAxisP1 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.panBase.SuspendLayout();
this.panel2.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// btnScan
//
this.btnScan.BackColor = System.Drawing.Color.White;
this.btnScan.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnScan.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnScan.Location = new System.Drawing.Point(348, 4);
this.btnScan.Name = "btnScan";
this.btnScan.Size = new System.Drawing.Size(103, 40);
this.btnScan.TabIndex = 248;
this.btnScan.Text = "扫码测试";
this.btnScan.UseVisualStyleBackColor = false;
//
// lblTestMsg
//
this.lblTestMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblTestMsg.ForeColor = System.Drawing.Color.Black;
this.lblTestMsg.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblTestMsg.Location = new System.Drawing.Point(3, 82);
this.lblTestMsg.Name = "lblTestMsg";
this.lblTestMsg.Size = new System.Drawing.Size(455, 43);
this.lblTestMsg.TabIndex = 322;
this.lblTestMsg.Text = "测试信息:";
this.lblTestMsg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnTestStop
//
this.btnTestStop.BackColor = System.Drawing.SystemColors.Control;
this.btnTestStop.Cursor = System.Windows.Forms.Cursors.Default;
this.btnTestStop.Enabled = false;
this.btnTestStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnTestStop.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnTestStop.ForeColor = System.Drawing.Color.Red;
this.btnTestStop.Location = new System.Drawing.Point(192, 31);
this.btnTestStop.Name = "btnTestStop";
this.btnTestStop.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnTestStop.Size = new System.Drawing.Size(154, 34);
this.btnTestStop.TabIndex = 321;
this.btnTestStop.Text = "提升轴停止";
this.btnTestStop.UseVisualStyleBackColor = true;
this.btnTestStop.Click += new System.EventHandler(this.btnTestStop_Click);
//
// btnStartTest
//
this.btnStartTest.BackColor = System.Drawing.SystemColors.Control;
this.btnStartTest.Cursor = System.Windows.Forms.Cursors.Default;
this.btnStartTest.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnStartTest.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnStartTest.ForeColor = System.Drawing.Color.Red;
this.btnStartTest.Location = new System.Drawing.Point(21, 31);
this.btnStartTest.Name = "btnStartTest";
this.btnStartTest.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnStartTest.Size = new System.Drawing.Size(154, 34);
this.btnStartTest.TabIndex = 319;
this.btnStartTest.Text = "上料提升轴运动开始";
this.btnStartTest.UseVisualStyleBackColor = true;
this.btnStartTest.Click += new System.EventHandler(this.btnStartTest_Click);
//
// axisMoveControl1
//
this.axisMoveControl1.Location = new System.Drawing.Point(6, 174);
this.axisMoveControl1.Name = "axisMoveControl1";
this.axisMoveControl1.Size = new System.Drawing.Size(488, 400);
this.axisMoveControl1.TabIndex = 219;
//
// lblCurrInfo
//
this.lblCurrInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblCurrInfo.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblCurrInfo.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblCurrInfo.Location = new System.Drawing.Point(8, 47);
this.lblCurrInfo.Name = "lblCurrInfo";
this.lblCurrInfo.Size = new System.Drawing.Size(943, 50);
this.lblCurrInfo.TabIndex = 279;
this.lblCurrInfo.Text = "当前料盘:";
//
// lblMoveInfo
//
this.lblMoveInfo.AutoSize = true;
this.lblMoveInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblMoveInfo.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblMoveInfo.Location = new System.Drawing.Point(6, 130);
this.lblMoveInfo.Name = "lblMoveInfo";
this.lblMoveInfo.Size = new System.Drawing.Size(68, 17);
this.lblMoveInfo.TabIndex = 278;
this.lblMoveInfo.Text = "运动信息:";
this.lblMoveInfo.Visible = false;
//
// lblWarnMsg
//
this.lblWarnMsg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblWarnMsg.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblWarnMsg.ForeColor = System.Drawing.Color.Red;
this.lblWarnMsg.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblWarnMsg.Location = new System.Drawing.Point(8, 109);
this.lblWarnMsg.Name = "lblWarnMsg";
this.lblWarnMsg.Size = new System.Drawing.Size(943, 50);
this.lblWarnMsg.TabIndex = 246;
this.lblWarnMsg.Text = "等待启动";
this.lblWarnMsg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// panBase
//
this.panBase.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panBase.Controls.Add(this.lblMoveInfo);
this.panBase.Controls.Add(this.lblCurrInfo);
this.panBase.Controls.Add(this.lblWarnMsg);
this.panBase.Controls.Add(this.lblName);
this.panBase.Controls.Add(this.lblStoreStatus);
this.panBase.Controls.Add(this.btnStart);
this.panBase.Location = new System.Drawing.Point(6, 6);
this.panBase.Name = "panBase";
this.panBase.Size = new System.Drawing.Size(957, 168);
this.panBase.TabIndex = 260;
//
// lblName
//
this.lblName.BackColor = System.Drawing.Color.DodgerBlue;
this.lblName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblName.ForeColor = System.Drawing.Color.Black;
this.lblName.Location = new System.Drawing.Point(5, 4);
this.lblName.Name = "lblName";
this.lblName.Size = new System.Drawing.Size(120, 40);
this.lblName.TabIndex = 250;
this.lblName.Text = "A入料机构";
this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblStoreStatus
//
this.lblStoreStatus.AutoSize = true;
this.lblStoreStatus.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblStoreStatus.ForeColor = System.Drawing.Color.Green;
this.lblStoreStatus.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblStoreStatus.Location = new System.Drawing.Point(142, 15);
this.lblStoreStatus.Name = "lblStoreStatus";
this.lblStoreStatus.Size = new System.Drawing.Size(65, 20);
this.lblStoreStatus.TabIndex = 245;
this.lblStoreStatus.Text = "等待启动";
this.lblStoreStatus.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// btnStart
//
this.btnStart.BackColor = System.Drawing.Color.White;
this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnStart.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnStart.Location = new System.Drawing.Point(841, 3);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(105, 40);
this.btnStart.TabIndex = 86;
this.btnStart.Text = "复位";
this.btnStart.UseVisualStyleBackColor = false;
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.SystemColors.Control;
this.btnSave.Cursor = System.Windows.Forms.Cursors.Default;
this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSave.ForeColor = System.Drawing.Color.Red;
this.btnSave.Location = new System.Drawing.Point(301, 62);
this.btnSave.Name = "btnSave";
this.btnSave.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnSave.Size = new System.Drawing.Size(118, 34);
this.btnSave.TabIndex = 323;
this.btnSave.Text = "保存位置";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// panel2
//
this.panel2.Controls.Add(this.groupBox2);
this.panel2.Controls.Add(this.groupBox1);
this.panel2.Controls.Add(this.panBase);
this.panel2.Controls.Add(this.axisMoveControl1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(969, 576);
this.panel2.TabIndex = 324;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.btnStartTest);
this.groupBox2.Controls.Add(this.lblTestMsg);
this.groupBox2.Controls.Add(this.btnTestStop);
this.groupBox2.Location = new System.Drawing.Point(499, 336);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(461, 184);
this.groupBox2.TabIndex = 280;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "上料轴运动测试";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.batchAxisP2);
this.groupBox1.Controls.Add(this.batchAxisP1);
this.groupBox1.Controls.Add(this.btnSave);
this.groupBox1.Location = new System.Drawing.Point(499, 178);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(461, 152);
this.groupBox1.TabIndex = 280;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "上料轴点位信息";
//
// batchAxisP2
//
this.batchAxisP2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.batchAxisP2.Location = new System.Drawing.Point(21, 80);
this.batchAxisP2.Name = "batchAxisP2";
this.batchAxisP2.PointBackColor = System.Drawing.Color.Transparent;
this.batchAxisP2.PointForeColor = System.Drawing.Color.Red;
this.batchAxisP2.PointText = "上升待机点P1:";
this.batchAxisP2.PointValue = 0;
this.batchAxisP2.Size = new System.Drawing.Size(233, 41);
this.batchAxisP2.TabIndex = 325;
//
// batchAxisP1
//
this.batchAxisP1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.batchAxisP1.Location = new System.Drawing.Point(21, 33);
this.batchAxisP1.Name = "batchAxisP1";
this.batchAxisP1.PointBackColor = System.Drawing.Color.Transparent;
this.batchAxisP1.PointForeColor = System.Drawing.Color.Red;
this.batchAxisP1.PointText = "上升待机点P1:";
this.batchAxisP1.PointValue = 0;
this.batchAxisP1.Size = new System.Drawing.Size(233, 41);
this.batchAxisP1.TabIndex = 324;
//
// FrmBatchMove
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(969, 576);
this.Controls.Add(this.panel2);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FrmBatchMove";
this.Text = "上料模块";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmTest_FormClosing);
this.Load += new System.EventHandler(this.FrmStoreIOStatus_Load);
this.Shown += new System.EventHandler(this.FrmIOStatus_Shown);
this.panBase.ResumeLayout(false);
this.panBase.PerformLayout();
this.panel2.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Button btnScan;
private AxisMoveControl axisMoveControl1;
private System.Windows.Forms.Label lblCurrInfo;
private System.Windows.Forms.Label lblMoveInfo;
private System.Windows.Forms.Label lblWarnMsg;
protected System.Windows.Forms.Panel panBase;
protected System.Windows.Forms.Label lblName;
protected System.Windows.Forms.Label lblStoreStatus;
protected System.Windows.Forms.Button btnStart;
private System.Windows.Forms.Label lblTestMsg;
internal System.Windows.Forms.Button btnTestStop;
internal System.Windows.Forms.Button btnStartTest;
private System.Windows.Forms.Panel panel2;
internal System.Windows.Forms.Button btnSave;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.GroupBox groupBox1;
private useControl.AxisPointControl batchAxisP2;
private useControl.AxisPointControl batchAxisP1;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.CompilerServices;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
using OnlineStore.DeviceLibrary;
using log4net;
using System.Reflection;
using UserFromControl;
using OnlineStore.LoadCSVLibrary;
using OnlineStore.Common;
namespace OnlineStore.XLRStore
{
internal partial class FrmBatchMove : FrmBase
{
private bool IsLoad = false;
private BatchMoveBean moveBean;
internal FrmBatchMove(BatchMoveBean moveEquip)
{
this.moveBean = moveEquip;
Control.CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}
private bool IsInCheck = false;
private void timer1_Tick(object sender, EventArgs e)
{
try
{
if (!this.Visible)
{
return;
}
lblWarnMsg.Text = moveBean.WarnMsg;
lblCurrInfo.Text = moveBean.GetMoveStr();
}
catch (Exception ex)
{
LogUtil.error(moveBean.Name + "界面定时器出错:", ex);
}
}
private void FrmTest_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
if (this.timer1.Enabled)
{
this.timer1.Enabled = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace, "Exception(异常)", MessageBoxButtons.OK, MessageBoxIcon.Error);
LogUtil.error("", ex);
}
}
private void FrmStoreIOStatus_Load(object sender, EventArgs e)
{
axisMoveControl1.LoadData(StoreManager.XLRStore.inputEquip, new AxisBean[] { moveBean.BatchAxis });
lblName.Text = moveBean.Name;
batchAxisP1.SetMoveData(moveBean.BatchAxis, StoreManager.XLRStore.inputEquip.Config.BatchAxis_P1Speed, moveBean.BatchAxisP1);
batchAxisP2.SetMoveData(moveBean.BatchAxis, StoreManager.XLRStore.inputEquip.Config.BatchAxis_P2Speed, moveBean.BatchAxisP2 );
IsLoad = true;
}
private void FrmIOStatus_Shown(object sender, EventArgs e)
{
timer1.Start();
}
private void btnStart_Click(object sender, EventArgs e)
{
moveBean.Reset();
LogUtil.info(moveBean.Name + "点击:" + btnStart.Text);
}
private void btnSave_Click(object sender, EventArgs e)
{
int p1 = batchAxisP1.PointValue;
int p2 = batchAxisP2.PointValue;
moveBean.BatchAxisP1 = p1;
moveBean.BatchAxisP2 = p2;
if (moveBean.EquipType.Equals(1))
{
StoreManager.XLRStore.inputEquip.Config.BatchAxisP1_A = p1;
StoreManager.XLRStore.inputEquip.Config.BatchAxisP2_A = p2;
}
else
{
StoreManager.XLRStore.inputEquip.Config.BatchAxisP1_B = p1;
StoreManager.XLRStore.inputEquip.Config.BatchAxisP2_B = p2;
}
StoreManager.SaveInputEquipConfig(StoreManager.XLRStore.inputEquip.Config);
MessageBox.Show("保存成功");
}
private int TargetP2;
private bool StartTest = false;
private void btnStartTest_Click(object sender, EventArgs e)
{
ConfigMoveAxis moveAxis = moveBean.BatchAxis.Config;
bool isServoOn = AxisManager.instance.IsServeoOn(moveAxis.DeviceName, moveAxis.GetAxisValue());
if (!isServoOn)
{
MessageBox.Show(moveAxis.Explain + " 未打开,请先打开伺服 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
bool isStop = AxisManager.instance.GetBusyStatus(moveAxis.DeviceName, moveAxis.GetAxisValue()).Equals(0);
if (isServoOn && isStop)
{
//判断提升轴是否停止且到位
TargetP2 = moveBean.BatchAxisP2;
LogUtil.info(moveBean.Name + "点击:" + btnStartTest.Text + ",目标位置:" + moveBean.BatchAxisP2);
moveBean.BatchAxisToP2(true, false, true);
lblTestMsg.Text = "开始入料运动,目标位置[" + TargetP2 + "] ,开始位置[" + moveBean.StartMovePosition + "],";
StartTest = true;
}
else
{
MessageBox.Show(moveAxis.Explain + " 忙碌中,无法开始运动 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
private void btnTestStop_Click(object sender, EventArgs e)
{
LogUtil.info(moveBean.Name + "点击:" + btnTestStop.Text);
moveBean.BatchAxis.AxisStopCheckMove();
moveBean.BatchAxis.SuddenStop();
}
private void BatchTimerPro()
{
if (moveBean.BatchAxis.IsBatchMove())
{
btnStartTest.Enabled = false;
if (moveBean.LastMoveIsTest)
{
ConfigMoveAxis moveAxis = moveBean.BatchAxis.Config;
bool countError = false;
bool isStop = false;
bool result = AxisManager.instance.AbsMoveIsEnd(moveAxis.DeviceName, moveAxis.GetAxisValue(), TargetP2, moveAxis.CanErrorCountMax, out countError);
if (result)
{
isStop = true;
LogUtil.info(moveBean.Name + "提升轴上料功能测试,发现提升轴已到达目标位置【" + TargetP2 + "】,停止上料测试 ");
}
else
{
bool axisMoveIsEnd = HuichuanLibrary.HCBoardManager.MoveIsEnd(moveBean.BatchAxis.Config.GetAxisValue());
if (axisMoveIsEnd)
{
isStop = true;
LogUtil.info(moveBean.Name + "提升轴上料功能测试,发现提升轴已停止运动,停止上料测试");
}
}
if (isStop)
{
StartTest = false;
moveBean.BatchAxis.AxisStopCheckMove();
btnStartTest.Enabled = true;
btnTestStop.Enabled = false;
int height = moveBean.GetHeight();
lblTestMsg.Text = "目标位置[" + TargetP2 + "] ,开始位置[" + moveBean.StartMovePosition + "],停止位置[" + moveBean.EndMovePosition + "],高度[" + height + "]mm";
}
else
{
btnTestStop.Enabled = true;
}
}
else
{
btnTestStop.Enabled = false;
}
}
else
{
if (StartTest)
{
StartTest = false;
int height = moveBean.GetHeight();
lblTestMsg.Text = "目标位置[" + TargetP2 + "] ,开始位置[" + moveBean.StartMovePosition + "],停止位置[" + moveBean.EndMovePosition + "],高度[" + height + "]mm";
}
btnStartTest.Enabled = true;
btnTestStop.Enabled = false;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 11</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>97</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAA8AMDAQAAEABABoBgAA9gAAACgoEAABAAQAyAQAAF4HAAAgIBAAAQAEAOgCAAAmDAAAGBgQAAEA
BADoAQAADg8AABAQEAABAAQAKAEAAPYQAAAwMAAAAQAIAKgOAAAeEgAAKCgAAAEACACoCwAAxiAAACAg
AAABAAgAqAgAAG4sAAAYGAAAAQAIAMgGAAAWNQAAEBAAAAEACABoBQAA3jsAADAwAAABACAAqCUAAEZB
AAAoKAAAAQAgAGgaAADuZgAAICAAAAEAIACoEAAAVoEAABgYAAABACAAiAkAAP6RAAAQEAAAAQAgAGgE
AACGmwAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA
gACAAAAAgACAAICAAACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAAwMDAAP///wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAA/lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAA
D///8AAAAAAAAAAAAAAAAAAAAAAAAAAE7////0AAAAAAAAAAAAAAAAAEZHZGBABP/////+AAQkJWZkAA
AAAAAAAG6+t3YAD///////8AB7brd2AAAAAAAAAHvtt0AA/////////kAEd77UAAAAAAAAAGt3ZgBO//
////////ACRnvlAAAAAAAAAHd0QAT///////////8EBHdmAAAAAAAAAEZ2QA////7uvb7v///kAkR0AA
AAAAAAAEdAAf///r69e+vb7///AAZ0AAAAAAAAAGUATv//vtvr2+t72+//9AB0AAAAAAAAAEAC///r6+
t76+vbe+7//gBCAAAAAAAAAABO//7t6+fX2+vre3vv//AAAAAAAAAAAAD///3r69t76+vb69vv//5AAA
AAAAAAAA///+vt5+3r7b69t723///wAAAAAAAAAP///3576+vre+vXvr23////AAAAAAAAD////73n19
7t6+vNvrdr7///8AAAAAAA7////t7r7ne+vtd9vr237////wAAAABP/////r7evt536+vr6+t7f////+
cAAAb//////r7r7evt7X1769vr3/////8AABD/////99fu5+7r7r7X6+t7f/////8AAAAP/////n7t7u
7Xfr6+vX233/////AAAAAA/////t7u7e7u3n7evr577////wAAAAAAD////+7u7u7t6+2+vr69////8A
AAAAAAAP///+3u7+7ufud33tt7////AAAAAAAAAA///+7u/u7e7evt6+vu///wAAAAAAAAAAD///7u7u
7u7N7r7evf//8AAAAAAAAAAEBP///u7u7ud9576+v//+QEAAAAAAAAAGcE7//u7u7t7r7efe7//wR0AA
AAAAAAAGe0D///7u7n5+fr6///8AfVAAAAAAAAALfXAP///u3n19vt7///BOt2AAAAAAAAAHd75A////
/u7u7v///kB3vrAAAAAAAAAE3rdwD///////////8ke+3kAAAAAAAAAE6+17ZP//////////AHvte3AA
AAAAAAAE6+vrcA/////////wRd63fVAAAAAAAAAG7XfXdgH///////8Aduvtd2AAAAAAAAAAVkdGVkAP
//////AGVkdGVgAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAA
AAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD///////8AAP///n///wAA///8P///AAD///gf//8AAP//8A///wAA///gB///AAD8AAAAAD8AAPwA
AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/
AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADgAAAAAAcAAMAA
AAAAAwAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAA4AAAAAAHAADwAAAAAA8AAPgAAAAAHwAA/AAAAAA/
AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA
AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD//+AH//8AAP//8A///wAA///4H///
AAD///w///8AAP///n///wAA////////AAAoAAAAKAAAAFAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AADAwMAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF
cAAAAAAAAAAAAAAAAAAAAAAAAH/3AAAAAAAAAAAAAAAAAAAAAAAH//9wAAAAAAAAAAAAAAAAQAAAAH//
//cAAAAABAAAAAAABHt2VkAH/////3AFa3t2AAAAAAAAfXt2AH//////9wBGd9VAAAAAAAC3dkQH////
////cAR7dgAAAAAAAGezAH/////////3BGZ2AAAAAAAAdkQH///uvr3u//9wBWcAAAAAAABkAH//++2+
vVvu//cERgAAAAAAAAQH//7et9vr29vv/3AEAAAAAAAAAH//6+e+t7e+t77/9wAAAAAAAAAH//7r1313
fb69tu//cAAAAAAAAH///m53e+t7e3vr7//3AAAAAAAH///uvtftfX3r22u+//9wAAAAAH///+vte+vr
6+vr6+7///cAAAAH////3nfu3u3r3r69tv///nAAAH/////r7evr6+vre9e+////9wAAf////75+7u3u
fn3rfbf////3AAAH////7e7t7uvtvrvr6////3AAAAB////u3u7t7ud+3r2+///3AAAAAAf//+7u7u7u
ve2+d37//3AAAAAAAH///u7v7u7r7evbf//3AAAAAAAAB///7u/t7Xfuvn7v/3AAAAAAAABAf//u7u7u
frd9vv/3BAAAAAAAAHdH//7u7n5+3tfv/3C3QAAAAAAAvVB//+7u1+vr7v/3C3cAAAAAAAB9e0f//+7n
7e7//3B96wAAAAAAALfeYH/////////3C+vmAAAAAAAAfr63R////////3B9e+ZAAAAAAAC3fXdwf///
///3C3fetwAAAAAAAGdnt2QH/////3BHZ7dnAAAAAAAAAAAAAAB////3AAAAAAAAAAAAAAAAAAAAAAf/
/3AAAAAAAAAAAAAAAAAAAAAAAH/3AAAAAAAAAAAAAAAAAAAAAAAAB3AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////8AAAD//+f//wAAAP//w///AAAA//+B//8A
AAD//wD//wAAAPgAAAAfAAAA+AAAAB8AAAD4AAAAHwAAAPgAAAAfAAAA+AAAAB8AAAD4AAAAHwAAAPgA
AAAfAAAA+AAAAB8AAAD4AAAAHwAAAPgAAAAfAAAA+AAAAB8AAADwAAAADwAAAOAAAAAHAAAAwAAAAAMA
AACAAAAAAQAAAIAAAAABAAAAwAAAAAMAAADgAAAABwAAAPAAAAAPAAAA+AAAAB8AAAD4AAAAHwAAAPgA
AAAfAAAA+AAAAB8AAAD4AAAAHwAAAPgAAAAfAAAA+AAAAB8AAAD4AAAAHwAAAPgAAAAfAAAA+AAAAB8A
AAD4AAAAHwAAAP//AP//AAAA//+B//8AAAD//8P//wAAAP//5///AAAA//////8AAAAoAAAAIAAAAEAA
AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA
gAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AADAwMAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAG7gAAAAAAAAAAAAAAAAAADv/kAAAAAAAAAAAABARABO///gBARAAAAAAABH63tg
7////kZ3vrQAAAAAC+13Tv/////mt9dwAAAAAAfbdO///////gbr5AAAAABL5k7/7ut37v/iXXAAAAAA
DnDv/td729vv/kZ0AAAAAAZO/+vr6+vr6//lYAAAAAAA7/7r69t7e7v//gAAAAAATv/77efn13fbfv/k
AAAAAO//7ee+vbe9vr7//gAAAE7//+vt537uvr23///hAADv//933r7Xvbe3t////gAA7///5+7n7n7X
fXb///4AAA///+3u3u2+vr6+///mAAAA7//u7u7u7t69vv/+AAAAAA7//u/u7Xvr7c7/4AAAAAAA7/7u
7u7tfr3v/gAAAAAAB27/7+7ufuvu7+R0AAAAAEtw7/7u3r197/5GcAAAAAAO1U7//u7u7//gfrQAAAAA
S31w7//////+e11wAAAAAAfr607/////4WvtdAAAAABGd9dw7////kbm63AAAAAAAAQAAA7//+AABAAA
AAAAAAAAAAAA7/4AAAAAAAAAAAAAAAAAAA7nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA///////+f////D////gf//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AA
AAfAAAADgAAAAYAAAAHAAAAD4AAAB/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//4
H////D////5///////8oAAAAGAAAADAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AADAwMAA////AAAA
AAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAf+cAAAAAAAAAQkYF7/9gBgYAAAAGvrdv///3vr5AAAAA
7mX/////R31AAAAAtl/+7r7v87cAAAAEd//b69vb/2dAAAAAT/7r6+vrf+cAAAAC/+vr7be3vv9wAAB/
/+3r5969vv/wAAf//33N6+t76///YAD//+3u5+3rt///cAB//+7u3te+3v/xAAAE//7u7u6+vv8gAAAA
f/7u7r197vYAAAAEZP/u7u6+/1ZAAAAA53/+7t7v925AAAAEt2H/////R74AAAAE7eZ////wft5AAAAA
BAQA//9wBAQAAAAAAAAAf/QAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAP//////5////8P//+AA
B//gAAf/4AAH/+AAB//gAAf/4AAH/+AAB//AAAP/gAAB/4AAAf/AAAP/4AAH/+AAB//gAAf/4AAH/+AA
B//gAAf/4AAH///D////5////////ygAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAMDA
wAD///8AAAAADnAAAAAAAADufgAAAAAFZH/+RkQAAG6+///k5AAARu/ut/d2AABO+9vr3+QAB+7u7b6+
9+Du/+2+vrf/537/7u7Xe/9+Dn/u7uvt/uAAR/7t6+/gAABn7u7u97YAAE5u///m5gAABlDv9wZQAAAA
AH7uAAAAAAAADnAAAAD+f////D///8AD///AA///wAP//8AD//+AAf//AAD//wAA//+AAf//wAP//8AD
///AA///wAP///w////+f///KAAAADAAAABgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAEAgEABAQEAAgICAANDQ0AEQkGABISEgAUFBQAGRkZAB0dHQAnFg4AKBYOAC4aEQA9IhYAJSUlACws
LAAxMTEAODg4AD4+PgBFJxkAUy8fAFozIQBlOSUAcD8qAHJAKgB2QywAeUQtAEBAQABFRUUASEhIAFNT
UwBXV1cAXV1dAGFhYQBlZWUAampqAG5ubgBycnIAeHh4AH5+fgCHTDIAiEwyAMlTLgDLVTAAzVkzAMxZ
NADMXDoA0Fw2ANNgOADUYjoA1WQ8ANhnPgDYaD8AsWRCANVnQgDaaUAA3GxDANhrRADdbUQA3nBGANF2
TgDXclAA3ntXAOBxRgDhc0kA4XRKAON2TADkd00A5HhNAOh8TwDme1AA5nxSAOh9UQDpf1QA5IFVAOuA
UwDoglYA7IJVAOmCWADthlkA7IdcAO2IXQDwh1kA8ohZAPGKXADyjF8A9IxeAN2LbwDdi3AA3ZJ6AO6L
YADvjGIA8Y1hAPSOYQDxj2QA9JBiAPGRZgD0kmYA8pNoAPOWawD0lWoA9JZsAPSYbgDml3kA9ZpxAPWd
dQD2n3gA9aB5APaifQD2poEA9qeEAPeohAD3q4gA962LAPCqjgD3ro0A97CPAPexkAD3tZYA+LCQAPiz
lAD4tJYA+LaZAPi5nQDotKMA6LWmAPi7oAD4vaIA+b6kAPG/rAD5wKYA+cKqAPnFrQDsxbkA+cawAPnJ
tAD5zLcA+s25APrPvAD60L0A2traANzc2wDc3NwA+tTDAPrWxgD72McA+tfIAPvZyQD7280A+93PAPzd
zwD73dAA/OTZAP3p4AD46+cA++/pAPzw6wD98uwA/fbyAP39/QAAAAAALwMAAFAEAABwBgAAkAkAALAK
AADPDAAA8A4AAP8gEgD/PjEA/1xRAP96cQD/l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAA
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
AA78AAAAAD8ADvwAAAAAPwAO/AAAAAA/AA78AAAAAD8ADvwAAAAAPwAO/AAAAAA/AA78AAAAAD8ADvgA
AAAAHwAO8AAAAAAPAA7gAAAAAAcADsAAAAAAAwAOgAAAAAABAA6AAAAAAAEADsAAAAAAAwAO4AAAAAAH
AA7wAAAAAA8ADvgAAAAAHwAO/AAAAAA/AA78AAAAAD8ADvwAAAAAPwAO/AAAAAA/AA78AAAAAD8ADvwA
AAAAPwAO/AAAAAA/AA78AAAAAD8ADvwAAAAAPwAO/AAAAAA/AA78AAAAAD8ADvwAAAAAPwAO/AAAAAA/
AA7//+AH//8ADv//8A///wAO///4H///AA7///w///8ADv///n///wAO////////AA4oAAAAKAAAAFAA
AAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAMBwQACgoKAA4ODgAcDwoAHBAKABAQ
EAAeHh4ALRkQACkpKQAuLi4AMDAwADY2NgA6OjoAPT09AEUnGQBjNyQAYzgkAGQ4JABtPSgAcT8pAHJA
KgBCQkIARkZGAElJSQBOTk4AV1dXAFlZWQBdXV0AYWFhAGVlZQBoaGgAbGxsAHl5eQB+fn4AiU0zAJBR
NQCYVjgAp14+AKlfPgCqYD8AyVMuAMlULwDMVzEAz1s1ANJfOADTYDkA1WQ8ANloPwCuYkAAsmRCALVm
QwC2ZkQAxW9JANVnQQDZaUAA3GxCANhrRADdbkQA0GlJAN9wRQDXc1IA335aAOBxRwDgckkA4nRJAON3
TADjeE4A5XlNAOF/UwDnfVIA4X9UAOd+VADpflEA6YFWAOyCVQDphFcA6oNYAOmEWQDthlgA7YleAPKI
WgD0ilsA8IpdAPKMXgDeknkA6YpjAO2LYADyjmEA9I5hAPCPZAD0kGMA8pFmAPSSZQDxkmgA9JNoAPOU
aQD0lWoA9JZsAPSYbgD0mnEA9ZxzAPWddQD2n3gA9aF7APWifAD2pH4A6Z+EAOCdiQD2pYEA9qmGAPar
iAD3ro0A97GRAPe0lgD4tpgA97ibAPi5ngD3u6EA97yiAPi7oAD4vaIA+b6kAPnApwD4w6sA+cStAO3G
uQD5xrAA+ciyAPnJtAD5zbgA+tC+APTOwAD608EA+dXFAPvZyQD72swA+9zNAPzi1gD86N8A/Pn3APr6
+gD9+vkA/Pz7AP39/QBQIgAAcDAAAJA+AACwTQAAz1sAAPBpAAD/eREA/4oxAP+dUQD/r3EA/8GRAP/S
sQD/5dEA////AAAAAAAvAwAAUAQAAHAGAACQCQAAsAoAAM8MAADwDgAA/yASAP8+MQD/XFEA/3pxAP+X
kQD/trEA/9TRAP///wAAAAAALwAOAFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9x
nAD/kbIA/7HIAP/R3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9R
xwD/cdEA/5HcAP+x5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx
/wD0Uf8A9nH/APeR/wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR
/wCmMf8AtFH/AMJx/wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA
8AA+Ef8AWDH/AHFR/wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAASAfAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASCQjh8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCQkZGQHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACCQkZGRkZAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ1MyglFBAGACCOn5GfkZ+fjx8A
BRAVJSgzNSQAAAAAAAAAAAAAAAA1UEY2JhMJACCQkZGfkZGfn5GQHwAJEyY2SFI1AAAAAAAAAAAAAAAA
M0Y2JhMJACCQkZ+RkZ+Rn5+fkZAfAQkTJjZIMwAAAAAAAAAAAAAAACg2JhMJACCQkZGfkZGRkZGRkZGR
jh8ACRMmNigAAAAAAAAAAAAAAAAlJhMJACCQn5GPhWw/Ojc+Vn+Nn5GQHwAJEyYlAAAAAAAAAAAAAAAA
FBMJASCQn5+HV0I9OTEwLy0sPH+fn5AfAAkTFQAAAAAAAAAAAAAAABAJACCQn5F3TEpFQkE7ODAvLSwr
bZGRkCAACRAAAAAAAAAAAAAAAAAGACCQn5F7U1JMS0VDQTs4MC8tLCptkZGQHwAGAAAAAAAAAAAAAAAA
ACCQkZ+IVVVVVFBLR0RBOzg3Ly0sK3+fkZAfAAAAAAAAAAAAAAAAACCQkZGQZlpaXFpVUE5HRUE9OjAv
LSw8jZGRkB8AAAAAAAAAAAAAASCQn5GfiFpeXmBgYFlRTklEQT04MS8tLH+Rn5+OHwEAAAAAAAAAASCQ
kZ+fn3ReYmRkZGRiXVFPS0RCPTgwLy1Wn5GfkZAfAAAAAAAAASCQn5+fn59qY2ZnaGhnZmRdWE9JREE7
ODAuPpGfn5+RkB8BAAAAAyCQkZGRkZGRZmdqbm5ua2lnZV9YT0lEQTs4MDeRn5GRkZGOHwMAAAQgkJGf
kZ+fn2hrcHJycnFwa2hlXVFOR0VBOzE6kZ+Rn5GRkCAEAAAABCCQkZGfkZFxcHN5enl2cnBraGNbUU5H
Q0A5P5GfkZ+RkCAEAAAAAAAEIJGRn5GffnJ7gIKBfXlyb2llYVlQS0dCPWyRn5GfkCADAAAAAAAAAAQg
kJGfkYt0gISHhoN9dnFuZ2ReVVBMRUKFkZ+RkCABAAAAAAAAAAAAACCRkZ+QfICIiomGgXtybmhkYFxU
UEpXj5GRkCAAAAAAAAAAAAAAAAAAIJCRn4x+hoqKh4J7cm5oZGBcVVBMh5+RkCAAAAAAAAAAAAAAAAAA
FQIgkJ+fioKGh4SAeXFuZ2ReXFVVeJGfkCACFgAAAAAAAAAAAAAAADIpAiCRn5GKfoF+e3NwamViXFpV
e5CfkCACKTIAAAAAAAAAAAAAAAA0TSkCIJCRn4x8dHJva2ZjXlpmiZGRkCACKU00AAAAAAAAAAAAAAAA
NVJNKAIgkZGfj4t+cWhmanSIj5GRkCACKU1SNQAAAAAAAAAAAAAAADVTUk0oAiCQn5GRn5GRkZ+fkZGR
kCACKU1SUzUAAAAAAAAAAAAAAAA1U1NSTSgCIJCRn5GfkZGfkZ+RkCACKU1SU1M1AAAAAAAAAAAAAAAA
NVNTUlJNKAIgkJGfkZ+Rn5+RkCACKU1SU1JSNQAAAAAAAAAAAAAAACQ1NTU1NDIVACCQkZGRkZ+RkCAA
FjI0NTU1NSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJGRkZGRkCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAQgkJGRkCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCCQkCAEAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAQHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////8ADv//5////wAO///D////AA7//4H///8ADv//AP///wAO+AAAAB//
AA74AAAAH/8ADvgAAAAf/wAO+AAAAB//AA74AAAAH/8ADvgAAAAf/wAO+AAAAB//AA74AAAAH/8ADvgA
AAAf/wAO+AAAAB//AA74AAAAH/8ADvAAAAAP/wAO4AAAAAf/AA7AAAAAA/8ADoAAAAAB/wAOgAAAAAH/
AA7AAAAAA/8ADuAAAAAH/wAO8AAAAA//AA74AAAAH/8ADvgAAAAf/wAO+AAAAB//AA74AAAAH/8ADvgA
AAAf/wAO+AAAAB//AA74AAAAH/8ADvgAAAAf/wAO+AAAAB//AA74AAAAH/8ADvgAAAAf/wAO//8A////
AA7//4H///8ADv//w////wAO///n////AA7///////8ADigAAAAgAAAAQAAAAAEACAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABgMCAAgEAwAXFxcAGRMRABkZGQAhEgwAIxQNACgWDwArHRcAJCQkAC0p
JwAtKSgALS0tAIBILwCoXj4Ay1UwAM5aNADSYDgA1GI6ANZlPQDYZz4Az2NBANVoQgDba0IA22xCANxs
QwDZbUYA3m9FAMpxSwDfcUcA13ZVAOBySADhdEoA43ZMAOR4TgDnfFEA535UAOh9UQDof1QA135jAOqA
VADsglYA4IJfAOuGWwDuhVgA6YVcAOyHXQDyiFoA9IlbAPCLXwDzjF4A9IxeAO+MYADzj2IA9I9iAPGP
ZQDzkGMA9JBjAPGQZgD0kWUA9JNoAPSUaQD0lmwA9JhuAPSacgD0nHQA9aB6APaifAD2pH4At7e3ALi4
uADjoo0A9qWBAPWohQD3ro0A4qWSAO6wmAD3sZEA+LKTAPi0lQD4uZ0A9b2mAPi8ogD4v6YA+MCmAPjC
qgD4xKwA+cawAPnKtgD5zboA+c+8APrRvwDwz8UA+tTDAPfZzQD62coA+NnNAPve0QD74NMA/OrhAPrx
7gD99fIA+vr6AP36+QD+/v4AnP9RAK7/cQDA/5EA0v+xAOT/0QD///8AAAAAACYvAABAUAAAWnAAAHSQ
AACOsAAAqc8AAMLwAADR/xEA2P8xAN7/UQDj/3EA6f+RAO//sQD2/9EA////AAAAAAAvJgAAUEEAAHBb
AACQdAAAsI4AAM+pAADwwwAA/9IRAP/YMQD/3VEA/+RxAP/qkQD/8LEA//bRAP///wAAAAAALxQAAFAi
AABwMAAAkD4AALBNAADPWwAA8GkAAP95EQD/ijEA/51RAP+vcQD/wZEA/9KxAP/l0QD///8AAAAAAC8D
AABQBAAAcAYAAJAJAACwCgAAzwwAAPAOAAD/IBIA/z4xAP9cUQD/enEA/5eRAP+2sQD/1NEA////AAAA
AAAvAA4AUAAXAHAAIQCQACsAsAA2AM8AQADwAEkA/xFaAP8xcAD/UYYA/3GcAP+RsgD/scgA/9HfAP//
/wAAAAAALwAgAFAANgBwAEwAkABiALAAeADPAI4A8ACkAP8RswD/Mb4A/1HHAP9x0QD/kdwA/7HlAP/R
8AD///8AAAAAACwALwBLAFAAaQBwAIcAkAClALAAxADPAOEA8ADwEf8A8jH/APRR/wD2cf8A95H/APmx
/wD70f8A////AAAAAAAbAC8ALQBQAD8AcABSAJAAYwCwAHYAzwCIAPAAmRH/AKYx/wC0Uf8AwnH/AM+R
/wDcsf8A69H/AP///wAAAAAACAAvAA4AUAAVAHAAGwCQACEAsAAmAM8ALADwAD4R/wBYMf8AcVH/AIxx
/wCmkf8Av7H/ANrR/wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAADBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUdHDQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAANHZ2dHAwAAAAAAAAAAAAAAAAAAAAAAAgcICAgIBwIKR2lpb29GCgIICAgICAYCAAAAAAAA
AAAGDx0dHR0OBEdnaWlpaWdHBA4dHR0dDwcAAAAAAAAAAAgdMTEwDwxHaWlpaW9paWlHCw8wMTQdCAAA
AAAAAAAACB0xMQ8JR2dvb2lpaWlvaWdHCQ8xMR0IAAAAAAAAAAAIHTAPDEdvaF9NKxsXH0hdaG9HCw8w
HQgAAAAAAAAAAAgdDwlHaWZSLiIcGBQSERZMZWdHCQ8dCAAAAAAAAAAACA4MR29mSi0pJiIgGRUSERAo
ZWlHDA4HAAAAAAAAAAACBEdpaFc0NDAqJiMeGhUTERBMaGdHBAIAAAAAAAAAAApHb29jQDo8NzUtJyQh
GhUTERZdaW9HCgAAAAAAAAAFR2hvb1U8Pj4+PjYsJSMhGhUSEUhvaWdHAwAAAAAADUdvb29vST9CQkJB
PzwvKSMgGhUSH29vb29HDQAAAANHZ29vb29CQkVJRURCQTovJSMeGRQXaWlvb2dHBQAAA0dnb29vb0RK
T1BQS0pEQTssJyMgGRtvb29vZ0cDAAAADUdvb29vT05TVlVRTkpCQDMtJCIcK2lpb29HDQAAAAAABUdn
b29cUVlcW1hRS0RBPTIqJiJNb29nRwMAAAAAAAAACkdvb2RWXGBgW1VPSUE+PDApLGFvb0cKAAAAAAAA
AAACBEdpaWJaYGBcVVBJQj46NDBUaWdHBAIAAAAAAAAAAAcODEdvaF5aXFlTT0VBPjo0SmZvRwwOBwAA
AAAAAAAACB0PCUdpaGJWUU5JQz88QFdmZ0cJDx0IAAAAAAAAAAAIHS0PDEdvaWRcUERCSVVjaW9HDA8w
HQgAAAAAAAAAAAgdMDEPCUdnb29vb29vb29pRwkPMTEdCAAAAAAAAAAACB0xMTAPDEdvb29vb29vb0cM
Dy0xMB0IAAAAAAAAAAAGDx0dHR0OBEdnb29vb2dHBA4dHR0dDwYAAAAAAAAAAAEGCAgICAcCCkdvb29v
RwoCBwgICAgGAQAAAAAAAAAAAAAAAAAAAAAAA0dnZ0cDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DUdHDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////n////w////4H//wAAAP8AAAD/AAAA/wAAAP8AAAD/AA
AA/wAAAP8AAAD/AAAA/gAAAHwAAAA4AAAAGAAAABwAAAA+AAAAfwAAAP8AAAD/AAAA/wAAAP8AAAD/AA
AA/wAAAP8AAAD/AAAA//+B////w////+f///////KAAAABgAAAAwAAAAAQAIAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAPCAUAEwsHADwiFgBFRUUASkhHAElISAClXT0AzVkzANNgOQDYZz8A1WdBANlo
QADabkcA3m9FAN5wRgDTclQA2X1fAON2SwDkeE4A6H5RAOmBVgDpglgA7oZZAO6JXQDziVoA9IlbAPKL
XQDyjF0A7oxhAOWNbAD0j2EA85BkAPSRZADzlGoA9ZVqAPSYbgD2nHMA8Zp0APWfeAD2oXsA9qN9APak
fgD3qIUA96yLAPeujQD4tJUA6LWlAPi8oQDzxLEA+cewAPnJswD6zroA+s+8APvWxgD72MkA/N7QAPns
6AD+8u0A9fX1AP749QD9+vkA/v7+AP///wAAAAAAAC8OAABQGAAAcCIAAJAsAACwNgAAz0AAAPBKABH/
WwAx/3EAUf+HAHH/nQCR/7IAsf/JANH/3wD///8AAAAAAAIvAAAEUAAABnAAAAiQAAAKsAAAC88AAA7w
AAAg/xIAPf8xAFv/UQB5/3EAmP+RALX/sQDU/9EA////AAAAAAAULwAAIlAAADBwAAA9kAAATLAAAFnP
AABn8AAAeP8RAIr/MQCc/1EArv9xAMD/kQDS/7EA5P/RAP///wAAAAAAJi8AAEBQAABacAAAdJAAAI6w
AACpzwAAwvAAANH/EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/0QD///8AAAAAAC8mAABQQQAAcFsAAJB0
AACwjgAAz6kAAPDDAAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/wsQD/9tEA////AAAAAAAvFAAAUCIAAHAw
AACQPgAAsE0AAM9bAADwaQAA/3kRAP+KMQD/nVEA/69xAP/BkQD/0rEA/+XRAP///wAAAAAALwMAAFAE
AABwBgAAkAkAALAKAADPDAAA8A4AAP8gEgD/PjEA/1xRAP96cQD/l5EA/7axAP/U0QD///8AAAAAAC8A
DgBQABcAcAAhAJAAKwCwADYAzwBAAPAASQD/EVoA/zFwAP9RhgD/cZwA/5GyAP+xyAD/0d8A////AAAA
AAAvACAAUAA2AHAATACQAGIAsAB4AM8AjgDwAKQA/xGzAP8xvgD/UccA/3HRAP+R3AD/seUA/9HwAP//
/wAAAAAALAAvAEsAUABpAHAAhwCQAKUAsADEAM8A4QDwAPAR/wDyMf8A9FH/APZx/wD3kf8A+bH/APvR
/wD///8AAAAAABsALwAtAFAAPwBwAFIAkABjALAAdgDPAIgA8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx
/wDr0f8A////AAAAAAAIAC8ADgBQABUAcAAbAJAAIQCwACYAzwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR
/wC/sf8A2tH/AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGAAAAAAAAAAAA
AAAAAAAAAAAAAAAABjs7BgAAAAAAAAAAAAAAAAACAwMDAwIEOz8/OwQCAwMDAwIAAAAAAAADGhoaBwU7
Pz8/PzsFBxoaHAMAAAAAAAADGhoHBTs/Pz4/Pz87BQcfGgMAAAAAAAADGgcGOz0xHg0LES89OwUHGgMA
AAAAAAADBwU9OiYUEg4MCQgQOTsFBwMAAAAAAAACBTs9KRwXFRMPDAkIED07BQIAAAAAAAAEOz80HyEh
GBYTDwwJCC8/OwQAAAAAAAY7Pz8rIyQkIx0WEw8MCRE/PzsGAAAABjs/Pz4lJyoqJyQdFhMPDAs/Pz87
BgAABjs+Pz8qLS4uLCkkHRUTDw0/Pz87BgAAAAY7Pz4wMDMyMCwoIxgVEh4/PzsGAAAAAAAGOz84Mjc2
My4qJCEXFDE/OwQAAAAAAAACBTs+NTc3My4qJCEcJj07BQIAAAAAAAADBwU7PDUzMC0nIx8pOjsFBwMA
AAAAAAADGgcFOz44MColKzU+OwUHGgMAAAAAAAADGRkHBTs/Pz8/Pz87BQcaGgMAAAAAAAADGRkZBwU7
Pz8/PzsFBxoaGgMAAAAAAAABAwMDAwIGOz8/OwQCAwMDAwEAAAAAAAAAAAAAAAAABjs7BgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A/+f/AP/D
/wDgAAcA4AAHAOAABwDgAAcA4AAHAOAABwDgAAcAwAADAIAAAQCAAAEAwAADAOAABwDgAAcA4AAHAOAA
BwDgAAcA4AAHAOAABwD/w/8A/+f/AP///wAoAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADIeFQA9IxcAekUuAJtZPACcWTwAz2I/ANRhOgDWaUQA3GxDANxsRADdc0wA5HhOAOyC
VgDshlsA7YheAPSKWwDdjXMA85FmAPWTZgD0mG4A9p11APageQCmpaUA7aKDAPeohQD3rIkA+LOTAPi3
mgD5uZwA+866APrQvQD70sAA9+XfAPzt5QD+9fEA////AAClsAAAw88AAOHwABHv/wAx8f8AUfP/AHH1
/wCR9/8Asfn/ANH7/wD///8AAAAAAAAvIQAAUDcAAHBMAACQYwAAsHkAAM+PAADwpgAR/7QAMf++AFH/
yABx/9MAkf/cALH/5QDR//AA////AAAAAAAALw4AAFAYAABwIgAAkCwAALA2AADPQAAA8EoAEf9bADH/
cQBR/4cAcf+dAJH/sgCx/8kA0f/fAP///wAAAAAAAi8AAARQAAAGcAAACJAAAAqwAAALzwAADvAAACD/
EgA9/zEAW/9RAHn/cQCY/5EAtf+xANT/0QD///8AAAAAABQvAAAiUAAAMHAAAD2QAABMsAAAWc8AAGfw
AAB4/xEAiv8xAJz/UQCu/3EAwP+RANL/sQDk/9EA////AAAAAAAmLwAAQFAAAFpwAAB0kAAAjrAAAKnP
AADC8AAA0f8RANj/MQDe/1EA4/9xAOn/kQDv/7EA9v/RAP///wAAAAAALyYAAFBBAABwWwAAkHQAALCO
AADPqQAA8MMAAP/SEQD/2DEA/91RAP/kcQD/6pEA//CxAP/20QD///8AAAAAAC8UAABQIgAAcDAAAJA+
AACwTQAAz1sAAPBpAAD/eREA/4oxAP+dUQD/r3EA/8GRAP/SsQD/5dEA////AAAAAAAvAwAAUAQAAHAG
AACQCQAAsAoAAM8MAADwDgAA/yASAP8+MQD/XFEA/3pxAP+XkQD/trEA/9TRAP///wAAAAAALwAOAFAA
FwBwACEAkAArALAANgDPAEAA8ABJAP8RWgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R3wD///8AAAAAAC8A
IABQADYAcABMAJAAYgCwAHgAzwCOAPAApAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x5QD/0fAA////AAAA
AAAsAC8ASwBQAGkAcACHAJAApQCwAMQAzwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR/wD5sf8A+9H/AP//
/wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMAsAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx/wDPkf8A3LH/AOvR
/wD///8AAAAAAAgALwAOAFAAFQBwABsAkAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR/wCMcf8AppH/AL+x
/wDa0f8A////AAAAAAAAAAAXFwAAAAAAAAAAAAAAAAAXFxcXAAAAAAAAAAACAwMBFyQkFwEDAwIAAAAA
AxAFFyQkJCQXBRADAAAAAAMFFyIYCwgRIRcFAwAAAAABFyITDQwJBwYhFwEAAAAXFyQbExIPDAoHESQX
FwAXFyQkFRYWFA8MCggkJBcXFxckJBodHBkUDgwLJCQXFwAXFyQeIB8dFhINGCQXFwAAAAEXIyAgHRYT
EyIXAQAAAAADBBcjHhoVGyIXBQMAAAAAAxAEFyQkJCQXBRADAAAAAAIDAwEXJCQXAQMDAgAAAAAAAAAA
FxcXFwAAAAAAAAAAAAAAAAAXFwAAAAAAAAD+fwAA/D8AAMADAADAAwAAwAMAAMADAACAAQAAAAAAAAAA
AACAAQAAwAMAAMADAADAAwAAwAMAAPw/AAD+fwAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAABAAAAAlAAAARgAAAHEAAACaAAAAvgAAAL4AAACaAAAAcAAA
AEYAAAAlAAAAEAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAA
AAUAAAAFAAAABgAAAAYAAAAGAAAABgAAAAYAAAALAAAAFQAAACoAAABKAAAAdAAAAKIAAADNAAAA+gAA
APoAAADNAAAAogAAAHQAAABKAAAAKQAAABUAAAAKAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA
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
Qf+HTDL/WzMh/y4aEf8DAgH/HR0d/9ra2f/9/f3//v79//39/f/+/v3//v79//7+/f/9/f3//f39//7+
/f/+/v3//f39//7+/v/+/v3//f39//39/f/9/f3/2NjY/xwcG/8EAgH/LhoR/1szIf+ITDL/sWRB/9F2
Tv9wPyn/AAAA/wAAAL4AAAB/AAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHAAA
AP9lOSX/sGRB/4ZLMf9aMiH/LhoR/wMCAf8fHx//2tra//7+/f/+/v7//v79//7+/f/77ej/8L+r/+aW
ef/ee1f/2GtE/9VnQf/XcU//3Ipv/+i0o//46eX//f39//7+/f/9/f3//v7+/9jY2P8dHR3/AwIB/y4Z
EP9aMiH/hkwx/7FkQf9lOSX/AAAA/wAAAL8AAACAAAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
AAEAAAALAAAAJgAAAP9TLx7/h0wx/1oyIf8uGhD/BAIB/x8fH//Z2dn//v7+//7+/v/+/v7//O/q/++q
jv/keE7/4HFG/91tQ//aakD/2GY+/9VjO//SXzj/0Fw1/81ZMv/MWjX/3ZF6//jq5v/+/v3//v7+//7+
/v/Y2Nf/HR0d/wMCAf8uGRD/WjIh/4dMMv9TLx//AAAA/wAAAMEAAACCAAAAQgAAABgAAAAGAAAAAAAA
AAAAAAAAAAAAAQAAAAUAAAAVAAAAOAAAAP89Ihb/WjMh/y4aEf8EAgH/HR0d/9ra2v/+/v7//v79//7+
/f/51sb/7Ihd/+h8T//leUz/4nVJ/+BxR//dbkT/2mtB/9hnP//VYzz/0l85/9BcNf/NWTL/ylUw/8xd
O//sxLj//v7+//7+/v/+/v7/2NjY/xwcG/8DAgH/LhkQ/1ozIf89Ihb/AAAA/wAAAMYAAACHAAAARQAA
ABkAAAAGAAAAAAAAAAAAAAABAAAABQAAABAAAAAqAAAAVwAAAP8nFg7/LhoR/wMCAf8fHx//2tra//7+
/v/+/v7//v79//rNuf/wh1n/7YNV/+qAU//ofVD/5XlO/+N2S//hckj/3m9F/9trQv/YZz//1WQ8/9Jf
Of/QXDb/zVkz/8pVL//JUy//57Sk//7+/v/+/v7//v7+/9jY2P8eHh3/AwIB/y4aEf8nFg7/AAAA/wAA
AM8AAACRAAAATAAAABwAAAAGAAAAAAAAAAEAAAAFAAAADwAAACUAAABJAAAAfgAAAP8QCQX/BAIB/x8f
H//Z2dn//f39//39/f/+/v3/+9jI//SMXf/yilv/74dZ/+2FV//rglX/6H5S/+Z7T//jd0z/4XNJ/95w
Rv/ba0P/2Gc//9VkPP/TYDn/0Fw2/81ZM//KVTD/yVMv/+zEuP/+/v3//v79//39/f/X19f/Hh4d/wQC
Af8QCQX/AAAA/wAAANoAAAChAAAAXAAAACYAAAAKAAAAAQAAAAUAAAAPAAAAJAAAAEYAAAB0AAAAqAAA
AP8AAAD/HR0d/9ra2v/+/v7//v79//7+/f/98ev/9JNo//OMXv/zjV7/8o1f//GKXf/uhlr/64NX/+l/
VP/me1D/5HhN/+FzSv/ecEb/22xD/9hnP//WZDz/02A5/9BcNv/NWTP/ylUw/8xdO//46ub//v7+//39
/f/+/v3/2NjY/xwcHP8AAAD/AAAA/wAAAOYAAAC3AAAAdAAAADgAAAAVAAAABQAAAA8AAAAkAAAARgAA
AHIAAACiAAAA0gAAAP8fHx//2trZ//39/f/9/f3//f39//7+/f/4t5n/841f//SOYP/0j2L/9I9i//OP
Yv/xjF//7ohc/+yEWf/pgFX/5nxS/+R4Tv/hdEr/3nBG/9tsQ//ZaED/1mQ8/9NgOf/QXDb/zVkz/8tV
MP/dkXr//v39//39/f/9/f3//v79/9jY2P8eHh7/AAAA/wAAAPEAAADPAAAAlQAAAFYAAAApAAAADwAA
ACAAAABCAAAAbwAAAKAAAADPAAAA+x8fH//Z2dn//v79//7+/f/+/v3//v79//3x6//0kWT/849h//SR
ZP/0kmX/9JJm//STZv/zkWX/8Y1i/+6JXv/shlr/6YFW/+Z9Uv/jeU7/4XRK/95wR//bbEP/2WhA/9Zk
PP/TYDn/0Fw2/81ZMv/MWTX/+Orl//39/f/+/v3//v79//39/f/X19f/Hh4e/wAAAP4AAADlAAAAtwAA
AHwAAABGAAAAIAAAADQAAABjAAAAmAAAAMwAAAD6HR0d/9ra2v/+/v7//v79//7+/v/+/v7//v7+//rN
uP/0kGL/9JJl//SUaP/0lWr/9JVr//SWa//0lWr/85No//GPZP/ui2D/64dc/+mCV//mfVP/43lO/+B0
Sv/ecEf/22xD/9loQP/WZDz/0mA5/9BcNf/NWTL/6LSj//7+/v/+/v7//v7+//7+/v/+/v7/2NjY/xwc
HP8AAAD8AAAA2AAAAKAAAABmAAAANQAAAEMAAAB5AAAAugAAAPofHx/+2tra//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//ixkf/0k2f/9JZr//WYb//1mnH/9Zpx//Wacf/1mXD/9Jhv//SWbP/xkWf/74xi/+yH
Xf/pglj/5n1T/+N5T//hdEr/3nBH/9xsQ//ZaD//1WQ8/9JfOf/QXDX/3Ypv//7+/f/+/v7//v7+//7+
/v/+/v7//f39/9jY2P8dHR3/AAAA+wAAAL8AAAB7AAAAQwAAAEEAAACNAAAA9h8fH//Z2dn//v7+//39
/f/9/f3//v7+//7+/f/+/v7//v7+//ahe//0lmz/9Ztx//Wedv/1n3j/9aB5//Wgef/1n3j/9Z11//Wb
cv/0mG7/8pJp/++NY//siF3/6YJY/+Z9U//jeU7/4XRK/95wRv/bbEP/2Gc//9VjPP/SXzj/13JQ//7+
/f/+/v7//v7+//7+/v/+/v7//f39//39/f/X19f/HR0d/wAAAPYAAACOAAAAQQAAAFQAAADvHR0d/9ra
2v/9/f3//v7+//39/f/9/f3//f39//39/f/+/v3//f39//Wbcv/1m3L/9aB5//akf//2poL/9qeD//an
g//2pYH/9aN9//Wgef/1nXX/9Jlw//KTaf/vjWL/64dc/+iBV//mfVL/43hO/+FzSf/eb0b/22tC/9dn
Pv/VYzv/1WdB//39/f/+/v3//v79//39/f/9/f3//f39//39/f/9/f3/2NjY/xwcHP8AAADvAAAAVAAA
AEMAAADrHh4e/tvb2//+/v7//v7+//7+/v/+/v3//v7+//7+/v/+/v7//v79//aed//1oHn/9qeD//es
iv/3r47/97CQ//ewkP/3roz/9qqI//angv/2onz/9Z52//SZcP/ykmj/7oxh/+uHXP/pgVb/5nxS/+R4
Tf/hc0n/3m9G/9prQf/YZj7/2GtE//7+/f/+/v3//v79//7+/v/+/v7//f39//7+/v/9/f3/2tra/x0d
Hf4AAADqAAAAQQAAAAwAAABGAAAA6yAgIP7a2tr//v7+//39/f/9/f3//v79//7+/f/+/v7//f39//eq
iP/2pYH/966N//i1l//4uJz/+Lqe//i6nf/4t5n/97KT//etjP/2p4T/9aJ8//Wddf/0l27/8ZFm/+6L
YP/rhVr/6YBV/+Z7UP/kd0z/4XJI/91uRP/aakD/3ntX//39/f/+/v3//v79//7+/f/+/v3//f39//39
/f/Z2dn/Hx8f/gAAAOsAAABIAAAADAAAAAMAAAAMAAAARQAAAO0gICD+29vb//39/f/9/f3//v79//7+
/f/+/v3//v79//i9ov/2qoj/97WX//i+o//4wqr/+cSt//nEq//4wKf/+Luf//e0lv/3rYz/9qaC//Wg
ef/1m3L/85Vr//CPZP/uiV7/64RY/+l/U//me0//43ZL/99xRv/dbUP/5pZ5//7+/f/+/v3//v79//7+
/f/+/v3//f39/9nZ2f8fHx//AAAA7wAAAFQAAAASAAAABAAAAAAAAAADAAAADAAAAEUAAADrHh4e/tvb
2//+/v7//v7+//7+/v/+/v7//v79//vXx//3r47/+Lyg//nGr//5zLj/+s+7//nNuf/5ybP/+MOr//i7
oP/3s5T/9qqI//ajfv/1nXX/9Jhu//OTaP/wjWL/7ohc/+uDV//pflL/5XlO/+J1Sf/gcUb/8b+r//7+
/f/+/v3//v79//7+/v/+/v7/2tra/x0dHf8AAADzAAAAcQAAACMAAAAJAAAAAQAAAAAAAAAAAAAAAwAA
AA0AAABJAAAA7CAgIP/a2tr//v79//7+/f/+/v3//v79//308P/4tJb/+MCm//nMuP/61MP/+tfH//rW
xf/60b7/+cm0//jAp//4t5r/966N//amgf/1n3j/9Zlw//SVav/zkWX/8Yxf/+6HWv/rglX/6H1Q/+V4
TP/keE7/++3o//39/f/+/v3//v7+//7+/f/Z2dn/Hx8f/wAAAPgAAACeAAAASgAAABsAAAAGAAAAAAAA
AAAAAAAAAAAAAAAAAAQAAAASAAAAVQAAAP8gICD/29vb//7+/f/+/v3//f39//7+/f/60L3/+MCn//rO
u//62Mn/+9zP//vbzf/61sX/+c25//nErP/4up7/97CQ//eng//2oHn/9Zpx//WWa//0k2b/9I9i//GK
Xf/uhVj/64BT/+h8T//vqo3//v79//39/f/9/f3//v7+/9ra2v8fHx//AAAA/wAAAMwAAACFAAAARAAA
ABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAJAAAAIwAAAP8AAAD/Hh4e/9vb2//+/v7//v79//7+
/v/99vL/+cOq//nLt//618f/+93P//vcz//618f/+s+7//nFrf/4up7/97CQ//enhP/1oHn/9Zpx//SV
a//0kmb/9JBj//ONX//wiFr/7YNV/+yIXf/87+r//v7+//7+/f/+/v3/2tra/x0dHf8AAAD/AAAA/wAA
AMEAAACBAAAAQgAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGwAAAP9EJhn/EgoG/yAg
IP/a2tr//v7+//7+/v/+/v7//Ong//nFrv/50L3/+tfH//vYyf/61MP/+cy4//nDq//4uZz/96+P//an
g//1oHn/9Zpw//SVav/0kmX/9I9i//ONX//yi1z/8IdZ//nWxv/+/v7//v7+//7+/f/Z2dn/Hx8f/xMK
B/9FJxn/AAAA/wAAAL4AAACAAAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGAAA
AP9yQCr/sWRB/xEJBv8gICD/29vb//7+/f/+/v7//v7+//zj2P/4xa7/+cu3//nOu//5zLj/+cav//i+
pP/3tZf/9qyK//akf//1nnb/9Zhu//SUaP/0kWP/9I5g//OMXf/zjF7/+s25//7+/f/+/v7//v79/9ra
2f8fHx//EQoG/7JlQv9yQCr/AAAA/wAAAL4AAAB/AAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAGAAAAGAAAAP93Qyz/6INW/7FkQf8SCgb/Hh4e/9vb2//+/v7//v7+//7+/v/86eD/+cKq//jA
p//4v6b/+Lug//e1mP/3ro3/9qeD//Wgev/1mnH/9JVq//SSZf/0j2H/841f//WUaP/72Mj//v7+//7+
/v/+/v7/2tra/x0dHf8TCwf/smVC/+iCVv93Qyz/AAAA/wAAAL4AAAB/AAAAQQAAABgAAAAGAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAGAAAAGAAAAP95RC3/8IdZ/+eCVv+wY0H/EgoG/yAgIP/a2tr//v7+//7+
/f/+/v7//fby//rQvf/3tJX/9q6O//aqiP/2pYH/9aB5//Wbcv/0lmz/9JJm//SPYv/0kWT/+LeZ//3x
6//+/v3//v7+//7+/v/Z2dn/IB8f/xMLB/+yZEL/54JW//CHWf95RC3/AAAA/wAAAL4AAAB/AAAAQQAA
ABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGAAAAP96RS3/84la//CHWf/nglb/sWRB/xEK
Bv8gICD/29vb//7+/f/+/v7//v7+//7+/f/99PD/+9fH//m+o//3q4j/9p53//Wbcv/2oXv/+LGR//rN
uP/98ev//v79//7+/f/9/f3//v7+/9ra2v8gIB//EgoG/7JlQv/nglb/8IdZ//OJWv95RC3/AAAA/wAA
AL4AAAB/AAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGAAAAP96RS3/84la//OJ
Wv/wh1n/6INW/7FkQf8SCgb/Hh4e/9vb2//+/v7//v79//39/f/+/v3//v79//7+/f/9/f3//v79//39
/f/+/v7//v7+//7+/v/+/v3//f39//7+/f/9/f3/2tra/x0dHf8TCgf/smVC/+iCVv/wh1n/84la//OJ
Wv95RC3/AAAA/wAAAL0AAAB/AAAAQQAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAGAAA
AP96RS3/84la//OJWv/ziVr/8IdZ/+eCVv+wY0H/EgoG/yAgIP/a2tr//v7+//39/f/+/v3//v7+//7+
/f/+/v7//v7+//7+/f/+/v7//v7+//7+/v/+/v3//f39//7+/v/Z2dn/Hx8f/xMKB/+yZEL/54JW//CH
Wf/ziVr/84la//OJWv95RC3/AAAA/wAAALkAAAB9AAAAQAAAABgAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAFAAAAFgAAAP96RS3/84la//OJWv/ziVr/84la//CHWf/nglb/sWRB/xEJBv8gICD/29vb//7+
/f/+/v3//v7+//7+/f/+/v3//v7+//39/f/+/v3//v79//7+/v/+/v7//f39/9ra2v8gHx//EQoG/7Jl
Qv/nglb/8IdZ//OJWv/ziVr/84la//OJWv95RC3/AAAA/wAAAKwAAABzAAAAOwAAABYAAAAFAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAEAAAAEgAAAP96RS3/84la//OJWv/ziVr/84la//OJWv/wh1n/6INW/7Fk
Qf8SCgb/Hh4e/9vb2//+/v3//v79//7+/f/+/v3//v79//39/f/+/v7//v79//7+/v/+/v3/2trZ/x0d
Hf8TCwf/smVC/+iCVv/wh1n/84la//OJWv/ziVr/84la//OJWv95RC3/AAAA/wAAAI0AAABfAAAAMQAA
ABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAAP89Ihb/ekUt/3pFLf96RS3/ekUt/3pF
Lf95RC3/d0Ms/3JAKv9EJhn/AAAA/yAgIP/a2tr//v7+//39/f/9/f3//v79//39/f/+/v3//v7+//7+
/v/Z2dn/Hx8f/wAAAP9FJxn/ckAq/3dDLP95RC3/eUQt/3lELf95RC3/eUQt/3lELf88Ihb/AAAA/wAA
AF8AAABAAAAAIQAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8gICD/29vb//39/f/9/f3//v7+//39
/f/9/f3//v7+/9ra2v8fHx//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAADEAAAAhAAAAEQAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
AAYAAAAMAAAAEgAAABYAAAAXAAAAGAAAABgAAAAYAAAAGAAAABgAAAAbAAAAIwAAAFUAAADsHh4e/tvb
2//+/v7//v7+//7+/v/+/v7/2tra/h0dHf8AAADrAAAAVAAAACMAAAAbAAAAGAAAABgAAAAYAAAAGAAA
ABgAAAAYAAAAGAAAABgAAAAXAAAAFgAAABIAAAAMAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAEAAAADAAAABAAAAAUAAAAFAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAACQAA
ABIAAABJAAAA6yAgIP7a2tr//v7+//39/f/Z2dn/Hx8f/gAAAOoAAABIAAAAEgAAAAkAAAAGAAAABgAA
AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAFAAAABQAAAAQAAAADAAAAAQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAQAAAAQAAAANAAAARQAAAO0gICD+29vb/tra2v4fHx/+AAAA7AAAAEQAAAANAAAABAAA
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAAAEIAAADqHh4e/h0dHf4AAADpAAAAQQAA
AAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAkAAAA9AAAA6QAA
AOgAAAA7AAAACQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAIAAAAFAAAANAAAADMAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAO/AAAAAAH
AA74AAAAAAMADvAAAAAAAQAO8AAAAAABAA7wAAAAAAEADvAAAAAAAQAO8AAAAAABAA7wAAAAAAEADvAA
AAAAAQAO8AAAAAABAA7wAAAAAAEADvAAAAAAAQAO4AAAAAABAA7AAAAAAAEADoAAAAAAAQAOAAAAAAAA
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
/f/9/f3//f39//39/f/9/f3//f39//7+/f/9/f3//f39//r6+v9lZWX/AgEB/y4aEP9kOCX/mVY4/8Vv
Sf+nXj7/AAAA/wAAALgAAABsAAAAKgAAAAoAAAABAAAAAAAAAAAAAAAAAAAABAAAABoAAAD/kFE1/5hW
OP9jNyT/LRkQ/wIBAf9oaGj/+/v7//7+/v/+/v3//fr4//TOwP/pn4T/335a/9hrRP/VZ0H/13NS/96S
ef/txbj//Pn3//7+/f/9/f3/+/v7/2VlZf8CAQH/LRkQ/2M3JP+YVjj/kFE1/wAAAP8AAAC5AAAAbAAA
ACoAAAAKAAAAAQAAAAAAAAAAAAAAAQAAAAkAAAAnAAAA/209KP9jOCT/LRkQ/wIBAf9oaGj/+/v7//7+
/f/+/v7/+NXG/+qKY//idUn/33BF/9xsQv/ZaD//1mQ8/9JfOP/PWzX/zFcx/9BpSf/tx7v//v79//7+
/v/7+/v/ZWVl/wIBAP8tGRD/Yzgk/209KP8AAAD/AAAAvQAAAG4AAAAqAAAACgAAAAEAAAAAAAAAAQAA
AAUAAAAXAAAAQgAAAP9FJxn/LRkQ/wIBAf9nZ2f//Pz8//7+/v/9/Pz/97uh/+yCVP/pfVD/5XpN/+J1
Sv/gcUf/3W1E/9lpQP/VZDz/0l85/89bNf/MVzH/yVMv/+Cdif/9/Pz//v7+//v7+/9lZWX/AgEB/y0Z
EP9FJxn/AAAA/wAAAMQAAAB2AAAALgAAAAoAAAABAAAAAAAAAAUAAAATAAAAMwAAAGwAAAD/HBAK/wIB
Af9oaGj/+/v7//7+/f/+/v3/+b6k//KKW//vhlj/7INW/+l/U//me0//43dM/+BySP/dbkX/2WlA/9Zl
PP/TYDn/z1s1/8xXMf/JUy7/4J2J//7+/f/+/v3/+/v6/2ZmZf8CAQH/HBAK/wAAAP8AAADRAAAAhwAA
ADkAAAAOAAAAAQAAAAUAAAATAAAAMAAAAGEAAACeAAAA/wAAAP9nZ2f/+/v7//7+/f/+/v3/+9rK//OM
Xv/zjF7/8oxe//CJXP/thVj/6YBV/+d8Uf/keE3/4HNJ/91uRf/aaUH/1mU9/9NgOf/PWzb/zFcx/8lU
L//tx7v//v79//39/f/7+/v/ZWVl/wAAAP8AAAD/AAAA4AAAAKEAAABSAAAAHAAAAAUAAAASAAAAMAAA
AGAAAACZAAAA0gAAAP9oaGj/+/v7//39/f/9/f3//fv5//Wcc//zjmD/9I9h//SPY//zj2L/8Itf/+2H
W//qglf/531S/+R4Tv/gc0r/3W9F/9pqQf/WZT3/02A5/89bNv/MVzH/0GlJ//z59//9/f3//v79//v7
+/9lZWX/AAAA/wAAAPAAAADCAAAAeQAAADgAAAATAAAAKgAAAFoAAACVAAAAzwAAAPxoaGj/+/v7//7+
/v/+/v7//v79//vYyP/0j2H/9JFk//SSZv/0k2f/9JNo//OSZv/wjWL/7Yhd/+qDWP/nflP/43hO/+Bz
Sv/dbkX/2mpB/9ZlPf/TYDn/z1s1/8xXMf/txbj//f39//7+/v/+/v3/+/v6/2VlZf8AAAD+AAAA4QAA
AKUAAABgAAAAKgAAAEIAAACBAAAAxwAAAPxnZ2f/+/v7//7+/v/+/v7//v7+//7+/v/4tpj/9JJl//SV
av/0l23/9Jhu//WYbv/0l23/85Rq//CPZf/til//6oRZ/+d+VP/jeU7/4HNK/91vRf/aaUH/1mU9/9Jf
Of/PWzX/35J5//7+/f/+/v7//v7+//7+/v/7+/v/ZWVl/wAAAP0AAADOAAAAhQAAAEIAAABIAAAAoAAA
APpoaGj/+/v7//7+/v/+/v3//v7+//7+/v/+/v7/9qJ8//SWbP/1m3L/9Z11//Wed//1nnf/9Z11//Wb
cv/0l27/8ZFn/+6LYP/qhFr/535U/+N5T//gc0r/3W5F/9ppQf/WZDz/0l84/9dzUv/9/f3//v7+//7+
/v/+/v7//f39//v7+/9lZWX/AAAA+wAAAKMAAABIAAAAYQAAAPRnZ2f/+/v7//7+/v/9/f3//f39//39
/f/+/v3//f39//Wacv/1nHT/9aJ8//algP/2poL/9qaC//akf//1oXv/9Z12//SZb//xkmj/7Ytg/+mE
Wf/nflP/43hO/+BzSf/dbkX/2WlA/9VkPP/VZ0H//f39//7+/f/9/f3//f39//39/f/9/f3/+vr6/2Vl
Zf8AAAD0AAAAYQAAAEwAAADxaGho/vv7+//+/v7//v7+//7+/f/+/v7//v7+//7+/f/2n3j/9qN9//ar
iP/3r4//97GR//exkf/3roz/9qmG//akf//1n3f/9Jlw//GRZ//til//6oNY/+d9Uv/keE3/4XJJ/91t
RP/ZaD//2GtE//39/f/+/v3//v79//7+/v/9/f3//v7+//v7+/9nZ2f+AAAA8AAAAEsAAAAKAAAATgAA
APFpaWn++/v7//39/f/9/f3//v7+//7+/f/9/f3/962M//aqh//3tJb/+Lqf//i9ov/4vKH/97ib//ey
k//2q4n/9qR+//Wddf/0l23/8I9k/+2IXf/qglf/53xR/+N3TP/fcUf/3GxC/99+Wv/9/f3//v79//7+
/f/+/v3//f39//v7+/9oaGj+AAAA8gAAAFIAAAALAAAAAgAAAAoAAABOAAAA8WhoaP78/Pz//f39//7+
/v/+/v3//v79//nErP/3sJD/+L6j//nGr//5ybT/+ciy//jDq//4u6D/97KT//aphv/1oXv/9Zpx//OU
af/wjWH/7Ydb/+qAVf/ne0//4nVK/99wRf/pn4T//f39//7+/f/+/v3//v7+//v7+/9nZ2f/AAAA9QAA
AGcAAAATAAAAAwAAAAAAAAACAAAACgAAAFAAAADxaWlp//v7+//+/v3//v7+//7+/f/84tb/97WX//nF
rv/60L7/+tXE//rTwf/5zbj/+MOr//i4nP/3ro3/9qR///WddP/0l2z/85Jm//CLX//thVj/6n9T/+Z6
Tv/idEj/9M/A//39/f/+/v7//v79//v7+/9oaGj/AAAA+QAAAJMAAAAyAAAADAAAAAEAAAAAAAAAAAAA
AAIAAAAOAAAAWwAAAP9paWn//Pz8//7+/f/+/v3//fv6//nBp//5x7H/+tbF//vczv/72sz/+tPB//nI
sv/5vaL/97GR//amgv/2nnf/9Zhu//STaP/zj2P/8Ilc/+yDVv/pflH/6Ypj//36+P/9/f3//v79//v7
+/9oaGj/AAAA/wAAAMkAAABxAAAAKwAAAAoAAAABAAAAAAAAAAAAAAAAAAAABQAAAB8AAAD/AQAA/2ho
aP/7+/v//v79//7+/v/86N//+cSt//rTwv/73M7/+9zO//rVxP/5yrT/+L2j//exkf/2p4P/9Z53//WY
bv/0k2f/9JBj//KNXv/vh1n/7IJU//jVx//+/v3//v79//v7+/9nZ2f/AQEA/wAAAP8AAAC6AAAAbQAA
ACoAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAXAAAA/3E/Kf8MBwT/aWlp//v7+//+/v7//v7+//vc
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
AEsAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAACAAAACQAAAEgAAADwAAAA7wAAAEYAAAAJAAAAAgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAEAAAAFAAAAPwAAAD0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAA//AA7wAAAAA/8ADvAAAAAB/wAO4AAAAAH/
AA7gAAAAAP8ADuAAAAAA/wAO4AAAAAD/AA7gAAAAAP8ADuAAAAAA/wAO4AAAAAD/AA7gAAAAAP8ADsAA
AAAA/wAOgAAAAAD/AA6AAAAAAP8ADgAAAAAA/wAOAAAAAAD/AA4AAAAAAP8ADgAAAAAA/wAOAAAAAAD/
AA4AAAAAAP8ADgAAAAAA/wAOAAAAAAD/AA4AAAAAAP8ADoAAAAAA/wAOwAAAAAD/AA7gAAAAAP8ADuAA
AAAA/wAO4AAAAAD/AA7gAAAAAP8ADuAAAAAA/wAO4AAAAAD/AA7gAAAAAP8ADuAAAAAA/wAO4AAAAAH/
AA7gAAAAAf8ADvAAAAAB/wAO+AAAAAf/AA7//gB///8ADv//AP///wAO//+B////AA4oAAAAIAAAAEAA
AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA
AAEAAAABAAAAAQAAAAIAAAAHAAAAGwAAAEgAAACIAAAAxQAAAMUAAACHAAAARwAAABsAAAAHAAAAAgAA
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAA
AA0AAAARAAAAEwAAABMAAAATAAAAGAAAACoAAABUAAAAkQAAANINDQ39DAwM/QAAANIAAACQAAAAUwAA
ACoAAAAYAAAAEwAAABMAAAATAAAAEwAAABMAAAARAAAADQAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA
AAYAAAAZAAAANwAAAEoAAABQAAAAUAAAAFQAAABhAAAAfwAAAKwAAADcDQ0N/cLCwv/BwcH/DAwM/QAA
ANwAAACsAAAAfwAAAGEAAABUAAAAUAAAAFAAAABQAAAAUAAAAEoAAAA3AAAAGQAAAAYAAAAAAAAAAAAA
AAAAAAABAAAADQAAADcAAAB4AAAAogAAAK4AAACwAAAAtgAAAMMAAADYAAAA7g0NDf7CwsL//f39//39
/f/BwcH/DAwM/gAAAO4AAADYAAAAwwAAALYAAACwAAAArwAAAK8AAACuAAAAogAAAHgAAAA3AAAADQAA
AAEAAAAAAAAAAAAAAAEAAAARAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8NDQ3/wsLC//39
/f/9/f3//f39//39/f/BwcH/DAwM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAogAA
AEoAAAARAAAAAQAAAAAAAAAAAAAAAQAAABMAAAD/84la/+6GWP/be1H/r2NB/3A/Kf8tGRD/Dg4N/8PD
wv/+/v3//v79//7+/f/9/f3//v7+//7+/v/BwcH/Dg0N/y0ZEP9wPyn/sGNB/9t8Uf/uhlj/84la/wAA
AP8AAACuAAAAUAAAABMAAAABAAAAAAAAAAAAAAABAAAAEwAAAP/uhlj/23tR/7BjQf9wPyn/LRkQ/w4O
Df/Dw8P//v7+//7+/f/+/v3//v79//39/f/+/v7//v7+//39/f/BwcH/Dg0M/y0ZEP9xPyn/sGNB/9t8
Uf/uhlj/AAAA/wAAAK8AAABQAAAAEwAAAAEAAAAAAAAAAAAAAAEAAAATAAAA/9t8Uf+wY0H/cUAp/y0Z
EP8ODg3/w8PC//7+/f/9/f3//v79//7+/f/9/f3//f39//7+/f/+/v3//f39//39/f/BwcH/Dg0N/y0Z
EP9xQCr/sGNB/9t8Uf8AAAD/AAAArwAAAFAAAAATAAAAAQAAAAAAAAAAAAAAAgAAABgAAAD/r2NB/3A/
Kf8tGRD/Dg4N/8PDw//+/v7//v79//nm3v/trZT/4YNh/9lrRP/VZkD/13ZW/+GeiP/14Nn//v79//7+
/f/BwcH/Dg0N/y0ZEP9wPyn/sGNB/wAAAP8AAACwAAAAUAAAABMAAAABAAAAAAAAAAAAAAAHAAAAKgAA
AP9wPyn/LRkQ/w4ODf/Dw8P//v7+//36+P/ztZr/53tO/+J1Sf/ecEX/22tB/9ZlPf/SXzn/zlo0/8tW
Mf/fmYT//Pn3//7+/v/BwcH/Dg0M/y0ZEP9wPyn/AAAA/wAAALYAAABUAAAAEwAAAAEAAAAAAAAABQAA
ABsAAABUAAAA/y0ZEP8ODg3/w8PC//7+/v/9+vn/9qiG/+6FV//qgFP/53tQ/+N2S//fcUf/22tC/9dm
Pf/SYDn/zlo0/8pVL//Xf2T//Pn3//7+/f/BwcH/Dg0M/y0ZEP8AAAD/AAAAwwAAAGEAAAAYAAAAAgAA
AAUAAAAZAAAARwAAAJAAAAD/Dg4N/8PDw//+/v7//v79//i7oP/zjF3/8oxe/++IWv/rg1b/531S/+R3
Tf/fcUj/22xD/9dmPv/TYDn/zlo0/8pVMP/fmYT//v79//39/f/BwcH/Dg0N/wAAAP8AAADYAAAAfwAA
ACoAAAAGAAAAGAAAAEYAAACKAAAA0g0NDf/Dw8L//f39//39/f/86uL/9I5g//SPYv/0kGP/849j/++K
Xv/shVn/6H9U/+R4Tv/fckj/22xD/9dmPv/TYDn/z1s1/8tWMf/14Nn//f39//7+/f/BwcH/DAwM/wAA
AO4AAACsAAAAUwAAABkAAAA6AAAAgQAAAM4NDQ39w8PD//7+/v/+/v7//v7+//i+pP/0kWT/9JNo//SV
af/0lWr/85Nn/++NYv/shlv/6H9V/+N5Tv/fckj/22xD/9dmPv/TYDn/zlo0/+GeiP/+/v3//v7+//7+
/v/BwcH/DAwM/gAAANsAAACJAAAAOgAAAFAAAAC1DQ0N/cPDw//+/v7//v7+//7+/v/+/v7/9qR///SW
a//1mnH/9Ztz//Wbc//1mnH/9JZs//CPZf/sh13/54BV/+N5T//fckj/22xD/9dmPv/SXzj/13dW//7+
/f/+/v7//v7+//39/f/BwcH/DAwM/QAAALkAAABRAAAAcA0NDfrDw8P//v7+//39/f/+/v3//v79//39
/f/1mnH/9Z52//ajfv/2pYH/9qWA//aifP/1nnb/9Jhv//CQZv/rh13/539V/+N4Tv/fckj/22tC/9Zl
Pf/VZkD//f39//39/f/+/v3//f39//39/f/BwcH/DAwM+gAAAHAAAABVDQ0N9sPDw//+/v7//f39//7+
/v/+/v7//v79//agev/2p4P/96+P//eyk//3spL/962M//ang//2oHn/9Jlv//CPZP/rhlv/6H5U/+R3
Tf/gcUf/2mpB/9lsRf/+/v3//v79//7+/v/9/f3//f39/8PDw/8NDQ32AAAAVAAAAAgAAABWDQ0N9sPD
w//9/f3//v79//7+/f/+/v3/97KT//exkf/4vaL/+cGo//jAp//4up7/97GR//ang//1nnb/85Zs/++N
Yf/rhFn/531S/+N2S//eb0X/4YNh//7+/f/+/v3//v79//39/f/CwsL/DQ0N+AAAAF8AAAAJAAAAAQAA
AAgAAABXDQ0N98PDw//+/v3//v79//7+/f/6zrr/+Lqd//nKtP/60L7/+c67//nGr//4up7/962M//ai
fP/1mXD/85Jn/++KXv/rg1b/53xQ/+J1Sf/trZT//v79//7+/v/+/v3/wsLC/w0NDfsAAACFAAAAGgAA
AAIAAAAAAAAAAQAAAAkAAABgDQ0N/8TEw//+/v3//v79//3w6v/4vaP/+tG+//vazP/72cr/+s+7//nB
p//3spL/9qWA//Wbc//0lWr/849j/++IW//rgVT/53tP//nm3v/9/f3//v7+/8PDwv8NDQ3/AAAAxAAA
AFUAAAATAAAAAQAAAAAAAAAAAAAAAgAAABoAAAD/FREQ/8TEw//+/v7//v7+//vZyf/5zbn/+9rM//vb
zP/60L7/+cKp//ezk//2pYH/9Ztz//SVaf/0kGP/8oxe/+6FV//ztZr//v7+//7+/f/Dw8P/FREQ/wAA
AP8AAACxAAAAUQAAABMAAAABAAAAAAAAAAAAAAABAAAAEwAAAP+hWjv/FREQ/8TEw//+/v3//vz7//rT
wf/5zbn/+tG+//nKtP/4vaL/96+P//ajfv/1mnH/9JNo//SPYf/zjF3/9qmG//36+f/+/v7/w8PC/xUR
EP+iWzz/AAAA/wAAAK8AAABQAAAAEwAAAAEAAAAAAAAAAAAAAAEAAAATAAAA/+yFWP+hWzv/FREQ/8TE
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
rEGAAKxBgACsQYAArEHAAaxB/D+sQQ==
</value>
</data>
</root>
\ No newline at end of file
namespace OnlineStore.XLRStore
using OnlineStore.XLRStore.useControl;
namespace OnlineStore.XLRStore
{
partial class FrmInputEquip
{
......@@ -20,19 +22,47 @@
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.btnScan = new System.Windows.Forms.Button();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.axisMoveControl1 = new OnlineStore.XLRStore.AxisMoveControl();
this.btnSave = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.mideleAxisP3 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.groupBox9 = new System.Windows.Forms.GroupBox();
this.updownAxisP8 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP9 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.mideleAxisP6 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.mideleAxisP2 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.mideleAxisP1 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP1 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP2 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP3 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.groupBox8 = new System.Windows.Forms.GroupBox();
this.updownAxisP13 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.mideleAxisP8 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP12 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.groupBox7 = new System.Windows.Forms.GroupBox();
this.mideleAxisP5 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP10 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP11 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.mideleAxisP7 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP6 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP7 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.mideleAxisP4 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP4 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.updownAxisP5 = new OnlineStore.XLRStore.useControl.AxisPointControl();
this.axisMoveControl1 = new OnlineStore.XLRStore.useControl.AxisMoveRectControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.groupDO = new System.Windows.Forms.GroupBox();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.SL_TrayLocation_After = new System.Windows.Forms.Button();
this.SL_FixedCylinder_Down = new System.Windows.Forms.Button();
this.SL_TopCylinder_Down = new System.Windows.Forms.Button();
this.SL_TopCylinder_Up = new System.Windows.Forms.Button();
this.SL_FixedCylinder_Up = new System.Windows.Forms.Button();
this.SL_TrayLocation_Before = new System.Windows.Forms.Button();
this.LineStop_B = new System.Windows.Forms.Button();
this.LineBack_B = new System.Windows.Forms.Button();
this.LineStart_B = new System.Windows.Forms.Button();
this.LineStop_A = new System.Windows.Forms.Button();
this.LineBack_A = new System.Windows.Forms.Button();
this.Shelf_StopDown_B = new System.Windows.Forms.Button();
this.Shelf_StopDown_A = new System.Windows.Forms.Button();
this.Shelf_StopUp_A = new System.Windows.Forms.Button();
this.Shelf_StopUp_B = new System.Windows.Forms.Button();
this.LineStart_A = new System.Windows.Forms.Button();
this.btnCloseAll = new System.Windows.Forms.Button();
this.clampJawControl1 = new OnlineStore.XLRStore.useControl.ClampJawControl();
this.groupBox1 = new System.Windows.Forms.GroupBox();
......@@ -55,7 +85,6 @@
this.lblwidth = new System.Windows.Forms.Label();
this.lblMoveInfo = new System.Windows.Forms.Label();
this.lblAgvInfo = new System.Windows.Forms.Label();
this.lblInstoreList = new System.Windows.Forms.Label();
this.lblThisSta = new System.Windows.Forms.Label();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.panBase = new System.Windows.Forms.Panel();
......@@ -65,7 +94,15 @@
this.lblStoreStatus = new System.Windows.Forms.Label();
this.btnStart = new System.Windows.Forms.Button();
this.btnStop = new System.Windows.Forms.Button();
this.groupBox10 = new System.Windows.Forms.GroupBox();
this.groupBox11 = new System.Windows.Forms.GroupBox();
this.tabPage2.SuspendLayout();
this.panel1.SuspendLayout();
this.groupBox9.SuspendLayout();
this.groupBox8.SuspendLayout();
this.groupBox7.SuspendLayout();
this.groupBox5.SuspendLayout();
this.groupBox2.SuspendLayout();
this.tabPage1.SuspendLayout();
this.groupDO.SuspendLayout();
this.groupBox1.SuspendLayout();
......@@ -75,6 +112,8 @@
this.groupBox6.SuspendLayout();
this.tabControl1.SuspendLayout();
this.panBase.SuspendLayout();
this.groupBox10.SuspendLayout();
this.groupBox11.SuspendLayout();
this.SuspendLayout();
//
// timer1
......@@ -96,20 +135,366 @@
//
// tabPage2
//
this.tabPage2.Controls.Add(this.groupBox11);
this.tabPage2.Controls.Add(this.groupBox10);
this.tabPage2.Controls.Add(this.groupBox9);
this.tabPage2.Controls.Add(this.btnSave);
this.tabPage2.Controls.Add(this.groupBox8);
this.tabPage2.Controls.Add(this.groupBox7);
this.tabPage2.Controls.Add(this.groupBox5);
this.tabPage2.Controls.Add(this.groupBox2);
this.tabPage2.Controls.Add(this.axisMoveControl1);
this.tabPage2.Location = new System.Drawing.Point(4, 26);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(985, 615);
this.tabPage2.Size = new System.Drawing.Size(985, 617);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = " 伺服信息 ";
this.tabPage2.UseVisualStyleBackColor = true;
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.White;
this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSave.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSave.Location = new System.Drawing.Point(735, 278);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(163, 40);
this.btnSave.TabIndex = 226;
this.btnSave.Text = "保存点位信息";
this.btnSave.UseVisualStyleBackColor = false;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// panel1
//
this.panel1.Controls.Add(this.mideleAxisP3);
this.panel1.Controls.Add(this.mideleAxisP2);
this.panel1.Controls.Add(this.updownAxisP2);
this.panel1.Controls.Add(this.updownAxisP3);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(3, 19);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(241, 210);
this.panel1.TabIndex = 220;
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
//
// mideleAxisP3
//
this.mideleAxisP3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP3.Location = new System.Drawing.Point(3, 56);
this.mideleAxisP3.Name = "mideleAxisP3";
this.mideleAxisP3.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP3.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP3.PointText = "旋转轴-B料口取料点P3:";
this.mideleAxisP3.PointValue = 0;
this.mideleAxisP3.Size = new System.Drawing.Size(223, 41);
this.mideleAxisP3.TabIndex = 2;
//
// groupBox9
//
this.groupBox9.Controls.Add(this.updownAxisP8);
this.groupBox9.Controls.Add(this.updownAxisP9);
this.groupBox9.Controls.Add(this.mideleAxisP6);
this.groupBox9.Location = new System.Drawing.Point(600, 116);
this.groupBox9.Name = "groupBox9";
this.groupBox9.Size = new System.Drawing.Size(286, 146);
this.groupBox9.TabIndex = 225;
this.groupBox9.TabStop = false;
this.groupBox9.Text = "NG料区点位";
//
// updownAxisP8
//
this.updownAxisP8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP8.Location = new System.Drawing.Point(6, 59);
this.updownAxisP8.Name = "updownAxisP8";
this.updownAxisP8.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP8.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP8.PointText = "升降轴-NG料区放料高点P8:";
this.updownAxisP8.PointValue = 0;
this.updownAxisP8.Size = new System.Drawing.Size(247, 41);
this.updownAxisP8.TabIndex = 7;
//
// updownAxisP9
//
this.updownAxisP9.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP9.Location = new System.Drawing.Point(6, 100);
this.updownAxisP9.Name = "updownAxisP9";
this.updownAxisP9.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP9.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP9.PointText = "升降轴-NG料区放料低点P9:";
this.updownAxisP9.PointValue = 0;
this.updownAxisP9.Size = new System.Drawing.Size(247, 41);
this.updownAxisP9.TabIndex = 8;
//
// mideleAxisP6
//
this.mideleAxisP6.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP6.Location = new System.Drawing.Point(6, 18);
this.mideleAxisP6.Name = "mideleAxisP6";
this.mideleAxisP6.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP6.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP6.PointText = "旋转轴-NG料区放料点P6:";
this.mideleAxisP6.PointValue = 0;
this.mideleAxisP6.Size = new System.Drawing.Size(247, 41);
this.mideleAxisP6.TabIndex = 5;
//
// mideleAxisP2
//
this.mideleAxisP2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP2.Location = new System.Drawing.Point(3, 9);
this.mideleAxisP2.Name = "mideleAxisP2";
this.mideleAxisP2.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP2.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP2.PointText = "旋转轴-A料口取料点P2:";
this.mideleAxisP2.PointValue = 0;
this.mideleAxisP2.Size = new System.Drawing.Size(223, 41);
this.mideleAxisP2.TabIndex = 1;
//
// mideleAxisP1
//
this.mideleAxisP1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP1.Location = new System.Drawing.Point(6, 20);
this.mideleAxisP1.Name = "mideleAxisP1";
this.mideleAxisP1.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP1.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP1.PointText = "旋转轴待机点P1:";
this.mideleAxisP1.PointValue = 0;
this.mideleAxisP1.Size = new System.Drawing.Size(247, 41);
this.mideleAxisP1.TabIndex = 0;
//
// updownAxisP1
//
this.updownAxisP1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP1.Location = new System.Drawing.Point(6, 59);
this.updownAxisP1.Name = "updownAxisP1";
this.updownAxisP1.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP1.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP1.PointText = "升降轴-待机点P1:";
this.updownAxisP1.PointValue = 0;
this.updownAxisP1.Size = new System.Drawing.Size(247, 41);
this.updownAxisP1.TabIndex = 0;
//
// updownAxisP2
//
this.updownAxisP2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP2.Location = new System.Drawing.Point(3, 103);
this.updownAxisP2.Name = "updownAxisP2";
this.updownAxisP2.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP2.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP2.PointText = "升降轴-A料口取料点P2:";
this.updownAxisP2.PointValue = 0;
this.updownAxisP2.Size = new System.Drawing.Size(223, 41);
this.updownAxisP2.TabIndex = 1;
//
// updownAxisP3
//
this.updownAxisP3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP3.Location = new System.Drawing.Point(3, 150);
this.updownAxisP3.Name = "updownAxisP3";
this.updownAxisP3.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP3.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP3.PointText = "升降轴-B料口取料点P3:";
this.updownAxisP3.PointValue = 0;
this.updownAxisP3.Size = new System.Drawing.Size(223, 41);
this.updownAxisP3.TabIndex = 2;
//
// groupBox8
//
this.groupBox8.Controls.Add(this.updownAxisP13);
this.groupBox8.Controls.Add(this.mideleAxisP8);
this.groupBox8.Controls.Add(this.updownAxisP12);
this.groupBox8.Location = new System.Drawing.Point(302, 154);
this.groupBox8.Name = "groupBox8";
this.groupBox8.Size = new System.Drawing.Size(286, 150);
this.groupBox8.TabIndex = 224;
this.groupBox8.TabStop = false;
this.groupBox8.Text = "B下暂存区点位";
//
// updownAxisP13
//
this.updownAxisP13.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP13.Location = new System.Drawing.Point(6, 103);
this.updownAxisP13.Name = "updownAxisP13";
this.updownAxisP13.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP13.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP13.PointText = "升降轴-B下暂存区取料低点P13:";
this.updownAxisP13.PointValue = 0;
this.updownAxisP13.Size = new System.Drawing.Size(266, 41);
this.updownAxisP13.TabIndex = 12;
//
// mideleAxisP8
//
this.mideleAxisP8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP8.Location = new System.Drawing.Point(6, 21);
this.mideleAxisP8.Name = "mideleAxisP8";
this.mideleAxisP8.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP8.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP8.PointText = "旋转轴-B下暂存区取料点P8:";
this.mideleAxisP8.PointValue = 0;
this.mideleAxisP8.Size = new System.Drawing.Size(266, 41);
this.mideleAxisP8.TabIndex = 7;
//
// updownAxisP12
//
this.updownAxisP12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP12.Location = new System.Drawing.Point(6, 62);
this.updownAxisP12.Name = "updownAxisP12";
this.updownAxisP12.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP12.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP12.PointText = "升降轴-B下暂存区取料高点P12:";
this.updownAxisP12.PointValue = 0;
this.updownAxisP12.Size = new System.Drawing.Size(266, 41);
this.updownAxisP12.TabIndex = 11;
//
// groupBox7
//
this.groupBox7.Controls.Add(this.mideleAxisP5);
this.groupBox7.Controls.Add(this.updownAxisP10);
this.groupBox7.Controls.Add(this.updownAxisP11);
this.groupBox7.Location = new System.Drawing.Point(302, 6);
this.groupBox7.Name = "groupBox7";
this.groupBox7.Size = new System.Drawing.Size(286, 146);
this.groupBox7.TabIndex = 224;
this.groupBox7.TabStop = false;
this.groupBox7.Text = "B上暂存区点位";
//
// mideleAxisP5
//
this.mideleAxisP5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP5.Location = new System.Drawing.Point(6, 20);
this.mideleAxisP5.Name = "mideleAxisP5";
this.mideleAxisP5.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP5.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP5.PointText = "旋转轴-B上暂存区放料点P5:";
this.mideleAxisP5.PointValue = 0;
this.mideleAxisP5.Size = new System.Drawing.Size(266, 41);
this.mideleAxisP5.TabIndex = 4;
//
// updownAxisP10
//
this.updownAxisP10.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP10.Location = new System.Drawing.Point(6, 61);
this.updownAxisP10.Name = "updownAxisP10";
this.updownAxisP10.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP10.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP10.PointText = "升降轴-B上暂存区放料高点P10:";
this.updownAxisP10.PointValue = 0;
this.updownAxisP10.Size = new System.Drawing.Size(266, 41);
this.updownAxisP10.TabIndex = 9;
//
// updownAxisP11
//
this.updownAxisP11.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP11.Location = new System.Drawing.Point(6, 102);
this.updownAxisP11.Name = "updownAxisP11";
this.updownAxisP11.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP11.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP11.PointText = "升降轴-B上暂存区放料低点P11:";
this.updownAxisP11.PointValue = 0;
this.updownAxisP11.Size = new System.Drawing.Size(266, 41);
this.updownAxisP11.TabIndex = 10;
//
// groupBox5
//
this.groupBox5.Controls.Add(this.mideleAxisP7);
this.groupBox5.Controls.Add(this.updownAxisP6);
this.groupBox5.Controls.Add(this.updownAxisP7);
this.groupBox5.Location = new System.Drawing.Point(7, 154);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(286, 150);
this.groupBox5.TabIndex = 223;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "A下暂存区点位";
//
// mideleAxisP7
//
this.mideleAxisP7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP7.Location = new System.Drawing.Point(6, 18);
this.mideleAxisP7.Name = "mideleAxisP7";
this.mideleAxisP7.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP7.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP7.PointText = "旋转轴-A下暂存区取料点P7:";
this.mideleAxisP7.PointValue = 0;
this.mideleAxisP7.Size = new System.Drawing.Size(266, 41);
this.mideleAxisP7.TabIndex = 6;
//
// updownAxisP6
//
this.updownAxisP6.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP6.Location = new System.Drawing.Point(6, 59);
this.updownAxisP6.Name = "updownAxisP6";
this.updownAxisP6.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP6.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP6.PointText = "升降轴-A下暂存区取料高点P6:";
this.updownAxisP6.PointValue = 0;
this.updownAxisP6.Size = new System.Drawing.Size(266, 41);
this.updownAxisP6.TabIndex = 5;
//
// updownAxisP7
//
this.updownAxisP7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP7.Location = new System.Drawing.Point(6, 100);
this.updownAxisP7.Name = "updownAxisP7";
this.updownAxisP7.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP7.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP7.PointText = "升降轴-A下暂存区取料低点P7:";
this.updownAxisP7.PointValue = 0;
this.updownAxisP7.Size = new System.Drawing.Size(266, 41);
this.updownAxisP7.TabIndex = 6;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.mideleAxisP4);
this.groupBox2.Controls.Add(this.updownAxisP4);
this.groupBox2.Controls.Add(this.updownAxisP5);
this.groupBox2.Location = new System.Drawing.Point(7, 6);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(286, 146);
this.groupBox2.TabIndex = 222;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "A上暂存区点位";
//
// mideleAxisP4
//
this.mideleAxisP4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.mideleAxisP4.Location = new System.Drawing.Point(6, 21);
this.mideleAxisP4.Name = "mideleAxisP4";
this.mideleAxisP4.PointBackColor = System.Drawing.Color.SkyBlue;
this.mideleAxisP4.PointForeColor = System.Drawing.Color.Black;
this.mideleAxisP4.PointText = "旋转轴-A上暂存区放料点P4:";
this.mideleAxisP4.PointValue = 0;
this.mideleAxisP4.Size = new System.Drawing.Size(266, 41);
this.mideleAxisP4.TabIndex = 3;
//
// updownAxisP4
//
this.updownAxisP4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP4.Location = new System.Drawing.Point(6, 62);
this.updownAxisP4.Name = "updownAxisP4";
this.updownAxisP4.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP4.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP4.PointText = "升降轴-A上暂存区放料高点P4:";
this.updownAxisP4.PointValue = 0;
this.updownAxisP4.Size = new System.Drawing.Size(266, 41);
this.updownAxisP4.TabIndex = 3;
//
// updownAxisP5
//
this.updownAxisP5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.updownAxisP5.Location = new System.Drawing.Point(6, 103);
this.updownAxisP5.Name = "updownAxisP5";
this.updownAxisP5.PointBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
this.updownAxisP5.PointForeColor = System.Drawing.Color.Black;
this.updownAxisP5.PointText = "升降轴-A上暂存区放料低点P5:";
this.updownAxisP5.PointValue = 0;
this.updownAxisP5.Size = new System.Drawing.Size(266, 41);
this.updownAxisP5.TabIndex = 4;
//
// axisMoveControl1
//
this.axisMoveControl1.Location = new System.Drawing.Point(4, 4);
this.axisMoveControl1.Location = new System.Drawing.Point(5, 310);
this.axisMoveControl1.Name = "axisMoveControl1";
this.axisMoveControl1.Size = new System.Drawing.Size(488, 403);
this.axisMoveControl1.Size = new System.Drawing.Size(719, 269);
this.axisMoveControl1.TabIndex = 219;
//
// tabPage1
......@@ -132,150 +517,160 @@
this.groupDO.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupDO.Controls.Add(this.button2);
this.groupDO.Controls.Add(this.button3);
this.groupDO.Controls.Add(this.button4);
this.groupDO.Controls.Add(this.button1);
this.groupDO.Controls.Add(this.SL_TrayLocation_After);
this.groupDO.Controls.Add(this.SL_FixedCylinder_Down);
this.groupDO.Controls.Add(this.SL_TopCylinder_Down);
this.groupDO.Controls.Add(this.SL_TopCylinder_Up);
this.groupDO.Controls.Add(this.SL_FixedCylinder_Up);
this.groupDO.Controls.Add(this.SL_TrayLocation_Before);
this.groupDO.Controls.Add(this.LineStop_B);
this.groupDO.Controls.Add(this.LineBack_B);
this.groupDO.Controls.Add(this.LineStart_B);
this.groupDO.Controls.Add(this.LineStop_A);
this.groupDO.Controls.Add(this.LineBack_A);
this.groupDO.Controls.Add(this.Shelf_StopDown_B);
this.groupDO.Controls.Add(this.Shelf_StopDown_A);
this.groupDO.Controls.Add(this.Shelf_StopUp_A);
this.groupDO.Controls.Add(this.Shelf_StopUp_B);
this.groupDO.Controls.Add(this.LineStart_A);
this.groupDO.Controls.Add(this.btnCloseAll);
this.groupDO.Location = new System.Drawing.Point(468, 119);
this.groupDO.Location = new System.Drawing.Point(480, 119);
this.groupDO.Name = "groupDO";
this.groupDO.Size = new System.Drawing.Size(501, 239);
this.groupDO.Size = new System.Drawing.Size(496, 217);
this.groupDO.TabIndex = 255;
this.groupDO.TabStop = false;
this.groupDO.Text = "IO操作测试";
//
// button2
//
this.button2.BackColor = System.Drawing.Color.White;
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button2.Location = new System.Drawing.Point(205, 191);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(135, 34);
this.button2.TabIndex = 286;
this.button2.Text = "B料口电机停止";
this.button2.UseVisualStyleBackColor = false;
//
// button3
//
this.button3.BackColor = System.Drawing.Color.White;
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button3.Location = new System.Drawing.Point(205, 151);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(135, 34);
this.button3.TabIndex = 285;
this.button3.Text = "B料口电机反转<<";
this.button3.UseVisualStyleBackColor = false;
//
// button4
//
this.button4.BackColor = System.Drawing.Color.White;
this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button4.Location = new System.Drawing.Point(205, 111);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(135, 34);
this.button4.TabIndex = 284;
this.button4.Text = "B料口电机启动>>";
this.button4.UseVisualStyleBackColor = false;
//
// button1
//
this.button1.BackColor = System.Drawing.Color.White;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(17, 191);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(135, 34);
this.button1.TabIndex = 283;
this.button1.Text = "A料口电机停止";
this.button1.UseVisualStyleBackColor = false;
//
// SL_TrayLocation_After
//
this.SL_TrayLocation_After.BackColor = System.Drawing.Color.White;
this.SL_TrayLocation_After.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_TrayLocation_After.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_TrayLocation_After.Location = new System.Drawing.Point(17, 151);
this.SL_TrayLocation_After.Name = "SL_TrayLocation_After";
this.SL_TrayLocation_After.Size = new System.Drawing.Size(135, 34);
this.SL_TrayLocation_After.TabIndex = 282;
this.SL_TrayLocation_After.Text = "A料口电机反转<<";
this.SL_TrayLocation_After.UseVisualStyleBackColor = false;
//
// SL_FixedCylinder_Down
//
this.SL_FixedCylinder_Down.BackColor = System.Drawing.Color.White;
this.SL_FixedCylinder_Down.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_FixedCylinder_Down.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_FixedCylinder_Down.Location = new System.Drawing.Point(205, 61);
this.SL_FixedCylinder_Down.Name = "SL_FixedCylinder_Down";
this.SL_FixedCylinder_Down.Size = new System.Drawing.Size(135, 34);
this.SL_FixedCylinder_Down.TabIndex = 277;
this.SL_FixedCylinder_Down.Text = "B料口阻挡下降 ↓";
this.SL_FixedCylinder_Down.UseVisualStyleBackColor = false;
//
// SL_TopCylinder_Down
//
this.SL_TopCylinder_Down.BackColor = System.Drawing.Color.White;
this.SL_TopCylinder_Down.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_TopCylinder_Down.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_TopCylinder_Down.Location = new System.Drawing.Point(17, 61);
this.SL_TopCylinder_Down.Name = "SL_TopCylinder_Down";
this.SL_TopCylinder_Down.Size = new System.Drawing.Size(135, 34);
this.SL_TopCylinder_Down.TabIndex = 276;
this.SL_TopCylinder_Down.Text = "A料口阻挡下降 ↓";
this.SL_TopCylinder_Down.UseVisualStyleBackColor = false;
//
// SL_TopCylinder_Up
//
this.SL_TopCylinder_Up.BackColor = System.Drawing.Color.White;
this.SL_TopCylinder_Up.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_TopCylinder_Up.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_TopCylinder_Up.Location = new System.Drawing.Point(17, 21);
this.SL_TopCylinder_Up.Name = "SL_TopCylinder_Up";
this.SL_TopCylinder_Up.Size = new System.Drawing.Size(135, 34);
this.SL_TopCylinder_Up.TabIndex = 274;
this.SL_TopCylinder_Up.Text = "A料口阻挡上升 ↑";
this.SL_TopCylinder_Up.UseVisualStyleBackColor = false;
//
// SL_FixedCylinder_Up
//
this.SL_FixedCylinder_Up.BackColor = System.Drawing.Color.White;
this.SL_FixedCylinder_Up.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_FixedCylinder_Up.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_FixedCylinder_Up.Location = new System.Drawing.Point(205, 21);
this.SL_FixedCylinder_Up.Name = "SL_FixedCylinder_Up";
this.SL_FixedCylinder_Up.Size = new System.Drawing.Size(135, 34);
this.SL_FixedCylinder_Up.TabIndex = 273;
this.SL_FixedCylinder_Up.Text = "B料口阻挡上升 ↑";
this.SL_FixedCylinder_Up.UseVisualStyleBackColor = false;
//
// SL_TrayLocation_Before
//
this.SL_TrayLocation_Before.BackColor = System.Drawing.Color.White;
this.SL_TrayLocation_Before.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SL_TrayLocation_Before.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.SL_TrayLocation_Before.Location = new System.Drawing.Point(17, 111);
this.SL_TrayLocation_Before.Name = "SL_TrayLocation_Before";
this.SL_TrayLocation_Before.Size = new System.Drawing.Size(135, 34);
this.SL_TrayLocation_Before.TabIndex = 255;
this.SL_TrayLocation_Before.Text = "A料口电机启动>>";
this.SL_TrayLocation_Before.UseVisualStyleBackColor = false;
// LineStop_B
//
this.LineStop_B.BackColor = System.Drawing.Color.White;
this.LineStop_B.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineStop_B.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineStop_B.Location = new System.Drawing.Point(344, 101);
this.LineStop_B.Name = "LineStop_B";
this.LineStop_B.Size = new System.Drawing.Size(135, 34);
this.LineStop_B.TabIndex = 286;
this.LineStop_B.Text = "B料口电机停止";
this.LineStop_B.UseVisualStyleBackColor = false;
this.LineStop_B.Click += new System.EventHandler(this.LineStop_B_Click);
//
// LineBack_B
//
this.LineBack_B.BackColor = System.Drawing.Color.White;
this.LineBack_B.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineBack_B.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineBack_B.Location = new System.Drawing.Point(344, 61);
this.LineBack_B.Name = "LineBack_B";
this.LineBack_B.Size = new System.Drawing.Size(135, 34);
this.LineBack_B.TabIndex = 285;
this.LineBack_B.Text = "B料口电机反转<<";
this.LineBack_B.UseVisualStyleBackColor = false;
this.LineBack_B.Click += new System.EventHandler(this.LineBack_B_Click);
//
// LineStart_B
//
this.LineStart_B.BackColor = System.Drawing.Color.White;
this.LineStart_B.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineStart_B.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineStart_B.Location = new System.Drawing.Point(344, 21);
this.LineStart_B.Name = "LineStart_B";
this.LineStart_B.Size = new System.Drawing.Size(135, 34);
this.LineStart_B.TabIndex = 284;
this.LineStart_B.Text = "B料口电机启动>>";
this.LineStart_B.UseVisualStyleBackColor = false;
this.LineStart_B.Click += new System.EventHandler(this.LineStart_B_Click);
//
// LineStop_A
//
this.LineStop_A.BackColor = System.Drawing.Color.White;
this.LineStop_A.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineStop_A.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineStop_A.Location = new System.Drawing.Point(173, 101);
this.LineStop_A.Name = "LineStop_A";
this.LineStop_A.Size = new System.Drawing.Size(135, 34);
this.LineStop_A.TabIndex = 283;
this.LineStop_A.Text = "A料口电机停止";
this.LineStop_A.UseVisualStyleBackColor = false;
this.LineStop_A.Click += new System.EventHandler(this.LineStop_A_Click);
//
// LineBack_A
//
this.LineBack_A.BackColor = System.Drawing.Color.White;
this.LineBack_A.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineBack_A.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineBack_A.Location = new System.Drawing.Point(173, 61);
this.LineBack_A.Name = "LineBack_A";
this.LineBack_A.Size = new System.Drawing.Size(135, 34);
this.LineBack_A.TabIndex = 282;
this.LineBack_A.Text = "A料口电机反转<<";
this.LineBack_A.UseVisualStyleBackColor = false;
this.LineBack_A.Click += new System.EventHandler(this.LineBack_A_Click);
//
// Shelf_StopDown_B
//
this.Shelf_StopDown_B.BackColor = System.Drawing.Color.White;
this.Shelf_StopDown_B.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Shelf_StopDown_B.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Shelf_StopDown_B.Location = new System.Drawing.Point(15, 151);
this.Shelf_StopDown_B.Name = "Shelf_StopDown_B";
this.Shelf_StopDown_B.Size = new System.Drawing.Size(135, 34);
this.Shelf_StopDown_B.TabIndex = 277;
this.Shelf_StopDown_B.Text = "B料口阻挡下降 ↓";
this.Shelf_StopDown_B.UseVisualStyleBackColor = false;
this.Shelf_StopDown_B.Click += new System.EventHandler(this.Shelf_StopDown_B_Click);
//
// Shelf_StopDown_A
//
this.Shelf_StopDown_A.BackColor = System.Drawing.Color.White;
this.Shelf_StopDown_A.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Shelf_StopDown_A.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Shelf_StopDown_A.Location = new System.Drawing.Point(15, 61);
this.Shelf_StopDown_A.Name = "Shelf_StopDown_A";
this.Shelf_StopDown_A.Size = new System.Drawing.Size(135, 34);
this.Shelf_StopDown_A.TabIndex = 276;
this.Shelf_StopDown_A.Text = "A料口阻挡下降 ↓";
this.Shelf_StopDown_A.UseVisualStyleBackColor = false;
this.Shelf_StopDown_A.Click += new System.EventHandler(this.Shelf_StopDown_A_Click);
//
// Shelf_StopUp_A
//
this.Shelf_StopUp_A.BackColor = System.Drawing.Color.White;
this.Shelf_StopUp_A.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Shelf_StopUp_A.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Shelf_StopUp_A.Location = new System.Drawing.Point(15, 21);
this.Shelf_StopUp_A.Name = "Shelf_StopUp_A";
this.Shelf_StopUp_A.Size = new System.Drawing.Size(135, 34);
this.Shelf_StopUp_A.TabIndex = 274;
this.Shelf_StopUp_A.Text = "A料口阻挡上升 ↑";
this.Shelf_StopUp_A.UseVisualStyleBackColor = false;
this.Shelf_StopUp_A.Click += new System.EventHandler(this.Shelf_StopUp_A_Click);
//
// Shelf_StopUp_B
//
this.Shelf_StopUp_B.BackColor = System.Drawing.Color.White;
this.Shelf_StopUp_B.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.Shelf_StopUp_B.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Shelf_StopUp_B.Location = new System.Drawing.Point(15, 111);
this.Shelf_StopUp_B.Name = "Shelf_StopUp_B";
this.Shelf_StopUp_B.Size = new System.Drawing.Size(135, 34);
this.Shelf_StopUp_B.TabIndex = 273;
this.Shelf_StopUp_B.Text = "B料口阻挡上升 ↑";
this.Shelf_StopUp_B.UseVisualStyleBackColor = false;
this.Shelf_StopUp_B.Click += new System.EventHandler(this.Shelf_StopUp_B_Click);
//
// LineStart_A
//
this.LineStart_A.BackColor = System.Drawing.Color.White;
this.LineStart_A.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.LineStart_A.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.LineStart_A.Location = new System.Drawing.Point(173, 21);
this.LineStart_A.Name = "LineStart_A";
this.LineStart_A.Size = new System.Drawing.Size(135, 34);
this.LineStart_A.TabIndex = 255;
this.LineStart_A.Text = "A料口电机启动>>";
this.LineStart_A.UseVisualStyleBackColor = false;
this.LineStart_A.Click += new System.EventHandler(this.LineStart_A_Click);
//
// btnCloseAll
//
this.btnCloseAll.BackColor = System.Drawing.Color.White;
this.btnCloseAll.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCloseAll.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCloseAll.Location = new System.Drawing.Point(360, 191);
this.btnCloseAll.Location = new System.Drawing.Point(344, 160);
this.btnCloseAll.Name = "btnCloseAll";
this.btnCloseAll.Size = new System.Drawing.Size(135, 34);
this.btnCloseAll.TabIndex = 259;
......@@ -285,9 +680,9 @@
//
// clampJawControl1
//
this.clampJawControl1.Location = new System.Drawing.Point(468, 364);
this.clampJawControl1.Location = new System.Drawing.Point(474, 342);
this.clampJawControl1.Name = "clampJawControl1";
this.clampJawControl1.Size = new System.Drawing.Size(507, 208);
this.clampJawControl1.Size = new System.Drawing.Size(505, 216);
this.clampJawControl1.TabIndex = 280;
//
// groupBox1
......@@ -303,9 +698,9 @@
this.groupBox1.Controls.Add(this.txtWriteTime);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.groupBox1.Location = new System.Drawing.Point(468, 6);
this.groupBox1.Location = new System.Drawing.Point(480, 6);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(501, 107);
this.groupBox1.Size = new System.Drawing.Size(496, 107);
this.groupBox1.TabIndex = 105;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "DO写入";
......@@ -362,7 +757,7 @@
// txtSlaveId
//
this.txtSlaveId.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtSlaveId.Location = new System.Drawing.Point(427, 27);
this.txtSlaveId.Location = new System.Drawing.Point(427, 24);
this.txtSlaveId.MaxLength = 10;
this.txtSlaveId.Name = "txtSlaveId";
this.txtSlaveId.Size = new System.Drawing.Size(12, 23);
......@@ -428,7 +823,7 @@
this.groupBox3.Controls.Add(this.tableLayoutPanel1);
this.groupBox3.Location = new System.Drawing.Point(6, 6);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(220, 599);
this.groupBox3.Size = new System.Drawing.Size(231, 602);
this.groupBox3.TabIndex = 103;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "DI列表";
......@@ -446,7 +841,7 @@
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 17F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 17F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(209, 579);
this.tableLayoutPanel1.Size = new System.Drawing.Size(220, 582);
this.tableLayoutPanel1.TabIndex = 102;
//
// groupBox4
......@@ -454,9 +849,9 @@
this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.groupBox4.Controls.Add(this.tableLayoutPanel2);
this.groupBox4.Location = new System.Drawing.Point(235, 6);
this.groupBox4.Location = new System.Drawing.Point(243, 6);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(220, 599);
this.groupBox4.Size = new System.Drawing.Size(231, 602);
this.groupBox4.TabIndex = 104;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "DO列表";
......@@ -474,7 +869,7 @@
this.tableLayoutPanel2.RowCount = 2;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 17F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 17F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(209, 579);
this.tableLayoutPanel2.Size = new System.Drawing.Size(220, 582);
this.tableLayoutPanel2.TabIndex = 103;
//
// tabPage3
......@@ -496,7 +891,6 @@
this.groupBox6.Controls.Add(this.lblwidth);
this.groupBox6.Controls.Add(this.lblMoveInfo);
this.groupBox6.Controls.Add(this.lblAgvInfo);
this.groupBox6.Controls.Add(this.lblInstoreList);
this.groupBox6.Controls.Add(this.lblThisSta);
this.groupBox6.Location = new System.Drawing.Point(3, 3);
this.groupBox6.Name = "groupBox6";
......@@ -507,11 +901,12 @@
//
// btnHlhasReel
//
this.btnHlhasReel.BackColor = System.Drawing.Color.White;
this.btnHlhasReel.BackColor = System.Drawing.Color.SkyBlue;
this.btnHlhasReel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnHlhasReel.Font = new System.Drawing.Font("微软雅黑", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnHlhasReel.Location = new System.Drawing.Point(11, 507);
this.btnHlhasReel.Name = "btnHlhasReel";
this.btnHlhasReel.Size = new System.Drawing.Size(121, 35);
this.btnHlhasReel.Size = new System.Drawing.Size(217, 55);
this.btnHlhasReel.TabIndex = 288;
this.btnHlhasReel.Text = "忽略夹爪有料信号";
this.btnHlhasReel.UseVisualStyleBackColor = false;
......@@ -527,7 +922,7 @@
this.lblwidth.Name = "lblwidth";
this.lblwidth.Size = new System.Drawing.Size(967, 117);
this.lblwidth.TabIndex = 279;
this.lblwidth.Text = "当前料盘";
this.lblwidth.Text = "当前料盘:";
//
// lblMoveInfo
//
......@@ -536,9 +931,9 @@
this.lblMoveInfo.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblMoveInfo.Location = new System.Drawing.Point(6, 164);
this.lblMoveInfo.Name = "lblMoveInfo";
this.lblMoveInfo.Size = new System.Drawing.Size(68, 17);
this.lblMoveInfo.Size = new System.Drawing.Size(59, 17);
this.lblMoveInfo.TabIndex = 278;
this.lblMoveInfo.Text = "运动信息";
this.lblMoveInfo.Text = "运动信息:";
//
// lblAgvInfo
//
......@@ -551,18 +946,6 @@
this.lblAgvInfo.TabIndex = 276;
this.lblAgvInfo.Text = "AGV 状态";
//
// lblInstoreList
//
this.lblInstoreList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblInstoreList.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblInstoreList.ForeColor = System.Drawing.Color.Green;
this.lblInstoreList.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblInstoreList.Location = new System.Drawing.Point(406, 349);
this.lblInstoreList.Name = "lblInstoreList";
this.lblInstoreList.Size = new System.Drawing.Size(406, 109);
this.lblInstoreList.TabIndex = 277;
//
// lblThisSta
//
this.lblThisSta.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
......@@ -572,7 +955,7 @@
this.lblThisSta.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblThisSta.Location = new System.Drawing.Point(406, 176);
this.lblThisSta.Name = "lblThisSta";
this.lblThisSta.Size = new System.Drawing.Size(526, 259);
this.lblThisSta.Size = new System.Drawing.Size(567, 259);
this.lblThisSta.TabIndex = 246;
this.lblThisSta.Text = "等待启动";
this.lblThisSta.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
......@@ -585,10 +968,10 @@
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Location = new System.Drawing.Point(5, 60);
this.tabControl1.Location = new System.Drawing.Point(5, 58);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(993, 645);
this.tabControl1.Size = new System.Drawing.Size(993, 647);
this.tabControl1.TabIndex = 257;
//
// panBase
......@@ -641,6 +1024,7 @@
this.chbDebug.TabIndex = 247;
this.chbDebug.Text = "调试状态";
this.chbDebug.UseVisualStyleBackColor = true;
this.chbDebug.CheckedChanged += new System.EventHandler(this.chbDebug_CheckedChanged);
this.chbDebug.Click += new System.EventHandler(this.chbDebug_CheckedChanged);
//
// lblStoreStatus
......@@ -682,6 +1066,27 @@
this.btnStop.UseVisualStyleBackColor = false;
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
//
// groupBox10
//
this.groupBox10.Controls.Add(this.mideleAxisP1);
this.groupBox10.Controls.Add(this.updownAxisP1);
this.groupBox10.Location = new System.Drawing.Point(600, 6);
this.groupBox10.Name = "groupBox10";
this.groupBox10.Size = new System.Drawing.Size(286, 104);
this.groupBox10.TabIndex = 227;
this.groupBox10.TabStop = false;
this.groupBox10.Text = "待机点点位";
//
// groupBox11
//
this.groupBox11.Controls.Add(this.panel1);
this.groupBox11.Location = new System.Drawing.Point(729, 338);
this.groupBox11.Name = "groupBox11";
this.groupBox11.Size = new System.Drawing.Size(247, 232);
this.groupBox11.TabIndex = 228;
this.groupBox11.TabStop = false;
this.groupBox11.Text = "料串取放料点位";
//
// FrmInputEquip
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
......@@ -695,9 +1100,15 @@
this.Name = "FrmInputEquip";
this.Text = "上料机构";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmTest_FormClosing);
this.Load += new System.EventHandler(this.FrmStoreIOStatus_Load);
this.Load += new System.EventHandler(this.FrmInputEquip_Load);
this.Shown += new System.EventHandler(this.FrmIOStatus_Shown);
this.tabPage2.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.groupBox9.ResumeLayout(false);
this.groupBox8.ResumeLayout(false);
this.groupBox7.ResumeLayout(false);
this.groupBox5.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.groupDO.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
......@@ -710,6 +1121,8 @@
this.tabControl1.ResumeLayout(false);
this.panBase.ResumeLayout(false);
this.panBase.PerformLayout();
this.groupBox10.ResumeLayout(false);
this.groupBox11.ResumeLayout(false);
this.ResumeLayout(false);
}
......@@ -719,19 +1132,19 @@
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Button btnScan;
private System.Windows.Forms.TabPage tabPage2;
private AxisMoveControl axisMoveControl1;
private AxisMoveRectControl axisMoveControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.GroupBox groupDO;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button SL_TrayLocation_After;
private System.Windows.Forms.Button SL_FixedCylinder_Down;
private System.Windows.Forms.Button SL_TopCylinder_Down;
private System.Windows.Forms.Button SL_TopCylinder_Up;
private System.Windows.Forms.Button SL_FixedCylinder_Up;
private System.Windows.Forms.Button SL_TrayLocation_Before;
private System.Windows.Forms.Button LineStop_B;
private System.Windows.Forms.Button LineBack_B;
private System.Windows.Forms.Button LineStart_B;
private System.Windows.Forms.Button LineStop_A;
private System.Windows.Forms.Button LineBack_A;
private System.Windows.Forms.Button Shelf_StopDown_B;
private System.Windows.Forms.Button Shelf_StopDown_A;
private System.Windows.Forms.Button Shelf_StopUp_A;
private System.Windows.Forms.Button Shelf_StopUp_B;
private System.Windows.Forms.Button LineStart_A;
private System.Windows.Forms.Button btnCloseAll;
private useControl.ClampJawControl clampJawControl1;
private System.Windows.Forms.GroupBox groupBox1;
......@@ -754,7 +1167,6 @@
private System.Windows.Forms.Label lblwidth;
private System.Windows.Forms.Label lblMoveInfo;
private System.Windows.Forms.Label lblAgvInfo;
private System.Windows.Forms.Label lblInstoreList;
private System.Windows.Forms.Label lblThisSta;
private System.Windows.Forms.TabControl tabControl1;
protected System.Windows.Forms.Panel panBase;
......@@ -764,6 +1176,36 @@
protected System.Windows.Forms.Label lblStoreStatus;
protected System.Windows.Forms.Button btnStart;
protected System.Windows.Forms.Button btnStop;
private System.Windows.Forms.Panel panel1;
private useControl.AxisPointControl mideleAxisP8;
private useControl.AxisPointControl mideleAxisP7;
private useControl.AxisPointControl mideleAxisP6;
private useControl.AxisPointControl mideleAxisP5;
private useControl.AxisPointControl mideleAxisP4;
private useControl.AxisPointControl mideleAxisP3;
private useControl.AxisPointControl mideleAxisP2;
private useControl.AxisPointControl mideleAxisP1;
private useControl.AxisPointControl updownAxisP13;
private useControl.AxisPointControl updownAxisP12;
private useControl.AxisPointControl updownAxisP11;
private useControl.AxisPointControl updownAxisP10;
private useControl.AxisPointControl updownAxisP9;
private useControl.AxisPointControl updownAxisP8;
private useControl.AxisPointControl updownAxisP7;
private useControl.AxisPointControl updownAxisP6;
private useControl.AxisPointControl updownAxisP5;
private useControl.AxisPointControl updownAxisP4;
private useControl.AxisPointControl updownAxisP3;
private useControl.AxisPointControl updownAxisP2;
private useControl.AxisPointControl updownAxisP1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.GroupBox groupBox8;
private System.Windows.Forms.GroupBox groupBox7;
private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.GroupBox groupBox9;
protected System.Windows.Forms.Button btnSave;
private System.Windows.Forms.GroupBox groupBox10;
private System.Windows.Forms.GroupBox groupBox11;
}
}
......@@ -286,19 +286,77 @@ namespace OnlineStore.XLRStore
}
private void FrmStoreIOStatus_Load(object sender, EventArgs e)
private void FrmInputEquip_Load(object sender, EventArgs e)
{
chbDebug.Checked = inputEquip.IsDebug;
//clampJawControl1.clampJaw = equipBean.ClampJwa;
clampJawControl1.ShowData();
chbMoveStop.Checked = inputEquip.MoveStop;
//axisMoveControl1.LoadData(equipBean, new AxisBean[] { equipBean.UpdownAxis, equipBean.BatchAxis });
if (inputEquip.ClampJaw == null)
{
clampJawControl1.Visible = false;
}
else
{
clampJawControl1.clampJaw = inputEquip.ClampJaw;
clampJawControl1.ShowData();
}
axisMoveControl1.LoadData(inputEquip, new AxisBean[] { inputEquip.MiddleAxis, inputEquip.UpdownAxis });
FrmBatchMove frmMove1 = new FrmBatchMove(inputEquip.BatchMove_A);
AddForm(tabControl1, " " + inputEquip.BatchMove_A.Name + " ", frmMove1);
FrmBatchMove frmMove2 = new FrmBatchMove(inputEquip.BatchMove_B);
AddForm(tabControl1, " " + inputEquip.BatchMove_B.Name + " ", frmMove2);
LoadPoint();
IsLoad = true;
}
private void LoadPoint()
{
InputEquip_Config config = inputEquip.Config ;
mideleAxisP1.SetMoveData(inputEquip.MiddleAxis, config.Middle_P1_Speed,config.Middle_P1);
mideleAxisP2.SetMoveData(inputEquip.MiddleAxis, config.Middle_P2_Speed,config.Middle_P2_ATake);
mideleAxisP3.SetMoveData(inputEquip.MiddleAxis, config.Middle_P3_Speed,config.Middle_P3_BTake);
mideleAxisP4.SetMoveData(inputEquip.MiddleAxis, config.Middle_P4_Speed,config.Middle_P4_AUpper);
mideleAxisP5.SetMoveData(inputEquip.MiddleAxis, config.Middle_P5_Speed,config.Middle_P5_BUpper);
mideleAxisP6.SetMoveData(inputEquip.MiddleAxis, config.Middle_P6_Speed,config.Middle_P6_NG);
mideleAxisP7.SetMoveData(inputEquip.MiddleAxis, config.Middle_P7_Speed,config.Middle_P7_AUnder);
mideleAxisP8.SetMoveData(inputEquip.MiddleAxis, config.Middle_P8_Speed,config.Middle_P8_BUnder);
updownAxisP1.SetMoveData(inputEquip.UpdownAxis, config.Updown_P1_Speed,config.Updown_P1);
updownAxisP2.SetMoveData(inputEquip.UpdownAxis, config.Updown_P2_Speed,config.Updown_P2_ATake);
updownAxisP3.SetMoveData(inputEquip.UpdownAxis, config.Updown_P3_Speed,config.Updown_P3_BTake);
updownAxisP4.SetMoveData(inputEquip.UpdownAxis, config.Updown_P4_Speed,config.Updown_P4_AUpperH);
updownAxisP5.SetMoveData(inputEquip.UpdownAxis, config.Updown_P5_Speed,config.Updown_P5_AUpperL);
updownAxisP6.SetMoveData(inputEquip.UpdownAxis, config.Updown_P6_Speed,config.Updown_P6_AUnderH);
updownAxisP7.SetMoveData(inputEquip.UpdownAxis, config.Updown_P7_Speed,config.Updown_P7_AUnderL);
updownAxisP8.SetMoveData(inputEquip.UpdownAxis, config.Updown_P8_Speed,config.Updown_P8_NGH);
updownAxisP9.SetMoveData(inputEquip.UpdownAxis, config.Updown_P9_Speed,config.Updown_P9_NGL);
updownAxisP10.SetMoveData(inputEquip.UpdownAxis, config.Updown_P10_Speed,config.Updown_P10_BUpperH);
updownAxisP11.SetMoveData(inputEquip.UpdownAxis, config.Updown_P11_Speed,config.Updown_P11_BUpperL);
updownAxisP12.SetMoveData(inputEquip.UpdownAxis, config.Updown_P12_Speed,config.Updown_P12_BUnderH);
updownAxisP13.SetMoveData(inputEquip.UpdownAxis, config.Updown_P13_Speed,config.Updown_P12_BUnderH);
}
protected void AddForm(TabControl tabcon, string text, Form form)
{
//text = text.PadRight(10, ' ');
TabPage lineTabPage = new TabPage(text);
// lineTabPage.AutoScroll = true;
// lineTabPage.Tag = StoreBean;
Panel linePan = new Panel();
linePan.Dock = DockStyle.Fill;
linePan.AutoScroll = true;
lineTabPage.Controls.Add(linePan);
form.FormBorderStyle = FormBorderStyle.None;
form.TopLevel = false;
linePan.Controls.Add(form);
form.Dock = DockStyle.Fill;
linePan.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left)));
form.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left)));
form.Show();
//tabPageList.Add(lineTabPage);
tabcon.Controls.Add(lineTabPage);
}
private void cmbWriteIO_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
......@@ -321,6 +379,7 @@ namespace OnlineStore.XLRStore
private void FrmIOStatus_Shown(object sender, EventArgs e)
{
timer1.Start();
}
......@@ -424,6 +483,102 @@ namespace OnlineStore.XLRStore
LogUtil.info(inputEquip.Name + "用户切换是否暂停: " + inputEquip.MoveStop);
}
private void Shelf_StopUp_A_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_A.Name + "点击:" + Shelf_StopUp_A.Text);
inputEquip.BatchMove_A.StopUp();
}
private void Shelf_StopDown_A_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_A.Name + "点击:" + Shelf_StopDown_A.Text);
inputEquip.BatchMove_A.StopDown();
}
private void LineStart_A_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_A.Name + "点击:" + LineStart_A.Text);
inputEquip.BatchMove_A.LineRun();
}
private void LineBack_A_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_A.Name + "点击:" + LineBack_A.Text);
inputEquip.BatchMove_A.LineBack();
}
private void LineStop_A_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_A.Name + "点击:" + LineStop_A.Text);
inputEquip.BatchMove_A.LineStop();
}
private void Shelf_StopUp_B_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_B.Name + "点击:" + Shelf_StopUp_B.Text);
inputEquip.BatchMove_B.StopUp();
}
private void Shelf_StopDown_B_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_B.Name + "点击:" + Shelf_StopDown_B.Text);
inputEquip.BatchMove_B.StopDown();
}
private void LineStart_B_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_B.Name + "点击:" + LineStart_B.Text);
inputEquip.BatchMove_B.LineRun();
}
private void LineBack_B_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_B.Name + "点击:" + LineBack_B.Text);
inputEquip.BatchMove_B.LineBack();
}
private void LineStop_B_Click(object sender, EventArgs e)
{
LogUtil.info(inputEquip.BatchMove_B.Name + "点击:" + LineStop_B.Text);
inputEquip.BatchMove_B.LineStop();
}
private void btnSave_Click(object sender, EventArgs e)
{
inputEquip.Config.Updown_P1 = updownAxisP1.PointValue;
inputEquip.Config.Updown_P2_ATake = updownAxisP2.PointValue;
inputEquip.Config.Updown_P3_BTake = updownAxisP3.PointValue;
inputEquip.Config.Updown_P4_AUpperH = updownAxisP4.PointValue;
inputEquip.Config.Updown_P5_AUpperL = updownAxisP5.PointValue;
inputEquip.Config.Updown_P6_AUnderH = updownAxisP6.PointValue;
inputEquip.Config.Updown_P7_AUnderL = updownAxisP7.PointValue;
inputEquip.Config.Updown_P8_NGH = updownAxisP8.PointValue;
inputEquip.Config.Updown_P9_NGL = updownAxisP9.PointValue;
inputEquip.Config.Updown_P10_BUpperH = updownAxisP10.PointValue;
inputEquip.Config.Updown_P11_BUpperL = updownAxisP11.PointValue;
inputEquip.Config.Updown_P12_BUnderH = updownAxisP12.PointValue;
inputEquip.Config.Updown_P12_BUnderH = updownAxisP13.PointValue;
inputEquip.Config.Middle_P1 = mideleAxisP1.PointValue;
inputEquip.Config.Middle_P2_ATake = mideleAxisP2.PointValue;
inputEquip.Config.Middle_P3_BTake = mideleAxisP3.PointValue;
inputEquip.Config.Middle_P4_AUpper = mideleAxisP4.PointValue;
inputEquip.Config.Middle_P5_BUpper = mideleAxisP5.PointValue;
inputEquip.Config.Middle_P6_NG = mideleAxisP6.PointValue;
inputEquip.Config.Middle_P7_AUnder = mideleAxisP7.PointValue;
inputEquip.Config.Middle_P8_BUnder = mideleAxisP8.PointValue;
StoreManager.SaveInputEquipConfig(inputEquip.Config);
MessageBox.Show("保存成功");
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}
......
......@@ -64,6 +64,7 @@
this.lblAxisPrfMode = new System.Windows.Forms.Label();
this.label50 = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.btnEndHome = new System.Windows.Forms.Button();
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.btnAxisStop = new System.Windows.Forms.Button();
this.btnAxisReturnHome = new System.Windows.Forms.Button();
......@@ -89,7 +90,6 @@
this.txtAxisDeviceName = new System.Windows.Forms.TextBox();
this.lblServerOn = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.btnEndHome = new System.Windows.Forms.Button();
this.groupAxis.SuspendLayout();
this.groupBox2.SuspendLayout();
this.panel1.SuspendLayout();
......@@ -505,9 +505,25 @@
this.panel1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.panel1.Location = new System.Drawing.Point(5, 18);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(469, 237);
this.panel1.Size = new System.Drawing.Size(469, 236);
this.panel1.TabIndex = 219;
//
// btnEndHome
//
this.btnEndHome.BackColor = System.Drawing.SystemColors.Control;
this.btnEndHome.Cursor = System.Windows.Forms.Cursors.Default;
this.btnEndHome.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnEndHome.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnEndHome.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnEndHome.Location = new System.Drawing.Point(356, 45);
this.btnEndHome.Name = "btnEndHome";
this.btnEndHome.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnEndHome.Size = new System.Drawing.Size(110, 34);
this.btnEndHome.TabIndex = 334;
this.btnEndHome.Text = "退出回零模式";
this.btnEndHome.UseVisualStyleBackColor = true;
this.btnEndHome.Click += new System.EventHandler(this.button1_Click);
//
// linkLabel1
//
this.linkLabel1.AutoSize = true;
......@@ -822,22 +838,6 @@
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// btnEndHome
//
this.btnEndHome.BackColor = System.Drawing.SystemColors.Control;
this.btnEndHome.Cursor = System.Windows.Forms.Cursors.Default;
this.btnEndHome.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnEndHome.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnEndHome.ForeColor = System.Drawing.SystemColors.ControlText;
this.btnEndHome.Location = new System.Drawing.Point(356, 45);
this.btnEndHome.Name = "btnEndHome";
this.btnEndHome.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnEndHome.Size = new System.Drawing.Size(110, 34);
this.btnEndHome.TabIndex = 334;
this.btnEndHome.Text = "退出回零模式";
this.btnEndHome.UseVisualStyleBackColor = true;
this.btnEndHome.Click += new System.EventHandler(this.button1_Click);
//
// AxisMoveControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
......@@ -856,67 +856,66 @@
}
#endregion
private System.Windows.Forms.GroupBox groupAxis;
private System.Windows.Forms.ComboBox cmbAxis;
private System.Windows.Forms.Label lblServerOn;
private System.Windows.Forms.Label label8;
internal System.Windows.Forms.Button btnOpenAxis;
internal System.Windows.Forms.Button btnCloseAxis;
private System.Windows.Forms.TextBox txtAxisPosition;
internal System.Windows.Forms.TextBox txtASpeed;
internal System.Windows.Forms.Label label47;
internal System.Windows.Forms.Button btnAxisRMove;
internal System.Windows.Forms.Button btnAxisReturnHome;
internal System.Windows.Forms.Button btnAxisAMove;
internal System.Windows.Forms.TextBox txtAPosition;
internal System.Windows.Forms.Label label48;
internal System.Windows.Forms.Button btnAxisStop;
private System.Windows.Forms.TextBox txtAxisValue;
private System.Windows.Forms.TextBox txtAxisDeviceName;
private System.Windows.Forms.Label label45;
private System.Windows.Forms.Label label46;
private System.Windows.Forms.Label label49;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button btnDelMove;
private System.Windows.Forms.TextBox txtMiddleSpeed;
private System.Windows.Forms.Button btnAddMove;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label lblhomeSts;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label lblAxEncAcc;
private System.Windows.Forms.Label lblINP;
private System.Windows.Forms.Label lblBUSY;
private System.Windows.Forms.Label lblNEL;
private System.Windows.Forms.Label lblORG;
private System.Windows.Forms.Label lblPEL;
private System.Windows.Forms.Label lblSvOn;
private System.Windows.Forms.Label lblEMG;
private System.Windows.Forms.Label lblWARN;
private System.Windows.Forms.Label lblALM;
private System.Windows.Forms.Label label53;
private System.Windows.Forms.Label label56;
private System.Windows.Forms.Label label55;
private System.Windows.Forms.Label label52;
private System.Windows.Forms.Label lblAxEncVel;
private System.Windows.Forms.Label lblAxPrfVel;
private System.Windows.Forms.Label lblAxEncPos;
private System.Windows.Forms.Label lblAxPrfPos;
private System.Windows.Forms.Label lblAxisPrfMode;
private System.Windows.Forms.Label label50;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Label lblAlarmcode;
private System.Windows.Forms.LinkLabel linkLabel1;
private System.Windows.Forms.Label lblStatus;
private System.Windows.Forms.Label lblAxisType;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label lblMaxLmt;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label lblPosLmt;
private System.Windows.Forms.Label lblNegLmt;
internal System.Windows.Forms.Button btnEndHome;
protected System.Windows.Forms.GroupBox groupBox2;
protected System.Windows.Forms.Label label4;
protected System.Windows.Forms.Label lblhomeSts;
protected System.Windows.Forms.Label label2;
protected System.Windows.Forms.Label lblAxEncAcc;
protected System.Windows.Forms.Label lblINP;
protected System.Windows.Forms.Label lblBUSY;
protected System.Windows.Forms.Label lblNEL;
protected System.Windows.Forms.Label lblORG;
protected System.Windows.Forms.Label lblPEL;
protected System.Windows.Forms.Label lblSvOn;
protected System.Windows.Forms.Label lblEMG;
protected System.Windows.Forms.Label lblWARN;
protected System.Windows.Forms.Label lblALM;
protected System.Windows.Forms.Label label53;
protected System.Windows.Forms.Label label56;
protected System.Windows.Forms.Label label55;
protected System.Windows.Forms.Label label52;
protected System.Windows.Forms.Label lblAxEncVel;
protected System.Windows.Forms.Label lblAxPrfVel;
protected System.Windows.Forms.Label lblAxEncPos;
protected System.Windows.Forms.Label lblAxPrfPos;
protected System.Windows.Forms.Label lblAxisPrfMode;
protected System.Windows.Forms.Label label50;
protected System.Windows.Forms.Label lblAlarmcode;
protected System.Windows.Forms.Label label7;
protected System.Windows.Forms.Label lblMaxLmt;
protected System.Windows.Forms.Label label12;
protected System.Windows.Forms.Label label13;
protected System.Windows.Forms.Label lblPosLmt;
protected System.Windows.Forms.Label lblNegLmt;
protected System.Windows.Forms.GroupBox groupAxis;
protected System.Windows.Forms.ComboBox cmbAxis;
protected System.Windows.Forms.Label lblServerOn;
protected System.Windows.Forms.Label label8;
protected System.Windows.Forms.Button btnOpenAxis;
protected System.Windows.Forms.Button btnCloseAxis;
protected System.Windows.Forms.TextBox txtAxisPosition;
protected System.Windows.Forms.TextBox txtASpeed;
protected System.Windows.Forms.Label label47;
protected System.Windows.Forms.Button btnAxisRMove;
protected System.Windows.Forms.Button btnAxisReturnHome;
protected System.Windows.Forms.Button btnAxisAMove;
protected System.Windows.Forms.TextBox txtAPosition;
protected System.Windows.Forms.Label label48;
protected System.Windows.Forms.Button btnAxisStop;
protected System.Windows.Forms.TextBox txtAxisValue;
protected System.Windows.Forms.TextBox txtAxisDeviceName;
protected System.Windows.Forms.Label label45;
protected System.Windows.Forms.Label label46;
protected System.Windows.Forms.Label label49;
protected System.Windows.Forms.Panel panel1;
protected System.Windows.Forms.Button btnDelMove;
protected System.Windows.Forms.TextBox txtMiddleSpeed;
protected System.Windows.Forms.Button btnAddMove;
protected System.Windows.Forms.Label label1;
protected System.Windows.Forms.Timer timer1;
protected System.Windows.Forms.LinkLabel linkLabel1;
protected System.Windows.Forms.Label lblStatus;
protected System.Windows.Forms.Label lblAxisType;
protected System.Windows.Forms.Button btnEndHome;
}
}
......@@ -160,7 +160,7 @@ namespace OnlineStore.XLRStore
btnDelMove.Text = "点动-(下降)";
//txtASpeed.Text = "1000";
//txtjogSpeed.Text = "1000";
color = Color.Red;
color = Color.Green;
}
txtASpeed.Text =(currSelAxis.TargetSpeed/2).ToString();
txtMiddleSpeed.Text = (currSelAxis.TargetSpeed / 2).ToString();
......

namespace OnlineStore.XLRStore.useControl
{
partial class AxisMoveRectControl
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.groupBox2.SuspendLayout();
this.groupAxis.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// groupBox2
//
this.groupBox2.Location = new System.Drawing.Point(454, 14);
this.groupBox2.Size = new System.Drawing.Size(242, 237);
//
// label4
//
this.label4.Location = new System.Drawing.Point(7, 190);
//
// lblhomeSts
//
this.lblhomeSts.Location = new System.Drawing.Point(72, 190);
//
// label2
//
this.label2.Location = new System.Drawing.Point(124, 190);
//
// lblAxEncAcc
//
this.lblAxEncAcc.Location = new System.Drawing.Point(195, 190);
//
// lblINP
//
this.lblINP.Location = new System.Drawing.Point(143, 50);
this.lblINP.Size = new System.Drawing.Size(46, 30);
//
// lblBUSY
//
this.lblBUSY.Location = new System.Drawing.Point(97, 50);
this.lblBUSY.Size = new System.Drawing.Size(46, 30);
//
// lblNEL
//
this.lblNEL.Location = new System.Drawing.Point(51, 50);
this.lblNEL.Size = new System.Drawing.Size(46, 30);
//
// lblORG
//
this.lblORG.Location = new System.Drawing.Point(189, 19);
this.lblORG.Size = new System.Drawing.Size(46, 30);
//
// lblPEL
//
this.lblPEL.Location = new System.Drawing.Point(143, 19);
this.lblPEL.Size = new System.Drawing.Size(46, 30);
//
// lblSvOn
//
this.lblSvOn.Size = new System.Drawing.Size(46, 30);
//
// lblEMG
//
this.lblEMG.Location = new System.Drawing.Point(97, 19);
this.lblEMG.Size = new System.Drawing.Size(46, 30);
//
// lblWARN
//
this.lblWARN.Location = new System.Drawing.Point(189, 50);
this.lblWARN.Size = new System.Drawing.Size(46, 30);
//
// lblALM
//
this.lblALM.Location = new System.Drawing.Point(51, 19);
this.lblALM.Size = new System.Drawing.Size(46, 30);
//
// label53
//
this.label53.Location = new System.Drawing.Point(124, 114);
//
// label56
//
this.label56.Location = new System.Drawing.Point(7, 114);
//
// label55
//
this.label55.Location = new System.Drawing.Point(7, 89);
//
// label52
//
this.label52.Location = new System.Drawing.Point(124, 89);
//
// lblAxEncVel
//
this.lblAxEncVel.Location = new System.Drawing.Point(72, 114);
//
// lblAxPrfVel
//
this.lblAxPrfVel.Location = new System.Drawing.Point(189, 114);
//
// lblAxEncPos
//
this.lblAxEncPos.Location = new System.Drawing.Point(72, 89);
//
// lblAxPrfPos
//
this.lblAxPrfPos.Location = new System.Drawing.Point(189, 89);
//
// lblAxisPrfMode
//
this.lblAxisPrfMode.Location = new System.Drawing.Point(72, 165);
//
// label50
//
this.label50.Location = new System.Drawing.Point(7, 165);
//
// lblAlarmcode
//
this.lblAlarmcode.Location = new System.Drawing.Point(124, 165);
//
// label7
//
this.label7.Location = new System.Drawing.Point(7, 215);
//
// lblMaxLmt
//
this.lblMaxLmt.Location = new System.Drawing.Point(72, 215);
//
// label12
//
this.label12.Location = new System.Drawing.Point(124, 139);
//
// label13
//
this.label13.Location = new System.Drawing.Point(7, 139);
//
// lblPosLmt
//
this.lblPosLmt.Location = new System.Drawing.Point(72, 139);
//
// lblNegLmt
//
this.lblNegLmt.Location = new System.Drawing.Point(189, 139);
//
// groupAxis
//
this.groupAxis.Size = new System.Drawing.Size(699, 262);
//
// btnOpenAxis
//
this.btnOpenAxis.Size = new System.Drawing.Size(100, 34);
//
// btnCloseAxis
//
this.btnCloseAxis.Location = new System.Drawing.Point(345, 5);
this.btnCloseAxis.Size = new System.Drawing.Size(100, 34);
//
// btnAxisRMove
//
this.btnAxisRMove.Size = new System.Drawing.Size(100, 34);
//
// btnAxisReturnHome
//
this.btnAxisReturnHome.Size = new System.Drawing.Size(100, 34);
//
// btnAxisAMove
//
this.btnAxisAMove.Size = new System.Drawing.Size(100, 34);
//
// btnAxisStop
//
this.btnAxisStop.Location = new System.Drawing.Point(345, 85);
this.btnAxisStop.Size = new System.Drawing.Size(100, 75);
//
// panel1
//
this.panel1.Size = new System.Drawing.Size(449, 236);
//
// btnDelMove
//
this.btnDelMove.Location = new System.Drawing.Point(292, 180);
this.btnDelMove.Size = new System.Drawing.Size(130, 45);
//
// btnAddMove
//
this.btnAddMove.Size = new System.Drawing.Size(130, 45);
//
// btnEndHome
//
this.btnEndHome.Location = new System.Drawing.Point(345, 45);
this.btnEndHome.Size = new System.Drawing.Size(100, 34);
//
// AxisMoveRectControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Name = "AxisMoveRectControl";
this.Size = new System.Drawing.Size(709, 272);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupAxis.ResumeLayout(false);
this.groupAxis.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OnlineStore.XLRStore.useControl
{
public partial class AxisMoveRectControl : AxisMoveControl
{
public AxisMoveRectControl()
{
InitializeComponent();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file

namespace OnlineStore.XLRStore.useControl
{
partial class AxisPointControl
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnMove = new System.Windows.Forms.Button();
this.txtPoint = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// btnMove
//
this.btnMove.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.btnMove.BackColor = System.Drawing.SystemColors.Control;
this.btnMove.Cursor = System.Windows.Forms.Cursors.Default;
this.btnMove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnMove.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnMove.ForeColor = System.Drawing.Color.Black;
this.btnMove.Location = new System.Drawing.Point(3, 3);
this.btnMove.Name = "btnMove";
this.btnMove.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.btnMove.Size = new System.Drawing.Size(154, 34);
this.btnMove.TabIndex = 315;
this.btnMove.Text = "上升待机点P1:";
this.btnMove.UseVisualStyleBackColor = true;
this.btnMove.Click += new System.EventHandler(this.btnMove_Click);
//
// txtPoint
//
this.txtPoint.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.txtPoint.BackColor = System.Drawing.SystemColors.Window;
this.txtPoint.Cursor = System.Windows.Forms.Cursors.IBeam;
this.txtPoint.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txtPoint.ForeColor = System.Drawing.SystemColors.WindowText;
this.txtPoint.Location = new System.Drawing.Point(160, 6);
this.txtPoint.MaxLength = 12;
this.txtPoint.Name = "txtPoint";
this.txtPoint.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.txtPoint.Size = new System.Drawing.Size(70, 26);
this.txtPoint.TabIndex = 316;
this.txtPoint.Text = "-1";
//
// AxisPointControl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.btnMove);
this.Controls.Add(this.txtPoint);
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Name = "AxisPointControl";
this.Size = new System.Drawing.Size(233, 41);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal System.Windows.Forms.Button btnMove;
internal System.Windows.Forms.TextBox txtPoint;
}
}
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace OnlineStore.XLRStore.useControl
{
public partial class AxisPointControl : UserControl
{
public AxisPointControl()
{
InitializeComponent();
}
public string PointText
{
get { return btnMove.Text; }
set { btnMove.Text = value; }
}
public int PointValue
{
get { return FormUtil.GetIntValue( txtPoint.Text); }
set { txtPoint.Text = value.ToString(); }
}
public Color PointBackColor
{
get { return btnMove.BackColor; }
set { this.btnMove.BackColor = value; }
}
public Color PointForeColor
{
get { return btnMove.ForeColor; }
set { this.btnMove.ForeColor = value; }
}
private int MoveSpeed;
private AxisBean MoveAxis = null;
public void SetMoveData(AxisBean axisBean,int speed,int pointV)
{
this.MoveAxis = axisBean;
this.MoveSpeed = speed;
this.PointValue = pointV;
}
private void btnMove_Click(object sender, EventArgs e)
{
int v = FormUtil.GetIntValue(txtPoint);
LogUtil.info(this.Name+" "+ MoveAxis.AxisName + " 点击:" + btnMove.Text);
MoveAxis.AbsMove(null, v, MoveSpeed);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file

\ No newline at end of file
库位号格式:
例:05AA03040102
05:表示料仓编号,01-08
AA:存储机构A面或B面,AA或者BB
03:表示抽屉在第几行
04:表示抽屉在第几列
01:表示在抽屉中的第几行
02:表示在抽屉中的第几列
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!