添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
106
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/csharp-base.instructions.md
vendored
Normal file
106
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/csharp-base.instructions.md
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
applyTo: "**/*.cs"
|
||||
---
|
||||
|
||||
# C# Base Instructions
|
||||
|
||||
## Language Version Constraint
|
||||
This repository targets .NET Framework 4.8 and C# 7.3.
|
||||
|
||||
Do not use:
|
||||
- record
|
||||
- init property setters
|
||||
- switch expressions
|
||||
- using declarations
|
||||
- top-level statements
|
||||
- nullable reference types
|
||||
- range operators (`..`)
|
||||
- default interface implementations
|
||||
- IAsyncEnumerable<T>
|
||||
|
||||
Allowed:
|
||||
- async/await
|
||||
- pattern matching with is / switch case patterns
|
||||
- tuples
|
||||
- local functions
|
||||
- inline out variable declarations
|
||||
- throw expressions
|
||||
- ref locals and ref returns
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿĿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ .NET Framework 4.8<EFBFBD><EFBFBD>C# <20>汾<EFBFBD>̶<EFBFBD>Ϊ 7.3<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>
|
||||
- <20><>ֹʹ<D6B9><CAB9> record<72><64>init<69><74>switch <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>using <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> C# 8+ <20><><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> async/await<69><74>Ԫ<EFBFBD>顢<EFBFBD><E9A1A2><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>ģʽƥ<CABD>䡢<EFBFBD><E4A1A2><EFBFBD><EFBFBD> out <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> C# 7.3 ֧<>ֵĹ<D6B5><C4B9><EFBFBD>
|
||||
|
||||
## Style Rules
|
||||
- Use explicit types, not `var`
|
||||
- Use Allman braces
|
||||
- Use 4 spaces indentation
|
||||
- Use CRLF line endings
|
||||
- Use block-scoped namespaces
|
||||
- Place using directives outside namespaces
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>ʽ<EFBFBD><CABD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ʹ<EFBFBD><CAB9> `var`
|
||||
- ʹ<><CAB9> Allman <20><><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>
|
||||
- 4 <20>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
- ʹ<><CAB9> CRLF <20><><EFBFBD><EFBFBD>
|
||||
- ʹ<>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
||||
- using <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>
|
||||
|
||||
## Naming Rules
|
||||
- Public types, methods, properties, events: PascalCase
|
||||
- Private fields: _camelCase
|
||||
- Constants: PascalCase
|
||||
- Interfaces: I + PascalCase
|
||||
- Enums: PascalCase
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>淶<EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1>¼<EFBFBD><C2BC><EFBFBD>PascalCase
|
||||
- ˽<><CBBD><EFBFBD>ֶΣ<D6B6>`_camelCase`
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PascalCase
|
||||
- <20>ӿڣ<D3BF>`I` + PascalCase
|
||||
- ö<>٣<EFBFBD>PascalCase
|
||||
|
||||
## Constructor Injection
|
||||
Prefer constructor injection with null checks.
|
||||
|
||||
Example:
|
||||
```csharp
|
||||
public SafeAxisMotion(HardwareManager hardware, AlarmOperate alarmOperate)
|
||||
{
|
||||
_hardware = hardware ?? throw new ArgumentNullException(nameof(hardware));
|
||||
_alarmOperate = alarmOperate ?? throw new ArgumentNullException(nameof(alarmOperate));
|
||||
}
|
||||
```
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ù<EFBFBD><EFBFBD>캯<EFBFBD><EFBFBD>ע<EFBFBD>룬<EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> null <20><><EFBFBD>顣
|
||||
<EFBFBD><EFBFBD>Ҫʡ<EFBFBD><EFBFBD> null <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Async Rules
|
||||
Async methods must use Async suffix
|
||||
Pass CancellationToken where appropriate
|
||||
Do not block async code with .Result or .Wait() unless existing architecture requires it and the reason is explicit
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>첽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Async <20><>
|
||||
- <20><>Ҫ֧<D2AA><D6A7>ȡ<EFBFBD><C8A1><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>봫 CancellationToken
|
||||
- <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> .Result <20><> .Wait() <20><><EFBFBD><EFBFBD><EFBFBD>첽<EFBFBD><ECB2BD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>мܹ<D0BC><DCB9><EFBFBD>ȷҪ<C8B7><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Code Generation Preference
|
||||
Keep methods focused and readable
|
||||
Prefer explicit domain terminology over generic names
|
||||
Avoid unnecessary abstractions
|
||||
Match the existing repository style
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ְ<EFBFBD><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>ⲻ<EFBFBD><E2B2BB>Ҫ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>вֿ<D0B2><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
68
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/hardware-io.instructions.md
vendored
Normal file
68
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/hardware-io.instructions.md
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
applyTo: "MainShell/Hardware/**/*.cs,MainShell/DeviceMaintance/**/*.cs,MainShell/Manual/**/*.cs,MainShell/ToolBox/**/*.cs"
|
||||
---
|
||||
|
||||
# Hardware and IO Instructions
|
||||
|
||||
## Hardware Access Rules
|
||||
- Reuse HardwareManager as the primary hardware entry point
|
||||
- Do not invent parallel hardware access layers unless explicitly requested
|
||||
- Keep hardware naming and organization consistent with existing project patterns
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- ͳһͨ<D2BB><CDA8> `HardwareManager` <20><>Ϊ<EFBFBD><CEAA>ҪӲ<D2AA><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>Ҫƽ<D2AA><C6BD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>һ<EFBFBD><D2BB>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>ʲ<EFBFBD>
|
||||
- Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֯<EFBFBD><D6AF>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀһ<C4BF><D2BB>
|
||||
|
||||
## Axis Naming Rules
|
||||
All axis names should be defined as constants in the existing axis naming class.
|
||||
|
||||
Naming pattern:
|
||||
- Axis_ prefix
|
||||
- Examples:
|
||||
- Axis_SZ
|
||||
- Axis_PHS_X1
|
||||
- Axis_WS_X3
|
||||
- Axis_Stage_Y3
|
||||
|
||||
If a new axis is introduced, define a constant in the existing axis name holder.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD>ͳһʹ<D2BB><CAB9> `Axis_` ǰ
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᣬ<EFBFBD><E1A3AC><EFBFBD>벹<EFBFBD>䳣<EFBFBD><E4B3A3><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><E5A3AC>Ҫ<EFBFBD><D2AA>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## IO Rules
|
||||
- IO point definitions are loaded from CSV configuration
|
||||
- Reuse DeviceIoPointDefinition and existing IO grouping structures
|
||||
- Preserve support for simulated IO states if relevant
|
||||
- Keep IO service/model/event naming device-oriented
|
||||
|
||||
Use:
|
||||
- DeviceIoMonitorService
|
||||
- DeviceIoSnapshot
|
||||
- DeviceCylinderService
|
||||
|
||||
Avoid logistics-specific names unless the domain explicitly requires them:
|
||||
- ConveyorIoService
|
||||
- LoaderIoMonitor
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
IO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- IO <20>㶨<EFBFBD><E3B6A8>ͨ<EFBFBD><CDA8> CSV <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `DeviceIoPointDefinition` <20><> IO <20><><EFBFBD><EFBFBD><EFBFBD>ṹ
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> IO ״̬<D7B4><CCAC><EFBFBD>ƣ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>
|
||||
- IO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ҫ
|
||||
|
||||
## Safety Preference
|
||||
- Validate device state before critical actions
|
||||
- Do not assume hardware is ready
|
||||
- Keep generated code conservative and traceable
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD>ȫԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20>ؼ<EFBFBD><D8BC>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>У<EFBFBD><D0A3><EFBFBD>豸״̬
|
||||
- <20><>ҪĬ<D2AA><C4AC>Ӳ<EFBFBD><D3B2><EFBFBD>Ѿ<EFBFBD> ready
|
||||
- <20><><EFBFBD>ɴ<EFBFBD><C9B4><EFBFBD>ʱҪƫ<D2AA><C6AB><EFBFBD>ء<EFBFBD><D8A1><EFBFBD><EFBFBD><D7B7>
|
||||
161
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/localization-popup.instructions.md
vendored
Normal file
161
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/localization-popup.instructions.md
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
applyTo: "MainShell/Common/**/*.cs,**/*ViewModel.cs,**/*Service.cs,**/*Process*.cs"
|
||||
---
|
||||
|
||||
# Localization and Popup Instructions
|
||||
|
||||
## Scope
|
||||
These rules apply to internal program message dialogs only.
|
||||
|
||||
Do not apply these rules to:
|
||||
- database alarms
|
||||
- PLC alarm chain
|
||||
- device alarm chain
|
||||
- AlarmAsync main alarm path
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>**<2A><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>**<2A><>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
|
||||
- <20><><EFBFBD>ݿⱨ<DDBF><E2B1A8>
|
||||
- PLC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
|
||||
- <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
|
||||
- `AlarmAsync()` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
|
||||
|
||||
## Required Popup Pattern
|
||||
For internal prompts:
|
||||
1. define MessageKey enum value in `MainShell/Common/MessageKey.cs`
|
||||
2. add mapping in `LanguageResourceHelper.ResourceKeyMap`
|
||||
3. add Chinese resource in `MainShell/Language/MXJM_CN.xaml`
|
||||
4. add English resource in `MainShell/Language/MXJM_EN.xaml`
|
||||
5. call `LocalizedMessageBox.Show()` or `LocalizedMessageBox.ShowFormat()`
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>
|
||||
1. <20><> `MessageKey.cs` <20>ж<EFBFBD><D0B6><EFBFBD>ö<EFBFBD><C3B6>
|
||||
2. <20><> `LanguageResourceHelper.ResourceKeyMap` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>
|
||||
3. <20><> `MXJM_CN.xaml` <20>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
||||
4. <20><> `MXJM_EN.xaml` <20>в<EFBFBD>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD>Դ
|
||||
5. ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD> `LocalizedMessageBox.Show()` <20><> `ShowFormat()`
|
||||
|
||||
## Required Title Keys
|
||||
Use:
|
||||
- MessageKey.TitleInfo
|
||||
- MessageKey.TitleWarning
|
||||
- MessageKey.TitleError
|
||||
- MessageKey.TitleConfirm
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһʹ<EFBFBD>ã<EFBFBD>
|
||||
- `MessageKey.TitleInfo`
|
||||
- `MessageKey.TitleWarning`
|
||||
- `MessageKey.TitleError`
|
||||
- `MessageKey.TitleConfirm`
|
||||
|
||||
## Formatting Rules
|
||||
- For parameterized messages, use `ShowFormat()`
|
||||
- Resource text should use placeholders such as `{0}`, `{1}`
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> `ShowFormat()`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ı<EFBFBD>ʹ<EFBFBD><EFBFBD> `{0}`<EFBFBD><EFBFBD>`{1}` ռλ<D5BC><CEBB><EFBFBD><EFBFBD>
|
||||
|
||||
## Forbidden Patterns
|
||||
Do not generate:
|
||||
- `MwMessageBox.Show("<22><><EFBFBD><EFBFBD>")`
|
||||
- `MessageBox.Show("<22><><EFBFBD><EFBFBD>")`
|
||||
- `LocalizedMessageBox.Show("resourceKeyString")`
|
||||
- direct resource dictionary access for popup text
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- `MwMessageBox.Show("<22><><EFBFBD><EFBFBD>")`
|
||||
- `MessageBox.Show("<22><><EFBFBD><EFBFBD>")`
|
||||
- `LocalizedMessageBox.Show("<22><>Դkey<65>ַ<EFBFBD><D6B7><EFBFBD>")`
|
||||
- ֱ<>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>
|
||||
|
||||
## Migration Rule
|
||||
When modifying old internal prompt code, prefer migrating old MessageBox/MwMessageBox usage to LocalizedMessageBox and update:
|
||||
- MessageKey enum
|
||||
- ResourceKeyMap
|
||||
- Chinese resource
|
||||
- English resource
|
||||
- business code call site
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
Ǩ<EFBFBD>ƾɴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>еij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ȸ<EFBFBD>Ϊ `LocalizedMessageBox` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>룺
|
||||
- MessageKey ö<><C3B6>
|
||||
- ResourceKeyMap ӳ<><D3B3>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
||||
- Ӣ<><D3A2><EFBFBD><EFBFBD>Դ
|
||||
- ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
|
||||
|
||||
## Workflow / Process Error and Message Localization
|
||||
Error messages, status messages, and user-facing messages generated in:
|
||||
- Service layer (Service/*Service.cs)
|
||||
- Activity layer (MainShell/Process/Activity/*.cs)
|
||||
- ProcessService implementations
|
||||
|
||||
Must follow the same localization requirements as popup dialogs:
|
||||
1. Define MessageKey enum values for all error/status messages
|
||||
2. Register in LanguageResourceHelper.ResourceKeyMap
|
||||
3. Add translations in MXJM_CN.xaml and MXJM_EN.xaml
|
||||
4. Pass MessageKey enum (not raw strings) in WorkflowContext or result objects
|
||||
5. Display messages using LocalizedMessageBox from ViewModel/View layer
|
||||
|
||||
Do not hardcode error messages or status strings in Service/Activity code.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>
|
||||
- Service <20>㣨Service/*Service.cs<63><73>
|
||||
- Activity <20>㣨MainShell/Process/Activity/*.cs<63><73>
|
||||
- ProcessService ʵ<><CAB5>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD>뵯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ı<EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD>淶<EFBFBD><EFBFBD>
|
||||
1. <20><> MessageKey <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>/״̬<D7B4><CCAC>Ϣ<EFBFBD><CFA2>ö<EFBFBD><C3B6>ֵ
|
||||
2. <20><> LanguageResourceHelper.ResourceKeyMap <20><>ע<EFBFBD><D7A2>
|
||||
3. <20><> MXJM_CN.xaml <20><> MXJM_EN.xaml <20><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
|
||||
4. <20><> WorkflowContext <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD> MessageKey ö<><C3B6>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
5. <20><> ViewModel/View <20><>ʹ<EFBFBD><CAB9> LocalizedMessageBox <20><>ʾ<EFBFBD><CABE>Ϣ
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Service/Activity <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>״̬<D7B4>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Example: Adding Workflow Error Message
|
||||
For a new workflow error in a Service:
|
||||
|
||||
1. Define in `MessageKey.cs`:
|
||||
```csharp
|
||||
ProcessError_InvalidToolId,
|
||||
ProcessError_HardwareTimeout,
|
||||
```
|
||||
|
||||
2. Add to `LanguageResourceHelper.ResourceKeyMap`:
|
||||
```csharp
|
||||
{ MessageKey.ProcessError_InvalidToolId,
|
||||
"MXJM:ProcessError_InvalidToolId" },
|
||||
{ MessageKey.ProcessError_HardwareTimeout,
|
||||
"MXJM:ProcessError_HardwareTimeout" },
|
||||
```
|
||||
|
||||
3. In result object, return the message key:
|
||||
```csharp
|
||||
public MessageKey? ErrorMessageKey { get; set; }
|
||||
```
|
||||
|
||||
4. In Activity's AfterExecute or ViewModel, check and display:
|
||||
```csharp
|
||||
if (result.ErrorMessageKey.HasValue)
|
||||
{
|
||||
LocalizedMessageBox.Show(result.ErrorMessageKey.Value,
|
||||
MessageKey.TitleError);
|
||||
}
|
||||
```
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
1. <20><> `MessageKey.cs` <20>ж<EFBFBD><D0B6>壺
|
||||
ProcessError_InvalidToolId
|
||||
ProcessError_HardwareTimeout
|
||||
|
||||
2. <20><> `LanguageResourceHelper.ResourceKeyMap` <20><>ע<EFBFBD><D7A2>
|
||||
3. <20><> Service <20><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD> MessageKey
|
||||
4. <20><> Activity AfterExecute <20><> ViewModel <20>м<EFBFBD><D0BC>鲢ʹ<E9B2A2><CAB9> LocalizedMessageBox <20><>ʾ
|
||||
104
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/motion.instructions.md
vendored
Normal file
104
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/motion.instructions.md
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
applyTo: "MainShell/Motion/**/*.cs,**/*MotionController*.cs,**/*SafeAxisMotion*.cs,**/*AxisSpeedManager*.cs"
|
||||
---
|
||||
|
||||
# Motion Control Instructions
|
||||
|
||||
## Motion Architecture
|
||||
Motion control uses layered design:
|
||||
|
||||
- SafeAxisMotion as business entry
|
||||
- MotionController as single-axis controller
|
||||
- IAxis / IAxisFunc as platform abstraction
|
||||
|
||||
Keep this layering intact.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD>ù̶<EFBFBD><EFBFBD>ֲ㣺
|
||||
- `SafeAxisMotion`<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- `MotionController`<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- `IAxis / IAxisFunc`<EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD>Ҫ<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>зֲ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
|
||||
|
||||
## MotionController Rules
|
||||
- Constructor should receive `IAxis`
|
||||
- Convert to `IAxisFunc` when motion command capability is needed
|
||||
- Use `SemaphoreSlim` to serialize motion commands per axis
|
||||
- Motion methods should support async/await and CancellationToken
|
||||
- Perform status validation before motion:
|
||||
- servo/power status
|
||||
- alarm status
|
||||
- soft limit state
|
||||
- Support timeout handling
|
||||
- Raise motion lifecycle events such as MotionStarted / MotionFinished
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
`MotionController` <20><><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `IAxis`
|
||||
- <20><>Ҫ<EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱת<CAB1><D7AA>Ϊ `IAxisFunc`
|
||||
- ʹ<><CAB9> `SemaphoreSlim` <20><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB4AE>
|
||||
- <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> `async/await` <20><> `CancellationToken`
|
||||
- <20>˶<EFBFBD>ǰҪ<C7B0><D2AA><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ״̬
|
||||
- ֧<>ֳ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>ṩ `MotionStarted` / `MotionFinished` <20>¼<EFBFBD>
|
||||
|
||||
## Common Axis Properties
|
||||
Prefer existing property patterns such as:
|
||||
- AxisName
|
||||
- CurrentPos
|
||||
- IsBusy
|
||||
- IsAlarm
|
||||
- InPos
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽһ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺
|
||||
- `AxisName`
|
||||
- `CurrentPos`
|
||||
- `IsBusy`
|
||||
- `IsAlarm`
|
||||
- `InPos`
|
||||
|
||||
## Motion Method Signatures
|
||||
Keep compatibility with existing motion API patterns:
|
||||
- MoveAbsAsync
|
||||
- MoveRelAsync
|
||||
- JogAsync
|
||||
- StopAsync
|
||||
- HomeAsync
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
- `MoveAbsAsync`
|
||||
- `MoveRelAsync`
|
||||
- `JogAsync`
|
||||
- `StopAsync`
|
||||
- `HomeAsync`
|
||||
|
||||
## SafeAxisMotion Rules
|
||||
- Prefer SafeAxisMotion for batch-safe movement
|
||||
- Resolve axis name to IAxis and MotionController through existing repository mechanisms
|
||||
- Preserve alarm integration and timeout behavior
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> `SafeAxisMotion` ʵ<>֣<EFBFBD>
|
||||
- ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ `IAxis` <20><> `MotionController`
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺͳ<C9BA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## MotionResult Rules
|
||||
- Use structured MotionResult
|
||||
- Distinguish success, timeout, cancellation, and fault
|
||||
- Use EnsureSuccess when caller expects exception-on-failure semantics
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
`MotionResult` ӦΪ<D3A6>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>ֳɹ<D6B3><C9B9><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
- <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>Ҫ"ʧ<>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD>쳣"ʱ<><CAB1>ʹ<EFBFBD><CAB9> `EnsureSuccess()`
|
||||
|
||||
## Speed Management
|
||||
Use AxisSpeedManager for speed control where applicable.
|
||||
Do not hardcode inconsistent speed logic if a unified speed manager already exists.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>ٶȹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD> `AxisSpeedManager` ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD>ٶȹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
92
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/recipe-and-logging.instructions.md
vendored
Normal file
92
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/recipe-and-logging.instructions.md
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
---
|
||||
applyTo: "MainShell/Recipe/**/*.cs,MainShell/Parameter/**/*.cs,MainShell/Log/**/*.cs,MainShell/Filewritable/**/*.cs,MainShell/Process/**/*.cs"
|
||||
---
|
||||
|
||||
# Recipe, Persistence, and Logging Instructions
|
||||
|
||||
## Recipe System
|
||||
Recipe hierarchy includes:
|
||||
- IRecipe
|
||||
- RecipeBase
|
||||
- SubstrateRecipe
|
||||
- WaferRecipe
|
||||
- CarrierRecipe
|
||||
- ProcessRecipe
|
||||
|
||||
Use existing recipe abstractions and managers:
|
||||
- RecipeManager
|
||||
- RecipeWrapManager
|
||||
|
||||
Do not bypass repository recipe patterns by creating incompatible configuration systems.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>䷽ϵͳ<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>в㼶<EFBFBD><EFBFBD>
|
||||
- `IRecipe`
|
||||
- `RecipeBase`
|
||||
- `SubstrateRecipe`
|
||||
- `WaferRecipe`
|
||||
- `CarrierRecipe`
|
||||
- `ProcessRecipe`
|
||||
|
||||
Ӧ<EFBFBD><EFBFBD><EFBFBD>ȸ<EFBFBD><EFBFBD>ã<EFBFBD>
|
||||
- `RecipeManager`
|
||||
- `RecipeWrapManager`
|
||||
|
||||
<EFBFBD><EFBFBD>Ҫ<EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>һ<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD>
|
||||
|
||||
## Parameter and Process Input Rules
|
||||
- Prefer reading process inputs from recipe objects and formal managers
|
||||
- Do not pull process parameters from UI state when repository recipe/domain objects already exist
|
||||
- Keep process input sources explicit and traceable
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD>ȴ<EFBFBD><C8B4>䷽<EFBFBD><E4B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> UI ״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD>̲<EFBFBD><CCB2><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴҪ<D4B4><D2AA>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><D7B7>
|
||||
|
||||
## File Persistence Rules
|
||||
Persistence follows:
|
||||
- IFileWritable
|
||||
- FileWriteBase
|
||||
- JsonFileWritableBase
|
||||
|
||||
Use:
|
||||
- FileWriteQueue for async queued file writes
|
||||
- Newtonsoft.Json for JSON serialization
|
||||
|
||||
Reuse IgnorePropertiesResolver when selective serialization is needed.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>ļ<EFBFBD><EFBFBD>־û<EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>мܹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
- `IFileWritable`
|
||||
- `FileWriteBase`
|
||||
- `JsonFileWritableBase`
|
||||
|
||||
Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
|
||||
- `FileWriteQueue` <20><><EFBFBD><EFBFBD><EFBFBD>첽д<ECB2BD><D0B4><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
|
||||
- `Newtonsoft.Json` <20><><EFBFBD><EFBFBD> JSON <20><><EFBFBD>л<EFBFBD>
|
||||
- <20><>Ҫѡ<D2AA><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> `IgnorePropertiesResolver`
|
||||
|
||||
## Logging Rules
|
||||
- Use `LogNameDefine` for log names
|
||||
- Use `LogManager` for unified log management
|
||||
- Keep logs consistent with existing MaxWellGeneralLog usage
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB> `LogNameDefine` <20>ж<EFBFBD><D0B6><EFBFBD>
|
||||
- ͨ<><CDA8> `LogManager` ͳһ<CDB3><D2BB><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `MaxWellGeneralLog` <20>÷<EFBFBD>һ<EFBFBD><D2BB>
|
||||
|
||||
## Logging Expectations
|
||||
Generated code should:
|
||||
- log major workflow and hardware steps
|
||||
- log failures with enough context
|
||||
- preserve traceability for production and troubleshooting
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־Ӧ<EFBFBD><EFBFBD><EFBFBD>㣺
|
||||
- <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
||||
- ʧ<><CAA7><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>㹻<EFBFBD><E3B9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
105
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/workflow.instructions.md
vendored
Normal file
105
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/workflow.instructions.md
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
applyTo: "MainShell/Process/**/*.cs,**/*Activity.cs,**/*Workflow*.cs,**/*ProcessService.cs,**/*MotionService.cs"
|
||||
---
|
||||
|
||||
# Workflow Instructions
|
||||
|
||||
## Workflow Architecture
|
||||
This repository uses:
|
||||
- WorkflowRunner
|
||||
- AutoProductionWorkflowBuilder
|
||||
- ActivityAbstractBase
|
||||
- CompositeActivity
|
||||
- WorkflowStepIds
|
||||
- WorkflowStepIdResolver
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Workflow <20>ܹ<EFBFBD>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>ɴ<EFBFBD><C9B4><EFBFBD>ʱӦ<CAB1><D3A6><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB>ơ<EFBFBD>
|
||||
|
||||
## Layering Rules
|
||||
- Activity layer only:
|
||||
- calls Service / MotionService / ProcessService
|
||||
- writes WorkflowContext
|
||||
- returns execution result
|
||||
- PrepareExecute and AfterExecute only handle pre/post processing
|
||||
- Core workflow logic must be implemented in Service layer
|
||||
- Do not place recipe parsing, compensation logic, vision logic, or hardware orchestration in Activity
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- Activity <20><>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Service<63><65>д WorkflowContext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
||||
- `PrepareExecute` <20><> `AfterExecute` ֻ<><D6BB>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Service <20><>
|
||||
- <20><>Ҫ<EFBFBD><D2AA> Activity <20><>д<EFBFBD>䷽<EFBFBD><E4B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Routing Rules
|
||||
- Do not place workflow jump logic in Activity
|
||||
- Actual workflow transitions must be configured by WorkflowStep
|
||||
- Normal business branches should use Route / SetRoute
|
||||
- Failure should only be used for real failures:
|
||||
- hardware error
|
||||
- timeout
|
||||
- communication failure
|
||||
- invalid required input
|
||||
- unrecoverable process error
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>Ҫ<EFBFBD><D2AA> Activity <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תͳһ<CDB3><D2BB> WorkflowStep <20><><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> `Route / SetRoute`
|
||||
- `Failure` ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͨѶʧ<D1B6>ܡ<EFBFBD><DCA1>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>ȱʧ<C8B1><CAA7><EFBFBD><EFBFBD><EFBFBD>ɻָ<C9BB><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## JumpConditions Rules
|
||||
- JumpConditions are matched in add order
|
||||
- More specific branches must be placed first
|
||||
- Default flow must be placed last
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
`JumpConditions` ƥ<><C6A5>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>ִ<EFBFBD>У<EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
||||
- Ĭ<>Ϸ<EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Service Responsibilities
|
||||
Service layer should be responsible for:
|
||||
- reading WorkflowContext
|
||||
- reading RecipeManager and current recipe
|
||||
- reading teach data and process parameters
|
||||
- acquiring hardware via HardwareManager
|
||||
- validating inputs
|
||||
- validating hardware state
|
||||
- validating safety conditions
|
||||
- executing workflow core steps
|
||||
- computing business result or compensation result
|
||||
- determining Route
|
||||
- returning structured process result
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
Service <20><>ְ<EFBFBD><D6B0><EFBFBD><EFBFBD>
|
||||
- <20><>ȡ `WorkflowContext`
|
||||
- <20><>ȡ `RecipeManager` <20>͵<EFBFBD>ǰ<EFBFBD>䷽
|
||||
- <20><>ȡʾ<C8A1><CABE><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA><CDB9>ղ<EFBFBD><D5B2><EFBFBD>
|
||||
- ͨ<><CDA8> `HardwareManager` <20><>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- У<><D0A3><EFBFBD><EFBFBD><EFBFBD>롢Ӳ<EBA1A2><D3B2>״̬<D7B4>Ͱ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
||||
- ִ<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B2B9B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD> `Route`
|
||||
- <20><><EFBFBD>ؽṹ<D8BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## Output Preference
|
||||
When implementing workflow code, prefer:
|
||||
1. Activity skeleton
|
||||
2. Service skeleton
|
||||
3. result object design
|
||||
4. WorkflowContext write-back fields
|
||||
5. WorkflowStep routing suggestion
|
||||
6. JumpConditions ordering suggestion
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
1. Activity <20>Ǽ<EFBFBD>
|
||||
2. Service <20>Ǽ<EFBFBD>
|
||||
3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
4. WorkflowContext <20><>д<EFBFBD>ֶ<EFBFBD>
|
||||
5. WorkflowStep ·<>ɽ<EFBFBD><C9BD><EFBFBD>
|
||||
6. JumpConditions ˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
72
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/wpf-mvvm.instructions.md
vendored
Normal file
72
MX-PD-盘古 - new/PanGu.DieBonderApp/.github/instructions/wpf-mvvm.instructions.md
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
applyTo: "**/*ViewModel.cs,**/*.xaml,MainShell/Converter/**/*.cs,MainShell/Home/**/*.cs,MainShell/ParaSetting/**/*.cs,MainShell/DeviceMaintance/**/*.cs,MainShell/PageCalib/**/*.cs,MainShell/Manual/**/*.cs"
|
||||
---
|
||||
|
||||
# WPF and MVVM Instructions
|
||||
|
||||
## Framework
|
||||
This repository uses WPF with Stylet.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ WPF <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> Stylet<65><74>MVVM <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ Stylet <20><>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>
|
||||
|
||||
## ViewModel Rules
|
||||
- ViewModel classes should inherit from `Screen` or `PropertyChangedBase`
|
||||
- Follow Stylet naming convention:
|
||||
- XxxView ? XxxViewModel
|
||||
- Do not introduce patterns that conflict with Stylet conventions
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
ViewModel <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- ViewModel <20>̳<EFBFBD> `Screen` <20><> `PropertyChangedBase`
|
||||
- View <20><> ViewModel <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Stylet <20><>ͻ<EFBFBD><CDBB> MVVM ģʽ
|
||||
|
||||
## State Management
|
||||
- Prefer bindable state objects to hold UI state
|
||||
- Do not scatter many unrelated primitive bindable properties if a cohesive state model is more suitable
|
||||
- Distinguish device input state and output state clearly
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飺
|
||||
- <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ÿɰ<C3BF><C9B0><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD>״̬
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬<D7B4><EFBFBD>Ҫ<EFBFBD><D2AA>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ViewModel <20><>
|
||||
- <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬Ҫ<CCAC><D2AA>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
|
||||
|
||||
## IoC Rules
|
||||
- IoC registrations belong in `StartBootstrapper.ConfigureIoC()`
|
||||
- Singleton services should use `[Singleton]` or be registered as singleton in IoC
|
||||
- New services must be registered consistently with existing project patterns
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
IoC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- IoC ע<><D7A2>ͳһ<CDB3><D2BB> `StartBootstrapper.ConfigureIoC()` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8> `[Singleton]` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
||||
- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
## XAML Rules
|
||||
- Do not manually implement `InitializeComponent`
|
||||
- Do not work around WPF compilation issues by writing manual code-behind loaders
|
||||
- Fix page compilation through project file and proper WPF item setup
|
||||
- Value converters should be placed in `Converter/` and named `XxxConverter`
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
XAML <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- <20><>Ҫ<EFBFBD><D2AA>д `InitializeComponent`
|
||||
- <20><>Ҫͨ<D2AA><CDA8> code-behind <20>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- ҳ<><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͨ<D3A6><CDA8> csproj <20><> WPF <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
- ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `Converter/` <20>£<EFBFBD><C2A3><EFBFBD>ʹ<EFBFBD><CAB9> `XxxConverter` <20><><EFBFBD><EFBFBD>
|
||||
|
||||
## Language Resource Rules
|
||||
Project language resources are loaded from:
|
||||
- `Language/MaxwellFramework_{lang}.xaml`
|
||||
- `Language/MXJM_{lang}.xaml`
|
||||
|
||||
Keep generated UI code compatible with the existing localization mechanism.
|
||||
|
||||
## <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>ƣ<EFBFBD>
|
||||
- ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD><D4B0><EFBFBD>`MaxwellFramework_{lang}.xaml`
|
||||
- <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><D4B0><EFBFBD>`MXJM_{lang}.xaml`
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ơ<EFBFBD>
|
||||
Reference in New Issue
Block a user