choieigun 5523b1f79c 잔건 관련 업데이트
1. 중복 보고
 - 보고가 완료된 사항을 체크하는 플래그를 통해 방지
2. 최초 셀 데이터 누락
 - Cell Tracker에서 마지막 데이터를 누적하고 있음
   정지 시점에서 이미 CellTracker는 데이터를 가지고 있어야 함
2026-02-23 19:10:15 +09:00

151 lines
4.5 KiB
C#

using Aurora.Api;
using AuroraCellTracker.DaekhonCoporation;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AuroraDeviceCommon.Utils;
using Hermes;
using System.Windows;
namespace AuroraCellTracker
{
public enum eCellTrackerType
{
Daekhon,
}
public enum eMode
{
Queue,
Callback
}
public class CellTracker : Device
{
Logger _Logger = new Logger("CellTracker");
public ICellTracker _CellTracker;
public CellTrackerConfig _CellTrackerConfig { get; set; }
private ICellTracker[] _MultiCellTrackerObj = new ICellTracker[4];
public ICellTracker[] MultiCellTrackerObj {
get { return _MultiCellTrackerObj; }
set { _MultiCellTrackerObj = value; }
}
public CellTracker(string deviceId, eCellTrackerType cellTrackerType)
{
DeviceId = deviceId;
CommType = CommunicationType.Etc;
Type = DeviceType.Etc;
// 주의: 생성자에서 config 값을 가져오기 번거로우니 아래와 같이 처리
// 생성자에서는 시스템 세팅의 Simul 정보만 사용 (시리얼포트의 IsSimul 까지 처리됨)
// 상위단(여기)에서 DoActivate 시, simul flag 를 최종 결정
// 방침: 시뮬은 상위단에서 처리하는 구조 (내부 _PowerMeter 사용안함 (= 시리얼포트 사용안함))
switch (cellTrackerType) {
case eCellTrackerType.Daekhon:
_CellTracker = new CellTrackerDaekhon();
break;
default:
_Logger.E("Error: CellTracker Type is not available.");
return;
}
_CellTracker.SetCellInfo(string.Empty, string.Empty);
}
protected override int DoActivate(IDeviceConfig config)
{
_CellTrackerConfig = config as CellTrackerConfig;
if (IsSimul) {
return E1.OK;
}
// 예외처리 필요, 연결안됬을때 에러코드 받고 이런게 없는듯..
if (string.IsNullOrEmpty(_CellTrackerConfig.CellTrackerDllDirectory)) {
_Logger.E(string.Format("Dll Directory is Empty"));
return E1.ARGUMENT;
}
Application.Current.Dispatcher.InvokeAsync(() => {
_CellTracker.Initialize(_CellTrackerConfig.CellTrackerMode, _CellTrackerConfig.CellTrackerDllDirectory);
_CellTracker.SetIdComponent(_CellTrackerConfig.CellIdStartNo, _CellTrackerConfig.CellIdLength, _CellTrackerConfig.LotIdStartNo, _CellTrackerConfig.LotIdLength);
});
return E1.OK;
}
protected override int DoDeactivate()
{
if (!IsSimul) {
Application.Current.Dispatcher.InvokeAsync(() => {
_CellTracker?.Close();
});
}
return E1.OK;
}
private void Initialize(IDeviceConfig config)
{
if (_CellTracker == null) {
return;
}
_CellTrackerConfig = config as CellTrackerConfig;
if (IsSimul) {
return;
}
// 예외처리 필요, 연결안됬을때 에러코드 받고 이런게 없는듯..
if (string.IsNullOrEmpty(_CellTrackerConfig.CellTrackerDllDirectory)) {
_Logger.E(string.Format("Dll Directory is Empty"));
return;
}
_CellTracker.Initialize(_CellTrackerConfig.CellTrackerMode, _CellTrackerConfig.CellTrackerDllDirectory);
}
public CellInfoStr GetCellInfoStrings()
{
if (!IsActivated) {
return null;
}
return _CellTracker.GetCellInfoStrings();
}
public void ReceiveData()
{
if (!IsActivated) {
return;
}
_CellTracker.ReceiveData();
}
public void SendEcsData(string strCellID, string strPath, string strData)
{
if (!IsActivated) {
return;
}
_CellTracker.SendEcsData(strCellID, strPath, strData);
}
public void SetIPConfig()
{
if (!IsActivated) {
return;
}
_CellTracker.SetIPConfig();
}
}
}