feat: WeldingCommon에 ScannerACS 독립 구현 및 Scanner 등록
- WeldingCommon/Devices/ACS/ 에 ScannerACS 3개 파일 추가 (ScannerACS.cs / ScannerACS.Parameter.cs / MotionVariable.cs) - Gun 프로젝트 참조 제거, ScannerACS로 독립 분리 - WeldingCommon에 AuroraACS / AuroraMotor / ACS.SPiiPlusNET 참조 추가 - Scanner EquipmentSetup.RegisterDevices()에 ScannerACS 및 모터 등록 - EquipDef.cs에 MotorIds 추가 - AuroraEx.IsAutoActivation Device 네임스페이스 충돌 수정 - CommonEquipmentSetup.ActivateDevices() Aurora.Api.Device 타입 명시 TODO: 이정인 선임 ACS 변수 맵 수신 후 축 번호 및 변수명 검증 필요
This commit is contained in:
parent
5e49155952
commit
fc8c2186d4
@ -9,7 +9,28 @@ namespace ILSOS_PrismaticScanner
|
||||
internal class DeviceIds : CommonDeviceIds
|
||||
{
|
||||
public const string MassFlowMeter = "MassFlowMeter";
|
||||
|
||||
// 26.04.06
|
||||
public const string ACS = "ACS";
|
||||
}
|
||||
// 추가 26.04.06
|
||||
internal class MotorIds
|
||||
{
|
||||
public const string AxisX2 = "AxisX2";
|
||||
public const string AxisY1 = "AxisY1";
|
||||
public const string AxisY2 = "AxisY2";
|
||||
public const string AxisZ = "AxisZ";
|
||||
|
||||
// TODO: 이정인 선임 ACS 변수 맵 수신 후 실제 번호 검증
|
||||
public enum eMotorIdx
|
||||
{
|
||||
AxisX2 = 1,
|
||||
AxisY1 = 3,
|
||||
AxisY2 = 4,
|
||||
AxisZ = 5,
|
||||
}
|
||||
}
|
||||
|
||||
internal class SequenceIds : CommonSequenceIds
|
||||
{
|
||||
public const string SeqStreamTest = "SeqStreamTest";
|
||||
|
||||
@ -39,6 +39,7 @@ using System.Windows.Controls;
|
||||
using System.Windows.Threading;
|
||||
using WeldingCommon;
|
||||
using WeldingCommon.Alarm;
|
||||
using WeldingCommon.Devices.ACS;
|
||||
using WeldingCommon.Recipes;
|
||||
using WeldingCommon.Sequences;
|
||||
using WeldingCommon.Settings;
|
||||
@ -49,6 +50,12 @@ using WeldingCommon.Views.Recipes.History;
|
||||
using WeldingCommon.Vision.Factory;
|
||||
using static WeldingCommon.Vision.Factory.VisionFactory;
|
||||
|
||||
// 26.04.06
|
||||
using AuroraACS;
|
||||
using AuroraACS.Views;
|
||||
using AuroraMotor;
|
||||
|
||||
|
||||
namespace ILSOS_PrismaticScanner
|
||||
{
|
||||
internal class EquipmentSetup : CommonEquipmentSetup, IEquipmentSetup
|
||||
@ -153,6 +160,33 @@ namespace ILSOS_PrismaticScanner
|
||||
|
||||
AlarmManager.Init(AuroraEnv);
|
||||
|
||||
#region Common에 있는 Device를 등록한다. 26.04.06
|
||||
// ↓ ACS 등록 추가
|
||||
var ACS = new ScannerACS(isSimul);
|
||||
registry.Register(DeviceIds.ACS, () => ACS, new ACSDeviceConfig());
|
||||
|
||||
// TODO: 축 번호는 이정인 선임 변수 맵 수신 후 검증
|
||||
var motorX2 = new ACSMotor(MotorIds.AxisX2, ACS, 1, (int)MotorIds.eMotorIdx.AxisX2);
|
||||
registry.Register(MotorIds.AxisX2, () => motorX2,
|
||||
new ACSMotorConfig(MotorIds.AxisX2),
|
||||
motor => new UCACSMotor(AuroraEnv.DeviceManager, motor.DeviceId));
|
||||
|
||||
var motorY1 = new ACSMotor(MotorIds.AxisY1, ACS, 3, (int)MotorIds.eMotorIdx.AxisY1);
|
||||
registry.Register(MotorIds.AxisY1, () => motorY1,
|
||||
new ACSMotorConfig(MotorIds.AxisY1),
|
||||
motor => new UCACSMotor(AuroraEnv.DeviceManager, motor.DeviceId));
|
||||
|
||||
var motorY2 = new ACSMotor(MotorIds.AxisY2, ACS, 4, (int)MotorIds.eMotorIdx.AxisY2);
|
||||
registry.Register(MotorIds.AxisY2, () => motorY2,
|
||||
new ACSMotorConfig(MotorIds.AxisY2),
|
||||
motor => new UCACSMotor(AuroraEnv.DeviceManager, motor.DeviceId));
|
||||
|
||||
var motorZ = new ACSMotor(MotorIds.AxisZ, ACS, 5, (int)MotorIds.eMotorIdx.AxisZ);
|
||||
registry.Register(MotorIds.AxisZ, () => motorZ,
|
||||
new ACSMotorConfig(MotorIds.AxisZ),
|
||||
motor => new UCACSMotor(AuroraEnv.DeviceManager, motor.DeviceId));
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
public override void RegisterRecipes(RecipeRegister register)
|
||||
|
||||
@ -161,6 +161,10 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraACS\AuroraACS.csproj">
|
||||
<Project>{6eea4c41-a833-41b8-a9d2-512f45e6beca}</Project>
|
||||
<Name>AuroraACS</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraCellTracker\AuroraCellTracker.csproj">
|
||||
<Project>{c376d692-d3a2-44ea-bd2d-dedde648d587}</Project>
|
||||
<Name>AuroraCellTracker</Name>
|
||||
@ -189,6 +193,10 @@
|
||||
<Project>{858130f6-44a8-4b73-bd6e-0ed1aef4c0f4}</Project>
|
||||
<Name>AuroraLight</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraMotor\AuroraMotor.csproj">
|
||||
<Project>{49a61fb7-ec36-4035-b7bc-63ab983590b4}</Project>
|
||||
<Name>AuroraMotor</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraOCT\AuroraOCT.csproj">
|
||||
<Project>{21b083eb-97d6-49b3-acc4-c94c0fbfc999}</Project>
|
||||
<Name>AuroraOCT</Name>
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
|
||||
using Aurora;
|
||||
using Aurora.Api;
|
||||
// 추가 - Aurora.Api.Device 명시
|
||||
using AuroraDevice = Aurora.Api.Device;
|
||||
using Aurora.Api.Manager;
|
||||
|
||||
using Aurora.View;
|
||||
@ -28,6 +30,8 @@ using WeldingCommon.Views;
|
||||
using WeldingCommon.Views.DoorInterlock;
|
||||
using WeldingCommon.Vision.Factory;
|
||||
|
||||
|
||||
|
||||
namespace WeldingCommon
|
||||
{
|
||||
public abstract class CommonEquipmentSetup
|
||||
@ -137,7 +141,7 @@ namespace WeldingCommon
|
||||
await System.Threading.Tasks.Task.Run(() => {
|
||||
try {
|
||||
var devices = AuroraEnv.DeviceManager.GetDevices();
|
||||
foreach (var device in devices) {
|
||||
foreach (Aurora.Api.Device device in devices) {
|
||||
if (device.IsAutoActivation()) {
|
||||
if (device.Activate() != E1.OK) {
|
||||
Log.E($"{device.DeviceId} connect fail.");
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
using Aurora.View;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WeldingCommon.Device.ACS
|
||||
{
|
||||
public class MotionVariable : NotifyPropertyChangedBase
|
||||
{
|
||||
public MotionVariable() { }
|
||||
//private eStage Stage { get; set; }
|
||||
//public double X1AxisPosition { get; set; } = 0.0;
|
||||
//public bool X1InPosition { get; set; } = false;
|
||||
//public double X1AxisVelocity { get; set; } = 0.0;
|
||||
//public double X1AxisAcceleration { get; set; } = 0.0;
|
||||
|
||||
public double X2AxisPosition { get; set; } = 0.0;
|
||||
public bool X2InPosition { get; set; } = false;
|
||||
public double X2AxisVelocity { get; set; } = 0.0;
|
||||
public double X2AxisAcceleration { get; set; } = 0.0;
|
||||
|
||||
public double Y1AxisPosition { get; set; } = 0.0;
|
||||
public bool Y1InPosition { get; set; } = false;
|
||||
public double Y1AxisVelocity { get; set; } = 0.0;
|
||||
public double Y1AxisAcceleration { get; set; } = 0.0;
|
||||
|
||||
public double Y2AxisPosition { get; set; } = 0.0;
|
||||
public bool Y2InPosition { get; set; } = false;
|
||||
public double Y2AxisVelocity { get; set; } = 0.0;
|
||||
public double Y2AxisAcceleration { get; set; } = 0.0;
|
||||
|
||||
public double ZAxisPosition { get; set; } = 0.0;
|
||||
public bool ZInPosition { get; set; } = false;
|
||||
public double ZAxisVelocity { get; set; } = 0.0;
|
||||
public double ZAxisAcceleration { get; set; } = 0.0;
|
||||
|
||||
public bool IsHome { get; set; } = false;
|
||||
|
||||
public bool IsLoadPosition { get; set; } = false;
|
||||
public bool IsUnloadPosition { get; set; } = false;
|
||||
public bool IsSafetyPosition { get; set; } = false;
|
||||
public bool IsWeldingStartPosition { get; set; } = false;
|
||||
|
||||
public bool IsLoadEnable { get; set; } = false;
|
||||
public bool IsUnloadEnable { get; set; } = false;
|
||||
|
||||
}
|
||||
|
||||
//public class MotionVariableCollection : ObservableCollection<MotionVariable>
|
||||
//{
|
||||
// public MotionVariableCollection()
|
||||
// {
|
||||
// }
|
||||
// public MotionVariableCollection(IEnumerable<MotionVariable> collection) : base(collection)
|
||||
// {
|
||||
// }
|
||||
// public MotionVariableCollection(List<MotionVariable> list) : base(list)
|
||||
// {
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
// WeldingCommon/Devices/ACS/ScannerACS.Parameter.cs
|
||||
namespace WeldingCommon.Devices.ACS
|
||||
{
|
||||
public partial class ScannerACS
|
||||
{
|
||||
// ── 알람 ──────────────────────────────────────────
|
||||
const string AlarmReset = "iAlarmreset";
|
||||
const string HeavyAlarm = "iAlarm";
|
||||
const string LightAlarm = "iLightAlarm";
|
||||
const string AlarmCodes = "iPCAlarmNo";
|
||||
|
||||
// ── 홈 ───────────────────────────────────────────
|
||||
const string iAllAxisHomeComplete = "iPCget_ALLAXIS_HOMECOMP";
|
||||
|
||||
// ── MOTF (Mark On The Fly) ────────────────────────
|
||||
// TODO: 이정인 선임 ACS 변수 맵 수신 후 실제 변수명으로 교체
|
||||
const string iMOTFStart = "iPCset_SCANNER_MOTF_START"; // placeholder
|
||||
const string iMOTFComplete = "iPCget_SCANNER_MOTF_COMP"; // placeholder
|
||||
const string rMOTFVelocity = "rPCset_SCANNER_MOTF_VEL"; // placeholder
|
||||
const string rMOTFAcc = "rPCset_SCANNER_MOTF_ACC"; // placeholder
|
||||
|
||||
// ── 레이저 ───────────────────────────────────────
|
||||
const string IsLaserOn = "LCI_DEVICE.LaserEnabled";
|
||||
const string iLaserUse = "iPCset_LASER_USE";
|
||||
|
||||
// ── 축 번호 ──────────────────────────────────────
|
||||
const string iXAxisNumber = "iPCget_LCI_ASMASK_X";
|
||||
|
||||
// ── 버퍼 ─────────────────────────────────────────
|
||||
private enum eBuffer
|
||||
{
|
||||
All_Axis_Home = 0,
|
||||
|
||||
// TODO: Scanner MOTF 버퍼 번호 확인 후 수정
|
||||
MOTF_Start = 11,
|
||||
}
|
||||
}
|
||||
}
|
||||
185
WeldingComponents/WeldingCommon/Devices/ACS/PrismaticGunACS.cs
Normal file
185
WeldingComponents/WeldingCommon/Devices/ACS/PrismaticGunACS.cs
Normal file
@ -0,0 +1,185 @@
|
||||
// WeldingCommon/Devices/ACS/ScannerACS.cs
|
||||
using Aurora;
|
||||
using Aurora.Api;
|
||||
using Aurora.Api.Devices;
|
||||
using Aurora.Util.HislogPlus;
|
||||
using AuroraACS;
|
||||
using ACS.SPiiPlusNET;
|
||||
using Hermes;
|
||||
using System.Windows;
|
||||
using WeldingCommon.Device.ACS;
|
||||
using WeldingCommon.Settings;
|
||||
|
||||
namespace WeldingCommon.Devices.ACS
|
||||
{
|
||||
public interface IScannerACS
|
||||
{
|
||||
bool IsActivated();
|
||||
|
||||
// 홈
|
||||
bool AllAxisHomeStart();
|
||||
bool AllAxisHomeStop();
|
||||
bool CheckAllAxisHome();
|
||||
|
||||
// MOTF
|
||||
bool MOTFStart();
|
||||
bool MOTFStop();
|
||||
bool CheckMOTFComp();
|
||||
|
||||
// 레이저
|
||||
bool SetLaserIOUse(bool on);
|
||||
bool IsLaserOn();
|
||||
|
||||
// 알람
|
||||
bool ResetAlarm();
|
||||
void AllAxisServoOff();
|
||||
}
|
||||
|
||||
public partial class ScannerACS : ACSDevice, IScannerACS
|
||||
{
|
||||
// TODO: Scanner용 Setting ID 확정 후 교체
|
||||
private ACSDeviceSetting _setting;
|
||||
private ACSMotor MotorStageX; // AxisX2 = Scanner Stage X
|
||||
|
||||
public MotionVariable _motorVariable;
|
||||
|
||||
public bool HasHeavyAlarm { get; private set; }
|
||||
public bool HasLightAlarm { get; private set; }
|
||||
public int[] HaveAlarmCodes { get => _HaveAlarmCodes; }
|
||||
private int[] _HaveAlarmCodes = new int[11];
|
||||
|
||||
public ScannerACS(bool isSimulation, bool useTerminateUMD = false)
|
||||
: base(isSimulation, useTerminateUMD)
|
||||
{
|
||||
_motorVariable = new MotionVariable();
|
||||
}
|
||||
|
||||
protected override int DoActivate(IDeviceConfig config)
|
||||
{
|
||||
if (base.DoActivate(config) != E1.OK)
|
||||
return E2.ABORTED;
|
||||
|
||||
var env = Application.Current.AuroraEnv();
|
||||
|
||||
// TODO: Scanner용 SettingIds 확정 후 교체
|
||||
// _setting = env.SettingEntry[ScannerSettingIds.ACS] as ACSDeviceSetting;
|
||||
|
||||
// Stage X 모터 취득 (null-safe)
|
||||
// TODO: 이정인 선임 변수 맵 수신 후 축 번호 검증
|
||||
try { MotorStageX = env.DeviceManager[CommonDeviceIds.AxisX2] as ACSMotor; }
|
||||
catch { MotorStageX = null; }
|
||||
|
||||
SetMonitoringService(UpdateACSParam, 50);
|
||||
StartMonitoringService();
|
||||
|
||||
return E1.OK;
|
||||
}
|
||||
|
||||
private void UpdateACSParam()
|
||||
{
|
||||
// Stage X 상태 갱신
|
||||
if (MotorStageX != null)
|
||||
{
|
||||
_motorVariable.X2AxisPosition = MotorStageX.GetActualPos();
|
||||
_motorVariable.X2InPosition = MotorStageX.IsInpos();
|
||||
_motorVariable.X2AxisVelocity = MotorStageX.GetFeedbackVelocity();
|
||||
_motorVariable.X2AxisAcceleration = MotorStageX.GetAcceleration();
|
||||
_motorVariable.IsHome = MotorStageX.GetServoStatus() == 1;
|
||||
}
|
||||
|
||||
// 알람 상태 갱신
|
||||
HasHeavyAlarm = ReadVariableInt(HeavyAlarm) == 1;
|
||||
HasLightAlarm = ReadVariableInt(LightAlarm) == 1;
|
||||
ReadVariableIntArrRef(AlarmCodes, ref _HaveAlarmCodes,
|
||||
ProgramBuffer.ACSC_NONE, 0, 10);
|
||||
}
|
||||
|
||||
protected override int DoDeactivate()
|
||||
{
|
||||
StopMonitoringService();
|
||||
return base.DoDeactivate();
|
||||
}
|
||||
|
||||
// ── 홈 ───────────────────────────────────────────
|
||||
bool IScannerACS.AllAxisHomeStart()
|
||||
{
|
||||
if (RunBuffer((ProgramBuffer)eBuffer.All_Axis_Home))
|
||||
{
|
||||
Log.D("AllAxisHomeStart >> Complete");
|
||||
return true;
|
||||
}
|
||||
Log.D("AllAxisHomeStart >> Fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IScannerACS.AllAxisHomeStop()
|
||||
{
|
||||
StopBuffer((ProgramBuffer)eBuffer.All_Axis_Home);
|
||||
Log.D("AllAxisHomeStop >> Complete");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IScannerACS.CheckAllAxisHome()
|
||||
=> ReadVariableInt(iAllAxisHomeComplete) > 0;
|
||||
|
||||
// ── MOTF ─────────────────────────────────────────
|
||||
// TODO: 이정인 선임 변수 맵 수신 후 버퍼 번호 및 변수명 교체
|
||||
bool IScannerACS.MOTFStart()
|
||||
{
|
||||
if (IsSimul) return true;
|
||||
if (RunBuffer((ProgramBuffer)eBuffer.MOTF_Start))
|
||||
{
|
||||
Log.I("MOTFStart >> Complete");
|
||||
return true;
|
||||
}
|
||||
Log.D("MOTFStart >> Fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IScannerACS.MOTFStop()
|
||||
{
|
||||
StopBuffer((ProgramBuffer)eBuffer.MOTF_Start);
|
||||
Log.D("MOTFStop >> Complete");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IScannerACS.CheckMOTFComp()
|
||||
{
|
||||
if (IsSimul) return true;
|
||||
return ReadVariableInt(iMOTFComplete) > 0;
|
||||
}
|
||||
|
||||
// ── 레이저 ───────────────────────────────────────
|
||||
bool IScannerACS.SetLaserIOUse(bool on)
|
||||
{
|
||||
if (WriteRealVariable(iLaserUse, on ? 1 : 0))
|
||||
{
|
||||
Log.D($"SetLaserIOUse {on} >> Complete");
|
||||
return true;
|
||||
}
|
||||
Log.D("SetLaserIOUse >> Fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IScannerACS.IsLaserOn()
|
||||
{
|
||||
if (!IsActivated || !IsConnected) return false;
|
||||
return ReadVariableInt(IsLaserOn) > 0;
|
||||
}
|
||||
|
||||
// ── 알람 ─────────────────────────────────────────
|
||||
bool IScannerACS.ResetAlarm()
|
||||
{
|
||||
TerminalCommand("FCLEAR ALL");
|
||||
return WriteVariableInt(AlarmReset, 1);
|
||||
}
|
||||
|
||||
void IScannerACS.AllAxisServoOff()
|
||||
{
|
||||
if (!IsActivated || !IsConnected) return;
|
||||
SetMotorDisableAll();
|
||||
}
|
||||
|
||||
bool IScannerACS.IsActivated() => IsActivated;
|
||||
}
|
||||
}
|
||||
@ -122,6 +122,10 @@
|
||||
public const string CAS = "CAS";
|
||||
public const string AJIN = "AJIN";
|
||||
public const string AJINStageMotorZ = "AJINStageMotorZ";
|
||||
|
||||
#region
|
||||
public const string AxisX2 = "AxisX2"; // 26.04.06 추가
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class CommonEventIds
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
using Aurora;
|
||||
using Aurora.Api;
|
||||
// AuroraEx.cs 상단에
|
||||
using AuroraDevice = Aurora.Api.Device;
|
||||
using Aurora.Api.Manager;
|
||||
using AuroraMassFlowMeter;
|
||||
using AuroraOCT.Trumpf;
|
||||
@ -17,7 +19,7 @@ namespace WeldingCommon.Utils
|
||||
{
|
||||
public static class AuroraEx
|
||||
{
|
||||
public static bool IsAutoActivation(this Device dev)
|
||||
public static bool IsAutoActivation(this AuroraDevice dev)
|
||||
{
|
||||
var Config = Application.Current.AuroraEnv().DeviceManager.GetDeviceConfig(dev.DeviceId);
|
||||
|
||||
|
||||
@ -54,6 +54,10 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ACS.SPiiPlusNET, Version=3.13.1.20165, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\AuroraDevices\AuroraACS\External\ACS.SPiiPlusNET.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Aurora">
|
||||
<HintPath>..\..\External\Aurora\bin\Aurora.exe</HintPath>
|
||||
</Reference>
|
||||
@ -205,6 +209,9 @@
|
||||
<Compile Include="Data\UpdateManualRunResult.cs" />
|
||||
<Compile Include="Data\PLCReportData.cs" />
|
||||
<Compile Include="Data\WeldingData.cs" />
|
||||
<Compile Include="Devices\ACS\MotionVariable.cs" />
|
||||
<Compile Include="Devices\ACS\PrismaticGunACS.cs" />
|
||||
<Compile Include="Devices\ACS\PrismaticGunACS.Parameter.cs" />
|
||||
<Compile Include="Devices\PLC\PLCController.Address.cs" />
|
||||
<Compile Include="Devices\PLC\PLCController.Config.cs" />
|
||||
<Compile Include="Devices\PLC\PLCController.Logic.cs" />
|
||||
@ -457,6 +464,10 @@
|
||||
<Project>{97f61029-c403-4d16-b34a-53b5b78f2b74}</Project>
|
||||
<Name>AuroraUIComponent</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraACS\AuroraACS.csproj">
|
||||
<Project>{6eea4c41-a833-41b8-a9d2-512f45e6beca}</Project>
|
||||
<Name>AuroraACS</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraCAS\AuroraCAS.csproj">
|
||||
<Project>{546e6043-3162-468c-aacd-1c4eaa1bb494}</Project>
|
||||
<Name>AuroraCAS</Name>
|
||||
@ -505,6 +516,10 @@
|
||||
<Project>{007ba11c-c28e-4cfb-88c5-001988f0be8f}</Project>
|
||||
<Name>AuroraMotionBoard</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraMotor\AuroraMotor.csproj">
|
||||
<Project>{49a61fb7-ec36-4035-b7bc-63ab983590b4}</Project>
|
||||
<Name>AuroraMotor</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\AuroraDevices\AuroraMXComponent\AuroraMXComponent.csproj">
|
||||
<Project>{ffd404db-7fe2-447f-b469-56c61d863201}</Project>
|
||||
<Name>AuroraMXComponent</Name>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user