Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张东亮
/
SO1037-LiftController
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a6da74b6
由
张东亮
编写于
2022-03-24 16:09:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1楼和楼上都使用时,优先楼上
1 个父辈
bf803b1b
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
134 行增加
和
382 行删除
LiftController/App.config
LiftController/FrmIO.Designer.cs
LiftController/FrmIO.cs
source/DeviceLibrary/Asa.IOModule.AIOBOX.dll
source/DeviceLibrary/Asa.IOModule.AIOBOX.xml
source/DeviceLibrary/DeviceLibrary.csproj
source/DeviceLibrary/IO/AIOBOX/AIOBOXManager.cs
source/DeviceLibrary/IO/IOManager.cs
source/DeviceLibrary/IOModule.AIOBOX.dll
source/DeviceLibrary/Models/LiftInfo.cs
source/DeviceLibrary/Models/Service/Request/DoorInfo.cs
source/DeviceLibrary/Service/Services.cs
source/dll/Asa.IOModule.AIOBOX.dll
LiftController/App.config
查看文件 @
a6da74b
...
@@ -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
=
"
[{"liftId":"D2","Status":{"floor":0,"door":"","sourceClient":"","sourceFloor":0,"sourcePoint":"","destinationClient":"","destinationFloor":0,"destinationPoint":""},"State":0,"RunState":0,"Clients":[]},{"liftId":"C1","Status":{"floor":0,"door":"","sourceClient":"HY1F","sourceFloor":1,"sourcePoint":"4DLine5","destinationClient":"ZJ4D","destinationFloor":4,"destinationPoint":"1CLine3"},"State":0,"RunState":0,"Clients":[{"sourceClient":"ZJ4D","hasIdleAgv":true,"Online":true}]}]
"
/>
<
add
key
=
"Lift_Buffs"
value
=
""
/>
</
appSettings
>
</
appSettings
>
</
configuration
>
</
configuration
>
LiftController/FrmIO.Designer.cs
查看文件 @
a6da74b
...
@@ -272,7 +272,7 @@
...
@@ -272,7 +272,7 @@
//
//
// timer1
// timer1
//
//
this
.
timer1
.
Interval
=
10
00
;
this
.
timer1
.
Interval
=
5
00
;
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
);
...
...
LiftController/FrmIO.cs
查看文件 @
a6da74b
...
@@ -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
();
}
}
}
}
}
source/DeviceLibrary/Asa.IOModule.AIOBOX.dll
deleted
100644 → 0
查看文件 @
bf803b1
此文件类型无法预览
source/DeviceLibrary/Asa.IOModule.AIOBOX.xml
deleted
100644 → 0
查看文件 @
bf803b1
<?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>
source/DeviceLibrary/DeviceLibrary.csproj
查看文件 @
a6da74b
...
@@ -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>
...
...
source/DeviceLibrary/IO/AIOBOX/AIOBOXManager.cs
查看文件 @
a6da74b
...
@@ -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())}"
);
}
}
}
}
}
}
...
...
source/DeviceLibrary/IO/IOManager.cs
查看文件 @
a6da74b
...
@@ -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
{
{
...
...
source/DeviceLibrary/IOModule.AIOBOX.dll
0 → 100644
查看文件 @
a6da74b
此文件类型无法预览
source/DeviceLibrary/Models/LiftInfo.cs
查看文件 @
a6da74b
...
@@ -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
>
1
0
)
if
((
DateTime
.
Now
-
dateTime1
).
TotalSeconds
>
3
0
)
{
{
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
.
C
IOMove
(
$
"{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
.
C
IOMove
(
$
"{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
);
T
ask
.
Delay
(
second
*
1000
);
T
hread
.
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
(
3
000
);
Thread
.
Sleep
(
1
000
);
}
}
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
(
2
0000
);
task
.
Wait
(
6
0000
);
}
}
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
()
{
{
...
...
source/DeviceLibrary/Models/Service/Request/DoorInfo.cs
查看文件 @
a6da74b
...
@@ -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}"
;
}
}
}
}
}
}
source/DeviceLibrary/Service/Services.cs
查看文件 @
a6da74b
...
@@ -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
;
...
...
source/dll/Asa.IOModule.AIOBOX.dll
0 → 100644
查看文件 @
a6da74b
此文件类型无法预览
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论