Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
刘韬
/
1069_MIMO_PlUS
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 3e6eede0
由
LN
编写于
2025-12-18 11:22:58 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
文档优化
1 个父辈
6ba77d49
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
598 行增加
和
1249 行删除
Documentation/API/Axis-Control-API.md
Documentation/API/DeviceLibrary-API.md
Documentation/API/IO-Control-API.md
Documentation/Architecture/Layer5-Layer6-Design.md
Documentation/Architecture/System-Overview.md
Documentation/Configuration/Axis-Config.md
Documentation/Configuration/Camera-Config.md
Documentation/Configuration/Communication-Config.md
Documentation/Troubleshooting/System-Troubleshooting-Guide.md
Documentation/User-Manual/System-User-Manual.md
UI/UI.csproj
Documentation/API/Axis-Control-API.md
查看文件 @
3e6eede
...
@@ -4,317 +4,194 @@
...
@@ -4,317 +4,194 @@
| 项目 | 内容 |
| 项目 | 内容 |
|------|------|
|------|------|
| 版本 | 1.
0
.0 |
| 版本 | 1.
1
.0 |
| 状态 | 正式版 |
| 状态 | 正式版 |
| 编写日期 | 2025-12-1
6
|
| 编写日期 | 2025-12-1
8
|
| 最后更新 | 2025-12-1
6
|
| 最后更新 | 2025-12-1
8
|
| 编写人 |
SIS
O 开发团队 |
| 编写人 |
MIM
O 开发团队 |
## 更新日志
## 更新日志
| 版本 | 日期 | 更新内容 | 编写人 |
| 版本 | 日期 | 更新内容 | 编写人 |
|------|------|----------|--------|
|------|------|----------|--------|
| 1.0.0 | 2025-12-16 | 初始版本,包含轴管理器接口、轴控制方法、数据结构和异常处理 | SISO 开发团队 |
| 1.1.0 | 2025-12-18 | 根据实际代码更新接口定义和AxisBean说明 | MIMO 开发团队 |
| 1.0.0 | 2025-12-16 | 初始版本 | MIMO 开发团队 |
## 1. 概述
## 1. 概述
本文档详细介绍了
SISO 系统中轴控制相关的 API 接口,包括轴管理器接口、轴控制方法以及相关数据结构
。这些 API 提供了对运动轴的初始化、控制、状态监控等功能的抽象和实现。
本文档详细介绍了
MIMO 系统中轴控制相关的 API 接口,主要包括
`IAxisManager`
接口和
`AxisBean`
封装类
。这些 API 提供了对运动轴的初始化、控制、状态监控等功能的抽象和实现。
## 2. 轴管理器接口
## 2. 轴管理器接口
### 2.1 IAxisManager 接口
### 2.1 IAxisManager 接口
`IAxisManager`
是轴控制模块的核心接口,定义了对运动轴进行
管理和
控制的基本操作。
`IAxisManager`
是轴控制模块的核心接口,定义了对运动轴进行
底层
控制的基本操作。
```
csharp
```
csharp
public
interface
IAxisManager
namespace
DeviceLibrary
{
{
#
region
初始化与关闭
public
interface
IAxisManager
{
/// <summary>
/// <summary>
/// 初始化轴管理器
/// 检查轴是否使能
/// </summary>
/// </summary>
/// <returns>初始化是否成功</returns>
bool
IsServeoOn
(
string
portName
,
short
slvAddr
);
bool
Initialize
();
/// <summary>
/// <summary>
/// 打开板卡/控制器
/// 使用指定配置初始化轴管理器
/// </summary>
/// </summary>
bool
OpenCard
();
/// <param name="configPath">配置文件路径</param>
/// <returns>初始化是否成功</returns>
/// <summary>
bool
Initialize
(
string
configPath
);
/// 关闭板卡/控制器
/// </summary>
/// <summary>
bool
CloseCard
();
/// 关闭轴管理器,释放资源
/// </summary>
/// <summary>
void
Close
();
/// 检查回零是否完成
/// </summary>
#
endregion
bool
IsHomeMoveEnd
(
string
portName
,
short
slvAddr
);
#
region
轴信息获取
/// <summary>
/// 检查绝对运动是否完成
/// <summary>
/// </summary>
/// 获取所有轴的信息
bool
AbsMoveIsEnd
(
string
portName
,
short
axisNo
,
int
targetPosition
,
int
canErrorCount
,
out
bool
countError
);
/// </summary>
/// <returns>轴信息列表</returns>
/// <summary>
List
<
AxisBean
>
GetAllAxes
();
/// 伺服开启
/// </summary>
/// <summary>
void
ServoOn
(
string
portName
,
short
slvAddr
);
/// 根据轴ID获取轴信息
/// </summary>
/// <summary>
/// <param name="axisId">轴ID</param>
/// 伺服关闭
/// <returns>轴信息对象,如果未找到返回null</returns>
/// </summary>
AxisBean
GetAxisById
(
int
axisId
);
void
ServoOff
(
string
portName
,
short
slvAddr
);
/// <summary>
/// <summary>
/// 获取轴的当前状态
/// 相对运动
/// </summary>
/// </summary>
/// <param name="axisId">轴ID</param>
void
RelMove
(
string
portName
,
short
slvAddr
,
int
position
,
int
targetSpeed
,
int
ptpAcc
,
int
ptpDec
);
/// <returns>轴状态枚举值</returns>
AxisStatus
GetAxisStatus
(
int
axisId
);
/// <summary>
/// 回零运动
/// <summary>
/// </summary>
/// 获取轴的当前位置
bool
HomeMove
(
string
portName
,
short
slvAddr
,
int
highVel
,
int
lowVel
,
int
acc
);
/// </summary>
/// <param name="axisId">轴ID</param>
/// <summary>
/// <returns>轴的当前位置值</returns>
/// 速度模式运动
double
GetAxisCurrentPosition
(
int
axisId
);
/// </summary>
void
SpeedMove
(
string
portName
,
short
slvAddr
,
int
speed
,
int
acc
,
int
dec
);
/// <summary>
/// 获取轴的当前速度
/// <summary>
/// </summary>
/// 急停
/// <param name="axisId">轴ID</param>
/// </summary>
/// <returns>轴的当前速度值</returns>
void
SuddenStop
(
string
portName
,
short
slvAddr
);
double
GetAxisCurrentSpeed
(
int
axisId
);
/// <summary>
#
endregion
/// 判断是否到位
/// </summary>
#
region
运动控制
bool
isInPosition
(
string
portName
,
short
slvAddr
,
int
PPosition
,
int
canErrorCount
,
bool
isLog
=
false
);
/// <summary>
/// <summary>
/// 控制轴点动
/// 绝对运动
/// </summary>
/// </summary>
/// <param name="axisId">轴ID</param>
void
AbsMove
(
string
portName
,
short
slvAddr
,
int
targetPosition
,
int
targetSpeed
,
int
ptpAcc
,
int
ptpDec
);
/// <param name="speed">点动速度</param>
/// <param name="isPositive">是否正方向</param>
/// <summary>
/// <returns>操作是否成功</returns>
/// 清除报警
bool
MoveAxisJog
(
int
axisId
,
double
speed
,
bool
isPositive
);
/// </summary>
void
AlarmClear
(
string
portName
,
short
slvAddr
);
/// <summary>
/// 停止指定轴的运动
/// <summary>
/// </summary>
/// 获取目标位置
/// <param name="axisId">轴ID</param>
/// </summary>
/// <returns>操作是否成功</returns>
int
GetTargetPosition
(
string
portName
,
short
slvAddr
);
bool
StopAxis
(
int
axisId
);
/// <summary>
/// <summary>
/// 获取实际位置
/// 停止所有轴的运动
/// </summary>
/// </summary>
int
GetActualtPosition
(
string
portName
,
short
slvAddr
);
/// <returns>操作是否成功</returns>
bool
StopAllAxes
();
/// <summary>
/// 获取报警状态
/// <summary>
/// </summary>
/// 控制轴进行相对运动
int
GetAlarmStatus
(
string
portName
,
short
slvAddr
);
/// </summary>
/// <param name="axisId">轴ID</param>
/// <summary>
/// <param name="distance">相对运动距离</param>
/// 获取忙状态
/// <param name="speed">运动速度</param>
/// </summary>
/// <returns>操作是否成功</returns>
int
GetBusyStatus
(
string
portName
,
short
slvAddr
);
bool
MoveAxisRelative
(
int
axisId
,
double
distance
,
double
speed
);
/// <summary>
/// <summary>
/// 获取回零结束状态
/// 控制轴进行绝对运动
/// </summary>
/// </summary>
int
GetHomeEndStatus
(
string
portName
,
short
slvAddr
);
/// <param name="axisId">轴ID</param>
/// <param name="position">目标位置</param>
/// <summary>
/// <param name="speed">运动速度</param>
/// 获取原点信号
/// <returns>操作是否成功</returns>
/// </summary>
bool
MoveAxisAbsolute
(
int
axisId
,
double
position
,
double
speed
);
int
GetHomeSingle
(
string
portName
,
short
slvAddr
);
/// <summary>
/// <summary>
/// 控制轴回零
/// 获取负极限信号
/// </summary>
/// </summary>
/// <param name="axisId">轴ID</param>
int
GetLimitNegativeSingle
(
string
portName
,
short
slvAddr
);
/// <returns>操作是否成功</returns>
bool
HomeAxis
(
int
axisId
);
/// <summary>
/// 获取正极限信号
/// <summary>
/// </summary>
/// 控制轴回零(带参数)
int
GetLimitPositiveSingle
(
string
portName
,
short
slvAddr
);
/// </summary>
/// <param name="axisId">轴ID</param>
int
AxisStsINP
(
string
portName
,
short
slvAddr
);
/// <param name="homeMode">回零模式</param>
/// <param name="homeSpeed">回零速度</param>
short
GetErrorCode
(
string
portName
,
short
slvAddr
);
/// <returns>操作是否成功</returns>
}
bool
HomeAxis
(
int
axisId
,
HomeMode
homeMode
,
double
homeSpeed
);
/// <summary>
/// 多轴同步运动(绝对位置)
/// </summary>
/// <param name="targetPositions">各轴目标位置映射表,key为轴ID,value为目标位置</param>
/// <param name="speed">运动速度</param>
/// <returns>操作是否成功</returns>
bool
MoveMultipleAxesSynchronously
(
Dictionary
<
int
,
double
>
targetPositions
,
double
speed
);
/// <summary>
/// 多轴同步运动(绝对位置,带加速度和减速度)
/// </summary>
/// <param name="targetPositions">各轴目标位置映射表,key为轴ID,value为目标位置</param>
/// <param name="speed">运动速度</param>
/// <param name="acceleration">加速度</param>
/// <param name="deceleration">减速度</param>
/// <returns>操作是否成功</returns>
bool
MoveMultipleAxesSynchronously
(
Dictionary
<
int
,
double
>
targetPositions
,
double
speed
,
double
acceleration
,
double
deceleration
);
/// <summary>
/// 多轴同步相对运动
/// </summary>
/// <param name="relativeDistances">各轴相对运动距离映射表,key为轴ID,value为相对距离</param>
/// <param name="speed">运动速度</param>
/// <returns>操作是否成功</returns>
bool
MoveMultipleAxesSynchronouslyRelative
(
Dictionary
<
int
,
double
>
relativeDistances
,
double
speed
);
/// <summary>
/// 等待所有指定轴运动完成
/// </summary>
/// <param name="axisIds">轴ID列表,若为null或空则等待所有轴</param>
/// <param name="timeout">超时时间(毫秒),0表示无限等待</param>
/// <returns>是否在超时前完成运动</returns>
bool
WaitForMotionCompletion
(
List
<
int
>
axisIds
=
null
,
int
timeout
=
0
);
#
endregion
#
region
参数设置
/// <summary>
/// 设置轴的位置值(直接修改系统中的位置值,非运动命令)
/// </summary>
/// <param name="axisId">轴ID</param>
/// <param name="position">要设置的位置值</param>
/// <returns>操作是否成功</returns>
bool
SetAxisPosition
(
int
axisId
,
double
position
);
/// <summary>
/// 设置轴的最大速度
/// </summary>
/// <param name="axisId">轴ID</param>
/// <param name="maxSpeed">最大速度值</param>
/// <returns>操作是否成功</returns>
bool
SetAxisMaxSpeed
(
int
axisId
,
double
maxSpeed
);
/// <summary>
/// 设置轴的加速度
/// </summary>
/// <param name="axisId">轴ID</param>
/// <param name="acceleration">加速度值</param>
/// <returns>操作是否成功</returns>
bool
SetAxisAcceleration
(
int
axisId
,
double
acceleration
);
/// <summary>
/// 设置轴的减速度
/// </summary>
/// <param name="axisId">轴ID</param>
/// <param name="deceleration">减速度值</param>
/// <returns>操作是否成功</returns>
bool
SetAxisDeceleration
(
int
axisId
,
double
deceleration
);
#
endregion
#
region
事件处理
/// <summary>
/// 注册轴状态变化事件处理器
/// </summary>
/// <param name="handler">事件处理函数</param>
void
RegisterAxisStatusChangeHandler
(
Action
<
int
,
AxisStatus
>
handler
);
/// <summary>
/// 注册轴位置到达事件处理器
/// </summary>
/// <param name="handler">事件处理函数</param>
void
RegisterAxisPositionReachedHandler
(
Action
<
int
>
handler
);
#
endregion
}
}
```
```
## 3. 数据结构
## 3. 轴对象封装 (AxisBean)
`AxisBean`
类是对
`IAxisManager`
的高级封装,提供了更易用的面向对象接口,包含了轴的配置信息和状态管理。
### 3.1
AxisBean 类
### 3.1
核心属性
`AxisBean`
类用于表示轴的属性和状态信息。
-
`ConfigMoveAxis Config`
: 轴配置信息对象
-
`string AxisName`
: 轴名称
-
`int LastPosition`
: 上次记录的位置
-
`bool IsBusy`
: 轴是否忙碌
-
`bool IsServeoOn`
: 轴是否使能
### 3.2 主要方法
```
csharp
```
csharp
public
class
AxisBean
public
class
AxisBean
{
{
/// <summary>
// 构造函数
/// 轴ID
public
AxisBean
(
ConfigMoveAxis
axisConfig
,
string
deviceName
,
int
maxSensorValue
=
0
);
/// </summary>
public
int
Id
{
get
;
set
;
}
// 打开轴(使能)
public
bool
Open
(
bool
isCheck
,
out
string
Msg
);
/// <summary>
/// 轴名称
// 关闭轴(去使能)
/// </summary>
public
void
ServoOff
();
public
string
Name
{
get
;
set
;
}
// 回零运动
/// <summary>
public
void
HomeMove
(
MoveInfo
MoveInfo
,
bool
force
=
true
);
/// 当前位置
/// </summary>
// 绝对运动
public
double
CurrentPosition
{
get
;
set
;
}
public
void
AbsMove
(
MoveInfo
MoveInfo
,
int
targetPosition
,
int
targetSpeed
);
/// <summary>
// 速度运动
/// 目标位置
public
void
SpeedMove
(
int
targetSpeed
);
/// </summary>
public
double
TargetPosition
{
get
;
set
;
}
// 急停
public
void
SuddenStop
();
/// <summary>
/// 当前速度
// 检查是否到位
/// </summary>
public
bool
IsInPosition
(
int
targetP
);
public
double
CurrentSpeed
{
get
;
set
;
}
// 获取当前位置
/// <summary>
public
int
GetAclPosition
();
/// 最大速度
/// </summary>
public
double
MaxSpeed
{
get
;
set
;
}
/// <summary>
/// 加速度
/// </summary>
public
double
Acceleration
{
get
;
set
;
}
/// <summary>
/// 减速度
/// </summary>
public
double
Deceleration
{
get
;
set
;
}
/// <summary>
/// 轴状态
/// </summary>
public
AxisStatus
Status
{
get
;
set
;
}
/// <summary>
/// 是否已回零
/// </summary>
public
bool
IsHomed
{
get
;
set
;
}
/// <summary>
/// 是否处于报警状态
/// </summary>
public
bool
IsInAlarm
{
get
;
set
;
}
/// <summary>
/// 正向限位状态
/// </summary>
public
bool
PositiveLimit
{
get
;
set
;
}
/// <summary>
/// 负向限位状态
/// </summary>
public
bool
NegativeLimit
{
get
;
set
;
}
/// <summary>
/// 原点信号状态
/// </summary>
public
bool
HomeSignal
{
get
;
set
;
}
}
}
```
```
...
...
Documentation/API/DeviceLibrary-API.md
查看文件 @
3e6eede
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
## 1. 概述
## 1. 概述
DeviceLibrary 是
SIS
O 系统中的设备控制层核心库,提供了统一的设备抽象和控制接口,支持各类工业设备的接入和控制。本文档详细介绍了 DeviceLibrary 提供的主要 API 接口及其使用方法。
DeviceLibrary 是
MIM
O 系统中的设备控制层核心库,提供了统一的设备抽象和控制接口,支持各类工业设备的接入和控制。本文档详细介绍了 DeviceLibrary 提供的主要 API 接口及其使用方法。
## 2. 核心接口
## 2. 核心接口
...
@@ -14,49 +14,29 @@ DeviceLibrary 是 SISO 系统中的设备控制层核心库,提供了统一的
...
@@ -14,49 +14,29 @@ DeviceLibrary 是 SISO 系统中的设备控制层核心库,提供了统一的
public
interface
IAxisManager
public
interface
IAxisManager
{
{
/// <summary>
/// <summary>
///
初始化轴管理器
///
检查轴是否使能
/// </summary>
/// </summary>
bool
Initialize
();
bool
IsServeoOn
(
string
portName
,
short
slvAddr
);
/// <summary>
/// 关闭轴管理器
/// </summary>
void
Close
();
/// <summary>
/// 获取所有轴的信息
/// </summary>
List
<
AxisBean
>
GetAllAxes
();
/// <summary>
/// 按轴ID获取轴信息
/// </summary>
AxisBean
GetAxisById
(
int
axisId
);
/// <summary>
/// 控制指定轴点动
/// </summary>
bool
MoveAxisJog
(
int
axisId
,
double
speed
,
bool
isPositive
);
/// <summary>
/// <summary>
///
停止指定轴运动
///
打开板卡/控制器
/// </summary>
/// </summary>
bool
StopAxis
(
int
axisId
);
bool
OpenCard
(
);
/// <summary>
/// <summary>
///
设置轴位置
///
关闭板卡/控制器
/// </summary>
/// </summary>
bool
SetAxisPosition
(
int
axisId
,
double
position
);
bool
CloseCard
(
);
/// <summary>
/// <summary>
///
轴回零
///
回零运动
/// </summary>
/// </summary>
bool
Home
Axis
(
int
axisId
);
bool
Home
Move
(
string
portName
,
short
slvAddr
,
int
highVel
,
int
lowVel
,
int
acc
);
/// <summary>
/// <summary>
///
获取轴状态
///
绝对运动
/// </summary>
/// </summary>
AxisStatus
GetAxisStatus
(
int
axisId
);
void
AbsMove
(
string
portName
,
short
slvAddr
,
int
targetPosition
,
int
targetSpeed
,
int
ptpAcc
,
int
ptpDec
);
}
}
```
```
...
@@ -68,73 +48,43 @@ IO 管理器接口,提供对 IO 信号的管理和控制功能。
...
@@ -68,73 +48,43 @@ IO 管理器接口,提供对 IO 信号的管理和控制功能。
public
interface
I_IOManager
public
interface
I_IOManager
{
{
/// <summary>
/// <summary>
///
初始化IO管理器
///
连接IO设备列表
/// </summary>
/// </summary>
bool
Initialize
();
bool
ConnectionIOList
(
List
<
string
>
dIODeviceNameList
);
/// <summary>
/// 关闭IO管理器
/// </summary>
void
Close
();
/// <summary>
/// 读取输入信号状态
/// </summary>
bool
ReadInput
(
int
ioId
);
/// <summary>
/// 写入输出信号状态
/// </summary>
bool
WriteOutput
(
int
ioId
,
bool
value
);
/// <summary>
/// <summary>
///
批量读取输入信号状态
///
读取所有DI信号
/// </summary>
/// </summary>
Dictionary
<
int
,
bool
>
ReadInputs
(
List
<
int
>
ioIds
);
void
ReadAllDI
(
string
deviceName
,
byte
slaveId
);
/// <summary>
/// <summary>
///
批量写入输出信号状态
///
写入单个DO信号
/// </summary>
/// </summary>
bool
WriteOutputs
(
Dictionary
<
int
,
bool
>
ioValues
);
void
WriteSingleDO
(
string
deviceName
,
byte
slaveId
,
ushort
index
,
IO_VALUE
value
);
/// <summary>
/// <summary>
///
注册IO状态变化事件处理器
///
获取DI信号值
/// </summary>
/// </summary>
void
RegisterIOChangeHandler
(
int
ioId
,
Action
<
int
,
bool
>
handler
);
IO_VALUE
GetDIValue
(
string
deviceName
,
byte
slaveID
,
ushort
v
);
}
}
```
```
### 2.3 I
_
SafetyDevice 接口
### 2.3 ISafetyDevice 接口
安全设备接口,提供对安全相关设备的
管理和监控
功能。
安全设备接口,提供对安全相关设备的
暂停和恢复
功能。
```
csharp
```
csharp
public
interface
I
_
SafetyDevice
public
interface
ISafetyDevice
{
{
/// <summary>
/// <summary>
/// 初始化安全设备
/// 暂停设备
/// </summary>
bool
Initialize
();
/// <summary>
/// 关闭安全设备
/// </summary>
void
Close
();
/// <summary>
/// 获取安全状态
/// </summary>
SafetyStatus
GetSafetyStatus
();
/// <summary>
/// 重置安全状态
/// </summary>
/// </summary>
bool
ResetSafetyStatus
();
void
Pause
();
/// <summary>
/// <summary>
///
注册安全状态变化事件处理器
///
恢复设备
/// </summary>
/// </summary>
void
Re
gisterSafetyStatusChangeHandler
(
Action
<
SafetyStatus
>
handler
);
void
Re
sume
(
);
}
}
```
```
...
@@ -146,39 +96,52 @@ public interface I_SafetyDevice
...
@@ -146,39 +96,52 @@ public interface I_SafetyDevice
public
interface
IRobot
public
interface
IRobot
{
{
/// <summary>
/// <summary>
///
初始化机器人
///
机器人配置
/// </summary>
/// </summary>
bool
Initialize
();
Robot_Config
Config
{
get
;
set
;
}
/// <summary>
/// <summary>
///
关闭机器人
///
机器人名称
/// </summary>
/// </summary>
void
Close
();
string
Name
{
get
;
set
;
}
/// <summary>
/// <summary>
///
获取机器人当前位置
///
是否可以运行
/// </summary>
/// </summary>
RobotPosition
GetCurrentPosition
();
bool
canRunning
{
get
;
set
;
}
/// <summary>
/// <summary>
///
移动机器人到指定位置
///
是否忙碌
/// </summary>
/// </summary>
bool
MoveToPosition
(
RobotPosition
position
,
double
speed
);
bool
isBusy
{
get
;
set
;
}
/// <summary>
/// <summary>
///
执行机器人程序
///
是否报警
/// </summary>
/// </summary>
bool
ExecuteProgram
(
string
programName
,
Dictionary
<
string
,
object
>
parameters
=
null
);
bool
isAlarm
{
get
;
set
;
}
/// <summary>
/// <summary>
///
停止机器人运动
///
运行状态
/// </summary>
/// </summary>
bool
StopMotion
();
RunStatus
runStatus
{
get
;
set
;
}
/// <summary>
/// <summary>
///
获取机器人状态
///
运行
/// </summary>
/// </summary>
RobotStatus
GetRobotStatus
();
void
Run
();
}
```
### 2.5 RunStatus 枚举
机器人运行状态枚举。
```
csharp
public
enum
RunStatus
{
Stop
,
Running
,
HomeReset
}
}
```
```
...
@@ -208,63 +171,53 @@ public class IOManager : I_IOManager
...
@@ -208,63 +171,53 @@ public class IOManager : I_IOManager
}
}
```
```
### 3.3 Camera 类
### 3.3
HIK
Camera 类
相机设备的抽象和控制
实现。
海康相机设备的封装
实现。
```
csharp
```
csharp
public
class
Camera
public
class
HIK
Camera
{
{
/// <summary>
/// <summary>
/// 初始化相机
/// 相机名称
/// </summary>
public
bool
Initialize
(
string
cameraConfigPath
);
/// <summary>
/// 关闭相机
/// </summary>
/// </summary>
public
void
Close
()
;
public
string
Name
;
/// <summary>
/// <summary>
///
开始采集图像
///
设备名称
/// </summary>
/// </summary>
public
bool
StartAcquisition
()
;
public
string
DeviceName
;
/// <summary>
/// <summary>
///
停止采集图像
///
图像显示控件
/// </summary>
/// </summary>
public
void
StopAcquisition
()
;
public
PictureBox
picture
;
/// <summary>
/// <summary>
///
采集单张图像
///
相机事件,当采集到图像时触发
/// </summary>
/// </summary>
public
Bitmap
CaptureImage
();
public
event
EventHandler
<
Bitmap
>
camera_event
;
/// <summary>
/// 设置相机参数
/// </summary>
public
bool
SetParameter
(
string
paramName
,
object
value
);
/// <summary>
/// 获取相机参数
/// </summary>
public
object
GetParameter
(
string
paramName
);
}
}
```
```
### 3.4
C8
WeightSensor 类
### 3.4
OKLE_
WeightSensor 类
C8系列重量传感器的实现
。
OKLE系列重量传感器的实现,用于轴负载检测
。
```
csharp
```
csharp
public
class
C8
WeightSensor
public
class
OKLE_
WeightSensor
{
{
/// <summary>
/// <summary>
/// 初始化传感器
/// 初始化传感器
/// </summary>
/// </summary>
public
bool
Init
ialize
(
string
portName
,
int
baudRate
);
public
bool
Init
(
);
/// <summary>
/// <summary>
/// 端口是否打开
/// </summary>
public
bool
IsPortOpen
{
get
;
}
/// <summary>
/// 关闭传感器
/// 关闭传感器
/// </summary>
/// </summary>
public
void
Close
();
public
void
Close
();
...
@@ -275,19 +228,14 @@ public class C8WeightSensor
...
@@ -275,19 +228,14 @@ public class C8WeightSensor
public
double
GetWeight
();
public
double
GetWeight
();
/// <summary>
/// <summary>
///
零点校准
///
获取峰值重量
/// </summary>
/// </summary>
public
bool
ZeroCalibration
();
public
double
PeakWeight
();
/// <summary>
/// <summary>
///
量程校准
///
设置报警阈值
/// </summary>
/// </summary>
public
bool
SpanCalibration
(
double
calibrationWeight
);
public
bool
SetAlarmWeight
(
double
kg
);
/// <summary>
/// 设置采样频率
/// </summary>
public
bool
SetSamplingRate
(
int
rate
);
}
}
```
```
...
@@ -295,35 +243,32 @@ public class C8WeightSensor
...
@@ -295,35 +243,32 @@ public class C8WeightSensor
### 4.1 ServerCommunication 类
### 4.1 ServerCommunication 类
与服务器通信的模块,实现数据上传和
命令接收
功能。
与服务器通信的模块,实现数据上传和
状态同步
功能。
```
csharp
```
csharp
public
class
ServerCommunication
public
class
ServerCommunication
{
{
/// <summary>
/// <summary>
///
初始化通信连接
///
开启服务器连接定时器
/// </summary>
/// </summary>
public
bool
Initialize
(
string
serverAddress
,
int
port
);
public
void
StartConnectServer
(
);
/// <summary>
/// <summary>
///
关闭通信
连接
///
停止服务器
连接
/// </summary>
/// </summary>
public
void
Close
();
public
void
StopConnectServer
();
/// <summary>
/// <summary>
/// 发送
数据到服务器
/// 发送
库位状态
/// </summary>
/// </summary>
public
bool
SendData
(
string
data
);
/// <param name="posid">库位ID</param>
/// <param name="storeStatus">库位状态</param>
public
bool
SendStoreState
(
string
posid
,
StoreStatus
storeStatus
);
/// <summary>
/// <summary>
///
注册命令接收事件处理器
///
发送流水线状态(心跳)
/// </summary>
/// </summary>
public
void
RegisterCommandReceivedHandler
(
Action
<
string
>
handler
);
public
void
SendLineStatus
();
/// <summary>
/// 检查连接状态
/// </summary>
public
bool
IsConnected
();
}
}
```
```
...
@@ -331,49 +276,54 @@ public class ServerCommunication
...
@@ -331,49 +276,54 @@ public class ServerCommunication
### 5.1 CodeManager 类
### 5.1 CodeManager 类
条码
管理工具类,提供条码生成和解析功能
。
条码
和相机管理工具类
。
```
csharp
```
csharp
public
class
CodeManager
public
class
CodeManager
{
{
/// <summary>
/// <summary>
/// 生成条码
/// 加载配置
/// </summary>
public
static
void
LoadConfig
();
/// <summary>
/// 加载相机
/// </summary>
/// </summary>
public
st
ring
GenerateCode
(
string
prefix
,
int
sequenceNumber
);
public
st
atic
void
LoadCamera
(
bool
isReLoad
);
/// <summary>
/// <summary>
///
验证条码格式
///
扫描条码
/// </summary>
/// </summary>
public
bool
ValidateCode
(
string
code
);
public
static
List
<
CodeInfo
>
CameraScan
(
List
<
string
>
cameraNameList
);
/// <summary>
/// <summary>
///
解析条码信息
///
关闭指定相机
/// </summary>
/// </summary>
public
CodeInfo
ParseCode
(
string
cod
e
);
public
static
void
CloseCamera
(
string
cameraNam
e
);
}
}
```
```
### 5.2 Config
Manag
er 类
### 5.2 Config
Help
er 类
配置管理工具类,提供配置文件的读取和保存功能。
配置管理工具类,提供配置文件的读取和保存功能。
```
csharp
```
csharp
public
class
Config
Manager
public
class
Config
Helper
.
Config
{
{
/// <summary>
/// <summary>
///
从文件加载
配置
///
读取
配置
/// </summary>
/// </summary>
public
static
T
LoadConfig
<
T
>(
string
configPath
)
where
T
:
class
,
new
(
);
public
static
T
Get
<
T
>(
string
key
,
T
defaultVal
=
default
(
T
)
);
/// <summary>
/// <summary>
///
保存配置到文件
///
设置配置
/// </summary>
/// </summary>
public
static
bool
SaveConfig
<
T
>(
string
configPath
,
T
config
)
where
T
:
class
;
public
static
void
Set
<
T
>(
string
key
,
T
value
)
;
/// <summary>
/// <summary>
///
获取默认配置路径
///
重载配置
/// </summary>
/// </summary>
public
static
string
GetDefaultConfigPath
(
string
configName
);
public
static
void
ReloadConfig
(
);
}
}
```
```
...
@@ -393,66 +343,37 @@ DeviceLibrary 定义了一系列自定义异常类,用于表示不同类型的
...
@@ -393,66 +343,37 @@ DeviceLibrary 定义了一系列自定义异常类,用于表示不同类型的
### 7.1 轴控制示例
### 7.1 轴控制示例
```
csharp
```
csharp
// 创建并初始化轴管理器
// 假设已通过 Config 配置好轴参数
IAxisManager
axisManager
=
new
AxisManager
();
AxisBean
axis
=
new
AxisBean
(
axisConfig
,
"Robot1"
);
if
(
axisManager
.
Initialize
())
// 绝对运动到位置 1000
MoveInfo
moveInfo
=
new
MoveInfo
(
"TestMove"
);
axis
.
AbsMove
(
moveInfo
,
1000
,
50
);
// 目标位置1000,速度50%
// 回零
axis
.
HomeMove
(
moveInfo
);
// 检查是否在位
if
(
axis
.
IsOnSite
(
1000
))
{
{
try
Console
.
WriteLine
(
"Axis reached target."
);
{
// 使轴1以10mm/s的速度正向点动
axisManager
.
MoveAxisJog
(
1
,
10.0
,
true
);
// 延时2秒后停止轴1
Thread
.
Sleep
(
2000
);
axisManager
.
StopAxis
(
1
);
// 获取轴1的当前位置
AxisBean
axis
=
axisManager
.
GetAxisById
(
1
);
Console
.
WriteLine
(
$
"Axis 1 current position: {axis.CurrentPosition}"
);
}
catch
(
DeviceException
ex
)
{
Console
.
WriteLine
(
$
"Device error: {ex.Message}"
);
}
finally
{
// 关闭轴管理器
axisManager
.
Close
();
}
}
}
```
```
### 7.2 IO控制示例
### 7.2 IO控制示例
```
csharp
```
csharp
// 创建并初始化IO管理器
// 读取DI信号
I_IOManager
ioManager
=
new
IOManager
();
// 假设 deviceName="" (本地板卡), slaveId=0, index=10
if
(
ioManager
.
Initialize
())
IO_VALUE
val
=
IOManager
.
GetDIValue
(
""
,
0
,
10
);
if
(
val
==
IO_VALUE
.
HIGH
)
{
{
try
Console
.
WriteLine
(
"Input 10 is HIGH"
);
{
// 读取输入点10的状态
bool
inputState
=
ioManager
.
ReadInput
(
10
);
Console
.
WriteLine
(
$
"Input 10 state: {inputState}"
);
// 写入输出点5为true
ioManager
.
WriteOutput
(
5
,
true
);
// 注册IO变化事件处理器
ioManager
.
RegisterIOChangeHandler
(
10
,
(
ioId
,
value
)
=>
{
Console
.
WriteLine
(
$
"IO {ioId} changed to: {value}"
);
});
}
catch
(
DeviceException
ex
)
{
Console
.
WriteLine
(
$
"Device error: {ex.Message}"
);
}
finally
{
// 关闭IO管理器
ioManager
.
Close
();
}
}
}
// 写入DO信号
// 假设 index=5
IOManager
.
SetDOValue
(
""
,
0
,
5
,
IO_VALUE
.
HIGH
);
```
```
## 8. 总结
## 8. 总结
...
...
Documentation/API/IO-Control-API.md
查看文件 @
3e6eede
# IO控制 API 文档
# IO控制 API 文档
##
1. 概述
##
文档信息
本文档详细介绍了 SISO 系统中 IO 控制相关的 API 接口,包括 IO 管理器接口、IO 信号读写方法、状态监控以及相关数据结构。这些 API 提供了对系统输入输出信号的统一管理和控制功能。
| 项目 | 内容 |
|------|------|
| 版本 | 1.1.0 |
| 状态 | 正式版 |
| 编写日期 | 2025-12-18 |
| 最后更新 | 2025-12-18 |
| 编写人 | MIMO 开发团队 |
##
2. IO管理器接口
##
更新日志
### 2.1 I_IOManager 接口
| 版本 | 日期 | 更新内容 | 编写人 |
|------|------|----------|--------|
| 1.1.0 | 2025-12-18 | 根据实际代码更新接口定义 | MIMO 开发团队 |
| 1.0.0 | 2025-12-16 | 初始版本 | MIMO 开发团队 |
`I_IOManager`
是 IO 控制模块的核心接口,定义了对 IO 信号进行管理和操作的基本方法。
## 1. 概述
```
csharp
本文档详细介绍了 MIMO 系统中 IO 控制相关的 API 接口,包括 IO 管理器接口
`I_IOManager`
。这些 API 提供了对系统输入输出信号的统一管理和控制功能。
public
interface
I_IOManager
{
#
region
初始化与关闭
/// <summary>
/// 初始化IO管理器
/// </summary>
/// <returns>初始化是否成功</returns>
bool
Initialize
();
/// <summary>
/// 使用指定配置初始化IO管理器
/// </summary>
/// <param name="configPath">配置文件路径</param>
/// <returns>初始化是否成功</returns>
bool
Initialize
(
string
configPath
);
/// <summary>
/// 关闭IO管理器,释放资源
/// </summary>
void
Close
();
#
endregion
#
region
单个
IO
操作
/// <summary>
/// 读取输入信号状态
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <returns>IO点状态,true表示信号有效,false表示信号无效</returns>
bool
ReadInput
(
int
ioId
);
/// <summary>
/// 写入输出信号状态
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <param name="value">要写入的状态值,true表示信号有效,false表示信号无效</param>
/// <returns>写入是否成功</returns>
bool
WriteOutput
(
int
ioId
,
bool
value
);
/// <summary>
/// 切换输出信号状态
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <returns>切换是否成功</returns>
bool
ToggleOutput
(
int
ioId
);
#
endregion
#
region
批量
IO
操作
/// <summary>
/// 批量读取输入信号状态
/// </summary>
/// <param name="ioIds">要读取的IO点ID列表</param>
/// <returns>IO点ID与状态值的映射字典</returns>
Dictionary
<
int
,
bool
>
ReadInputs
(
List
<
int
>
ioIds
);
/// <summary>
/// 批量写入输出信号状态
/// </summary>
/// <param name="ioValues">IO点ID与要写入状态值的映射字典</param>
/// <returns>写入是否全部成功</returns>
bool
WriteOutputs
(
Dictionary
<
int
,
bool
>
ioValues
);
/// <summary>
/// 读取所有输入信号状态
/// </summary>
/// <returns>所有输入IO点ID与状态值的映射字典</returns>
Dictionary
<
int
,
bool
>
ReadAllInputs
();
/// <summary>
/// 读取所有输出信号状态
/// </summary>
/// <returns>所有输出IO点ID与状态值的映射字典</returns>
Dictionary
<
int
,
bool
>
ReadAllOutputs
();
#
endregion
#
region
IO
信息获取
/// <summary>
/// 获取所有IO点信息
/// </summary>
/// <returns>IO点信息列表</returns>
List
<
IOInfo
>
GetAllIOs
();
/// <summary>
/// 根据IO点ID获取IO点信息
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <returns>IO点信息对象,如果未找到返回null</returns>
IOInfo
GetIOInfo
(
int
ioId
);
/// <summary>
/// 根据IO点名获取IO点信息
/// </summary>
/// <param name="ioName">IO点名</param>
/// <returns>IO点信息对象,如果未找到返回null</returns>
IOInfo
GetIOInfoByName
(
string
ioName
);
#
endregion
#
region
IO
映射
/// <summary>
/// 根据IO点名获取IO点ID
/// </summary>
/// <param name="ioName">IO点名</param>
/// <returns>IO点ID,如果未找到返回-1</returns>
int
GetIOIdByName
(
string
ioName
);
/// <summary>
/// 根据IO点ID获取IO点名
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <returns>IO点名,如果未找到返回空字符串</returns>
string
GetIONameById
(
int
ioId
);
#
endregion
#
region
事件处理
/// <summary>
/// 注册IO状态变化事件处理器
/// </summary>
/// <param name="ioId">IO点ID,传入-1表示监听所有IO点变化</param>
/// <param name="handler">事件处理函数,参数为IO点ID和新状态值</param>
void
RegisterIOChangeHandler
(
int
ioId
,
Action
<
int
,
bool
>
handler
);
/// <summary>
/// 注销IO状态变化事件处理器
/// </summary>
/// <param name="ioId">IO点ID,传入-1表示注销所有IO点的处理器</param>
/// <param name="handler">事件处理函数,如果为null则注销该IO点的所有处理器</param>
void
UnregisterIOChangeHandler
(
int
ioId
,
Action
<
int
,
bool
>
handler
=
null
);
#
endregion
#
region
高级功能
/// <summary>
/// 设置输出点闪烁
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <param name="onTimeMs">亮的时间(毫秒)</param>
/// <param name="offTimeMs">灭的时间(毫秒)</param>
/// <param name="repeatCount">闪烁次数,0表示无限循环</param>
/// <returns>设置是否成功</returns>
bool
BlinkOutput
(
int
ioId
,
int
onTimeMs
,
int
offTimeMs
,
int
repeatCount
=
0
);
/// <summary>
/// 停止输出点闪烁
/// </summary>
/// <param name="ioId">IO点ID,传入-1表示停止所有闪烁的输出点</param>
/// <returns>停止是否成功</returns>
bool
StopBlinkOutput
(
int
ioId
=
-
1
);
/// <summary>
/// 延时输出
/// </summary>
/// <param name="ioId">IO点ID</param>
/// <param name="value">要写入的状态值</param>
/// <param name="delayMs">延时时间(毫秒)</param>
/// <returns>设置是否成功</returns>
bool
DelayedWriteOutput
(
int
ioId
,
bool
value
,
int
delayMs
);
#
endregion
}
```
##
3. 数据结构
##
2. IO管理器接口
###
3.1 IOInfo 类
###
2.1 I_IOManager 接口
`I
OInfo`
类用于表示 IO 点的属性和配置信息
。
`I
_IOManager`
是 IO 控制模块的核心接口,定义了对 IO 信号进行管理和操作的基本方法
。
```
csharp
```
csharp
public
class
IOInfo
namespace
DeviceLibrary
{
{
/// <summary>
public
interface
I_IOManager
/// IO点ID
{
/// </summary>
/// <summary>
public
int
Id
{
get
;
set
;
}
/// 连接IO设备列表
/// </summary>
/// <summary>
bool
ConnectionIOList
(
List
<
string
>
dIODeviceNameList
);
/// IO点名
/// </summary>
/// <summary>
public
string
Name
{
get
;
set
;
}
/// 读取所有DI信号
/// </summary>
/// <summary>
void
ReadAllDI
(
string
deviceName
,
byte
slaveId
);
/// IO点类型(输入/输出)
/// </summary>
/// <summary>
public
IOType
Type
{
get
;
set
;
}
/// 读取所有DO信号
/// </summary>
/// <summary>
void
ReadAllDO
(
string
deviceName
,
byte
slaveId
);
/// IO点描述
/// </summary>
/// <summary>
public
string
Description
{
get
;
set
;
}
/// 写入单个DO信号 (带延时)
/// </summary>
/// <summary>
void
WriteSingleDO
(
string
deviceName
,
byte
slaveId
,
ushort
index
,
IO_VALUE
value
,
int
time
);
/// 物理地址
/// </summary>
/// <summary>
public
string
PhysicalAddress
{
get
;
set
;
}
/// 写入单个DO信号
/// </summary>
/// <summary>
void
WriteSingleDO
(
string
deviceName
,
byte
slaveId
,
ushort
index
,
IO_VALUE
value
);
/// 是否反转(取反)
/// </summary>
/// <summary>
public
bool
IsInverted
{
get
;
set
;
}
/// 获取DI信号值
/// </summary>
/// <summary>
IO_VALUE
GetDIValue
(
string
deviceName
,
byte
slaveID
,
ushort
v
);
/// 默认值
/// </summary>
/// <summary>
public
bool
DefaultValue
{
get
;
set
;
}
/// 获取DO信号值
/// </summary>
/// <summary>
IO_VALUE
GetDOValue
(
string
deviceName
,
byte
slaveID
,
ushort
v
);
/// 是否是安全相关IO
/// </summary>
/// <summary>
public
bool
IsSafetyRelated
{
get
;
set
;
}
/// 根据配置对象获取IO值
/// </summary>
/// <summary>
IO_VALUE
GetIOValue
(
ConfigIO
configIO
);
/// 当前值(仅用于信息展示,不保证实时性)
/// </summary>
/// <summary>
public
bool
CurrentValue
{
get
;
set
;
}
/// 关闭所有DO
/// </summary>
void
CloseAllDO
();
/// <summary>
/// 关闭所有连接
/// </summary>
void
CloseAllConnection
();
}
}
}
```
```
### 3.2 枚举类型
### 2.2 数据类型
#### 3.2.1 IOType 枚举
表示 IO 点类型。
#### IO_VALUE 枚举
```
csharp
```
csharp
public
enum
IO
Type
public
enum
IO
_VALUE
{
{
/// <summary>
LOW
=
0
,
/// 输入点
HIGH
=
1
,
/// </summary>
None
=
2
Input
=
0
,
/// <summary>
/// 输出点
/// </summary>
Output
=
1
,
/// <summary>
/// 模拟输入
/// </summary>
AnalogInput
=
2
,
/// <summary>
/// 模拟输出
/// </summary>
AnalogOutput
=
3
}
}
```
```
...
...
Documentation/Architecture/Layer5-Layer6-Design.md
查看文件 @
3e6eede
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
## 1. 概述
## 1. 概述
本文档详细描述了
SIS
O系统中的Layer5(边缘计算层)和Layer6(设备控制层)的架构设计、组件关系和实现方式。这两层是系统与物理设备交互的核心,负责设备控制、数据采集和边缘计算处理。
本文档详细描述了
MIM
O系统中的Layer5(边缘计算层)和Layer6(设备控制层)的架构设计、组件关系和实现方式。这两层是系统与物理设备交互的核心,负责设备控制、数据采集和边缘计算处理。
## 2. Layer6 (设备控制层)
## 2. Layer6 (设备控制层)
...
@@ -20,19 +20,13 @@
...
@@ -20,19 +20,13 @@
#### 目录结构
#### 目录结构
```
```
DeviceLibrary/
Core/
├── Interfaces/ # 设备抽象接口
├── Devices/ # 设备控制层 (DeviceLibrary)
│ ├── IAxisManager.cs # 轴管理器接口
│ ├── Axis/ # 轴控制相关 (IAxisManager, AxisManager)
│ ├── I_IOManager.cs # IO管理器接口
│ ├── IO/ # IO控制相关 (I_IOManager, IOManager)
│ ├── I_SafetyDevice.cs # 安全设备接口
│ ├── Sensors/ # 传感器实现 (WeightSensor, Camera)
│ └── IRobot.cs # 机器人接口
│ ├── Controllers/ # 控制器封装 (AxisBean)
├── Implementations/ # 具体实现
│ └── Common/ # 通用设备定义
│ ├── Axis/ # 轴控制相关实现
│ ├── IO/ # IO控制相关实现
│ ├── Sensors/ # 传感器实现
│ └── Actuators/ # 执行器实现
├── Helpers/ # 辅助工具类
└── Configs/ # 设备配置文件
```
```
### 2.2 主要模块说明
### 2.2 主要模块说明
...
@@ -84,20 +78,20 @@ DeviceLibrary/
...
@@ -84,20 +78,20 @@ DeviceLibrary/
#### 目录结构
#### 目录结构
```
```
TheMachin
e/
Cor
e/
├──
Core/ # 核心业务逻辑
├──
MachineControl/ # 机器控制核心
│ ├── MainMachine.cs # 主机器控制逻辑
│ ├── MainMachine.cs # 主机器控制逻辑
(Partial Class)
│ ├── RobotManage.cs # 机器人
管理逻辑
│ ├── RobotManage.cs # 机器人
/全局配置管理 (Singleton)
│ └──
BoxTransport.cs # 料箱传输控制逻辑
│ └──
Components/ # MainMachine的分部类实现
├── Controllers/ # 控制器
│ ├── MainMachine_String.cs # 料串进出逻辑
│
├── AxisControl.cs # 轴控制界面控制器
│
├── MainMachine_Clamp.cs # 取放料逻辑
│
├── IOControls.cs # IO控制界面控制器
│
├── MainMachine_Store.cs # 库位管理逻辑
│
└── SettingControl.cs # 设置界面控制器
│
└── ...
├──
Services/ # 服务层
├──
BusinessLogic/ # 业务逻辑
│ ├──
JobManagement/ # 任务管理服务
│ ├──
BoxTransport.cs # ReelTransport 类定义 (料盘搬运核心逻辑)
│ ├──
StateManagement/ # 状态管理服务
│ ├──
MoveInfo.cs # 运动步骤状态封装 (MoveStep Enum)
│ └──
EventProcessing/ # 事件处理服务
│ └──
JobList.cs # 任务队列逻辑
└──
Utils/ # 工具类
└──
DataProcessing/ # 数据处理
```
```
### 3.2 主要功能模块
### 3.2 主要功能模块
...
@@ -194,4 +188,4 @@ Layer5和Layer6之间采用以下通信机制:
...
@@ -194,4 +188,4 @@ Layer5和Layer6之间采用以下通信机制:
## 8. 总结
## 8. 总结
Layer5和Layer6作为SISO系统的核心组成部分,通过清晰的分层设计和接口定义,实现了设备控制和边缘计算功能的有效分离和协作。这种设计使得系统具有良好的可维护性、可扩展性和可靠性,能够满足工业自动化场景的需求。
\ No newline at end of file
\ No newline at end of file
Layer5和Layer6作为MIMO系统的核心组成部分,通过清晰的分层设计和接口定义,实现了设备控制和边缘计算功能的有效分离和协作。这种设计使得系统具有良好的可维护性、可扩展性和可靠性,能够满足工业自动化场景的需求。
\ No newline at end of file
\ No newline at end of file
Documentation/Architecture/System-Overview.md
查看文件 @
3e6eede
#
SIS
O系统架构概述
#
MIM
O系统架构概述
## 1. 系统简介
## 1. 系统简介
SISO(Single Input Single Output)系统是一个
工业自动化控制平台,用于管理和控制各类工业设备,包括运动轴、传感器、执行器等。系统采用分层架构设计,实现了设备控制、数据处理、业务逻辑和用户交互的有效分离。
MIMO(SMD BOX MIMO G2)系统是一个先进的
工业自动化控制平台,用于管理和控制各类工业设备,包括运动轴、传感器、执行器等。系统采用分层架构设计,实现了设备控制、数据处理、业务逻辑和用户交互的有效分离。
## 2. 整体架构
## 2. 整体架构
### 2.1 分层架构
### 2.1 分层架构
SIS
O系统采用经典的分层架构设计,从上到下依次分为以下几层:
MIM
O系统采用经典的分层架构设计,从上到下依次分为以下几层:
1.
**表现层(Layer 1-2)**
:用户界面和交互组件
1.
**表现层(Layer 1-2)**
:用户界面和交互组件
(
`UI`
目录)
2.
**应用层(Layer 3-4)**
:业务应用和功能模块
2.
**应用层(Layer 3-4)**
:业务应用和功能模块
3.
**边缘计算层(Layer 5)**
:数据处理和业务逻辑
3.
**边缘计算层(Layer 5)**
:数据处理和业务逻辑
(
`Core/MachineControl`
)
4.
**设备控制层(Layer 6)**
:设备抽象和控制接口
4.
**设备控制层(Layer 6)**
:设备抽象和控制接口
(
`Core/Devices`
)
5.
**设备层(Layer 7)**
:物理设备和硬件接口
5.
**设备层(Layer 7)**
:物理设备和硬件接口
本文档主要关注系统的Layer5和Layer6部分。
本文档主要关注系统的Layer5和Layer6部分。
...
@@ -24,35 +24,31 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
...
@@ -24,35 +24,31 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
```
```
┌─────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────┐
│ 表现层 (
Layer 1-2)
│
│ 表现层 (
UI)
│
│ ┌───────────────┐ ┌───────────────┐ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │
主界面 │ │ 配置界面
│ │
│ │
MainForm │ │ Controls
│ │
│ └───────┬───────┘ └───────┬───────┘ │
│ └───────┬───────┘ └───────┬───────┘ │
│ │ │ │
│ │ │ │
└──────────┼──────────────────┼───────────────────┘
└──────────┼──────────────────┼───────────────────┘
│ │
│ │
┌──────────┼──────────────────┼───────────────────┐
┌──────────┼──────────────────┼───────────────────┐
│ │ │ │
│ │ │ │
│ ┌───────▼───────┐ ┌───────▼───────┐ │
│ └──────────┬───────┘ │
│ │ 应用服务 │ │ 业务模块 │ │
│ │ │
│ └───────┬───────┘ └───────┬───────┘ │
│ 边缘计算层 (Core/MachineControl, BusinessLogic) │
│ │ │ │
│ ┌─────────────────▼─────────────────┐ │
│ └──────────┬───────┘ │
│ │ MainMachine (主控) │ │
│ │ │
│ ├─────────────────┬─────────────────┤ │
│ 边缘计算层 (Layer 5) │
│ │ RobotManage │ ReelTransport │ │
│ ┌─────────────────▼─────────────────┐ │
│ └─────────────────┴─────────────────┘ │
│ │ MainMachine (主控) │ │
│ │ │
│ ├─────────────────┬─────────────────┤ │
│ ┌──────────┴──────────┐ │
│ │ RobotManage │ BoxTransport │ │
│ │ │ │
│ └─────────────────┴─────────────────┘ │
└──────────┼─────────────────────┼────────────────┘
│ │ │
│ ┌──────────┴──────────┐ │
│ │ │ │
└──────────┼─────────────────────┼───────────────┘
│ │
│ │
┌──────────▼─────────┐ ┌─────────▼─────────┐
┌──────────▼─────────┐ ┌─────────▼─────────┐
│ 设备控制层 │ │ 设备控制层 │
│ 设备控制层 │ │ 设备控制层 │
│ (
Layer 6 - 轴控) │ │ (Layer 6 - IO)
│
│ (
Devices/Axis) │ │ (Devices/IO)
│
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ AxisManager │ │ │ │ IOManager │ │
│ │ AxisManager │ │ │ │ IOManager │ │
│ └─────────────┘ │ │ └─────────────┘ │
│ └─────────────┘ │ │ └─────────────┘ │
...
@@ -66,23 +62,25 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
...
@@ -66,23 +62,25 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
## 3. 主要功能模块
## 3. 主要功能模块
### 3.1 设备控制层 (
Layer 6
)
### 3.1 设备控制层 (
Core/Devices
)
设备控制层负责提供统一的设备抽象和控制接口,主要包括:
设备控制层负责提供统一的设备抽象和控制接口,主要包括:
-
**
轴控制**
:管理运动轴的状态和运动
-
**
Axis**
:
`IAxisManager`
及其实现,管理运动轴。
-
**IO
控制**
:管理输入输出信号
-
**IO
**
:
`I_IOManager`
及其实现,管理 IO 信号。
-
**
传感器管理**
:处理各类传感器数据
-
**
Controllers**
:具体硬件控制器的实现(如
`HC`
,
`dauxiKS107`
)。
-
**
执行器控制**
:控制各类执行器动作
-
**
Camera**
:相机设备控制。
### 3.2 边缘计算层 (
Layer 5
)
### 3.2 边缘计算层 (
Core/MachineControl
)
边缘计算层负责处理设备数据、实现业务逻辑和协调设备交互,主要包括:
边缘计算层负责处理设备数据、实现业务逻辑和协调设备交互,主要包括:
-
**机器控制**
:协调各设备完成整体任务流程
-
**MainMachine**
:系统主控逻辑入口,作为部分类(Partial Class)实现,集成了多个子功能模块。
-
**任务管理**
:管理和调度各类任务
-
**状态机管理**
:通过
`MoveInfo`
对象管理多个并行的业务流程(如
`StringMoveInfo`
,
`ClampMoveInfo`
,
`StoreMoveInfo`
)。
-
**状态监控**
:监控系统和设备状态
-
**流程协调**
:协调料串机构、取放料机构和库位调度之间的交互。
-
**数据处理**
:对采集的数据进行处理和分析
-
**RobotManage**
:单例管理器,持有
`MainMachine`
实例和全局配置,负责系统级别的状态管理。
-
**ReelTransport**
:专注于料盘在库位、校准位和IO口之间的搬运逻辑(实现于
`BoxTransport.cs`
)。
-
**Components**
:各类机器组件的具体逻辑实现(如
`MainMachine_Store`
,
`MainMachine_Clamp`
)。
## 4. 技术架构
## 4. 技术架构
...
@@ -130,4 +128,4 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
...
@@ -130,4 +128,4 @@ SISO系统采用经典的分层架构设计,从上到下依次分为以下几
## 7. 总结
## 7. 总结
SISO系统采用分层架构设计,实现了设备控制和业务逻辑的有效分离,具有良好的可维护性、可扩展性和可靠性。系统的Layer5和Layer6部分作为连接应用层和物理设备的桥梁,在系统中扮演着至关重要的角色。
\ No newline at end of file
\ No newline at end of file
MIMO系统采用分层架构设计,实现了设备控制和业务逻辑的有效分离,具有良好的可维护性、可扩展性和可靠性。系统的Layer5和Layer6部分作为连接应用层和物理设备的桥梁,在系统中扮演着至关重要的角色。
\ No newline at end of file
\ No newline at end of file
Documentation/Configuration/Axis-Config.md
查看文件 @
3e6eede
# 轴配置说明
# 轴
与IO
配置说明
## 1. 概述
## 1. 概述
本文档详细说明
SISO系统中运动轴的配置方法,包括配置文件格式、参数说明以及配置示例。轴配置对于系统的运动控制精度和稳定性至关重要,用户应根据实际设备情况正确配置相关参数
。
本文档详细说明
MIMO系统中运动轴及IO信号的配置方法。本系统采用 CSV 格式进行轴、IO信号和通用属性的配置,配置文件位于
`Core/Config/Config.csv`
。
## 2. 配置文件格式
## 2. 配置文件格式
轴配置可以通过配置文件或系统界面进行设置。配置文件通常采用XML或JSON格式,存储在系统配置目录中。
配置文件采用 CSV (Comma-Separated Values) 格式。每一行代表一个配置项。
### 2.1 基本配置结构
### 2.1 轴配置 (AXIS)
```
xml
以
`AXIS`
开头的行定义了轴的配置。
<?xml version="1.0" encoding="utf-8" ?>
<AxesConfig>
**字段顺序与说明:**
<Axes>
<Axis>
| 索引 | 字段名 | 说明 | 示例 |
<Id>
1
</Id>
|---|---|---|---|
<Name>
X-Axis
</Name>
| 0 | Type | 配置类型,固定为
`AXIS`
| AXIS |
<Type>
Linear
</Type>
| 1 | Group | 分组(通常为空) | |
<MotorType>
Servo
</MotorType>
| 2 | Description | 中文描述 | 旋转轴 |
<ControllerId>
1
</ControllerId>
| 3 | Name | 轴的程序内部名称 | Middle_Axis |
<AxisNumber>
0
</AxisNumber>
| 4 | AxisID | 轴号/ID | 0 |
<Enable>
true
</Enable>
| 5 | DeviceType | 设备类型 | HC |
| 6 | Reserved | 保留 | |
<!-- 机械参数 -->
| 7 | TargetSpeed | 目标速度/最大速度 | 60000 |
<Mechanical>
| 8 | Reserved | 保留 | 0 |
<TravelRange>
1000.0
</TravelRange>
| 9 | Reserved | 保留 | 0 |
<Unit>
mm
</Unit>
| 10 | Reserved | 保留 | 0 |
<GearRatio>
1.0
</GearRatio>
| 11 | HomeHighSpeed | 回零高速 | 10000 |
<LeadScrewPitch>
5.0
</LeadScrewPitch>
| 12 | HomeLowSpeed | 回零低速 | 0 |
<PulleyRatio>
1.0
</PulleyRatio>
| 13 | HomeAddSpeed | 回零加速度 | 10 |
</Mechanical>
| 14 | Reserved | 保留 | 700 |
| 15 | Reserved | 保留 | 0 |
<!-- 编码器参数 -->
| 16 | Reserved | 保留 | 0 |
<Encoder>
<CountsPerRevolution>
131072
</CountsPerRevolution>
**示例:**
<CountsPerUnit>
26214.4
</CountsPerUnit>
```
csv
<Direction>
Positive
</Direction>
AXIS,,旋转轴,Middle_Axis,0,HC,,60000,0,0,0,10000,0,10,700,0,0
</Encoder>
<!-- 运动参数 -->
<Motion>
<MaxSpeed>
500.0
</MaxSpeed>
<MaxAcceleration>
1000.0
</MaxAcceleration>
<MaxDeceleration>
1000.0
</MaxDeceleration>
<Jerk>
10000.0
</Jerk>
<HomeSpeed>
50.0
</HomeSpeed>
<JogSpeed>
30.0
</JogSpeed>
<CreepSpeed>
10.0
</CreepSpeed>
</Motion>
<!-- 限位配置 -->
<Limits>
<PositiveLimit>
1000.0
</PositiveLimit>
<NegativeLimit>
0.0
</NegativeLimit>
<SoftLimitEnable>
true
</SoftLimitEnable>
<HardLimitEnable>
true
</HardLimitEnable>
</Limits>
<!-- 回零配置 -->
<Homing>
<HomeMode>
ActiveLimitHome
</HomeMode>
<HomeDirection>
Negative
</HomeDirection>
<HomeOffset>
10.0
</HomeOffset>
<HomeSensorId>
101
</HomeSensorId>
</Homing>
<!-- IO映射 -->
<IOMapping>
<PositiveLimitSensor>
1
</PositiveLimitSensor>
<NegativeLimitSensor>
2
</NegativeLimitSensor>
<HomeSensor>
3
</HomeSensor>
<ServoEnable>
11
</ServoEnable>
<ServoAlarm>
12
</ServoAlarm>
</IOMapping>
</Axis>
<!-- 更多轴配置... -->
</Axes>
</AxesConfig>
```
```
## 3. 配置参数说明
### 2.2 IO配置 (DI/DO)
### 3.1 基本参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| Id | Integer | 轴的唯一标识ID | 是 |
| Name | String | 轴的名称(如X轴、Y轴等) | 是 |
| Type | String | 轴类型(Linear-直线轴、Rotary-旋转轴) | 是 |
| MotorType | String | 电机类型(Servo-伺服电机、Stepper-步进电机) | 是 |
| ControllerId | Integer | 控制器ID | 是 |
| AxisNumber | Integer | 在控制器中的轴号 | 是 |
| Enable | Boolean | 是否启用该轴 | 是 |
### 3.2 机械参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| TravelRange | Double | 轴的行程范围 | 是 |
| Unit | String | 单位(mm、deg等) | 是 |
| GearRatio | Double | 齿轮传动比 | 否 |
| LeadScrewPitch | Double | 丝杠导程(对于直线轴) | 否 |
| PulleyRatio | Double | 皮带轮传动比 | 否 |
### 3.3 编码器参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| CountsPerRevolution | Integer | 编码器每转脉冲数 | 是 |
| CountsPerUnit | Double | 每单位移动对应的脉冲数 | 是 |
| Direction | String | 运动方向(Positive-正向、Negative-反向) | 是 |
### 3.4 运动参数
| 参数 | 类型 | 说明 | 是否必需 |
以
`DI`
或
`DO`
开头的行定义了输入/输出信号的配置。
|-----|------|-----|--------|
| MaxSpeed | Double | 最大运动速度 | 是 |
| MaxAcceleration | Double | 最大加速度 | 是 |
| MaxDeceleration | Double | 最大减速度 | 是 |
| Jerk | Double | 加加速度 | 否 |
| HomeSpeed | Double | 回零速度 | 是 |
| JogSpeed | Double | 点动速度 | 是 |
| CreepSpeed | Double | 爬行速度(用于精确定位) | 否 |
### 3.5 限位配置
**字段顺序与说明:**
| 参数 | 类型 | 说明 | 是否必需 |
| 索引 | 字段名 | 说明 | 示例 |
|-----|------|-----|--------|
|---|---|---|---|
| PositiveLimit | Double | 正向软限位值 | 否 |
| 0 | Type | 配置类型 (
`DI`
或
`DO`
) | DI |
| NegativeLimit | Double | 负向软限位值 | 否 |
| 1 | Group | 分组 | 0 |
| SoftLimitEnable | Boolean | 是否启用软限位 | 否 |
| 2 | Description | 中文描述 | 急停 |
| HardLimitEnable | Boolean | 是否启用硬限位 | 否 |
| 3 | Name | 程序内部名称 | SuddenStop_BTN |
| 4 | Index | 索引/ID | 0 |
| 5 | DeviceType | 设备类型 | HC |
| 6 | Address | 硬件地址 | X00 |
### 3.6 回零配置
**示例:**
```
csv
| 参数 | 类型 | 说明 | 是否必需 |
DI,0,急停,SuddenStop_BTN,0,HC,X00,,,,,,,,,,
|-----|------|-----|--------|
DO,0,自动指示灯,Run_Led,0,HC,Y00,,,,,,,,,,
| HomeMode | String | 回零模式 | 是 |
```
| HomeDirection | String | 回零方向 | 是 |
| HomeOffset | Double | 回零偏移量 | 否 |
| HomeSensorId | Integer | 回零传感器ID | 否 |
### 3.7 IO映射
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| PositiveLimitSensor | Integer | 正向限位传感器IO点 | 否 |
| NegativeLimitSensor | Integer | 负向限位传感器IO点 | 否 |
| HomeSensor | Integer | 回零传感器IO点 | 否 |
| ServoEnable | Integer | 伺服使能IO点 | 否 |
| ServoAlarm | Integer | 伺服报警IO点 | 否 |
##
4. 回零模式说明
##
# 2.3 属性配置 (PRO)
| 回零模式 | 描述 |
以
`PRO`
开头的行定义了通用系统属性,如超时时间、位置参数等。
|--------|------|
| ActiveLimitHome | 主动回零(碰到限位后返回) |
| PassiveHome | 被动回零(等待外部信号触发) |
| SensorHome | 传感器回零(找到原点传感器信号) |
| IndexHome | 编码器索引回零 |
| NoHome | 无需回零 |
## 5. 配置示例
**字段顺序与说明:**
### 5.1 X轴配置示例
| 索引 | 字段名 | 说明 | 示例 |
|---|---|---|---|
| 0 | Type | 配置类型 | PRO |
| 1 | Group | 分组 | 50 |
| 2 | Description | 中文描述 | IO信号超时时间(秒) |
| 3 | Key | 属性键名 | IOSingle_TimerOut |
| 4 | Value | 属性值 | 5 |
```
xml
**示例:**
<Axis>
```
csv
<Id>
1
</Id>
PRO,50,IO信号超时时间(秒),IOSingle_TimerOut,5,,,,,,,,,,,,
<Name>
X-Axis
</Name>
<Type>
Linear
</Type>
<MotorType>
Servo
</MotorType>
<ControllerId>
1
</ControllerId>
<AxisNumber>
0
</AxisNumber>
<Enable>
true
</Enable>
<!-- 机械参数 -->
<Mechanical>
<TravelRange>
1000.0
</TravelRange>
<Unit>
mm
</Unit>
<GearRatio>
1.0
</GearRatio>
<LeadScrewPitch>
5.0
</LeadScrewPitch>
<PulleyRatio>
1.0
</PulleyRatio>
</Mechanical>
<!-- 编码器参数 -->
<Encoder>
<CountsPerRevolution>
131072
</CountsPerRevolution>
<CountsPerUnit>
26214.4
</CountsPerUnit>
<Direction>
Positive
</Direction>
</Encoder>
<!-- 运动参数 -->
<Motion>
<MaxSpeed>
500.0
</MaxSpeed>
<MaxAcceleration>
1000.0
</MaxAcceleration>
<MaxDeceleration>
1000.0
</MaxDeceleration>
<Jerk>
10000.0
</Jerk>
<HomeSpeed>
50.0
</HomeSpeed>
<JogSpeed>
30.0
</JogSpeed>
<CreepSpeed>
10.0
</CreepSpeed>
</Motion>
<!-- 限位配置 -->
<Limits>
<PositiveLimit>
1000.0
</PositiveLimit>
<NegativeLimit>
0.0
</NegativeLimit>
<SoftLimitEnable>
true
</SoftLimitEnable>
<HardLimitEnable>
true
</HardLimitEnable>
</Limits>
<!-- 回零配置 -->
<Homing>
<HomeMode>
ActiveLimitHome
</HomeMode>
<HomeDirection>
Negative
</HomeDirection>
<HomeOffset>
10.0
</HomeOffset>
<HomeSensorId>
101
</HomeSensorId>
</Homing>
</Axis>
```
```
##
# 5.2 旋转轴
配置示例
##
3.
配置示例
```
xml
```
csv
<Axis>
类型,分组,说明,名称,值,设备类型,保留,最大速度,起始速度,加速度,减速度,原点高速度,爬行,原点加速度,原点减速度,S曲线平滑,保留
<Id>
4
</Id>
AXIS,,旋转轴,Middle_Axis,0,HC,,60000,0,0,0,10000,0,10,700,0,0
<Name>
Theta-Axis
</Name>
AXIS,,升降轴,UpDown_Axis,1,HC,,20000,0,0,0,40000,0,10,700,0,0
<Type>
Rotary
</Type>
PRO,50,IO信号超时时间(秒),IOSingle_TimerOut,5,,,,,,,,,,,,
<MotorType>
Servo
</MotorType>
DI,0,急停,SuddenStop_BTN,0,HC,X00,,,,,,,,,,
<ControllerId>
1
</ControllerId>
DO,0,自动指示灯,Run_Led,0,HC,Y00,,,,,,,,,,
<AxisNumber>
3
</AxisNumber>
<Enable>
true
</Enable>
<!-- 机械参数 -->
<Mechanical>
<TravelRange>
360.0
</TravelRange>
<Unit>
deg
</Unit>
<GearRatio>
10.0
</GearRatio>
<LeadScrewPitch>
0.0
</LeadScrewPitch>
<PulleyRatio>
1.0
</PulleyRatio>
</Mechanical>
<!-- 编码器参数 -->
<Encoder>
<CountsPerRevolution>
131072
</CountsPerRevolution>
<CountsPerUnit>
364.09
</CountsPerUnit>
<Direction>
Positive
</Direction>
</Encoder>
<!-- 运动参数 -->
<Motion>
<MaxSpeed>
180.0
</MaxSpeed>
<MaxAcceleration>
360.0
</MaxAcceleration>
<MaxDeceleration>
360.0
</MaxDeceleration>
<Jerk>
3600.0
</Jerk>
<HomeSpeed>
60.0
</HomeSpeed>
<JogSpeed>
30.0
</JogSpeed>
<CreepSpeed>
10.0
</CreepSpeed>
</Motion>
<!-- 限位配置 -->
<Limits>
<PositiveLimit>
360.0
</PositiveLimit>
<NegativeLimit>
0.0
</NegativeLimit>
<SoftLimitEnable>
false
</SoftLimitEnable>
<HardLimitEnable>
false
</HardLimitEnable>
</Limits>
<!-- 回零配置 -->
<Homing>
<HomeMode>
SensorHome
</HomeMode>
<HomeDirection>
Positive
</HomeDirection>
<HomeOffset>
0.0
</HomeOffset>
<HomeSensorId>
104
</HomeSensorId>
</Homing>
</Axis>
```
```
## 5. 参数调整建议
## 4. 参数调整建议
### 5.1 运动参数调整
-
**速度参数**
:根据负载情况和设备刚性调整,避免机械振动
-
**加速度/减速度**
:过大可能导致机械冲击,过小会影响效率
-
**加加速度(Jerk)**
:平滑运动过渡,减少振动
-
**回零参数**
:回零速度不宜过快,确保定位准确性
### 5.2 安全参数
-
**限位配置**
:确保硬限位和软限位都正确设置,避免机械碰撞
-
**方向设置**
:确保运动方向正确,避免反方向运动造成危险
-
**使能控制**
:设置正确的伺服使能信号,确保安全运行
##
6. 常见问题与解决方案
##
# 4.1 运动参数调整
### 6.1 运动精度问题
-
**TargetSpeed (最大速度)**
:根据负载情况和设备刚性调整,避免机械振动。
-
**HomeHighSpeed (回零高速)**
:回零时的快速移动速度。
-
**HomeAddSpeed (回零加速度)**
:回零过程中的加速度。
-
检查编码器参数设置是否正确
### 4.2 IO配置
-
确认机械传动部分是否存在间隙或松动
-
调整速度和加速度参数,减少振动
### 6.2 回零异常
-
**Address (硬件地址)**
:必须与电气原理图和PLC/板卡实际接线一致。
-
**Index (索引)**
:程序内部使用的索引,应保持唯一。
-
确认回零传感器安装位置和连接是否正确
## 5. 常见问题与解决方案
-
检查回零模式设置是否与实际硬件匹配
-
调整回零速度和方向参数
###
6.3 运动不平滑
###
5.1 轴无法移动
-
增加Jerk参数值,使速度变化更加平滑
-
检查
`Config.csv`
中的
`AxisID`
和
`DeviceType`
是否正确。
-
检查机械系统是否有卡滞或摩擦过大的情况
-
确认
`TargetSpeed`
是否设置为非零值。
-
调整PID参数(如果控制器支持)
###
6.4 限位触发
###
5.2 IO信号无反应
-
确认限位传感器连接和设置是否正确
-
检查软限位参数是否设置合理
-
确认轴的运动范围与实际机械结构匹配
\ No newline at end of file
\ No newline at end of file
-
检查
`Address`
是否与硬件接线对应。
-
确认
`DeviceType`
是否匹配实际使用的IO卡或控制器。
Documentation/Configuration/Camera-Config.md
查看文件 @
3e6eede
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
## 1. 概述
## 1. 概述
本文档详细说明
SIS
O系统中相机设备的配置方法,包括配置文件格式、参数说明以及配置示例。相机配置文件采用JSON格式,存储在
`DeviceLibrary/Config/`
目录下。
本文档详细说明
MIM
O系统中相机设备的配置方法,包括配置文件格式、参数说明以及配置示例。相机配置文件采用JSON格式,存储在
`DeviceLibrary/Config/`
目录下。
## 2. 配置文件格式
## 2. 配置文件格式
...
@@ -247,21 +247,13 @@
...
@@ -247,21 +247,13 @@
### 5.1 配置文件位置
### 5.1 配置文件位置
相机配置文件存储在以下位置:
相机配置文件存储在执行目录的
`Config/`
文件夹下。
```
DeviceLibrary/
└── Config/
├── CameraA.json
├── CameraB.json
└── ...
```
### 5.2 配置加载流程
### 5.2 配置加载流程
1.
系统启动时,
`C
amera.cs`
类会扫描
`Config`
目录下的所有相机配置文件
1.
系统启动时,
`C
odeManager`
类会加载配置。
2.
根据配置文件中的信息初始化相应的相机设备
2.
自动寻找
`Config/IPCamera.json`
并初始化相机。
3.
如果配置文件不存在或格式错误,系统将使用默认配置
3.
加载
`Config/coverroi.json`
获取ROI信息。
### 5.3 配置修改方法
### 5.3 配置修改方法
...
...
Documentation/Configuration/Communication-Config.md
查看文件 @
3e6eede
...
@@ -2,11 +2,11 @@
...
@@ -2,11 +2,11 @@
## 1. 概述
## 1. 概述
本文档详细说明
SIS
O系统中设备通信的配置方法,包括通信协议、配置文件格式、参数说明以及配置示例。设备通信配置对于系统各组件间的正常协作至关重要,用户应根据实际网络环境和设备情况正确配置相关参数。
本文档详细说明
MIM
O系统中设备通信的配置方法,包括通信协议、配置文件格式、参数说明以及配置示例。设备通信配置对于系统各组件间的正常协作至关重要,用户应根据实际网络环境和设备情况正确配置相关参数。
## 2. 通信架构
## 2. 通信架构
SIS
O系统采用分层通信架构,主要包括以下几种通信方式:
MIM
O系统采用分层通信架构,主要包括以下几种通信方式:
-
**控制器通信**
:与运动控制器之间的通信
-
**控制器通信**
:与运动控制器之间的通信
-
**设备通信**
:与各类传感器、执行器的通信
-
**设备通信**
:与各类传感器、执行器的通信
...
@@ -160,80 +160,31 @@ SISO系统采用分层通信架构,主要包括以下几种通信方式:
...
@@ -160,80 +160,31 @@ SISO系统采用分层通信架构,主要包括以下几种通信方式:
## 4. 设备通信配置参数说明
## 4. 设备通信配置参数说明
### 4.1 EtherCAT配置参数
### 4.1 常用PRO配置参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| Master.Id | Integer | 主站ID | 是 |
| Master.Name | String | 主站名称 | 是 |
| Master.Port | Integer | 网络端口号 | 是 |
| Master.CycleTime | Integer | 通信周期时间(μs) | 是 |
| Master.Priority | String | 通信优先级 | 是 |
| Slave.Id | Integer | 从站ID | 是 |
| Slave.Name | String | 从站名称 | 是 |
| Slave.VendorId | Hex | 厂商ID | 是 |
| Slave.ProductCode | Hex | 产品代码 | 是 |
| Slave.Alias | Integer | 别名 | 否 |
| Slave.Position | Integer | 位置 | 是 |
### 4.2 Modbus配置参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| Port | String/Integer | 串口名称或TCP端口 | 是 |
| BaudRate | Integer | 波特率(RTU模式) | 是(RTU模式) |
| DataBits | Integer | 数据位(RTU模式) | 是(RTU模式) |
| StopBits | Integer | 停止位(RTU模式) | 是(RTU模式) |
| Parity | String | 校验位(RTU模式) | 是(RTU模式) |
| IpAddress | String | IP地址(TCP模式) | 是(TCP模式) |
| Timeout | Integer | 通信超时时间(ms) | 是 |
| Slave.Id | Integer | 从站ID | 是 |
| Slave.Name | String | 从站名称 | 是 |
| Slave.FunctionCode | Integer | 功能码 | 是 |
| Slave.StartingRegister | Integer | 起始寄存器地址 | 是 |
| Slave.RegisterCount | Integer | 寄存器数量 | 是 |
### 4.3 网络通信配置参数
| 参数 | 类型 | 说明 | 是否必需 |
|-----|------|-----|--------|
| Port | Integer | 网络端口号 | 是 |
| IpAddress | String | IP地址(客户端) | 是(客户端) |
| MaxConnections | Integer | 最大连接数 | 是 |
| BufferSize | Integer | 缓冲区大小 | 是 |
| Timeout | Integer | 超时时间(ms) | 是 |
| EnableSsl | Boolean | 是否启用SSL | 否 |
| AutoReconnect | Boolean | 是否自动重连 | 否 |
| ReconnectInterval | Integer | 重连间隔(ms) | 否 |
| Path | String | WebSocket路径 | 是(WebSocket) |
| HeartbeatInterval | Integer | 心跳间隔(ms) | 否(WebSocket) |
## 5. 配置文件管理
| 参数名 | 说明 |
|-----|-----|
### 5.1 配置文件位置
| Humiture_Port | 温湿度传感器连接的COM端口 |
| AIDevice_IP | 模拟量采集模块的IP地址 |
| AIDI
*
_Addr | 模拟量输入通道地址 |
配置文件通常存储在以下位置:
### 4.2 EtherCAT/Motion 参数
-
主配置目录:
`/Config/Communication/`
EtherCAT通信参数(如PDO映射、周期)通常在控制卡固件或底层驱动代码中固定,用户主要通过
`AXIS`
配置项调整轴号映射和运动参数。
-
EtherCAT配置:
`/Config/Communication/EtherCAT.xml`
-
Modbus配置:
`/Config/Communication/Modbus.json`
-
网络通信配置:
`/Config/Communication/Network.json`
##
# 5.2 配置文件加载流程
##
5. 配置文件管理
1.
系统启动时,自动加载通信配置文件
### 5.1 配置文件位置
2.
验证配置文件格式和参数有效性
3.
根据配置初始化通信模块
4.
建立与各设备的通信连接
5.
监控通信状态,处理异常情况
### 5.3 动态配置更新
所有通信相关配置均包含在主配置文件中:
-
`Core/Config/Config.csv`
系统支持运行时动态更新通信配置:
### 5.2 配置修改
-
通过API接口更新配置
1.
使用文本编辑器或Excel打开
`Config.csv`
。
-
通过Web界面更新配置
2.
找到
`PRO`
类型行。
-
配置更新后自动重新连接设备
3.
修改对应属性值(第5列)。
4.
保存文件并重启软件生效。
## 6. 通信诊断与故障排除
## 6. 通信诊断与故障排除
...
...
Documentation/Troubleshooting/System-Troubleshooting-Guide.md
查看文件 @
3e6eede
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
## 1. 概述
## 1. 概述
本文档提供了
SIS
O系统常见故障的诊断步骤和解决方案,旨在帮助技术人员快速识别和解决系统运行中遇到的问题。故障排除应遵循系统化的方法,从基础检查开始,逐步深入分析,最终解决问题。
本文档提供了
MIM
O系统常见故障的诊断步骤和解决方案,旨在帮助技术人员快速识别和解决系统运行中遇到的问题。故障排除应遵循系统化的方法,从基础检查开始,逐步深入分析,最终解决问题。
## 2. 故障诊断基本流程
## 2. 故障诊断基本流程
...
@@ -110,15 +110,12 @@
...
@@ -110,15 +110,12 @@
## 7. 日志分析指南
## 7. 日志分析指南
### 7.1 日志级别说明
### 7.1 日志级别说明
| 级别 | 说明 | 示例 |
| 级别 | 说明 | 对应代码 |
|-----|------|------|
|-----|------|------|
| FATAL | 致命错误,导致系统崩溃 | 硬件故障、核心服务崩溃 |
| alarm | 报警,系统停止或需要立即处理 |
`MsgLevel.alarm`
|
| ERROR | 严重错误,影响系统功能 | 通信失败、设备连接断开 |
| warning | 警告,可能影响流程但不致命 |
`MsgLevel.warning`
|
| WARN | 警告信息,可能导致问题 | 参数异常、资源不足 |
| info | 一般信息,记录流程状态 |
`MsgLevel.info`
|
| INFO | 一般信息,记录重要事件 | 系统启动、模块加载 |
| DEBUG | 调试信息,用于问题诊断 | 函数调用、变量值 |
| TRACE | 详细跟踪信息,记录执行流程 | 代码路径、执行步骤 |
### 7.2 日志文件位置
### 7.2 日志文件位置
...
@@ -128,34 +125,31 @@
...
@@ -128,34 +125,31 @@
-
设备日志:
`/Logs/Device/`
-
设备日志:
`/Logs/Device/`
-
错误日志:
`/Logs/Error/`
-
错误日志:
`/Logs/Error/`
### 7.3
关键错误代码含义
### 7.3
系统错误代码 (ErrInfo & AlarmInfo)
#### 7.3.1
通信错误代码
#### 7.3.1
常见错误枚举 (ErrInfo)
| 错误代码
| 说明 | 可能原因
|
| 错误代码
/枚举 | 说明 | 解决方案
|
|---------|------|--------|
|---------|------|--------|
|
ECOM001 | 连接失败 | 网络问题、目标不可达
|
|
`X09_BoxNotDetect`
| 料叉传感器未检测到料盘 | 检查X30/X09传感器,确认料盘是否在位,手动确认或清除障碍
|
|
ECOM002 | 超时错误 | 响应缓慢、网络延迟
|
|
`SuddenStop`
| 急停按钮被按下或运动报警 | 检查急停按钮状态,检查轴运动是否受阻
|
|
ECOM003 | 数据传输错误 | 协议不匹配、数据损坏
|
|
`RunBtn`
| 运行按钮相关错误 | 检查操作面板按钮状态
|
|
ECOM004 | 配置错误 | 参数设置不正确、配置文件损坏
|
|
`Res0008`
| 服务器连接异常 | 检查网络连接,确认上位机服务是否启动
|
#### 7.3.2
设备错误代码
#### 7.3.2
报警类型 (AlarmInfo)
| 错误代码 | 说明 | 可能原因 |
系统内部定义的报警类型(AlarmType):
|---------|------|--------|
| EDEV001 | 设备未连接 | 电源问题、物理连接断开 |
| EDEV002 | 设备响应错误 | 设备故障、参数错误 |
| EDEV003 | 设备超时 | 通信问题、设备繁忙 |
| EDEV004 | 设备异常 | 内部错误、硬件故障 |
#### 7.3.3 系统错误代码
| 类型ID | 类别 | 详细说明 |
|---|---|---|
| 0 | 消息 | 原点返回、复位消息 |
| 1 | 总体错误 | 急停、气压不足、盘错乱 |
| 2 | 运动轴错误 | 轴1-4报警(旋转、升降、进出、压紧)、电缸报警 |
| 3 | IO报警 | 信号超时 |
| 错误代码 | 说明 | 可能原因 |
#### 7.3.3 汇川(Huichuan)伺服报警
|---------|------|--------|
| ESYS001 | 初始化失败 | 配置错误、依赖缺失 |
系统通过
`HCBoardManager.GetAxisErrorDetail`
获取伺服驱动器的详细报警代码。请参考汇川伺服驱动器手册查询具体报警代码(如 E-xxx)。
| ESYS002 | 资源不足 | 内存不足、CPU过载 |
| ESYS003 | 访问权限错误 | 权限设置问题、用户权限不足 |
| ESYS004 | 文件操作错误 | 文件不存在、权限问题、磁盘空间不足 |
## 8. 预防性维护
## 8. 预防性维护
...
...
Documentation/User-Manual/System-User-Manual.md
查看文件 @
3e6eede
#
SIS
O系统用户手册
#
MIM
O系统用户手册
## 1. 简介
## 1. 简介
### 1.1 文档目的
### 1.1 文档目的
本文档旨在为
SIS
O系统的操作人员提供全面的操作指南,包括系统概述、安装配置、日常操作、维护保养及故障处理等内容,帮助用户正确、安全、高效地使用本系统。
本文档旨在为
MIM
O系统的操作人员提供全面的操作指南,包括系统概述、安装配置、日常操作、维护保养及故障处理等内容,帮助用户正确、安全、高效地使用本系统。
### 1.2 适用对象
### 1.2 适用对象
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
| 术语 | 解释说明 |
| 术语 | 解释说明 |
|-----|--------|
|-----|--------|
|
SISO | Single Input Single Output,单输入单
输出系统 |
|
MIMO | Multiple Input Multiple Output,多输入多
输出系统 |
| PLC | Programmable Logic Controller,可编程逻辑控制器 |
| PLC | Programmable Logic Controller,可编程逻辑控制器 |
| HMI | Human Machine Interface,人机界面 |
| HMI | Human Machine Interface,人机界面 |
| EtherCAT | 工业以太网通信协议 |
| EtherCAT | 工业以太网通信协议 |
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
### 2.1 系统功能
### 2.1 系统功能
SIS
O系统是一个集运动控制、设备管理、数据采集和监控于一体的工业自动化控制系统,主要功能包括:
MIM
O系统是一个集运动控制、设备管理、数据采集和监控于一体的工业自动化控制系统,主要功能包括:
-
多轴运动控制
-
多轴运动控制
-
设备IO管理
-
设备IO管理
...
@@ -480,14 +480,17 @@ IO监控界面用于监控和控制输入输出信号,主要功能包括:
...
@@ -480,14 +480,17 @@ IO监控界面用于监控和控制输入输出信号,主要功能包括:
4.
记录报警原因和处理方法
4.
记录报警原因和处理方法
### 9.4 常见报警及处理
### 9.4 常见报警及处理
| 报警代码 | 报警描述 | 可能原因 | 处理方法 |
系统报警分为以下几类(AlarmType):
|---------|--------|---------|--------|
| ALM001 | 轴位置超限 | 限位开关触发或软限位设置不当 | 检查机械位置,调整限位设置 |
| 类型ID | 类别 | 描述 | 处理建议 |
| ALM002 | 伺服驱动器报警 | 伺服故障或参数设置错误 | 检查伺服驱动器报警代码,参考伺服手册处理 |
|---|---|---|---|
| ALM003 | 通信超时 | 网络故障或设备无响应 | 检查网络连接,重启通信设备 |
| 0 | 消息 | 原点返回、复位等提示信息 | 无需特殊处理,确认即可 |
| ALM004 | 电源电压异常 | 电源波动或故障 | 检查电源系统,必要时更换电源 |
| 1 | 总体错误 | 急停被按下、气压不足、料盘错乱等 | 检查急停按钮、气源压力或料盘状态 |
| ALM005 | 温度过高 | 环境温度过高或冷却系统故障 | 改善通风条件,检查冷却系统 |
| 2 | 运动轴错误 | 轴伺服报警、位置超限等 | 检查对应轴的机械状态和驱动器报警代码,清除报警后复位 |
| 3 | IO报警 | 信号超时、传感器未检测到等 | 检查相关传感器和气缸状态 |
具体的伺服报警代码(如E-xxx)请参考伺服驱动器手册。
## 10. 附录
## 10. 附录
...
@@ -532,19 +535,18 @@ IO监控界面用于监控和控制输入输出信号,主要功能包括:
...
@@ -532,19 +535,18 @@ IO监控界面用于监控和控制输入输出信号,主要功能包括:
| Esc | 取消当前操作 |
| Esc | 取消当前操作 |
### 10.3 联系方式
### 10.3 联系方式
**技术支持热线**
:400-123-4567
**邮箱**
:support@siso-system.com
**网站**
:www.siso-system.com
**服务时间**
:周一至周五 9:00-18:00
### 10.4 版本历史
| 版本号 | 更新日期 | 更新内容 |
|-------|--------|--------|
| 1.0.0 | 2023-01-15 | 初始版本 |
| 1.1.0 | 2023-03-20 | 新增功能和性能优化 |
| 1.2.0 | 2023-06-10 | 修复已知问题,增强稳定性 |
\ No newline at end of file
\ No newline at end of file
**技术支持热线**
:400-XXX-XXXX
**邮箱**
:support@mimo-system.com
**网站**
:www.mimo-system.com
**服务时间**
:周一至周五 9:00-18:00
### 10.4 版本历史
| 版本号 | 更新日期 | 更新内容 |
|-------|--------|--------|
| 1.0.0 | 2025-12-18 | MIMO系统初始版本 |
| 0.9.0 | 2023-01-15 | 原型版本 |
\ No newline at end of file
\ No newline at end of file
UI/UI.csproj
查看文件 @
3e6eede
...
@@ -320,10 +320,6 @@
...
@@ -320,10 +320,6 @@
</BootstrapperPackage>
</BootstrapperPackage>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Core\Core.csproj">
<Project>{bb23296c-aa1d-45c6-9fa6-5a37b2abfe9b}</Project>
<Name>Core</Name>
</ProjectReference>
<ProjectReference Include="..\Infrastructure\Common\Common.csproj">
<ProjectReference Include="..\Infrastructure\Common\Common.csproj">
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Project>{43cdd09e-fcf3-4960-a01d-3bbfe9933122}</Project>
<Name>Common</Name>
<Name>Common</Name>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论