Commit 59dbda57 LN

io模块更新,复位功能编写

1 个父辈 e178b7d4
......@@ -6,7 +6,7 @@
<members>
<member name="T:Asa.IOModule.AIOBOX">
<summary>
IO操作类
零点IO模块操作类
</summary>
</member>
<member name="T:Asa.IOModule.AIOBOX.DIO_Changed">
......@@ -26,14 +26,11 @@
自动读取DO事件触发
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.#ctor(Asa.IOModule.Box_Type,System.Int32,Asa.IOModule.Box_Type,System.Int32)">
<member name="M:Asa.IOModule.AIOBOX.#ctor(System.String)">
<summary>
IO操作类
零点IO模块操作类
</summary>
<param name="input">输入类型</param>
<param name="inputCount">输入数量</param>
<param name="output">输出类型</param>
<param name="outputCount">输出数量</param>
<param name="logName"></param>
</member>
<member name="P:Asa.IOModule.AIOBOX.IP">
<summary>
......@@ -50,15 +47,30 @@
是否连接
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.ErrInfo">
<member name="P:Asa.IOModule.AIOBOX.InputCount">
<summary>
错误信息
DI总数
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.OutputCount">
<summary>
DO总数
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.SetType(Asa.IOModule.Box_Type,System.Int32,Asa.IOModule.Box_Type,System.Int32)">
<summary>
设置输入输出的类型
</summary>
<param name="input"></param>
<param name="inputCount"></param>
<param name="output"></param>
<param name="outputCount"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.Connect">
<summary>
连接
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Close">
<summary>
......@@ -146,6 +158,12 @@
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.GetLocalIP">
<summary>
获取本地IPv4地址
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Send">
<summary>
发送命令线程
......@@ -249,47 +267,5 @@
闭合,打开,高电平
</summary>
</member>
<member name="T:Asa.IOModule.LogFile">
<summary>
日志操作类
</summary>
</member>
<member name="M:Asa.IOModule.LogFile.#ctor(System.String,System.String)">
<summary>
日志
</summary>
<param name="path">文件夹路径</param>
<param name="ip"></param>
</member>
<member name="M:Asa.IOModule.LogFile.Close">
<summary>
关闭文件
</summary>
</member>
<member name="M:Asa.IOModule.LogFile.OutError(System.String)">
<summary>
输出错误
</summary>
<param name="s"></param>
</member>
<member name="M:Asa.IOModule.LogFile.OutInfo(System.String)">
<summary>
输出信息
</summary>
<param name="s"></param>
</member>
<member name="M:Asa.IOModule.LogFile.OutData(System.String,System.Byte[])">
<summary>
输出数据
</summary>
<param name="tr"></param>
<param name="buff"></param>
</member>
<member name="M:Asa.IOModule.LogFile.OutData(System.String)">
<summary>
输出数据
</summary>
<param name="s"></param>
</member>
</members>
</doc>
......@@ -22,6 +22,14 @@ namespace OnlineStore.DeviceLibrary
{
IsRun = false;
}
if (IOManager.DOValue(IO_Type.Door_Down).Equals(IO_VALUE.HIGH))
{
IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.LOW);
}
if (IOManager.DOValue(IO_Type.Door_Up).Equals(IO_VALUE.HIGH))
{
IOManager.IOMove(IO_Type.Door_Up, IO_VALUE.LOW);
}
}
private static bool Start(string moveDO, string checkDI, int timeOutMS = 30000)
{
......@@ -40,6 +48,7 @@ namespace OnlineStore.DeviceLibrary
private static string WriteAndWait(string moveDO, string checkDI, int timeOutMS = 30000)
{
IOManager.IOMove(IO_Type.Door_Break, IO_VALUE.HIGH);
LastMoveDO = moveDO;
LastCheckDI = checkDI;
LogUtil.debug("写入信号:" + moveDO + ",等待信号:" + checkDI + "");
......@@ -89,7 +98,7 @@ namespace OnlineStore.DeviceLibrary
}
LastEndTime = DateTime.Now;
IOManager.IOMove(moveDO, IO_VALUE.LOW);
IOManager.IOMove(IO_Type.Door_Break, IO_VALUE.LOW);
IsRun = false;
return result;
}
......
......@@ -15,8 +15,6 @@ namespace OnlineStore.DeviceLibrary
{
public class AIOBOXManager : IOManager
{
public readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Dictionary<string, AIOBOX> AIOMap = new Dictionary<string, AIOBOX>();
public Dictionary<string, List<Box_Sta>> DIValueMap = new Dictionary<string, List<Box_Sta>>();
......@@ -27,8 +25,6 @@ namespace OnlineStore.DeviceLibrary
private object DILock = "";
private object DOLock = "";
private List<string> IoIPLIst = new List<string>();
private System.Timers.Timer conTimer = null;
public override void ConnectionIOList(List<string> DIONameList)
{
......@@ -69,37 +65,22 @@ namespace OnlineStore.DeviceLibrary
{
DOValueMap.Remove(ioIp);
}
int DIMS = ConfigAppSettings.GetIntValue("DIMS");
if (DIMS < 20)
{
DIMS = 20;
}
int DOMS = ConfigAppSettings.GetIntValue("DOMS");
if (DOMS < 200)
{
DOMS = 200;
}
int DILength = StoreManager.Config.GetDILength(ioIp);
int DOLength = StoreManager.Config.GetDOLength(ioIp);
string logName = "IO模块[" + ioIp + "] DI[" + DILength + "] DO[" + DOLength + "],[" + DIMS + "] [" + DOMS + "]";
string logName = "IO模块[" + ioIp + "] DI[" + DILength + "] DO[" + DOLength + "] ";
try
{
aioBox = new AIOBOX();
aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError);
aioBox = new AIOBOX("AIOBOX");
aioBox.SetType(Asa.IOModule.Box_Type.DI, DILength, Asa.IOModule.Box_Type.DO, DOLength);
aioBox.IP = ioIp;
aioBox.SetInput(Asa.IOModule.Box_Type.DI, DILength);
aioBox.SetOutput(Asa.IOModule.Box_Type.DO, DOLength);
//DI主动上传
aioBox.AutoReadInput(true);
aioBox.AutoReadOutput(false, DOMS);
aioBox.Upload = false ;
aioBox.DI_Changed_Event += AioBox_DI_Changed_Event; ;
aioBox.DO_Changed_Event += AioBox_DO_Changed_Event;
LogUtil.info("开始连接:" + logName + ":" + aioBox.ErrInfo);
LogUtil.info("开始连接:" + logName + ":");
aioBox.Connect();
AIOMap.Add(ioIp, aioBox);
......@@ -117,25 +98,7 @@ namespace OnlineStore.DeviceLibrary
private DateTime lastLogTime = DateTime.Now;
private void AioBox_Log_Out_Event(AIOBOX box, string[] s)
{
foreach (string str in s)
{
LogUtil.debug("[" + box.IP + "]" + str);
}
}
private void AioBox_Reconnect_Event(AIOBOX box, int times, ref bool conn, Dictionary<string, string> dict)
{
conn = true;
string msg = "重连AIO块【" + box.IP + "】次数:" + times + "【" + box.ErrInfo + "】,连接信息如下\r\n";
foreach (string key in dict.Keys)
{
msg = msg + "\t" + "[" + key + "]=[" + dict[key] + "],";
}
LogUtil.error(msg);
}
private void AioBox_DI_Changed_Event(AIOBOX box, Box_Sta[] sta)
{
......@@ -145,7 +108,7 @@ namespace OnlineStore.DeviceLibrary
}
catch (Exception ex)
{
LogUtil.error("AioBox_DI_Changed_Event出错:"+ ex.ToString());
LogUtil.error("AioBox_DI_Changed_Event出错:" + ex.ToString());
}
}
private void AioBox_DO_Changed_Event(AIOBOX box, Box_Sta[] sta)
......@@ -279,7 +242,7 @@ namespace OnlineStore.DeviceLibrary
bool result = aioBox.WriteDO(StartAddress, GetBox_Sta(onOff));
if (!result)
{
LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 失败:" + aioBox.ErrInfo);
LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 失败:");
}
}
else
......@@ -289,7 +252,7 @@ namespace OnlineStore.DeviceLibrary
}
catch (Exception ex)
{
LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 出错啦:" + ex.ToString());
LogUtil.error("AIO WriteSingleDO [" + ioIp + "] [" + StartAddress + "] 出错啦:"+ ex.ToString());
}
}
public override void WriteSingleDO(string ioIp, byte slaveId, ushort StartAddress, IO_VALUE onOff, int mSeconds)
......@@ -365,7 +328,7 @@ namespace OnlineStore.DeviceLibrary
}
public override IO_VALUE GetDOValue(string ioIP, byte slaveId, ushort StartAddress)
{
IO_VALUE value = IO_VALUE.LOW;
IO_VALUE value = IO_VALUE.None;
try
{
AIOBOX aioBox = getAIO(ioIP);
......@@ -397,7 +360,7 @@ namespace OnlineStore.DeviceLibrary
public override IO_VALUE GetDIValue(string ioIP, byte slaveId, ushort StartAddress)
{
IO_VALUE value = IO_VALUE.LOW;
IO_VALUE value = IO_VALUE.None;
for (int i = 1; i <= 3; i++)
{
try
......@@ -436,7 +399,7 @@ namespace OnlineStore.DeviceLibrary
}
public override IO_VALUE GetIOValue(ConfigIO configIO)
{
IO_VALUE value = IO_VALUE.LOW;
IO_VALUE value = IO_VALUE.None;
try
{
if (configIO.ProType.Equals(ConfigItemType.DI))
......@@ -477,17 +440,5 @@ namespace OnlineStore.DeviceLibrary
return aioBox;
}
public bool IsConnect(string ip)
{
if (AIOMap.ContainsKey(ip))
{
if (AIOMap[ip].IsConn)
{
return true;
}
return false;
}
return false;
}
}
}
}
......@@ -18,6 +18,15 @@ namespace OnlineStore.DeviceLibrary
this.PlateH = plateH;
this.paramType = type;
}
public InOutParam(MoveType type, string posId, VerticalPosition position)
{
this.position = position;
PosCode = "";
PosId = posId;
this.PlateW = position.BagWidth;
this.PlateH = position.BagHigh;
this.paramType = type;
}
public string ToStr()
{
......
......@@ -105,24 +105,6 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
ResetMove =13,
/// <summary>
///14= 回温移库中
/// </summary>
MovementExecute=14,
/// <summary>
///15= 回温移库完成
/// </summary>
MovementEnd= 15,
/// <summary>
///16= 搅拌执行中
/// </summary>
StirringExecute = 16,
/// <summary>
///17= 搅拌完成
/// </summary>
StirringEnd = 17,
}
/// <summary>
......@@ -136,17 +118,21 @@ namespace OnlineStore.DeviceLibrary
Wait = 0,
#region 料仓 重置 101开始
/// <summary>
/// 等待可以关门
/// </summary>
R01_WaitCloseDoor=101,
/// <summary>
/// 复位:升降门关闭,关闭所有灯
/// </summary>
R01_DoorClose=101,
R02_DoorClose,
/// <summary>
/// 复位:料斗旋转轴返回原点
/// </summary>
R02_MiddleHome ,
R03_MiddleHome ,
/// <summary>
/// 复位:旋转轴到待机点
/// </summary>
R03_MiddleToP1 ,
R04_MiddleToP1 ,
#endregion
......@@ -154,165 +140,66 @@ namespace OnlineStore.DeviceLibrary
#region 出库步骤 1001 开始
/// <summary>
///出库:进出轴到P1,旋转轴停止匀速旋转
///出库:等待光栅未被遮挡
/// </summary>
SO_01_InoutToP1 = 1001,
SO_01_Wait = 1001,
/// <summary>
///出库:旋转轴回原点
///出库:关闭升降门
/// </summary>
SO_02_AxisHome ,
SO_02_CloseDoor ,
/// <summary>
/// 出库: 旋转轴至P2( 库位点),升降轴至P5(库位出库前点) ,旋转轴到P2
/// 出库: 旋转轴到P1点
/// </summary>
SO_03_ToBag ,
SO_03_MiddleToP1 ,
/// <summary>
/// 出库:开冷藏门
/// 出库:打开升降门,打开库位灯
/// </summary>
SO_04_OpenCold,
SO_04_OpenDoor,
/// <summary>
/// 出库:进出轴 至P3(库位取放料点)
/// 出库:等待关门
/// </summary>
SO_05_InoutToP3,
SO_05_WaitCloseDoor,
/// <summary>
///出库: 夹爪夹紧
///出库: 开始关门
/// </summary>
SO_06_Clamping_Work,
SO_06_CloseDoor,
/// <summary>
///出库:升降轴到缓冲点P6
///出库:关灯结束
/// </summary>
SO_07_UpdownToP6 ,
SO_07_CloseLed ,
/// <summary>
///出库:进出轴返回P1
/// </summary>
SO_08_InoutToP1,
/// <summary>
/// 出库:关闭冷藏区门
/// </summary>
SO_09_CloseCold,
/// <summary>
/// 出库: 轴1旋转轴至P1,升降轴到P2进料口出料前点
/// </summary>
SO_10_ToDoorPosition ,
/// <summary>
/// 出库: 打开仓门,,旋转轴开始匀速运转,
/// </summary>
SO_11_OpenDoor,
/// <summary>
/// 出库:等待门口无料盘
/// </summary>
SO_12_WaitNoTray ,
/// <summary>
/// 出库:进出轴到P2
/// </summary>
SO_13_InoutToP2,
/// <summary>
/// 出库:升降轴至P8( 进料口出料缓冲点 )
/// </summary>
SO_14_UpdownToP8,
/// <summary>
/// 出库:夹爪放松
/// </summary>
SO_15_Clamping_Relax,
/// <summary>
/// 出库:进出轴到P1
/// </summary>
SO_16_InoutToP1,
/// <summary>
/// 出库:关闭仓门
/// </summary>
SO_17_CloseDoor,
/// <summary>
///出库: 等待拿走物品
/// </summary>
SO_18_WaitTake,
#endregion
#region 入库步骤 2001 开始
/// <summary>
/// 入库信号检测
/// </summary>
SI_01_TrayCheck = 2001,
/// <summary>
/// 入库:进出轴到P1,打开仓门
/// </summary>
SI_02_InOutToP1,
/// <summary>
/// 入库:夹爪放松
/// </summary>
SI_03_Clamping_Relax,
/// <summary>
/// 入库:所有轴先回到待机点,轴2、轴1 动作到P1,
/// </summary>
SI_04_AxisToP1 ,
/// <summary>
/// 入库: 进出轴至P2( 进料口取料点)
/// </summary>
SI_05_InoutToP2,
/// <summary>
/// 入库:夹爪夹紧
///入库:等待光栅未被遮挡
/// </summary>
SI_06_Clamping_Work,
SI_01_Wait = 1001,
/// <summary>
/// 入库: 升降轴至P7( 进料口取料缓冲点)
///入库:关闭升降门
/// </summary>
SI_07_UpdownToP7,
SI_02_CloseDoor,
/// <summary>
/// 入库:进出轴到P1,目标轴停止匀速运转
/// 入库: 旋转轴到P1点
/// </summary>
SI_08_InOutToP1,
SI_03_MiddleToP1,
/// <summary>
/// 入库:移动到库位点,旋转轴 至P2( 库位点)升降轴至P3(库位入库前点),目标轴回原点
/// 入库:打开升降门,打开库位灯
/// </summary>
SI_09_MoveToBag ,
/// <summary>
/// 入库:冷藏轴或回温轴到P2点
/// </summary>
SI_10_TargetAxisToP2,
SI_04_OpenDoor,
/// <summary>
/// 入库:打开冷藏
/// 入库:等待关
/// </summary>
SI_11_OpenColddoor,
/// <summary>
/// 入库:叉子进入库位中,进出轴至P3(库位取放料点)
/// </summary>
SI_12_InoutToP3 ,
/// <summary>
/// 入库:放下物品,升降轴至P4( 库位入料缓冲点)
/// </summary>
SI_13_UpdownToP4 ,
/// <summary>
/// 入库:夹爪放松
/// </summary>
SI_14_Clamping_Relax,
/// <summary>
/// 入库。。叉子从库位中返回,进出轴动作至P1
/// </summary>
SI_15_InOutToP1,
SI_05_WaitCloseDoor,
/// <summary>
/// 入库:关闭冷藏
///入库: 开始关
/// </summary>
SI_16_CloseColddoor,
SI_06_CloseDoor,
/// <summary>
/// 入库:返回待机点,轴2/轴1动作至P1)开始
///入库:关灯结束
/// </summary>
SI_17_GoBack,
SI_07_CloseLed,
#endregion
......
......@@ -37,9 +37,9 @@ namespace OnlineStore.LoadCSVLibrary
private List<int> LedList = null;
public List<int> GetLedList()
public List<int> GetLedList(bool isReload)
{
if (LedList == null)
if (LedList == null || isReload)
{
LedList = new List<int>();
string[] arrays = LedIndex.Split(';');
......
......@@ -85,6 +85,7 @@ namespace OnlineStore.LoadCSVLibrary
}
public enum IO_VALUE
{
None=-1,
/// <summary>
/// 低位
/// </summary>
......
......@@ -246,15 +246,29 @@ namespace OnlineStore.TinPasteStore
private void btnOpenDoor_Click(object sender, EventArgs e)
{
if (IOManager.IOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.HIGH))
{
LogUtil.info("用户点击:打开升降门");
DoorBean.StartOpen(null);
}
else
{
MessageBox.Show("光栅被遮挡,无法开门");
}
}
private void btnCloseDoor_Click(object sender, EventArgs e)
{
if (IOManager.IOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.HIGH))
{
LogUtil.info("用户点击:关闭升降门");
DoorBean.StartClose(null);
}
else
{
MessageBox.Show("光栅被遮挡,无法关门");
}
}
private void btnStopDoor_Click(object sender, EventArgs e)
{
......
......@@ -183,27 +183,6 @@ namespace OnlineStore.TinPasteStore
}
lblWarnMsg.Text = store.WarnMsg;
//if (store.Config.IsHasDoorLimit.Equals(1))
//{
// if (IOManager.IOValue(IO_Type.Door_Limit).Equals(IO_VALUE.LOW))
// {
// lblWarnMsg.Text = lblWarnMsg.Text + " 前门未关";
// }
// else if (store.Config.StoreDIList.ContainsKey(IO_Type.Door_LeftLimit) && IOManager.IOValue(IO_Type.Door_LeftLimit).Equals(IO_VALUE.LOW))
// {
// lblWarnMsg.Text = lblWarnMsg.Text + " 左侧门未关";
// }
// else if (store.Config.StoreDIList.ContainsKey(IO_Type.Door_RightLimit) && IOManager.IOValue(IO_Type.Door_RightLimit).Equals(IO_VALUE.LOW))
// {
// lblWarnMsg.Text = lblWarnMsg.Text + " 右侧门未关";
// }
//}
////如果不在出入库中,且叉子上有信号,需要提示检查叉子
//if (store.runStatus.Equals(StoreRunStatus.Runing) && IOManager.IOValue(IO_Type.TinCheck_Fixture).Equals(IO_VALUE.HIGH))
//{
// lblWarnMsg.Text = lblWarnMsg.Text + " 叉子料盘检测有料,请检查";
//}
if (store.autoNext)
{
string msg = store.autoMsg;
......@@ -255,23 +234,40 @@ namespace OnlineStore.TinPasteStore
{
if (store.runStatus >= StoreRunStatus.HomeMoving)
{
string selectPositionNum = cmbPosition.Text;
//StoreMoveP ktk = GetMoveP();
// store.StartOutStore(new InOutParam(MoveType.OutStore, selectPositionNum, ktk));
string PosID = cmbPosition.Text;
VerticalPosition p = CSVPositionReader<VerticalPosition>.GetPositon(PosID);
if (p != null)
{
p.LedIndex = txtLedIndex.Text.Trim();
p.MiddleAxis_P2 = FormUtil.GetIntValue(txtMP2);
store.StartOutStore(new InOutParam(MoveType.OutStore, PosID, p));
}
else
{
MessageBox.Show("请选择有效库位");
}
}
else
{
MessageBox.Show("请先启动料仓!");
}
}
private void btnInStore_Click(object sender, EventArgs e)
{
if (store.runStatus >= StoreRunStatus.HomeMoving)
{
string selectPositionNum = cmbPosition.Text;
// StoreMoveP ktk = GetMoveP();
// store.StartInStore(new InOutParam(MoveType.InStore, selectPositionNum, ktk));
string PosID = cmbPosition.Text;
VerticalPosition p = CSVPositionReader<VerticalPosition>.GetPositon(PosID);
if (p != null)
{
p.LedIndex = txtLedIndex.Text.Trim();
p.MiddleAxis_P2 = FormUtil.GetIntValue(txtMP2);
store.StartInStore(new InOutParam(MoveType.OutStore, PosID, p));
}
else
{
MessageBox.Show("请选择有效库位");
}
}
else
{
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!