Commit a6da74b6 张东亮

1楼和楼上都使用时,优先楼上

1 个父辈 bf803b1b
...@@ -8,6 +8,6 @@ ...@@ -8,6 +8,6 @@
<add key="Line_Config" value="LineConfig.csv"/> <add key="Line_Config" value="LineConfig.csv"/>
<add key="ServiceBaseUrl" value="http://127.0.0.1:8887"/> <add key="ServiceBaseUrl" value="http://127.0.0.1:8887"/>
<add key="Lift_Ids" value="LIFT_D2,LIFT_C1"/> <add key="Lift_Ids" value="LIFT_D2,LIFT_C1"/>
<add key="Lift_Buffs" value="[{&quot;liftId&quot;:&quot;D2&quot;,&quot;Status&quot;:{&quot;floor&quot;:0,&quot;door&quot;:&quot;&quot;,&quot;sourceClient&quot;:&quot;&quot;,&quot;sourceFloor&quot;:0,&quot;sourcePoint&quot;:&quot;&quot;,&quot;destinationClient&quot;:&quot;&quot;,&quot;destinationFloor&quot;:0,&quot;destinationPoint&quot;:&quot;&quot;},&quot;State&quot;:0,&quot;RunState&quot;:0,&quot;Clients&quot;:[]},{&quot;liftId&quot;:&quot;C1&quot;,&quot;Status&quot;:{&quot;floor&quot;:0,&quot;door&quot;:&quot;&quot;,&quot;sourceClient&quot;:&quot;HY1F&quot;,&quot;sourceFloor&quot;:1,&quot;sourcePoint&quot;:&quot;4DLine5&quot;,&quot;destinationClient&quot;:&quot;ZJ4D&quot;,&quot;destinationFloor&quot;:4,&quot;destinationPoint&quot;:&quot;1CLine3&quot;},&quot;State&quot;:0,&quot;RunState&quot;:0,&quot;Clients&quot;:[{&quot;sourceClient&quot;:&quot;ZJ4D&quot;,&quot;hasIdleAgv&quot;:true,&quot;Online&quot;:true}]}]"/> <add key="Lift_Buffs" value=""/>
</appSettings> </appSettings>
</configuration> </configuration>
...@@ -272,7 +272,7 @@ ...@@ -272,7 +272,7 @@
// //
// timer1 // timer1
// //
this.timer1.Interval = 1000; this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick); this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
// //
// FrmIO // FrmIO
...@@ -284,6 +284,7 @@ ...@@ -284,6 +284,7 @@
this.Name = "FrmIO"; this.Name = "FrmIO";
this.Text = "FrmIO"; this.Text = "FrmIO";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmIO_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmIO_FormClosing);
this.Load += new System.EventHandler(this.FrmIO_Load);
this.Shown += new System.EventHandler(this.FrmIOStatus_Shown); this.Shown += new System.EventHandler(this.FrmIOStatus_Shown);
this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false);
this.groupBox3.ResumeLayout(false); this.groupBox3.ResumeLayout(false);
......
...@@ -71,12 +71,19 @@ namespace LiftController ...@@ -71,12 +71,19 @@ namespace LiftController
cmbWriteIO.SelectedIndex = index; cmbWriteIO.SelectedIndex = index;
} }
} }
bool inRead = false;
private void timer1_Tick(object sender, EventArgs e) private void timer1_Tick(object sender, EventArgs e)
{ {
if (this.Visible) // if (this.Visible)
if (inRead)
return;
try
{ {
inRead = true;
ReadIOList(); ReadIOList();
} }
catch { }
finally { inRead = false; }
} }
private void ReadIOList() private void ReadIOList()
{ {
...@@ -88,7 +95,6 @@ namespace LiftController ...@@ -88,7 +95,6 @@ namespace LiftController
{ {
control.IOValue = iov; control.IOValue = iov;
control.ShowData(); control.ShowData();
LogUtil.info($"IO状态DI更新:{key}={iov}");
} }
} }
foreach (string key in this.DOControlList.Keys) foreach (string key in this.DOControlList.Keys)
...@@ -99,7 +105,6 @@ namespace LiftController ...@@ -99,7 +105,6 @@ namespace LiftController
{ {
control.IOValue = iov; control.IOValue = iov;
control.ShowData(); control.ShowData();
LogUtil.info($"IO状态DO更新:{key}={iov}");
} }
} }
} }
...@@ -191,7 +196,6 @@ namespace LiftController ...@@ -191,7 +196,6 @@ namespace LiftController
} }
private void FrmIOStatus_Shown(object sender, EventArgs e) private void FrmIOStatus_Shown(object sender, EventArgs e)
{ {
timer1.Start();
} }
private void checkBox1_CheckedChanged(object sender, EventArgs e) private void checkBox1_CheckedChanged(object sender, EventArgs e)
...@@ -200,5 +204,10 @@ namespace LiftController ...@@ -200,5 +204,10 @@ namespace LiftController
groupBox4.Enabled=chked; groupBox4.Enabled=chked;
LogUtil.info($"IO调试状态:{chked}"); LogUtil.info($"IO调试状态:{chked}");
} }
private void FrmIO_Load(object sender, EventArgs e)
{
timer1.Start();
}
} }
} }
<?xml version="1.0"?>
<doc>
<assembly>
<name>Asa.IOModule.AIOBOX</name>
</assembly>
<members>
<member name="T:Asa.IOModule.AIOBOX">
<summary>
AIOBOX操作类
</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>
</member>
<member name="T:Asa.IOModule.AIOBOX.DIO_Changed">
<summary>
自动读取DI委托
</summary>
<param name="box">AIOBOX</param>
<param name="sta">所有DI状态</param>
</member>
<member name="E:Asa.IOModule.AIOBOX.DI_Changed_Event">
<summary>
自动读取DI事件触发
</summary>
</member>
<member name="E:Asa.IOModule.AIOBOX.DO_Changed_Event">
<summary>
自动读取DO事件触发
</summary>
</member>
<member name="T:Asa.IOModule.AIOBOX.AIO_Changed">
<summary>
自动读取AI委托
</summary>
<param name="box">AIOBOX</param>
<param name="val">所有AI的值</param>
</member>
<member name="E:Asa.IOModule.AIOBOX.AI_Changed_Event">
<summary>
自动读取AI事件触发
</summary>
</member>
<member name="E:Asa.IOModule.AIOBOX.AO_Changed_Event">
<summary>
自动读取AO事件触发
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.#ctor(System.String)">
<summary>
AIOBOX
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.IP">
<summary>
IP地址
</summary>
</member>
<member name="P:Asa.IOModule.AIOBOX.IsConn">
<summary>
是否连接
</summary>
</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">
<summary>
连接
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.Close">
<summary>
关闭连接
</summary>
</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)">
<summary>
相反状态(ON/OFF)
</summary>
<param name="sta"></param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReverseStatus(Asa.IOModule.Box_Sta@)">
<summary>
相反状态(ON/OFF)
</summary>
<param name="sta"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Int32)">
<summary>
读取单个DI输入状态(ON/OFF)
</summary>
<param name="add">输入地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Int32,System.Int32)">
<summary>
读取多个DI输入状态(ON/OFF)
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Int32)">
<summary>
读取单个AI模拟量的值
</summary>
<param name="add">模拟量地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Int32,System.Int32)">
<summary>
读取多个AI模拟量的值
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Int32)">
<summary>
读取单个DO输出状态(ON/OFF)
</summary>
<param name="add">输出地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Int32,System.Int32)">
<summary>
读取多个DO输出状态(ON/OFF)
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAO(System.Int32)">
<summary>
读取单个AO模拟量的值
</summary>
<param name="add">输出地址,从0开始</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAO(System.Int32,System.Int32)">
<summary>
读取多个AO模拟量的值
</summary>
<param name="add">起始地址,从0开始</param>
<param name="count">数量</param>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.WriteDO(System.Int32,Asa.IOModule.Box_Sta)">
<summary>
写入单个DO输出状态(ON/OFF)
</summary>
<param name="add">输出地址,从0开始</param>
<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>
发送命令
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.Receive">
<summary>
接收命令
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadSingle(System.Byte[])">
<summary>
读取写入单个DO,功能码5
</summary>
<param name="buff"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDO(System.Byte[])">
<summary>
读取所有DO状态,功能码1
</summary>
<param name="buff"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadDI(System.Byte[])">
<summary>
读取所有DI状态,功能码2
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.ReadAI(System.Byte[])">
<summary>
读取所有AI的值,功能码4
</summary>
<param name="buff"></param>
</member>
<member name="M:Asa.IOModule.AIOBOX.Command">
<summary>
命令,前7个字节
</summary>
<returns></returns>
</member>
<member name="M:Asa.IOModule.AIOBOX.TriggerDIO">
<summary>
触发DIO改变事件
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadInput">
<summary>
自动读取输入端线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.AutoReadOutput">
<summary>
自动读取输出端线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.Listen">
<summary>
监听结果线程
</summary>
</member>
<member name="M:Asa.IOModule.AIOBOX.TestMethod">
<summary>
测试方法锁
</summary>
</member>
<member name="T:Asa.IOModule.Box_Type">
<summary>
IO模块类型
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.DI">
<summary>
数字信号输入
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.DO">
<summary>
数字信号输出
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.AI">
<summary>
模拟量输入
</summary>
</member>
<member name="F:Asa.IOModule.Box_Type.AO">
<summary>
模拟量输出
</summary>
</member>
<member name="T:Asa.IOModule.Box_Sta">
<summary>
IO模块寄存器状态
</summary>
</member>
<member name="F:Asa.IOModule.Box_Sta.Off">
<summary>
断开,关闭,低电平
</summary>
</member>
<member name="F:Asa.IOModule.Box_Sta.On">
<summary>
闭合,打开,高电平
</summary>
</member>
</members>
</doc>
...@@ -32,9 +32,8 @@ ...@@ -32,9 +32,8 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Asa.IOModule.AIOBOX, Version=2.3.0.4, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Asa.IOModule.AIOBOX">
<SpecificVersion>False</SpecificVersion> <HintPath>..\dll\Asa.IOModule.AIOBOX.dll</HintPath>
<HintPath>.\Asa.IOModule.AIOBOX.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net"> <Reference Include="log4net">
<HintPath>.\log4net.dll</HintPath> <HintPath>.\log4net.dll</HintPath>
......
...@@ -85,12 +85,9 @@ namespace DeviceLibrary ...@@ -85,12 +85,9 @@ namespace DeviceLibrary
//aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError); //aioBox.LogPath(Application.StartupPath + @"\logs\aio\", LogType.OnlyError);
aioBox.IP = ioIp; aioBox.IP = ioIp;
aioBox.SetType(Box_Type.DI, DILength, Box_Type.DO, DOLength);
aioBox.SetInput(Asa.IOModule.Box_Type.DI, DILength);
aioBox.SetOutput(Asa.IOModule.Box_Type.DO, DOLength);
//DI主动上传 //DI主动上传
aioBox.AutoReadInput(true,DIMS); aioBox.Upload = true;
aioBox.AutoReadOutput(false, DOMS);
aioBox.DI_Changed_Event += AioBox_DI_Changed_Event; ; aioBox.DI_Changed_Event += AioBox_DI_Changed_Event; ;
...@@ -180,6 +177,7 @@ namespace DeviceLibrary ...@@ -180,6 +177,7 @@ namespace DeviceLibrary
DIValueMap.Remove(ip); DIValueMap.Remove(ip);
} }
DIValueMap.Add(ip, newList); DIValueMap.Add(ip, newList);
LogUtil.info($"DI状态变化【{ip}】:{string.Join("-", newList.ToArray())}");
} }
} }
} }
...@@ -219,6 +217,7 @@ namespace DeviceLibrary ...@@ -219,6 +217,7 @@ namespace DeviceLibrary
DOValueMap.Remove(ip); DOValueMap.Remove(ip);
} }
DOValueMap.Add(ip, newList); DOValueMap.Add(ip, newList);
LogUtil.info($"DO状态变化【{ip}】:{string.Join("-", newList.ToArray())}");
} }
} }
} }
......
...@@ -21,12 +21,11 @@ namespace DeviceLibrary ...@@ -21,12 +21,11 @@ namespace DeviceLibrary
{ {
if (LineManager.Config.DOList.ContainsKey(ioType)) if (LineManager.Config.DOList.ContainsKey(ioType))
{ {
int trytimes = 5;
ConfigIO configIo = LineManager.Config.DOList[ioType]; ConfigIO configIo = LineManager.Config.DOList[ioType];
instance.WriteSingleDO(configIo.IO_IP, configIo.SlaveID, configIo.GetIOAddr(), ioValue); instance.WriteSingleDO(configIo.IO_IP, configIo.SlaveID, configIo.GetIOAddr(), ioValue);
instance.WriteSingleDO(configIo.IO_IP, configIo.SlaveID, configIo.GetIOAddr(), ioValue); Thread.Sleep(60);
Thread.Sleep(100); if(!IOValue(ioType).Equals(ioValue))
instance.WriteSingleDO(configIo.IO_IP, configIo.SlaveID, configIo.GetIOAddr(), ioValue);
} }
else else
{ {
......
此文件类型无法预览
...@@ -168,7 +168,7 @@ namespace DeviceLibrary.Models ...@@ -168,7 +168,7 @@ namespace DeviceLibrary.Models
return false; return false;
} }
if (!clientInfo.hasIdleAgv) if (!clientInfo.sourceClient.Equals("NEOTEL-1F")&& !clientInfo.hasIdleAgv)
{ {
msg = $"目标AGV系统无可用Agv:{lift.destinationClient}"; msg = $"目标AGV系统无可用Agv:{lift.destinationClient}";
return false; return false;
...@@ -192,24 +192,34 @@ namespace DeviceLibrary.Models ...@@ -192,24 +192,34 @@ namespace DeviceLibrary.Models
} }
else else
{ {
if (IOManager.IOValue($"{liftId}{SettingString._Response}").Equals(IO_VALUE.HIGH)) //if (IOManager.IOValue($"{liftId}{SettingString._Response}").Equals(IO_VALUE.HIGH))
//{
// if (IOManager.IOValue($"{liftId}{SettingString._DoorOpen}").Equals(IO_VALUE.HIGH))
// {
// OpenAGVLeave(5);
// LogUtil.info($"{lift} 上一次异常退出,发送AGV离开清除异常状态!");
// return false;
// }
//}
if (OpenAGVRequest(true))
{
SetState(LiftState.Busy);
Status.Set(lift);
OpenAGVLeave(5);
msg = "ok";
return true;
}
else
{ {
if (IOManager.IOValue($"{liftId}{SettingString._DoorOpen}").Equals(IO_VALUE.HIGH)) msg = "打开电梯请求超时";
{
OpenAGVLeave(5);
LogUtil.info($"{lift} 上一次异常退出,发送AGV离开清除异常状态!");
return false;
}
} }
SetState(LiftState.Busy);
Status.Set(lift);
OpenAGVRequest(true);
Thread.Sleep(2000);
msg = "ok";
return true;
} }
} }
msg = "电梯被占用"; else
{
msg = "电梯被占用";
}
return false; return false;
} }
...@@ -232,7 +242,7 @@ namespace DeviceLibrary.Models ...@@ -232,7 +242,7 @@ namespace DeviceLibrary.Models
SetState(LiftState.Idle); SetState(LiftState.Idle);
//是否继续使用电梯 //是否继续使用电梯
OpenAGVRequest(doorInfo.continueUse); OpenAGVRequest(doorInfo.continueUse);
LogUtil.info($"AGV离开,{doorInfo.sourceFloor}[{doorInfo.sourceFloor}][{doorInfo.continueUse}]取出电梯[{liftId}]内的产品,清除电梯占用"); LogUtil.info($"AGV离开,【{doorInfo}】取出电梯内的产品,清除电梯占用");
} }
if (IsSrcClient(doorInfo)) if (IsSrcClient(doorInfo))
...@@ -244,7 +254,7 @@ namespace DeviceLibrary.Models ...@@ -244,7 +254,7 @@ namespace DeviceLibrary.Models
if (!Status.destinationFloor.Equals(-1)) if (!Status.destinationFloor.Equals(-1))
{ {
RunToFloor(Status.destinationFloor, doorInfo); RunToFloor(Status.destinationFloor, doorInfo);
LogUtil.info($"AGV离开,{doorInfo.sourceFloor}[{doorInfo.sourceFloor}]将产品送入电梯[{liftId}]"); LogUtil.info($"AGV离开,【{doorInfo}】将产品送入电梯");
} }
} }
return true; return true;
...@@ -279,15 +289,36 @@ namespace DeviceLibrary.Models ...@@ -279,15 +289,36 @@ namespace DeviceLibrary.Models
IOManager.CIOMove($"{liftId}{SettingString._RunToFourth}", IO_VALUE.HIGH); IOManager.CIOMove($"{liftId}{SettingString._RunToFourth}", IO_VALUE.HIGH);
break; break;
} }
Thread.Sleep(1000);
DateTime dateTime1 = DateTime.Now; DateTime dateTime1 = DateTime.Now;
//等待运行信号亮 //等待运行信号亮
while (!CheckIsInRun()) while (!CheckIsInRun())
{ {
if ((DateTime.Now - dateTime1).TotalSeconds > 10) if ((DateTime.Now - dateTime1).TotalSeconds > 30)
{ {
LogUtil.error("检查AGV送料信号有效:等待电梯运行信号超时"); LogUtil.error("检查AGV送料信号有效:等待电梯运行信号超时");
break; break;
} }
switch (floor)
{
//case -1:
// IOManager.CIOMove($"{liftId}{SettingString._RunToNegativeFirst}", IO_VALUE.HIGH);
// break;
case 1:
IOManager.CIOMove($"{liftId}{SettingString._RunToFirst}", IO_VALUE.HIGH);
break;
//case 2:
// IOManager.CIOMove($"{liftId}{SettingString._RunToSecond}", IO_VALUE.HIGH);
// break;
case 3:
IOManager.CIOMove($"{liftId}{SettingString._RunToThird}", IO_VALUE.HIGH);
break;
case 4:
IOManager.CIOMove($"{liftId}{SettingString._RunToFourth}", IO_VALUE.HIGH);
break;
}
Thread.Sleep(1000); Thread.Sleep(1000);
} }
LogUtil.info($"送料信号:运行到{floor}层"); LogUtil.info($"送料信号:运行到{floor}层");
...@@ -321,6 +352,9 @@ namespace DeviceLibrary.Models ...@@ -321,6 +352,9 @@ namespace DeviceLibrary.Models
IOManager.CIOMove($"{liftId}{SettingString._FourthCall}", IO_VALUE.HIGH); IOManager.CIOMove($"{liftId}{SettingString._FourthCall}", IO_VALUE.HIGH);
break; break;
} }
//Thread.Sleep(5000);
////关闭呼叫信号
//CloseCallFloor();
} }
/// <summary> /// <summary>
/// AGV呼叫 /// AGV呼叫
...@@ -332,7 +366,7 @@ namespace DeviceLibrary.Models ...@@ -332,7 +366,7 @@ namespace DeviceLibrary.Models
if (CanControl(doorInfo)) if (CanControl(doorInfo))
{ {
FloorCall(doorInfo.sourceFloor); FloorCall(doorInfo.sourceFloor);
LogUtil.info($"{doorInfo.sourceClient}呼叫电梯{liftId}运行到{doorInfo.sourceFloor}层"); LogUtil.info($"【{doorInfo}】呼叫电梯运行到{doorInfo.sourceFloor}层");
return true; return true;
} }
return false; return false;
...@@ -395,7 +429,7 @@ namespace DeviceLibrary.Models ...@@ -395,7 +429,7 @@ namespace DeviceLibrary.Models
IOManager.CIOMove($"{liftId}{SettingString._RunToFirst}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._RunToFirst}", IO_VALUE.LOW);
IOManager.CIOMove($"{liftId}{SettingString._RunToThird}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._RunToThird}", IO_VALUE.LOW);
IOManager.CIOMove($"{liftId}{SettingString._RunToFourth}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._RunToFourth}", IO_VALUE.LOW);
LogUtil.info($"{doorInfo}:关闭所有送料信号"); LogUtil.info($"【{doorInfo}】:关闭所有送料信号");
} }
/// <summary> /// <summary>
/// 等待运行信号亮或者关信号 /// 等待运行信号亮或者关信号
...@@ -413,6 +447,10 @@ namespace DeviceLibrary.Models ...@@ -413,6 +447,10 @@ namespace DeviceLibrary.Models
{ {
return IOManager.IOValue($"{liftId}{SettingString._AGVLeave}").Equals(IO_VALUE.HIGH); return IOManager.IOValue($"{liftId}{SettingString._AGVLeave}").Equals(IO_VALUE.HIGH);
} }
private bool CheckAgvRequest()
{
return IOManager.IOValue($"{liftId}{SettingString._AGVRequest}").Equals(IO_VALUE.HIGH);
}
private bool CheckIsInRun() private bool CheckIsInRun()
{ {
return IOManager.IOValue($"{liftId}{SettingString._InRun}").Equals(IO_VALUE.HIGH); return IOManager.IOValue($"{liftId}{SettingString._InRun}").Equals(IO_VALUE.HIGH);
...@@ -425,65 +463,85 @@ namespace DeviceLibrary.Models ...@@ -425,65 +463,85 @@ namespace DeviceLibrary.Models
{ {
if (open) if (open)
{ {
IOManager.CIOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.HIGH); IOManager.IOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.HIGH);
LogUtil.info($"{liftId}打开AGV离开信号"); LogUtil.info($"【{liftId}】打开AGV离开信号");
} }
else else
{ {
IOManager.CIOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.LOW); IOManager.IOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.LOW);
LogUtil.info($"{liftId}关闭AGV离开信号"); LogUtil.info($"【{liftId}】关闭AGV离开信号");
} }
} }
private void OpenAGVLeave(int second) private void OpenAGVLeave(int second)
{ {
Task.Factory.StartNew(() => Task task = Task.Factory.StartNew(() =>
{ {
OpenAGVLeave(true); OpenAGVLeave(true);
Task.Delay(second * 1000); Thread.Sleep(second * 1000);
OpenAGVLeave(false); OpenAGVLeave(false);
}); });
task.Wait(20000);
} }
private void CloseDoor() private void CloseDoor()
{ {
Task task = Task.Factory.StartNew(() => Task task = Task.Factory.StartNew(() =>
{ {
OpenAGVLeave(true); OpenAGVLeave(true);
Thread.Sleep(3000);
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
//门关信号 //门关信号
while ((CheckDoorOpen() || !CheckAgvLeave()) && (DateTime.Now - dateTime).TotalMinutes < 1) while (CheckDoorOpen() && (DateTime.Now - dateTime).TotalMinutes < 1)
{ {
if ((DateTime.Now - dateTime).TotalSeconds > 3) if ((DateTime.Now - dateTime).TotalSeconds > 3)
{ {
IOManager.CIOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.HIGH); IOManager.CIOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.HIGH);
dateTime = DateTime.Now;
} }
Thread.Sleep(3000); Thread.Sleep(1000);
} }
Thread.Sleep(3000); dateTime = DateTime.Now;
while (!CheckAgvLeave() && (DateTime.Now - dateTime).TotalMinutes < 1)
{
IOManager.CIOMove($"{liftId}{SettingString._AGVLeave}", IO_VALUE.HIGH);
Thread.Sleep(500);
}
Thread.Sleep(5000);
OpenAGVLeave(false); OpenAGVLeave(false);
}); });
task.Wait(20000); task.Wait(60000);
} }
private void OpenAGVRequest(bool open) private bool OpenAGVRequest(bool open)
{ {
DateTime dateTime = DateTime.Now;
bool rtn = false;
if (open) if (open)
{ {
IOManager.CIOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.HIGH); IOManager.IOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.HIGH);
LogUtil.info("打开AGV请求信号"); while (!CheckAgvRequest() && (DateTime.Now - dateTime).TotalSeconds < 5)
{
IOManager.CIOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.HIGH);
Thread.Sleep(500);
}
rtn = CheckAgvRequest();
LogUtil.info($"{liftId}打开AGV请求信号结果:{rtn}");
} }
else else
{ {
IOManager.CIOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.LOW); IOManager.IOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.LOW);
LogUtil.info("关闭AGV请求信号"); while (CheckAgvRequest() && (DateTime.Now - dateTime).TotalSeconds < 5)
{
IOManager.CIOMove($"{liftId}{SettingString._AGVRequest}", IO_VALUE.LOW);
Thread.Sleep(500);
}
rtn = !CheckAgvRequest();
LogUtil.info($"{liftId}关闭AGV请求信号结果:{rtn}");
} }
return rtn;
} }
private void CloseCallFloor(DoorInfo doorInfo) private void CloseCallFloor(DoorInfo doorInfo)
{ {
IOManager.CIOMove($"{liftId}{SettingString._FirstCall}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._FirstCall}", IO_VALUE.LOW);
IOManager.CIOMove($"{liftId}{SettingString._ThirdCall}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._ThirdCall}", IO_VALUE.LOW);
IOManager.CIOMove($"{liftId}{SettingString._FourthCall}", IO_VALUE.LOW); IOManager.CIOMove($"{liftId}{SettingString._FourthCall}", IO_VALUE.LOW);
LogUtil.info($"{doorInfo}:关闭所有呼叫信号"); LogUtil.info($"【{doorInfo}】:关闭所有呼叫信号");
} }
private void CloseCallFloor() private void CloseCallFloor()
{ {
......
...@@ -29,7 +29,7 @@ namespace DeviceLibrary.Models.Service.Request ...@@ -29,7 +29,7 @@ namespace DeviceLibrary.Models.Service.Request
public bool continueUse {get;set;}=false; public bool continueUse {get;set;}=false;
public override string ToString() public override string ToString()
{ {
return $"{sourceClient}[{sourceFloor}]:{liftId}"; return $"{sourceClient}[{sourceFloor}][continue={continueUse}]:{liftId}";
} }
} }
} }
...@@ -56,7 +56,17 @@ namespace DeviceLibrary.Service ...@@ -56,7 +56,17 @@ namespace DeviceLibrary.Service
} }
return result; return result;
} }
string preLogInfo = "";
string curLogInfo = "";
void LogInfo(string txt)
{
curLogInfo = txt;
if(!curLogInfo.Equals(preLogInfo))
{
Log.Info(curLogInfo);
preLogInfo = curLogInfo;
}
}
public Result sendIn(Stream stream) public Result sendIn(Stream stream)
{ {
Result result = new Result(); Result result = new Result();
...@@ -72,7 +82,7 @@ namespace DeviceLibrary.Service ...@@ -72,7 +82,7 @@ namespace DeviceLibrary.Service
else else
{ {
bool idle= Context.LiftContext.RequestSendIn(sendInInfo,out string msg); bool idle= Context.LiftContext.RequestSendIn(sendInInfo,out string msg);
Log.Info($"请求接口被调用:{sendInInfo},[{msg}]"); LogInfo($"请求接口被调用:{sendInInfo},[{msg}]");
result.msg = msg; result.msg = msg;
} }
return result; return result;
......
此文件类型无法预览
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!