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 Asa;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public partial class BoxEquip
{
#region 与服务器通信定时器,每1秒向服务器通知一次状态,同时执行出库操作
private string CodeMsg = "";
private bool isInProcess = false;
private DateTime lastConTime = DateTime.Now;
public void server_connect_timer_Tick(object sender, EventArgs e)
{
if (isInProcess)
{
TimeSpan span = DateTime.Now - lastConTime;
if (span.TotalSeconds < 60)
{
return;
}
}
isInProcess = true;
lastConTime = DateTime.Now;
try
{
//HumitureController.QueryData();
humBean.HumidityProcess(this);
if (StoreManager.IsConnectServer)
{
SendLineStatus();
}
}
catch (Exception ex)
{
LogUtil.error(Name + "定时SendLineStatus出错:" + ex.ToString());
}
finally
{
isInProcess = false;
}
}
/// <summary>
/// 获取整个料仓的状态
/// </summary>
public Operation getLineBoxStatus()
{
//构建发送给服务器的对象
Operation lineOperation = new Operation();
lineOperation.msg = "";
lineOperation.alarmList = new List<AlarmInfo>();
lineOperation.cid = CID;
lineOperation.seq = ConfigAppSettings.nextSeq();
lineOperation.status = 1;
if (WarnMsg != "")
{
lineOperation.status = (int)StoreStatus.Warning;
lineOperation.msg = WarnMsg;
}
lineOperation.status = (int)StoreStatus.StoreOnline;
BoxStatus boxStatus = new BoxStatus();
boxStatus.boxId = 1;
boxStatus.msg = WarnMsg;
lineOperation.msg = WarnMsg;
if (WarnMsg.Equals(""))
{
boxStatus.msg = CodeMsg;
lineOperation.msg = CodeMsg;
}
CodeMsg = "";
//WarnMsg = "";
//状态
boxStatus.status = (int)storeStatus;
if (IsDebug)
{
boxStatus.status = (int)StoreStatus.Debugging;
}
else if (storeStatus.Equals(StoreStatus.OutStoreBoxEnd) || storeStatus.Equals(StoreStatus.InStoreEnd))
{
boxStatus.data.Add(ParamDefine.posId, lastPosId);
}
else if (!lastPosId.Equals(""))
{
boxStatus.data.Add(ParamDefine.posId, lastPosId);
boxStatus.status = (int)lastPosIdStatus;
if (lastPosId != "")
{
LogUtil.info("给服务器发送出入库完成消息:" + Name + ",status【" + lastPosIdStatus + "】posId【" + lastPosId + "】");
}
lastPosId = "";
}
//温湿度
//ASTemperateParam param = HumitureServer.GetTemperateParam(Config.Temperate_Serveraddress);
HumitureParam param = humBean.LastData;
if (param != null)
{
boxStatus.humidity = param.Humidity.ToString();
boxStatus.temperature = param.Temperate.ToString();
}
lineOperation.boxStatus.Add(1, boxStatus);
if (!alarmType.Equals(StoreAlarmType.None))
{
lineOperation.alarmList.Add(alarmInfo);
}
return lineOperation;
}
public void SendLineStatus()
{
DateTime time = DateTime.Now;
//构建发送给服务器的对象
Operation lineOperation = getLineBoxStatus();
//如果还没湿度范围,先获取
if (humBean.NeedGetTem())
{
lineOperation.op = 5;
LogUtil.error(Name + "没有湿度预警范围,需要从服务器获取,发送OP=" + lineOperation.op, DeviceID + 105);
}
string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
Operation resultOperation = HttpHelper.PostJson(StoreManager.GetPostApi(server), lineOperation, false);
//发送状态信息到服务器
if (resultOperation == null || (resultOperation.op <= 0))
{
//判断服务端是否返回出库操作
return;
}
if (resultOperation.op.Equals(1))
{
// ReviceInStoreProcess("", resultOperation);
}
else if (resultOperation.op.Equals(2))
{
ReviceOutStoreProcess(resultOperation);
}
else if (resultOperation.op.Equals(5))
{
humBean.ProcessHumidityCMD(resultOperation);
}
else
{
LogUtil.error("收到服务器命令:op=" + resultOperation.op + ",未找到对应处理");
}
TimeSpan span = DateTime.Now - time;
if (span.TotalMilliseconds > 10)
{
LogUtil.info(Name + "执行TimerProcess 共处理了【" + span.TotalMilliseconds + "】毫秒");
}
}
private void ReviceOutStoreProcess(Operation resultOperation)
{
DateTime time = DateTime.Now;
Dictionary<string, string> data = resultOperation.data;
if (data != null && data.ContainsKey(ParamDefine.posId)
&& data.ContainsKey(ParamDefine.plateH) && data.ContainsKey(ParamDefine.plateW))
{
char splitChar = '|';
string[] posIdArray = data[ParamDefine.posId].Split(splitChar);
string[] plateWArray = data[ParamDefine.plateW].Split(splitChar);
string[] plateHArray = data[ParamDefine.plateH].Split(splitChar);
bool urgentReel = FormUtil.GetBoolData(data, ParamDefine.urgentReel);
bool cutReel = FormUtil.GetBoolData(data, ParamDefine.cutReel);
bool smallReel = FormUtil.GetBoolData(data, ParamDefine.smallReel);
string rfid = data.ContainsKey(ParamDefine.rfid) ? data[ParamDefine.rfid] : "";
int rfidLoc = FormUtil.GetIntData(data, ParamDefine.rfidLoc);
string barcode = data.ContainsKey(ParamDefine.barcode) ? data[ParamDefine.barcode] : "";
string realRfid = data.ContainsKey(ParamDefine.realRfid) ? data[ParamDefine.realRfid] : "";
int taskCount = FormUtil.GetIntData(data, ParamDefine.taskCount, 0);
//urgentReel: true 表示紧急料,需要出到料串上
//cutReel: true 表示分盘料,需要出到料串上
//smallReel: true 小料(7x8),放置到小料架上
//rfid: 分配的料架RFID
//rfidLoc: 料架的架位,值为 - 1时,可以自由分配皮带线, 小料时,架位为1 - 46优先走1 / 2号皮带线,47 - 92优先走3 / 4号皮带线, 70,71,72时只能分配到3 / 4号皮带线; 大料时,架位1 - 6优先走1 / 2号皮带线, 7 - 12优先走3 / 4号皮带线
string dataStr = JsonHelper.SerializeObject(data);
LogUtil.info("收到服务器出库消息:【" + dataStr + "】");
int index = -1;
foreach (string posId in posIdArray)
{
index++;
int plateW = Convert.ToInt32( plateWArray[index]);
int plateH =Convert.ToInt32( plateHArray[index]);
string shelfPosID = StoreManager.GetShelfIDByLoc(rfidLoc, ShelfPosList);
InOutParam inoutParam = new InOutParam(barcode, posId, shelfPosID, plateW, plateH, urgentReel, cutReel, smallReel, rfid, rfidLoc, taskCount, realRfid);
//根据发送的posId获取位置列表
ACBoxPosition position = CSVPositionReader<ACBoxPosition>.GetPositon(posId);
if (position == null)
{
//出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg = Name + "未找到库位:【" + inoutParam.ToStr() + "】";
LogUtil.error(WarnMsg);
continue;
}
try
{
//判断是否接收过此库位的出库信息
if (MoveInfo.MoveType.Equals(StoreMoveType.OutStore) && MoveInfo.MoveParam.PosID.Equals(posId))
{
LogUtil.error(Name + " 出库命令【" + inoutParam.ToStr() + "】重复,正在【" + posId + "】出库中");
continue;
}
//判断排队列表中是否已存在
List<InOutParam> reviceList = new List<InOutParam>(waitOutStoreList);
reviceList = (from m in reviceList where m.PosID.Equals(posId) select m).ToList<InOutParam>();
if (reviceList.Count > 0)
{
LogUtil.error(Name + " 出库命令【" + inoutParam.ToStr() + "】重复,排队列表中已存在【" + reviceList[0].ToStr() + "】");
continue;
}
}
catch (Exception ex)
{
LogUtil.error(Name + "验证出库【" + inoutParam.ToStr() + "】是否重复出错:" + ex.ToString());
}
StartExecuctOut(inoutParam);
}
TimeSpan span = DateTime.Now - time;
if (span.TotalMilliseconds > 10)
{
LogInfo(Name + "执行 ReviceOutStoreProcess 共处理了【" + span.TotalMilliseconds + "】毫秒");
}
}
}
#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; }
}
}
using OnlineStore.Common;
using log4net;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Reflection;
using System.Text;
namespace OnlineStore.DeviceLibrary
{
/// <summary>
/// 壁挂王字壳温湿度变送器(485型)
/// </summary>
public class HumitureController
{
//public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static int bautRate = 4800;//波特率
private static Parity parity = Parity.None;//校验位
private static int dataBits = 8;//数据位
private static StopBits stopBits = StopBits.One; //停止位
private static string LogName = "";
private static Dictionary<string, AcSerialBean> serialBeanMap = new Dictionary<string, AcSerialBean>();
public static int HumitureControllerType = ConfigAppSettings.GetIntValue(Setting_Init.HumitureControllerType);
public static bool Init(string port)
{
if (serialBeanMap.ContainsKey(port))
{
return true;
}
LogName = "温湿度传感器[" + port + "]";
AcSerialBean sb = null;
if (HumitureControllerType.Equals(1))
{
bautRate = 9600;//波特率
}
sb = new AcSerialBean(port, bautRate, parity, dataBits, stopBits);
try
{
if (sb.openPort())
{
serialBeanMap.Add(port, sb);
return true;
}
else
{
LogUtil.error( LogName + "串口" + port + "打开失败!");
return false;
}
}
catch (Exception ex)
{
LogUtil.error("串口" + port + "打开失败:" + ex.ToString());
}
return true;
}
/// <summary>
/// 释放资源
/// </summary>
public static void CloseAllPort()
{
List<string> kes = new List<string>(serialBeanMap.Keys);
foreach (string key in kes)
{
ClosePort(key);
}
}
private static void ClosePort(string portName)
{
AcSerialBean bean = GetSerialBean(portName);
if (bean == null)
{
LogUtil.info("串口【" + portName + "】未打开,不需要关闭");
return;
}
//清理缓存
bean.clearInBuffer();
bean.clearOutBuffer();
bean.closePort();
if (serialBeanMap.ContainsKey(portName))
{
serialBeanMap.Remove(portName);
}
LogUtil.info("温湿度控制器 关闭串口【" + portName + "】 ");
}
private static AcSerialBean GetSerialBean(string portName)
{
if (serialBeanMap.ContainsKey(portName))
{
return serialBeanMap[portName];
}
return null;
}
// public static ASTemperateParam LastData = new ASTemperateParam(0, 0);
public static HumitureParam QueryData(string port)
{
HumitureParam param = new HumitureParam(0, 0);
List<double> data = queryData(port );
if (data.Count.Equals(2))
{
param = new HumitureParam(data[1], data[0]);
}
return param;
}
/// <summary>
/// 返回温度和湿度
/// </summary>
/// <returns></returns>
private static List<double> queryData(string port)
{
// 温度计算:
//当温度低于 0 ℃ 时温度数据以补码的形式上传。
//温度:FF9B H(十六进制)= -101 => 温度 = -10.1℃
//湿度计算:
//湿度:292 H(十六进制) = 658 => 湿度 = 65.8 % RH
AcSerialBean sb = GetSerialBean(port);
if (sb == null)
{
return new List<double>();
}
byte[] sendData = new byte[8];
sendData[0] = 0x01;
if (HumitureControllerType.Equals(1))
{
sendData[1] = 0x04;
}
else
{
sendData[1] = 0x03;
}
sendData[2] = 0x00;
sendData[3] = 0x00;
sendData[4] = 0x00;
sendData[5] = 0x02;
sendData[6] = 0x00;
sendData[7] = 0x00;
sendData = buildCheckData(sendData, sendData.Length - 2);
string str = AcSerialBean.byteToHexStr(sendData);
LogUtil.debug("温湿度控制器发送数据:" + str);
byte[] reviceData = new byte[9];
bool isOk = false;
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
return getReviceData(reviceData);
}
public static int QueryHistoryCount(string port)
{
AcSerialBean sb = GetSerialBean(port);
if (sb == null|| HumitureControllerType.Equals(2).Equals(false))
{
return -1;
}
byte[] sendData = new byte[8];
sendData[0] = 0x01;
sendData[1] = 0x04;
sendData[2] = 0x20;
sendData[3] = 0x00;
byte[] addrByte = AcSerialBean.StringToByte("2000");
if (addrByte.Length == 1)
{
sendData[2] = 0x00;
sendData[3] = addrByte[0];
}
else if (addrByte.Length == 2)
{
sendData[3] = addrByte[1];
sendData[2] = addrByte[0];
}
sendData[4] = 0x00;
sendData[5] = 0x02;
sendData[6] = 0x00;
sendData[7] = 0x00;
sendData = buildCheckData(sendData, sendData.Length - 2);
string str = AcSerialBean.byteToHexStr(sendData);
LogUtil.debug("温湿度控制器发送数据:" + str);
byte[] reviceData = new byte[9];
bool isOk = false;
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
return getReviceIntData(reviceData);
}
public static int QueryCurrCount(string port)
{
AcSerialBean sb = GetSerialBean(port);
if (sb == null || HumitureControllerType.Equals(2).Equals(false))
{
return -1;
}
byte[] sendData = new byte[8];
sendData[0] = 0x01;
sendData[1] = 0x04;
sendData[2] = 0x20;
sendData[3] = 0x02;
sendData[4] = 0x00;
sendData[5] = 0x02;
sendData[6] = 0x00;
sendData[7] = 0x00;
sendData = buildCheckData(sendData, sendData.Length - 2);
string str = AcSerialBean.byteToHexStr(sendData);
LogUtil.debug("温湿度控制器发送数据:" + str);
byte[] reviceData = new byte[9];
bool isOk = false;
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
return getReviceIntData(reviceData);
}
public static List<object> QueryHistory(string port)
{
List<object> list = new List<object>();
AcSerialBean sb = GetSerialBean(port);
if (sb == null || HumitureControllerType.Equals(2).Equals(false))
{
return list;
}
byte[] sendData = new byte[8];
sendData[0] = 0x01;
sendData[1] = 0x04;
sendData[2] = 0x20;
sendData[3] = 0x04;
sendData[4] = 0x00;
sendData[5] = 0x05;
sendData[6] = 0x00;
sendData[7] = 0x00;
sendData = buildCheckData(sendData, sendData.Length - 2);
string str = AcSerialBean.byteToHexStr(sendData);
LogUtil.debug("温湿度控制器发送数据:" + str);
byte[] reviceData = new byte[15];
bool isOk = false;
sb.SendCommand(sendData, ref reviceData, 100, out isOk);
try
{
if (reviceData != null && reviceData.Length >= 9)
{
string temp = String.Format("{0:X2}", reviceData[3]) + String.Format("{0:X2}", reviceData[4]);
string hum = String.Format("{0:X2}", reviceData[5]) + String.Format("{0:X2}", reviceData[6]);
double tempV = (double)Convert.ToInt32(temp, 16) / 10;
double humV = (double)Convert.ToInt32(hum, 16) / 10;
int year = Convert.ToInt32(String.Format("{0:X2}", reviceData[7]), 16);
int mouth = Convert.ToInt32(String.Format("{0:X2}", reviceData[8]), 16);
int day = Convert.ToInt32(String.Format("{0:X2}", reviceData[9]), 16);
int hour = Convert.ToInt32(String.Format("{0:X2}", reviceData[10]), 16);
int minute = Convert.ToInt32(String.Format("{0:X2}", reviceData[11]), 16);
int second = Convert.ToInt32(String.Format("{0:X2}", reviceData[12]), 16);
DateTime time = new DateTime(year, mouth, day, hour, minute, second);
list.Add(tempV);
list.Add(humV);
list.Add(time);
}
}
catch (Exception ex)
{
LogUtil.info(LogName + "转换出错:" + ex.ToString());
}
return list;
}
private static byte[] buildCheckData(byte[] sendData, int length)
{
ushort pChecksum = 0;
AcSerialBean.CalculateCRC(sendData, length, out pChecksum);
string checkStr = Convert.ToString(pChecksum, 16);
byte[] checkByte = AcSerialBean.StringToByte(checkStr);
if (checkByte.Length == 1)
{
sendData[length] = checkByte[0];
sendData[length + 1] = 0x00;
}
else
{
sendData[length + 1] = checkByte[0];
sendData[length] = checkByte[1];
}
return sendData;
}
private static int getReviceIntData(byte[] dataArray)
{
List<double> list = new List<double>();
try
{
if (dataArray == null)
{
return -1;
}
if (dataArray.Length >= 9)
{
string data = String.Format("{0:X2}", dataArray[5]) + String.Format("{0:X2}", dataArray[6]+String.Format("{0:X2}", dataArray[3]) + String.Format("{0:X2}", dataArray[4]) );
int tempV = Convert.ToInt32(data, 16);
return tempV;
}
}
catch (Exception ex)
{
LogUtil.info(LogName + "转换出错:" + ex.ToString());
}
return -1;
}
private static List<double> getReviceData(byte[] dataArray)
{
List<double> list = new List<double>();
try
{
if (dataArray == null)
{
return list;
}
if (dataArray.Length >= 9)
{
string temp = String.Format("{0:X2}", dataArray[3])+ String.Format("{0:X2}", dataArray[4]);
string hum = String.Format("{0:X2}", dataArray[5]) + String.Format("{0:X2}", dataArray[6]);
double tempV = (double)Convert.ToInt32(temp, 16)/10;
double humV =(double) Convert.ToInt32(hum, 16)/10;
list.Add(tempV);
list.Add(humV);
}
}
catch (Exception ex)
{
LogUtil.info(LogName + "转换出错:" + ex.ToString());
}
return list;
}
}
}
......@@ -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;
}
}
}
......@@ -19,6 +19,7 @@ namespace OnlineStore.LoadCSVLibrary
: base(id, cid, LoadCSVLibrary.DeviceType.BoxEquip, filepath)
{
}
#region
/// <summary>
/// AXIS,0,行走机构,MoveAxis,0,HC,,35000,60000,60000,1000,5000,20000,10,100,0,0
/// </summary>
......@@ -69,110 +70,563 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary>
[ConfigProAttribute("ComAxis_B")]
public ConfigMoveAxis ComAxis_B { get; set; }
#endregion
/// <summary>
/// PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("IsDebug")]
public int IsDebug { get; set; }
#region 轴移动点位信息
/// <summary>
/// PRO,0,行走机构_待机点P1,MoveAxis_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P1")]
public int MoveAxis_P1 { get; set; }
/// <summary>
/// PRO,0,行走机构_P1速度,MoveAxis_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,行走机构_进出料机构取放点位P2,MoveAxis_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P1_Speed")]
public int MoveAxis_P1_Speed { get; set; }
[ConfigProAttribute("MoveAxis_P2")]
public int MoveAxis_P2 { get; set; }
/// <summary>
/// PRO,0,行走机构_存储库位取放点位P3,MoveAxis_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P3")]
public int MoveAxis_P3 { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_待机点P1,PullAxis_Inout_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P1")]
public int PullAxis_Inout_P1 { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P1速度,PullAxis_Inout_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,料斗拉取进出轴_A面料屉提取点P2,PullAxis_Inout_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P1_Speed")]
public int PullAxis_Inout_P1_Speed { get; set; }
[ConfigProAttribute("PullAxis_Inout_P2")]
public int PullAxis_Inout_P2 { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_A面料屉库位点P3,PullAxis_Inout_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P3")]
public int PullAxis_Inout_P3 { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_B面料屉提取点P4,PullAxis_Inout_P4,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P4")]
public int PullAxis_Inout_P4 { get; set; }
/// <summary>
///PRO,0,料斗拉取进出轴_B面料屉库位点P5,PullAxis_Inout_P5,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P5")]
public int PullAxis_Inout_P5 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_待机点P1,Updown_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P1")]
public int Updown_P1 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,移栽升降轴_A上暂存区取料高点P2,Updown_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P1_Speed")]
public int Updown_P1_Speed { get; set; }
[ConfigProAttribute("Updown_P2")]
public int Updown_P2 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_A上暂存区取料低点P3,Updown_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P3")]
public int Updown_P3 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_A下暂存区放料高点P4,Updown_P4,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P4")]
public int Updown_P4 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_A下暂存区放料低点P5,Updown_P5,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P5")]
public int Updown_P5 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_A面料屉上方过渡点P6,Updown_P6,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P6")]
public int Updown_P6 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_A面料屉取放点P7,Updown_P7,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P7")]
public int Updown_P7 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B上暂存区取料高点P8,Updown_P8,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P8")]
public int Updown_P8 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B上暂存区取料低点P9,Updown_P9,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P9")]
public int Updown_P9 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B下暂存区取料高点P10,Updown_P10,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P10")]
public int Updown_P10 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B下暂存区取料低点P11,Updown_P11,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P11")]
public int Updown_P11 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B面料屉上方过渡点P12,Updown_P12,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P12")]
public int Updown_P12 { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_B面料屉取放点P13,Updown_P13,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P13")]
public int Updown_P13 { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_待机点P1,PullAxis_Updown_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P1")]
public int PullAxis_Updown_P1 { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_P1速度,PullAxis_Updown_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,料斗拉取升降轴_料屉提取水平点P2,PullAxis_Updown_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P1_Speed")]
public int PullAxis_Updown_P1_Speed { get; set; }
[ConfigProAttribute("PullAxis_Updown_P2")]
public int PullAxis_Updown_P2 { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_料屉提取高点P3,PullAxis_Updown_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P3")]
public int PullAxis_Updown_P3 { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_料屉提取低点P4,PullAxis_Updown_P4,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P4")]
public int PullAxis_Updown_P4 { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_待机点P1,XAxis_A_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P1")]
public int XAxis_A_P1 { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_P1速度,XAxis_A_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,A面移栽X轴_A进出料暂存区取放料点P2,XAxis_A_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P1_Speed")]
public int XAxis_A_P1_Speed { get; set; }
[ConfigProAttribute("XAxis_A_P2")]
public int XAxis_A_P2 { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_A面料屉库位取放料点P3,XAxis_A_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P3")]
public int XAxis_A_P3 { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_待机点P1,MiddleAxis_A_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P1")]
public int MiddleAxis_A_P1 { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_P1速度,MiddleAxis_A_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,A面移栽旋转轴_A进出料暂存区取放料水平点P2,MiddleAxis_A_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P1_Speed")]
public int MiddleAxis_A_P1_Speed { get; set; }
[ConfigProAttribute("MiddleAxis_A_P2")]
public int MiddleAxis_A_P2 { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_A面料屉库位垂直取放料点P3,MiddleAxis_A_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P3")]
public int MiddleAxis_A_P3 { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_待机点P1,ComAxis_A_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P1")]
public int ComAxis_A_P1 { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_P1速度,ComAxis_A_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,A面移栽压紧轴_压紧前点P2,ComAxis_A_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P1_Speed")]
public int ComAxis_A_P1_Speed { get; set; }
[ConfigProAttribute("ComAxis_A_P2")]
public int ComAxis_A_P2 { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_压紧点P3,ComAxis_A_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P3")]
public int ComAxis_A_P3 { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_待机点P1,XAxis_B_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P1")]
public int XAxis_B_P1 { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_P1速度,XAxis_B_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,B面移栽X轴_B进出料暂存区取放料点P2,XAxis_B_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P1_Speed")]
public int XAxis_B_P1_Speed { get; set; }
[ConfigProAttribute("XAxis_B_P2")]
public int XAxis_B_P2 { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_B面料屉库位取放料点P3,XAxis_B_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P3")]
public int XAxis_B_P3 { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_待机点P1,MiddleAxis_B_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P1")]
public int MiddleAxis_B_P1 { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_P1速度,MiddleAxis_B_P1_Speed,108,,,,,,,,,,,,
/// PRO,0,B面移栽旋转轴_B进出料暂存区取放料水平点P2,MiddleAxis_B_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P1_Speed")]
public int MiddleAxis_B_P1_Speed { get; set; }
[ConfigProAttribute("MiddleAxis_B_P2")]
public int MiddleAxis_B_P2 { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_B面料屉库位垂直取放料点P3,MiddleAxis_B_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P3")]
public int MiddleAxis_B_P3 { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_待机点P1,ComAxis_B_P1,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P1")]
public int ComAxis_B_P1 { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_压紧前点P2,ComAxis_B_P2,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P2")]
public int ComAxis_B_P2 { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_压紧点P3,ComAxis_B_P3,100,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P3")]
public int ComAxComAxis_B_P3is_B_P1 { get; set; }
#endregion
#region 轴移动速度信息
/// <summary>
/// PRO,0,行走机构_P1速度,MoveAxis_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P1_Speed")]
public int MoveAxis_P1_Speed { get; set; }
/// <summary>
/// PRO,0,行走机构_P2速度,MoveAxis_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P2_Speed")]
public int MoveAxis_P2_Speed { get; set; }
/// <summary>
/// PRO,0,行走机构_P3速度,MoveAxis_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MoveAxis_P3_Speed")]
public int MoveAxis_P3_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P1速度,PullAxis_Inout_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P1_Speed")]
public int PullAxis_Inout_P1_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P2速度,PullAxis_Inout_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P2_Speed")]
public int PullAxis_Inout_P2_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P3速度,PullAxis_Inout_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P3_Speed")]
public int PullAxis_Inout_P3_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P4速度,PullAxis_Inout_P4_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P4_Speed")]
public int PullAxis_Inout_P4_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取进出轴_P5速度,PullAxis_Inout_P5_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Inout_P5_Speed")]
public int PullAxis_Inout_P5_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P1速度,Updown_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P1_Speed")]
public int Updown_P1_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P2速度,Updown_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P2_Speed")]
public int Updown_P2_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P3速度,Updown_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P3_Speed")]
public int Updown_P3_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P4速度,Updown_P4_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P4_Speed")]
public int Updown_P4_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P5速度,Updown_P5_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P5_Speed")]
public int Updown_P5_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P6速度,Updown_P6_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P6_Speed")]
public int Updown_P6_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P7速度,Updown_P7_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P7_Speed")]
public int Updown_P7_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P8速度,Updown_P8_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P8_Speed")]
public int Updown_P8_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P9速度,Updown_P9_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P9_Speed")]
public int Updown_P9_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P10速度,Updown_P10_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P10_Speed")]
public int Updown_P10_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P11速度,Updown_P11_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P11_Speed")]
public int Updown_P11_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P12速度,Updown_P12_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P12_Speed")]
public int Updown_P12_Speed { get; set; }
/// <summary>
/// PRO,0,移栽升降轴_P13速度,Updown_P13_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("Updown_P13_Speed")]
public int Updown_P13_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_P1速度,PullAxis_Updown_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P1_Speed")]
public int PullAxis_Updown_P1_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_P2速度,PullAxis_Updown_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P2_Speed")]
public int PullAxis_Updown_P2_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_P3速度,PullAxis_Updown_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P3_Speed")]
public int PullAxis_Updown_P3_Speed { get; set; }
/// <summary>
/// PRO,0,料斗拉取升降轴_P4速度,PullAxis_Updown_P4_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("PullAxis_Updown_P4_Speed")]
public int PullAxis_Updown_P4_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_P1速度,XAxis_A_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P1_Speed")]
public int XAxis_A_P1_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_P2速度,XAxis_A_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P2_Speed")]
public int XAxis_A_P2_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽X轴_P3速度,XAxis_A_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_A_P3_Speed")]
public int XAxis_A_P3_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_P1速度,MiddleAxis_A_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P1_Speed")]
public int MiddleAxis_A_P1_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_P2速度,MiddleAxis_A_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P2_Speed")]
public int MiddleAxis_A_P2_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽旋转轴_P3速度,MiddleAxis_A_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_A_P3_Speed")]
public int MiddleAxis_A_P3_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_P1速度,ComAxis_A_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P1_Speed")]
public int ComAxis_A_P1_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_P2速度,ComAxis_A_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P2_Speed")]
public int ComAxis_A_P2_Speed { get; set; }
/// <summary>
/// PRO,0,A面移栽压紧轴_P3速度,ComAxis_A_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_A_P3_Speed")]
public int ComAxis_A_P3_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_P1速度,XAxis_B_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P1_Speed")]
public int XAxis_B_P1_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_P2速度,XAxis_B_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P2_Speed")]
public int XAxis_B_P2_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽X轴_P3速度,XAxis_B_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("XAxis_B_P3_Speed")]
public int XAxis_B_P3_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_P1速度,MiddleAxis_B_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P1_Speed")]
public int MiddleAxis_B_P1_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_P2速度,MiddleAxis_B_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P2_Speed")]
public int MiddleAxis_B_P2_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽旋转轴_P3速度,MiddleAxis_B_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("MiddleAxis_B_P3_Speed")]
public int MiddleAxis_B_P3_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_P1速度,ComAxis_B_P1_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P1_Speed")]
public int ComAxis_B_P1_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_P2速度,ComAxis_B_P2_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P2_Speed")]
public int ComAxis_B_P2_Speed { get; set; }
/// <summary>
/// PRO,0,B面移栽压紧轴_P3速度,ComAxis_B_P3_Speed,108,,,,,,,,,,,,
/// </summary>
[ConfigProAttribute("ComAxis_B_P3_Speed")]
public int ComAxis_B_P3_Speed { get; set; }
#endregion
#region 温湿度
/// <summary>
/// PRO 需要吹气的温度(温度标准) Max_Temperature 10
/// </summary>
[ConfigProAttribute("Max_Temperature", false)]
public int Max_Temperature { get; set; }
/// <summary>
/// PRO 需要吹气的湿度(湿度标准) Max_Humidity 10
/// </summary>
[ConfigProAttribute("Max_Humidity", false)]
public int Max_Humidity { get; set; }
/// <summary>
/// PRO 每次吹气的时间(分钟) BlowAir_Time 10
/// </summary>
[ConfigProAttribute("BlowAir_Time", false)]
public int BlowAir_Time { get; set; }
/// <summary>
/// PRO 两次吹气间隔(分钟) BlowAir_Interval 10
/// </summary>
[ConfigProAttribute("BlowAir_Interval", false)]
public int BlowAir_Interval { get; set; }
/// <summary>
/// PRO,温湿度端口号,Humiture_Port,COM1,,,,,,,
/// </summary>
[ConfigProAttribute("Humiture_Port", true)]
public string Humiture_Port { get; set; }
#endregion
}
}
......@@ -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!