Commit c4361089 张东亮

0526-存储机构-1

1 个父辈 df7955bc
......@@ -53,7 +53,14 @@ namespace OnlineStore.Common
/// 温控器类型,0=壁挂王字壳温湿度变送器,1=妙昕温湿度记录仪
/// </summary>
public static string HumitureControllerType = "HumitureControllerType";
/// <summary>
/// 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)
/// </summary>
public static string StartBlowValue = "StartBlowValue";
/// <summary>
/// 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)
/// </summary>
public static string StopBlowValue = "StopBlowValue";
/// <summary>
/// 流水线监听端口
/// </summary>
......
......@@ -504,7 +504,26 @@ namespace OnlineStore.Common
return putout;
}
#endregion
#region 字节型转十六进制字符串
/// <summary>
/// 字节数组转16进制字符串
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string byteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
#endregion
#region 计算校验码
......
......@@ -13,31 +13,92 @@ AXIS,0,B面移栽压紧轴,ComAxis_B,9,HC,,35000,60000,60000,1000,5000,20000,10,100,0,
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,行走机构_待机点P1,MoveAxis_P1,100,,,,,,,,,,,,
PRO,0,行走机构_P1速度,MoveAxis_P1_Speed,108,,,,,,,,,,,,
PRO,0,行走机构_进出料机构取放点P2,MoveAxis_P2,100,,,,,,,,,,,,
PRO,0,行走机构_存储库位取放点位P3,MoveAxis_P3,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_待机点P1,PullAxis_Inout_P1,100,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P1速度,PullAxis_Inout_P1_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,移栽升降轴_待机点P1,Updown_P1,100,,,,,,,,,,,,
PRO,0,移栽升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_A上暂存区取料高点P2,Updown_P2,100,,,,,,,,,,,,
PRO,0,移栽升降轴_A上暂存区取料低点P3,Updown_P3,100,,,,,,,,,,,,
PRO,0,移栽升降轴_A下暂存区放料高点P4,Updown_P4,100,,,,,,,,,,,,
PRO,0,移栽升降轴_A下暂存区放料低点P5,Updown_P5,100,,,,,,,,,,,,
PRO,0,移栽升降轴_B上暂存区取料高点P8,Updown_P8,100,,,,,,,,,,,,
PRO,0,移栽升降轴_B上暂存区取料低点P9,Updown_P9,100,,,,,,,,,,,,
PRO,0,移栽升降轴_B下暂存区取料高点P10,Updown_P10,100,,,,,,,,,,,,
PRO,0,移栽升降轴_B下暂存区取料低点P11,Updown_P11,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_待机点P1,PullAxis_Updown_P1,100,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_P1速度,PullAxis_Updown_P1_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_料屉提取水平点P2,PullAxis_Updown_P2,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽X轴_待机点P1,XAxis_A_P1,100,,,,,,,,,,,,
PRO,0,A面移栽X轴_P1速度,XAxis_A_P1_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽X轴_A进出料暂存区取放料点P2,XAxis_A_P2,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_待机点P1,MiddleAxis_A_P1,100,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_P1速度,MiddleAxis_A_P1_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_A进出料暂存区取放料水平点P2,MiddleAxis_A_P2,100,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_A面料屉库位垂直取放料点P3,MiddleAxis_A_P3,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽压紧轴_待机点P1,ComAxis_A_P1,100,,,,,,,,,,,,
PRO,0,A面移栽压紧轴_P1速度,ComAxis_A_P1_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽X轴_待机点P1,XAxis_B_P1,100,,,,,,,,,,,,
PRO,0,B面移栽X轴_P1速度,XAxis_B_P1_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽X轴_B进出料暂存区取放料点P2,XAxis_B_P2,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_待机点P1,MiddleAxis_B_P1,100,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_P1速度,MiddleAxis_B_P1_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_B进出料暂存区取放料水平点P2,MiddleAxis_B_P2,100,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_B面料屉库位垂直取放料点P3,MiddleAxis_B_P3,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽压紧轴_待机点P1,ComAxis_B_P1,100,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,行走机构_P1速度,MoveAxis_P1_Speed,108,,,,,,,,,,,,
PRO,0,行走机构_P2速度,MoveAxis_P2_Speed,108,,,,,,,,,,,,
PRO,0,行走机构_P3速度,MoveAxis_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P1速度,PullAxis_Inout_P1_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P2速度,PullAxis_Inout_P2_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P3速度,PullAxis_Inout_P3_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P4速度,PullAxis_Inout_P4_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取进出轴_P5速度,PullAxis_Inout_P5_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,移栽升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P2速度,Updown_P2_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P3速度,Updown_P3_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P4速度,Updown_P4_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P5速度,Updown_P5_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P6速度,Updown_P6_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P7速度,Updown_P7_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P8速度,Updown_P8_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P9速度,Updown_P9_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P10速度,Updown_P10_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P11速度,Updown_P11_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P12速度,Updown_P12_Speed,108,,,,,,,,,,,,
PRO,0,移栽升降轴_P13速度,Updown_P13_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_P1速度,PullAxis_Updown_P1_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_P2速度,PullAxis_Updown_P2_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_P3速度,PullAxis_Updown_P3_Speed,108,,,,,,,,,,,,
PRO,0,料斗拉取升降轴_P4速度,PullAxis_Updown_P4_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽X轴_P1速度,XAxis_A_P1_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽X轴_P2速度,XAxis_A_P2_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽X轴_P3速度,XAxis_A_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_P1速度,MiddleAxis_A_P1_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_P2速度,MiddleAxis_A_P2_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽旋转轴_P3速度,MiddleAxis_A_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,A面移栽压紧轴_P1速度,ComAxis_A_P1_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽压紧轴_P2速度,ComAxis_A_P2_Speed,108,,,,,,,,,,,,
PRO,0,A面移栽压紧轴_P3速度,ComAxis_A_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽X轴_P1速度,XAxis_B_P1_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽X轴_P2速度,XAxis_B_P2_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽X轴_P3速度,XAxis_B_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_P1速度,MiddleAxis_B_P1_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_P2速度,MiddleAxis_B_P2_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽旋转轴_P3速度,MiddleAxis_B_P3_Speed,108,,,,,,,,,,,,
,,,,,,,,,,,,,,,,
PRO,0,B面移栽压紧轴_P1速度,ComAxis_B_P1_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽压紧轴_P2速度,ComAxis_B_P2_Speed,108,,,,,,,,,,,,
PRO,0,B面移栽压紧轴_P3速度,ComAxis_B_P3_Speed,108,,,,,,,,,,,,
位置,优先级,高度,宽度,料仓ID,料斗进出轴料屉提取点P2P4,料斗进出轴料屉库位点P3P5,料斗升降轴料屉提取高点P3,料斗升降轴料屉提取低点P4,移栽升降轴料屉上方过渡点P6P12,移栽升降轴料屉取放点P7P13,AB移栽X轴料屉库位取放料点P3,AB移栽压紧轴压紧前点P2,AB移栽压紧轴压紧点P3
05AA03040102,1,20,7,1,190500,1779933,1790933,1790933,1779933,1779933,1779933,1779933,1779933
......@@ -79,6 +79,10 @@
<Compile Include="manager\StoreManager.cs" />
<Compile Include="deviceLibrary\RFID\RFIDManagercs.cs" />
<Compile Include="manager\SServerManager.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_RequestServer.cs" />
<Compile Include="storeBean\boxBean\AutoInoutInfo.cs" />
<Compile Include="storeBean\boxBean\Humiture\HumitureBean.cs" />
<Compile Include="storeBean\boxBean\Humiture\HumitureController.cs" />
<Compile Include="storeBean\inputBean\BatchMoveBean.cs" />
<Compile Include="storeBean\inputBean\BatchMoveBean_Partial.cs" />
<Compile Include="storeBean\EquipBase.cs" />
......@@ -197,6 +201,7 @@
<Content Include="huichuan_x86\IMC_API_x86.lib">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="Config\linePositions.csv" />
<None Include="packages.config" />
<Content Include="SDK\MotorMaster.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
......
......@@ -362,7 +362,269 @@ namespace OnlineStore.DeviceLibrary
IB23_ShelfOut,
#endregion
}
/// <summary>
/// 料仓运动状态(当料仓状态=busy时,才会有此运动状态)
/// </summary>
public enum StoreStep
{
/// <summary>
/// 无操作,等待状态
/// </summary>
Wait = 0,
#region 料仓原点返回和重置步骤 0010开始
/// <summary>
/// BOX复位:料斗拉取进出轴先返回原点
/// </summary>
BOX_H01_PullAxis_InoutBack = 011,
/// <summary>
/// BOX复位:料斗拉取升降轴、AB面压紧轴返回原点
/// </summary>
BOX_H02_PullAxis_Updown_ABComAxis_Back = 012,
/// <summary>
/// BOX复位:AB面移栽x轴原点返回
/// </summary>
BOX_H03_XAxis_AB_Back = 013,
/// <summary>
/// BOX复位:行走机构、移栽升降轴、AB面移栽旋转轴原点返回
/// </summary>
BOX_H04_OtherAxisBack = 014,
/// <summary>
/// BOX待机位:料斗拉取进出轴先返回待机位
/// </summary>
BOX_H05_PullAxis_InoutToP1 = 015,
/// <summary>
/// BOX待机位:料斗拉取升降轴、AB面压紧轴返回待机位
/// </summary>
BOX_H06_PullAxis_Updown_ABComAxis_ToP1 = 016,
/// <summary>
/// BOX待机位:AB面移栽x轴返回待机位
/// </summary>
BOX_H07_XAxis_AB_ToP1 = 017,
/// <summary>
/// BOX待机位:行走机构、移栽升降轴、AB面移栽旋转轴返回待机位
/// </summary>
BOX_H08_OtherAxisToP1 = 018,
#endregion
#region 出库步骤 2000开始
/// <summary>
///料仓出库:检查出库的料在哪一边
/// </summary>
SO_00_StartWithCheck = 2001,
/// <summary>
///料仓出库:料斗拉取进出轴先运动到P1,料斗拉取升降轴运动到料屉提取低点
/// </summary>
SO_01_PullAxis_Ready = 2002,
/// <summary>
/// 料仓出库:所有轴运行到库位:
/// 1. 移栽升降轴到AB料屉上方过度点
/// 2. 行走机构到P3(存储库位取放点位)
/// 3. A/B面移栽压紧轴到P2(压紧前点)
/// 4. A/B面移栽旋转轴到P3(料屉垂直取放料点)
/// </summary>
SO_02_ToPosition,
/// <summary>
/// 料仓出库:到抽屉提取点,料斗拉取进出轴到P2(A/B面料屉提取点)
/// </summary>
SO_03_ToTray,
/// <summary>
/// 料仓出库:提升抽屉,料斗拉取升降轴到P3(料屉提取高点)
/// </summary>
SO_04_LiftTray,
/// <summary>
/// 料仓出库:拉抽屉到库位点,料斗拉取进出轴到P3(A/B面料屉库位点)
/// </summary>
SO_05_PullTray,
/// <summary>
/// 料仓出库:将抽屉降到库位提取点,料斗拉取升降轴到P2(料屉提取水平点),到位后检测X16-X30对应信号=1
/// </summary>
SO_06_DropTrayToPos,
/// <summary>
/// 料仓出库:进入库位中,移栽升降轴到A/B面料屉取放点
/// </summary>
SO_07_GetReel,
///// <summary>
///// 料仓出库:压紧轴开始缓慢压紧,A/B面移栽压紧轴到P3(压紧点)
///// </summary>
SO_08_StartCompress,
///// <summary>
///// 料仓出库:检测到料叉压紧确认信号,再次向下压紧指定的值
///// </summary>
//SO_09_ComDownMove,
/// <summary>
/// 料仓出库,等待压紧信号确认
/// </summary>
//SO_10_CheckComSig,
/// <summary>
///料仓出库:叉子从库位返回,移栽升降轴到A/B面料屉上方过度点
/// </summary>
SO_09_UpDownBack,
/// <summary>
/// 料仓出库:料屉返回,提升抽屉,料斗拉取升降轴到P3(料屉提取高点)
/// </summary>
SO_10_LiftTray,
/// <summary>
/// 料仓出库:推到抽屉提取点,料斗拉取进出轴到P2(A/B面料屉提取点)同时检测X04-X09=1
/// </summary>
SO_11_PushTray,
/// <summary>
/// 料仓出库:放下料屉,料斗拉取升降轴到P4(料屉提取低点)
/// /// </summary>
SO_12_PutTrayDown,
/// <summary>
/// 料仓出库:料斗拉取进出轴到P1(待机点)
/// </summary>
SO_13_InoutBack,
/// <summary>
/// 料仓出库:检查另一边是否有出库任务
/// </summary>
SO_14_CheckOtherSide,
/// <summary>
/// 料仓出库:到料盘暂存区
/// 1. 移栽升降轴到A/B下暂存区放料高点
/// 2. 行走机构到P2(进出料机构取放点)
/// 3. A面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X02=1
/// 或者 B面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X03=1
/// </summary>
S0_15_ToBufferArea,
/// <summary>
/// 料仓出库:确保暂存区无料盘
/// 如果有料盘则报警,该区域无料时才会出库
/// </summary>
SO_16_VerifyBufferState,
/// <summary>
/// 料仓出库:A/B面移栽X轴到P2(A/B进出料暂存区取放点)
/// </summary>
SO_17_InOutToBuff,
/// <summary>
/// 料仓出库:把料盘放下
/// 1. 移栽升降轴到A/B下暂存区放料低点
/// 2. A/B面移栽压紧轴到P2压紧前点
/// </summary>
SO_18_PutReel,
/// <summary>
/// 料仓出库:A/B面移栽X轴到P1(待机点)
/// </summary>
SO_19_InOutBackFromBuff,
/// <summary>
/// 料仓出库:A/B面移栽旋转轴到P1(待机点)
/// </summary>
SO_20_Finish,
#endregion
#region 入库步骤,3000开始
/// <summary>
///料仓出库:料斗拉取进出轴先运动到P1
/// </summary>
SI_01_PullAxis_Ready = 3010,
/// <summary>
/// 料仓入库:到料盘暂存区
/// 1. 移栽升降轴到P3(A上暂存区取料低点)
/// 2. 行走机构到P2(进出料机构取放点)
/// 3. A/B面移栽压紧轴到P2(压紧前点)
/// 3. A面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X02=1
/// 或者 B面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X03=1
/// </summary>
SI_02_ToBufferArea,
/// <summary>
/// 料仓入库:确保暂存区有料盘
/// 如果无料盘则报警
/// </summary>
SI_03_VerifyBufferState,
/// <summary>
/// 料仓入库:A/B面移栽X轴到P2(A/B进出料暂存区取放点)
/// </summary>
SI_04_InOutToBuff,
/// <summary>
/// 料仓入库:取料盘
/// 1. 移栽升降轴到P2(A上暂存区取料高点)
/// 2. A/B面移栽压紧轴到P3压紧点
/// </summary>
SI_05_GetReel,
/// <summary>
/// 料仓入库:A/B面移栽X轴到P3(A/B面料屉库位取放料点)
/// </summary>
SI_06_InOutBackFromBuff,
/// <summary>
/// 料仓入库:A/B面移栽旋转轴到P3(A面料屉库位垂直取放料点)
/// </summary>
SI_07_MiddleToP3,
/// <summary>
/// 料仓入库:所有轴运行到库位:
/// 1. 移栽升降轴到AB料屉上方过度点
/// 2. 行走机构到P3(存储库位取放点位)
/// 3. 料斗拉取升降轴到P4(料屉提取低点)
/// </summary>
SI_08_ToPosition,
/// <summary>
/// 料仓入库:到抽屉提取点,料斗拉取进出轴到P2(A/B面料屉提取点)
/// </summary>
SI_09_ToTray,
/// <summary>
/// 料仓入库:提升抽屉,料斗拉取升降轴到P3(料屉提取高点)
/// </summary>
SI_10_LiftTray,
/// <summary>
/// 料仓入库:拉抽屉到库位点,料斗拉取进出轴到P3(A/B面料屉库位点)
/// </summary>
SI_11_PullTray,
/// <summary>
/// 料仓入库:将抽屉降到库位提取点,料斗拉取升降轴到P2(料屉提取水平点),到位后检测X16-X30对应信号=1
/// </summary>
SI_12_DropTrayToPos,
/// <summary>
/// 料仓入库:进入库位中,移栽升降轴到A/B面料屉取放点
/// </summary>
SI_13_GetReel,
///// <summary>
///// 料仓入库:压紧轴开始缓慢释放,A/B面移栽压紧轴到P2(压紧前点)
///// </summary>
SI_14_ReleaseCompress,
/// <summary>
///料仓入库:叉子从库位返回,移栽升降轴到A/B面料屉上方过度点
/// </summary>
SI_15_UpDownBack,
/// <summary>
/// 料仓入库:料屉返回,提升抽屉,料斗拉取升降轴到P3(料屉提取高点)
/// </summary>
SI_16_LiftTray,
/// <summary>
/// 料仓入库:推到抽屉提取点,料斗拉取进出轴到P2(A/B面料屉提取点)同时检测X04-X09=1
/// </summary>
SI_17_PushTray,
/// <summary>
/// 料仓入库:放下料屉,料斗拉取升降轴到P4(料屉提取低点)
/// /// </summary>
SI_18_PutTrayDown,
/// <summary>
/// 料仓入库:料斗拉取进出轴到P1(待机点)
/// </summary>
SI_19_InoutBack,
/// <summary>
/// 料仓入库:检查另一边入库情况
/// </summary>
SI_20_CheckOtherSide,
#endregion
}
public enum AlarmType
{
/// <summary>
......
......@@ -22,7 +22,7 @@ namespace OnlineStore.DeviceLibrary
MoveP = null;
}
public InOutParam(InOutPosInfo inoutInfo, LineMoveP linePosition = null)
public InOutParam(InOutPosInfo inoutInfo, BoxMovePosition linePosition = null)
{
ACStoreP = null; ;
MoveP = linePosition;
......@@ -48,7 +48,7 @@ namespace OnlineStore.DeviceLibrary
}
public InOutPosInfo PosInfo { get; set; }
public LineMoveP MoveP { get; set; }
public BoxMovePosition MoveP { get; set; }
}
/// <summary>
/// 出入库料盘信息
......@@ -130,8 +130,17 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 出入库位置信息
/// </summary>
public class LineMoveP
public class BoxMovePosition
{
public BoxMovePosition()
{
}
public BoxMovePosition(BoxEquip_Config Config)
{
}
}
}
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class AutoInoutInfo
{
/// <summary>
/// 入库完成后自动出库,出库完成后自动入库
/// </summary>
public bool autoNext = false;
/// <summary>
/// 自动出入库间隔
/// </summary>
private int Jiange = 3;
private int positionIndex = 0;
public string autoMsg = "";
private int startIndex = -1;
private string shelfPosId = "";
#region 出入库参数
/// <summary>
/// 当前出入库的次数,超过配置的数量时,需要自动重置一下,再进行出入库
/// </summary>
internal int CurrInOutCount = 0;
internal int CurrInOutACount = 0;
#endregion
public void StartAuto(int jiange, int currIndex, string shelfPosId)
{
autoNext = true;
Jiange = jiange;
positionIndex = currIndex;
startIndex = currIndex;
this.shelfPosId = shelfPosId;
}
public void StopAuto()
{
autoNext = false;
}
internal void InOutEndProcess(AC_BOX_Bean boxBean, StoreMoveType storeMoveType)
{
try
{
CurrInOutCount++;
CurrInOutACount++;
//是否自动进入出库状态
if (!autoNext)
{
return;
}
if (storeMoveType.Equals(StoreMoveType.InStore))
{
int newIndex = positionIndex - 1;
if (newIndex < 0)
{
if (startIndex >= 0 && startIndex < boxBean.PositionNumList.Count)
{
newIndex = startIndex;
boxBean.LogInfo("下一个索引不存在,重新开始自动出入库,索引【" + startIndex + "】");
}
else
{
autoNext = false;
autoMsg = "自动出入库结束!";
boxBean.LogInfo("下一个索引不存在,自动 出入库结束!");
}
}
else
{
positionIndex = newIndex;
string posid = boxBean.PositionNumList[positionIndex];
InOutParam param = new InOutParam("AAAA", posid, shelfPosId);
//param.NeedOutShelf = false;
//param.NeedEnterShelf = false;
//判断是否需要重置
if (CurrInOutACount >= boxBean.Config.Box_ResetACount)
{
boxBean.LogInfo("自动进入下一个出库:posid=" + posid + ",当时已经出入库" + CurrInOutACount + "次,需要重置BOX,先把出库信息存入排队列表中");
boxBean.Reset(false);
autoMsg = "自动出库:" + posid;
boxBean.waitOutStoreList.Enqueue(param);
}
else
{
boxBean.LogInfo("自动进入下一个出库:posid=" + posid);
autoMsg = "自动出库:" + posid;
boxBean.StartOutStoreMove(param);
}
}
}
else if (storeMoveType.Equals(StoreMoveType.OutStore))
{
int newIndex = positionIndex - Jiange;
if (newIndex < 0)
{
if (startIndex >= 0 && startIndex < boxBean.PositionNumList.Count)
{
newIndex = startIndex;
boxBean.LogInfo("下一个索引不存在,重新开始自动出入库,索引【" + startIndex + "】");
}
else
{
autoNext = false;
autoMsg = "自动出入库结束!";
boxBean.LogInfo("下一个索引不存在,自动 出入库结束!");
}
}
else
{
string posid = boxBean.PositionNumList[newIndex];
InOutParam param = new InOutParam("AAAA", posid, shelfPosId);
// param.NeedOutShelf = false;
//判断是否需要重置
if (CurrInOutACount >= boxBean.Config.Box_ResetACount)
{
boxBean.LogInfo("自动进入下一个入库:posid=" + posid + ",当时已经出入库" + CurrInOutACount + "次,需要重置BOX,先把入库信息存入排队列表中");
boxBean.Reset(false);
autoMsg = "自动入库:" + posid;
boxBean.waitOutStoreList.Enqueue(param);
}
else
{
boxBean.LogInfo("自动进入下一个入库:posid=" + posid);
autoMsg = "自动入库:" + posid;
boxBean.StartInStoreMove(param);
}
}
}
}
catch (Exception ex)
{
LogUtil.error(boxBean.Name + "InOutEndProcess ERROR:" + ex.ToString());
}
}
internal void ClearCount()
{
CurrInOutACount = 0;
CurrInOutCount = 0;
}
}
}
......@@ -13,9 +13,13 @@ namespace OnlineStore.DeviceLibrary
{
public partial class BoxEquip : EquipBase
{
/// <summary>
/// 配置文件
/// </summary>
public BoxEquip_Config Config;
/// <summary>
/// 轴
/// </summary>
public AxisBean MoveAxis = null;
public AxisBean PullAxis_Inout = null;
public AxisBean UpdownAxis = null;
......@@ -27,7 +31,14 @@ namespace OnlineStore.DeviceLibrary
public AxisBean MiddleAxis_B = null;
public AxisBean ComAxis_B = null;
private AxisBean[] moveAxisArray;
/// <summary>
/// A面等待出库的队列
/// </summary>
public ConcurrentQueue<InOutParam> waitAOutStoreList = new ConcurrentQueue<InOutParam>();
/// <summary>
/// B面等待出库的队列
/// </summary>
public ConcurrentQueue<InOutParam> waitBOutStoreList = new ConcurrentQueue<InOutParam>();
public BoxEquip(string cid, BoxEquip_Config config)
{
baseConfig = config;
......
......@@ -20,11 +20,11 @@ namespace OnlineStore.DeviceLibrary
return false;
}
#region 入库
#region 入库
public override bool StartInstore(InOutParam param)
{
return false;
}
......@@ -40,6 +40,10 @@ namespace OnlineStore.DeviceLibrary
return;
}
}
#endregion
#region 出库
public override bool StartOutstore(InOutParam param)
{
return false;
......@@ -47,6 +51,14 @@ namespace OnlineStore.DeviceLibrary
protected override void OutstoreProcess()
{
if (MoveInfo.IsInWait)
{
CheckWait(MoveInfo);
}
if (MoveInfo.IsInWait)
{
return;
}
}
#endregion
......
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class HumitureBean
{
private string PortName = "";
private string Name = "";
public HumitureParam LastData = new HumitureParam(0, 0);
internal HumitureBean(string port,string deviceName)
{
this.Name = deviceName;
this.PortName = port;
}
public HumitureParam QueryData()
{
HumitureParam param = HumitureController.QueryData(PortName);
LastData = param;
return LastData;
}
internal void ProcessHumidityCMD(Operation resultOperation)
{
Dictionary<string, string> data = resultOperation.data;
if (data != null && data.ContainsKey(ParamDefine.maxHumidity) && data.ContainsKey(ParamDefine.maxTemperature))
{
string maxHumidity = data[ParamDefine.maxHumidity];
string maxTemp = data[ParamDefine.maxTemperature];
LogUtil.info( Name+"收到服务器温湿度预警值:maxHumidity=" + maxHumidity + ",maxTemperature=" + maxTemp);
try
{
this.Max_Humidity = (float)Convert.ToDouble(maxHumidity);
this.Max_Temperature = (float)Convert.ToDouble(maxTemp);
LogUtil.info(Name+"保存温湿度预警值:Max_Humidity=" + Max_Humidity + ",Max_Temperature=" + Max_Temperature);
}
catch (Exception ex)
{
LogUtil.error(Name+"转换温湿度失败:" + ex.ToString());
}
}
}
#region 温湿度处理
/// <summary>
/// 湿度标准,超过后需要报警
/// </summary>
private float Max_Humidity = 0;
/// <summary>
/// 温度标准,超过后需要报警
/// </summary>
private float Max_Temperature = 0;
private bool IsInBlowing = false;
private DateTime LastBeginBlowTime = DateTime.Now;
private DateTime LastEndBlowTime = new DateTime(1997, 1, 1);
private DateTime preLogTime = DateTime.Now;
public bool TempOrHumidityIsAlarm = false;
public DateTime TempAlarmTime = DateTime.Now;
private float StartBlowValue = (float)ConfigAppSettings.GetNumValue(Setting_Init.StartBlowValue);
private float StopBlowValue = (float)ConfigAppSettings.GetNumValue(Setting_Init.StopBlowValue);
public string currTempStr = "";
internal void HumidityProcess(BoxEquip box)
{
try
{
if ((DateTime.Now - preLogTime).TotalSeconds > (8+box.DeviceID))
{
preLogTime = DateTime.Now;
//用最大的湿度判断是否需要吹气,开始吹气的值=发过来的值-4
//温湿度
//ASTemperateParam param = HumitureServer.GetTemperateParam(Config.GetTempAddrList());
HumitureParam param = QueryData();
double humidity = 0;
double temp = 0;
if (param != null)
{
humidity = param.Humidity;
temp = param.Temperate;
currTempStr = Name + ("湿度:" + humidity.ToString() + ",温度:" + temp);
}
//double currMaxHumidity = HumitureServer.GetMaxHumidity(Config.GetTempAddrList());
double currMaxHumidity = param.Humidity;
float startBlowHumidity = Max_Humidity - StartBlowValue;
float stopBlowHumidity = Max_Humidity - StopBlowValue;
//判断是否需要吹气
if (startBlowHumidity > 0 && startBlowHumidity < currMaxHumidity && IsInBlowing.Equals(false))
{
//判断是否距离上次结束指定的时间
TimeSpan span = DateTime.Now - LastEndBlowTime;
if (span.TotalMinutes > box.Config.BlowAir_Interval)
{
LogUtil.info(Name + "当前最大湿度:" + currMaxHumidity.ToString() + ",开始吹气湿度:" + startBlowHumidity + ",当前不在吹气中,且间隔超过" + box.Config.BlowAir_Interval + "分钟,开始吹气!");
IsInBlowing = true;
//Thread.Sleep(100);
//box.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.HIGH);
LastBeginBlowTime = DateTime.Now;
LastEndBlowTime = DateTime.Now;
}
}
if (IsInBlowing && stopBlowHumidity > currMaxHumidity)
{
LogUtil.info(Name + "当前最大湿度:" + currMaxHumidity.ToString() + ",停止吹气湿度:" + stopBlowHumidity + ",停止吹气!");
IsInBlowing = false;
// box.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
LastEndBlowTime = DateTime.Now;
}
if (IsInBlowing)
{
//判断是否需要结束吹气
TimeSpan span = DateTime.Now - LastBeginBlowTime;
if (span.TotalMinutes > box.Config.BlowAir_Time)
{
LogUtil.info(Name + "已经吹气" + span.TotalMinutes + "分钟,超过配置的吹气时间" + box.Config.BlowAir_Time + "分钟,停止吹气!");
IsInBlowing = false;
//Thread.Sleep(100);
// box.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
LastEndBlowTime = DateTime.Now;
}
}
bool needAlarm = false;
//如果开始吹气并且当前达到报警值
if (IsInBlowing && humidity > Max_Humidity)
{
needAlarm = true;
}
else if (temp > Max_Temperature && Max_Temperature > 0)
{
LogUtil.info(Name + "当前温度【" + param.Temperate + "】超过最高温度【" + Max_Temperature + "】,开始报警!");
needAlarm = true;
//Thread.Sleep(100);
//box.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
}
else if (temp < Max_Temperature)
{
if (IsInBlowing.Equals(false) && TempOrHumidityIsAlarm)
{
LogUtil.info(Name + "不在吹气中,且当前温度【" + param.Temperate + "】低于【" + Max_Temperature + "】,关闭报警!");
TempOrHumidityIsAlarm = false;
//Thread.Sleep(100);
//box.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
}
}
else
{
TempOrHumidityIsAlarm = false;
}
if (needAlarm)
{
HTAlarm();
}
}
}
catch (Exception ex)
{
LogUtil.error(Name + "HumidityProcess出错:" + ex.ToString());
}
}
private void HTAlarm()
{
if (TempOrHumidityIsAlarm)
{
return;
}
TempAlarmTime = DateTime.Now;
TempOrHumidityIsAlarm = true;
}
internal bool NeedGetTem()
{
if (Max_Humidity <= 0 || (Max_Temperature <= 0))
{
return true;
}
return false;
}
#endregion
}
public class HumitureParam
{
public HumitureParam(string clientipe, string add, string pwd, double wendu, double shidu, DateTime updateTime)
{
this.IpAddress = clientipe;
this.DeviceAddress = add;
this.Password = pwd;
this.Temperate = wendu;
this.Humidity = shidu;
this.UpdateTime = updateTime;
}
//获取平均值时使用此 参数,只做显示用
public HumitureParam(double wendu, double shidu)
{
this.IpAddress = "";
this.DeviceAddress = "";
this.Password = "";
this.Temperate = wendu;
this.Humidity = shidu;
this.UpdateTime = DateTime.Now;
}
/// <summary>
/// 判断值是否在有效期内。默认有效期是一分钟
/// </summary>
/// <returns></returns>
public bool IsValid()
{
TimeSpan span = DateTime.Now - UpdateTime;
if (span.TotalMinutes > 3)
{
return false;
}
return true;
}
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string IpAddress { get; set; }
/// <summary>
/// 设备地址
/// </summary>
public string DeviceAddress { get; set; }
/// <summary>
/// 访问密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 温度
/// </summary>
public double Temperate { get; set; }
/// <summary>
/// 湿度
/// </summary>
public double Humidity { get; set; }
}
}
......@@ -49,6 +49,7 @@
<ItemGroup>
<Compile Include="CSVExection.cs" />
<Compile Include="FileEncoding.cs" />
<Compile Include="position\BoxPosition.cs" />
<Compile Include="position\XLRPosition.cs" />
<Compile Include="position\CSVPositionReader.cs" />
<Compile Include="position\PositionBase.cs" />
......
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OnlineStore.LoadCSVLibrary
{
public class BoxPosition : PositionBase
{ /// <summary>
/// 对应的料仓ID(流水线料仓需要用此字段区分哪个BOX)
/// </summary>
[CSVAttribute("料仓ID")]
public int StoreId { get; set; }
/// <summary>
/// 料斗进出轴料屉提取点
/// P2 对应 A面
/// P4 对应 B面
/// </summary>
[CSVAttribute("料斗进出轴料屉提取点P2P4")]
public int PullAxis_Inout_P2_P4 { get; set; }
/// <summary>
/// 料斗进出轴料屉库位点
/// P3 对应 A面
/// P5 对应 B面
/// </summary>
[CSVAttribute("料斗进出轴料屉库位点P3P5")]
public int PullAxis_Inout_P3_P5 { get; set; }
/// <summary>
/// 料斗升降轴料屉提取高点P3
/// </summary>
[CSVAttribute("料斗升降轴料屉提取高点P3")]
public int PullAxis_Updown_P3 { get; set; }
/// <summary>
/// 料斗升降轴料屉提取低点P4
/// </summary>
[CSVAttribute("料斗升降轴料屉提取低点P4")]
public int PullAxis_Updown_P4 { get; set; }
/// <summary>
/// 移栽升降轴料屉上方过渡点
/// P6 对应 A面
/// P12 对应 B面
/// </summary>
[CSVAttribute("移栽升降轴料屉上方过渡点P6P12")]
public int Updown_P6_P12 { get; set; }
/// <summary>
/// 移栽升降轴料屉取放点
/// P7 对应 A面
/// P13 对应 B面
/// </summary>
[CSVAttribute("移栽升降轴料屉取放点P7P13")]
public int Updown_P7_P13 { get; set; }
/// <summary>
/// AB移栽X轴料屉库位取放料点P3
/// </summary>
[CSVAttribute("AB移栽X轴料屉库位取放料点P3")]
public int XAxis_AB_P3 { get; set; }
/// <summary>
/// AB移栽压紧轴压紧前点P2
/// </summary>
[CSVAttribute("AB移栽压紧轴压紧前点P2")]
public int ComAxis_AB_P2 { get; set; }
/// <summary>
/// AB移栽压紧轴压紧点P3
/// </summary>
[CSVAttribute("AB移栽压紧轴压紧点P3")]
public int ComAxis_AB_P3 { get; set; }
public static bool CheckPosition(XLRPosition position, BoxEquip_Config Config)
{
try
{
//if (Config.Middle_Axis.PositionIsHasLimit())
//{
// int mMin = Config.Middle_Axis.PositionMin;
// int mMax = Config.Middle_Axis.PositionMax;
// if (mMin > position.MiddleAxis_Position_P2 || mMax < position.MiddleAxis_Position_P2)
// {
// LogUtil.error(position.PositionNum + " MiddleAxis_Position_P2位置超出" + Config.Middle_Axis.Explain + "上下限(" + mMin + "-" + mMax + ")");
// return false;
// }
//}
//if (Config.InOut_Axis.PositionIsHasLimit())
//{
// int iMin = Config.InOut_Axis.PositionMin;
// int iMax = Config.InOut_Axis.PositionMax;
// if (iMin > position.InOutAxis_DoorPosition_P2 || iMax < position.InOutAxis_DoorPosition_P2)
// {
// LogUtil.error(position.PositionNum + " InOutAxis_DoorPosition_P2位置超出" + Config.InOut_Axis.Explain + "上下限(" + iMin + "-" + iMax + ")");
// return false;
// }
// if (iMin > position.InOutAxis_Position_P3 || iMax < position.InOutAxis_Position_P3)
// {
// LogUtil.error(position.PositionNum + " InOutAxis_Position_P3位置超出" + Config.InOut_Axis.Explain + "上下限(" + iMin + "-" + iMax + ")");
// return false;
// }
//}
//if (Config.UpDown_Axis.PositionIsHasLimit())
//{
// int uMin = Config.UpDown_Axis.PositionMin;
// int uMax = Config.UpDown_Axis.PositionMax;
// if (uMin > position.UpDownAxis_IHPosition_P3 || uMax < position.UpDownAxis_IHPosition_P3)
// {
// LogUtil.error(position.PositionNum + " UpDownAxis_IHPosition_P3位置超出" + Config.UpDown_Axis.Explain + "上下限(" + uMin + "-" + uMax + ")");
// return false;
// }
// if (uMin > position.UpDownAxis_ILPosition_P4 || uMax < position.UpDownAxis_ILPosition_P4)
// {
// LogUtil.error(position.PositionNum + " UpDownAxis_ILPosition_P4位置超出" + Config.UpDown_Axis.Explain + "上下限(" + uMin + "-" + uMax + ")");
// return false;
// }
// if (uMin > position.UpDownAxis_OHPosition_P5 || uMax < position.UpDownAxis_OHPosition_P5)
// {
// LogUtil.error(position.PositionNum + " UpDownAxis_OHPosition_P5位置超出" + Config.UpDown_Axis.Explain + "上下限(" + uMin + "-" + uMax + ")");
// return false;
// }
// if (uMin > position.UpDownAxis_OLPosition_P6 || uMax < position.UpDownAxis_OLPosition_P6)
// {
// LogUtil.error(position.PositionNum + " UpDownAxis_OLPosition_P6位置超出" + Config.UpDown_Axis.Explain + "上下限(" + uMin + "-" + uMax + ")");
// return false;
// }
//}
}
catch (Exception ex)
{
LogUtil.error("验证" + position.PositionNum + "的位置范围出错:" + ex.ToString());
}
return true;
}
}
}
......@@ -9,7 +9,12 @@
<add key="App_Title" value="流水线客户端" />
<!--Server address-->
<add key="http.server" value="http://192.168.100.14/myproject/" />
<!-- 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)-->
<add key="StartBlowValue" value="4" />
<!-- 停止吹气的判断值(配置值=服务器发送的湿度值-停止吹气值)-->
<add key="StopBlowValue" value="4" />
<!--温控器类型,0=壁挂王字壳温湿度变送器,1=妙昕温湿度记录仪-->
<add key="HumitureControllerType" value="0" />
<!--start one store config-->
<add key="ConfigPath_XLRStore" value="\Config\Config_Store.csv" />
<add key="ConfigPath_Input" value="\Config\Config_InputEquip.csv" />
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!