Commit 31374e12 LN

出料机构节拍优化。IO更新。

1 个父辈 f00a8cff
...@@ -6,19 +6,7 @@ ...@@ -6,19 +6,7 @@
<members> <members>
<member name="T:Asa.IOModule.AIOBOX"> <member name="T:Asa.IOModule.AIOBOX">
<summary> <summary>
AIOBOX操作类 IO操作类
</summary>
</member>
<member name="F:Asa.IOModule.AIOBOX.SEND_SLEEP">
<summary>
每条命令发送的间隔
不能小于15,会出现IO接收不到的情况
小于30时,会出现接收数据连包的情况
</summary>
</member>
<member name="F:Asa.IOModule.AIOBOX.PORT">
<summary>
ModBus端口
</summary> </summary>
</member> </member>
<member name="T:Asa.IOModule.AIOBOX.DIO_Changed"> <member name="T:Asa.IOModule.AIOBOX.DIO_Changed">
...@@ -38,31 +26,23 @@ ...@@ -38,31 +26,23 @@
自动读取DO事件触发 自动读取DO事件触发
</summary> </summary>
</member> </member>
<member name="T:Asa.IOModule.AIOBOX.AIO_Changed"> <member name="M:Asa.IOModule.AIOBOX.#ctor(Asa.IOModule.Box_Type,System.Int32,Asa.IOModule.Box_Type,System.Int32)">
<summary> <summary>
自动读取AI委托 IO操作类
</summary>
<param name="box">AIOBOX</param>
<param name="val">所有AI的值</param>
</member>
<member name="E:Asa.IOModule.AIOBOX.AI_Changed_Event">
<summary>
自动读取AI事件触发
</summary> </summary>
<param name="input">输入类型</param>
<param name="inputCount">输入数量</param>
<param name="output">输出类型</param>
<param name="outputCount">输出数量</param>
</member> </member>
<member name="E:Asa.IOModule.AIOBOX.AO_Changed_Event"> <member name="P:Asa.IOModule.AIOBOX.IP">
<summary>
自动读取AO事件触发
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.#ctor">
<summary> <summary>
AIOBOX IP地址
</summary> </summary>
</member> </member>
<member name="P:Asa.IOModule.AIOBOX.IP"> <member name="P:Asa.IOModule.AIOBOX.Upload">
<summary> <summary>
IP地址 输入主动上传
</summary> </summary>
</member> </member>
<member name="P:Asa.IOModule.AIOBOX.IsConn"> <member name="P:Asa.IOModule.AIOBOX.IsConn">
...@@ -75,41 +55,6 @@ ...@@ -75,41 +55,6 @@
错误信息 错误信息
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.LogPath(System.String,Asa.IOModule.LogType)">
<summary>
日志路径,连接前设置路径会自动保存日志
</summary>
<param name="path">文件夹路径</param>
<param name="type">输出类型</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.SetInput(Asa.IOModule.Box_Type,System.Int32)">
<summary>
设置输入端
</summary>
<param name="type">类型</param>
<param name="count">数量</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.SetOutput(Asa.IOModule.Box_Type,System.Int32)">
<summary>
设置输出端
</summary>
<param name="type">类型</param>
<param name="count">数量</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoIP(System.String)">
<summary>
自动获取IP地址,未连接前使用,必须在同一网段
</summary>
<param name="localIP">本地IP地址</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.CheckIP(System.String)">
<summary>
检查IP地址
</summary>
<param name="ip"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Connect"> <member name="M:Asa.IOModule.AIOBOX.Connect">
<summary> <summary>
连接 连接
...@@ -120,26 +65,6 @@ ...@@ -120,26 +65,6 @@
关闭连接 关闭连接
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadInput(System.Boolean,System.Int32)">
<summary>
自动读取输入端并触发事件(主动上传数据 = 禁止)
</summary>
<param name="read">是否自动读取</param>
<param name="sleep">间隔,必须大于等于15ms</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadInput(System.Boolean)">
<summary>
自动读取输入端并触发事件(主动上传数据 = 使能)
</summary>
<param name="read">是否自动读取</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadOutput(System.Boolean,System.Int32)">
<summary>
自动读取输出端,触发事件
</summary>
<param name="read">是否自动读取</param>
<param name="sleep">间隔,必须大于等于15ms</param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReverseStatus(Asa.IOModule.Box_Sta)"> <member name="M:Asa.IOModule.AIOBOX.ReverseStatus(Asa.IOModule.Box_Sta)">
<summary> <summary>
相反状态(ON/OFF) 相反状态(ON/OFF)
...@@ -221,75 +146,68 @@ ...@@ -221,75 +146,68 @@
<param name="sta"></param> <param name="sta"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.GetLocalIP">
<summary>
获取本地IPv4地址
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.Send"> <member name="M:Asa.IOModule.AIOBOX.Send">
<summary> <summary>
发送命令线程 发送命令线程
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.Receive"> <member name="M:Asa.IOModule.AIOBOX.GetReadDI_Command">
<summary> <summary>
接收命令线程 获取ReadDI的命令
</summary> </summary>
<returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.ReadSingle(System.Byte[])"> <member name="M:Asa.IOModule.AIOBOX.GetReadDO_Command">
<summary>
读取写入单个DO,功能码5
</summary>
<param name="buff"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Byte[])">
<summary> <summary>
读取所有DO状态,功能码1 获取ReadDO的命令
</summary> </summary>
<param name="buff"></param> <returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Byte[])"> <member name="M:Asa.IOModule.AIOBOX.Listen">
<summary> <summary>
读取所有DI状态,功能码2 监听网络线程
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Byte[])"> <member name="M:Asa.IOModule.AIOBOX.CommandProcess(System.Byte[])">
<summary> <summary>
读取所有AI的值,功能码4 接收到的命令处理方法,(task多线程)
</summary> </summary>
<param name="buff"></param> <param name="cmd"></param>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.Command"> <member name="M:Asa.IOModule.AIOBOX.Reconn">
<summary> <summary>
命令,前7个字节 重连线程
</summary> </summary>
<returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.TriggerDIO"> <member name="M:Asa.IOModule.AIOBOX.Open">
<summary> <summary>
触发DIO改变事件 打开socket建立连接
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadInput"> <member name="M:Asa.IOModule.AIOBOX.CheckIP(System.String)">
<summary> <summary>
自动读取输入端线程 检查IP地址
</summary> </summary>
<param name="ip"></param>
<returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadOutput"> <member name="M:Asa.IOModule.AIOBOX.AutoIP(System.String)">
<summary> <summary>
自动读取输出端线程 自动获取IP地址,未连接前使用,必须在同一网段
</summary> </summary>
<param name="localIP">本地IP地址</param>
<returns></returns>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.Listen"> <member name="M:Asa.IOModule.AIOBOX.GetIP">
<summary> <summary>
监听结果线程 获取IO模块IP地址
</summary> </summary>
</member> </member>
<member name="M:Asa.IOModule.AIOBOX.TestMethod"> <member name="M:Asa.IOModule.AIOBOX.Command">
<summary> <summary>
测试方法锁 命令,前7个字节
</summary> </summary>
<returns></returns>
</member> </member>
<member name="T:Asa.IOModule.Box_Type"> <member name="T:Asa.IOModule.Box_Type">
<summary> <summary>
...@@ -331,26 +249,6 @@ ...@@ -331,26 +249,6 @@
闭合,打开,高电平 闭合,打开,高电平
</summary> </summary>
</member> </member>
<member name="T:Asa.IOModule.LogType">
<summary>
日志类型
</summary>
</member>
<member name="F:Asa.IOModule.LogType.OnlyError">
<summary>
仅错误信息
</summary>
</member>
<member name="F:Asa.IOModule.LogType.All">
<summary>
所有
</summary>
</member>
<member name="F:Asa.IOModule.LogType.WriteDO">
<summary>
写入DO
</summary>
</member>
<member name="T:Asa.IOModule.LogFile"> <member name="T:Asa.IOModule.LogFile">
<summary> <summary>
日志操作类 日志操作类
......
...@@ -840,22 +840,28 @@ namespace OnlineStore.DeviceLibrary ...@@ -840,22 +840,28 @@ namespace OnlineStore.DeviceLibrary
public bool IsReviceInPosId(MoveEquip moveEquip, string posId) public bool IsReviceInPosId(MoveEquip moveEquip, string posId)
{ {
bool isReviceInfo = false; bool isReviceInfo = false;
if (moveEquip.MoveInfo.MoveType.Equals(LineMoveType.InStore) && moveEquip.MoveInfo.MoveParam != null && moveEquip.MoveInfo.MoveParam.PosId.Equals(posId)) try
{
LogInfo(" IsReviceInPosId 正在入库中:" + MoveInfo.MoveParam.ToStr());
isReviceInfo = true;
}
if (!isReviceInfo && moveEquip.waitInStoreList.Count > 0)
{ {
foreach (InOutParam inout in moveEquip.waitInStoreList) if (moveEquip.MoveInfo.MoveType.Equals(LineMoveType.InStore) && moveEquip.MoveInfo.MoveParam != null && moveEquip.MoveInfo.MoveParam.PosId.Equals(posId))
{
LogInfo(" IsReviceInPosId 正在入库中:" + MoveInfo.MoveParam.ToStr());
isReviceInfo = true;
}
if (!isReviceInfo && moveEquip.waitInStoreList.Count > 0)
{ {
if (inout.PosId.Equals(posId) && (!inout.WareCode.Equals(""))) foreach (InOutParam inout in moveEquip.waitInStoreList)
{ {
LogInfo(" IsReviceInPosId 已存在入库任务:" + inout.ToStr()); if (inout.PosId.Equals(posId) && (!inout.WareCode.Equals("")))
isReviceInfo = true; {
break; LogInfo(" IsReviceInPosId 已存在入库任务:" + inout.ToStr());
isReviceInfo = true;
break;
}
} }
} }
}catch(Exception ex)
{
LogUtil.error("IsReviceInPosId【"+ posId + "】出错:" + ex.ToString());
} }
return isReviceInfo; return isReviceInfo;
} }
......
...@@ -310,7 +310,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -310,7 +310,18 @@ namespace OnlineStore.DeviceLibrary
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_05_WaitTime); SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_05_WaitTime);
LogUtil.info(Name + "托盘 【" + currTrayNum + "】【" + outMsg + "】需要出料" + SecondMoveInfo.SLog + ":" + param.ToStr() + " 等待可以开始移栽 "); LogUtil.info(Name + "托盘 【" + currTrayNum + "】【" + outMsg + "】需要出料" + SecondMoveInfo.SLog + ":" + param.ToStr() + " 等待可以开始移栽 ");
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000)); SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitProvidingEquipCanOut());//等待 SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitProvidingEquipCanOut());
//等待
CylinderMove(null, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP);
if (Config.SidesWayNum.Equals(4) && LineManager.Line.SwCanUpMove(1))
{
CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升,同时横移1处的顶升也可以上升 ");
LineManager.Line.CylinderMove(null, IO_Type.SW1_TopCylinder_Down, IO_Type.SW1_TopCylinder_Up);
}
else
{
CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升 ");
}
return; return;
} }
...@@ -342,10 +353,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -342,10 +353,12 @@ namespace OnlineStore.DeviceLibrary
return; return;
} }
} }
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_05_WaitTime)) else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_05_WaitTime) && MoveInfo.MoveType.Equals(LineMoveType.None))
{ {
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_06_TopUp); SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_09_WaitLetFixtureGo);
CylinderMove(SecondMoveInfo, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP); CheckLog("托盘放行 " + SecondMoveInfo.SLog + "开始新的出料任务~" + SecondMoveInfo.MoveParam.ToStr() + ",开始移栽");
bool result = StartOutStoreMove(SecondMoveInfo.MoveParam);
CylinderMove(null, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP);
if (Config.SidesWayNum.Equals(4) && LineManager.Line.SwCanUpMove(1)) if (Config.SidesWayNum.Equals(4) && LineManager.Line.SwCanUpMove(1))
{ {
CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升,同时横移1处的顶升也可以上升 "); CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升,同时横移1处的顶升也可以上升 ");
...@@ -356,6 +369,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -356,6 +369,18 @@ namespace OnlineStore.DeviceLibrary
CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升 "); CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升 ");
} }
//SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_06_TopUp);
//CylinderMove(SecondMoveInfo, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP);
//if (Config.SidesWayNum.Equals(4) && LineManager.Line.SwCanUpMove(1))
//{
// CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升,同时横移1处的顶升也可以上升 ");
// LineManager.Line.CylinderMove(null, IO_Type.SW1_TopCylinder_Down, IO_Type.SW1_TopCylinder_Up);
//}
//else
//{
// CheckLog("托盘阻挡 " + SecondMoveInfo.SLog + " 顶升气缸上升 ");
//}
} }
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_06_TopUp)) else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_06_TopUp))
{ {
...@@ -438,10 +463,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -438,10 +463,17 @@ namespace OnlineStore.DeviceLibrary
lineStatus = LineStatus.OutStoreExecute; lineStatus = LineStatus.OutStoreExecute;
MoveInfo.MoveParam = param; MoveInfo.MoveParam = param;
MoveInfo.NewMove(LineMoveType.OutStore); MoveInfo.NewMove(LineMoveType.OutStore);
LogInfo("开始出料【" + posId + "】处理(移栽):PO_00_CylinderAfter, 前后气缸后退"); if (CylinderIsOk(IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After))
MoveInfo.NextMoveStep(LineMoveStep.PO_00_CylinderAfter); {
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000)); PO_01_CylinderDown();
CylinderMove(MoveInfo, IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After); }
else
{
LogInfo("开始出料【" + posId + "】处理(移栽):PO_00_CylinderAfter, 前后气缸后退");
MoveInfo.NextMoveStep(LineMoveStep.PO_00_CylinderAfter);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
CylinderMove(MoveInfo, IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After);
}
return true; return true;
} }
else else
...@@ -450,17 +482,30 @@ namespace OnlineStore.DeviceLibrary ...@@ -450,17 +482,30 @@ namespace OnlineStore.DeviceLibrary
return false; return false;
} }
} }
private void PO_01_CylinderDown()
{
MoveInfo.NextMoveStep(LineMoveStep.PO_01_CylinderDown);
OutLog(" " + MoveInfo.SLog + " : 上下气缸下降");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(300));
UpdownDownP2Move(MoveInfo.MoveParam.PlateH, MoveInfo.MoveParam.PlateW);
CylinderMove(MoveInfo, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_UP);
if (Config.SidesWayNum.Equals(4) && LineManager.Line.SwCanUpMove(1))
{
OutLog(" 顶升气缸上升,同时横移1处的顶升也可以上升 ");
LineManager.Line.CylinderMove(null, IO_Type.SW1_TopCylinder_Down, IO_Type.SW1_TopCylinder_Up);
}
else
{
OutLog(" 顶升气缸上升 ");
}
}
protected override void OutStoreProcess() protected override void OutStoreProcess()
{ {
if (MoveInfo.IsInWait) if (MoveInfo.IsInWait)
{ {
CheckWait(MoveInfo); CheckWait(MoveInfo);
} }
//if (SecondMoveInfo.IsInWait)
//{
// CheckWait(SecondMoveInfo);
//}
if (MoveInfo.IsInWait) if (MoveInfo.IsInWait)
{ {
return; return;
...@@ -468,10 +513,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -468,10 +513,7 @@ namespace OnlineStore.DeviceLibrary
string posId = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosId : ""; string posId = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosId : "";
if (MoveInfo.MoveStep.Equals(LineMoveStep.PO_00_CylinderAfter)) if (MoveInfo.MoveStep.Equals(LineMoveStep.PO_00_CylinderAfter))
{ {
MoveInfo.NextMoveStep(LineMoveStep.PO_01_CylinderDown); PO_01_CylinderDown();
OutLog(" " + MoveInfo.SLog + " : 上下气缸下降");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(200));
UpdownDownP2Move(MoveInfo.MoveParam.PlateH, MoveInfo.MoveParam.PlateW);
} }
else if (MoveInfo.MoveStep.Equals(LineMoveStep.PO_01_CylinderDown)) else if (MoveInfo.MoveStep.Equals(LineMoveStep.PO_01_CylinderDown))
{ {
......
...@@ -83,12 +83,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -83,12 +83,12 @@ namespace OnlineStore.DeviceLibrary
int DOLength = LineManager.Config.GetDOLength(ioIp); int DOLength = LineManager.Config.GetDOLength(ioIp);
string logName = "IO模块[" + ioIp + "] DI[" + DILength + "] DO[" + DOLength + "],[" + DIMS + "] [" + DOMS + "]"; string logName = "IO模块[" + ioIp + "] DI[" + DILength + "] DO[" + DOLength + "],[" + DIMS + "] [" + DOMS + "]";
try try
{ {
aioBox = new AIOBOX(); aioBox = new AIOBOX();
aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError); aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError);
aioBox.IP = ioIp; aioBox.IP = ioIp;
aioBox.SetInput(Asa.IOModule.Box_Type.DI, DILength); aioBox.SetInput(Asa.IOModule.Box_Type.DI, DILength);
aioBox.SetOutput(Asa.IOModule.Box_Type.DO, DOLength); aioBox.SetOutput(Asa.IOModule.Box_Type.DO, DOLength);
//DI主动上传 //DI主动上传
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!