2026-06-05 13:44:39 +09:00

841 lines
39 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.View;
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;
using static AuroraTriggerBoard.Trigger;
namespace AuroraTriggerBoard.SJTV3
{
public class UCTriggerBoardV3ViewModel : NotifyPropertyChangedBase
{
Aurora.Api.Logger Log = new Aurora.Api.Logger("Trigger Board");
public ICommand CMD_ViewLoaded { get; }
public ICommand CMD_ViewUnloaded { get; }
public ICommand CMD_GetEncoderEnable { get; }
public ICommand CMD_SetEncoderEnable { get; private set; }
public ICommand CMD_GetRunMode { get; }
public ICommand CMD_SetRunMode { get; private set; }
public ICommand CMD_GetEncoderDir { get; }
public ICommand CMD_SetEncoderDir { get; private set; }
public ICommand CMD_GetInputPolarity { get; }
public ICommand CMD_SetInputPolarity { get; private set; }
public ICommand CMD_GetTriggerPolarity { get; }
public ICommand CMD_SetTriggerPolarity { get; private set; }
public ICommand CMD_GetStrobePolarity { get; }
public ICommand CMD_SetStrobePolarity { get; private set; }
public ICommand CMD_GetTriggerStartDelay { get; }
public ICommand CMD_SetTriggerStartDelay { get; private set; }
public ICommand CMD_GetTriggerWidth { get; }
public ICommand CMD_SetTriggerWidth { get; private set; }
public ICommand CMD_GetTriggerCount { get; }
public ICommand CMD_SetTriggerCount { get; private set; }
public ICommand CMD_GetTriggerPulse { get; }
public ICommand CMD_SetTriggerPulse { get; private set; }
public ICommand CMD_GetStrobeStartDelay { get; }
public ICommand CMD_SetStrobeStartDelay { get; private set; }
public ICommand CMD_GetStrobeWidth { get; }
public ICommand CMD_SetStrobeWidth { get; private set; }
public ICommand CMD_GetEndTrig { get; }
public ICommand CMD_TriggerStop { get; private set; }
public ICommand CMD_TriggerStart { get; private set; }
public ICommand CMD_SetStrobe { get; private set; }
public ICommand CMD_GetEncoderCnt { get; private set; }
public ICommand CMD_ResetEncoderCount { get; private set; }
public ICommand CMD_SetEncoderCount { get; private set; }
public ICommand CMD_ResetSystem { get; private set; }
public ICommand CMD_ResetTrigger { get; private set; }
public ICommand CMD_DebugMessageClear { get; private set; }
private readonly DispatcherTimer MonitorTimer;
internal AuroraTriggerBoard.Trigger _Trigger;
public bool IsFirst = false;
public UCTriggerBoardV3ViewModel(Device device)
{
_Trigger = device as AuroraTriggerBoard.Trigger;
CMD_ViewLoaded = new DelegateCommand(Loaded);
CMD_ViewUnloaded = new DelegateCommand(Unloaded);
//CMD_CheckTeachingMode = new DelegateCommand(PerformCMD_CheckTeachingMode);
//CMD_Setting = new DelegateCommand(PerformCMD_Setting);
CMD_TriggerStop = new DelegateCommand(PerformCMD_TriggerStop);
CMD_TriggerStart = new DelegateCommand(PerformCMD_TriggerStart);
CMD_SetStrobe = new DelegateCommand(PerformCMD_SetStrobe);
CMD_GetEncoderCnt = new DelegateCommand(PerformCMD_GetEncoderCnt);
CMD_ResetEncoderCount = new DelegateCommand(PerformCMD_ResetEncoderCount);
CMD_SetEncoderCount = new DelegateCommand(PerformCMD_SetEncoderCount);
CMD_ResetSystem = new DelegateCommand(PerformCMD_ResetSystem);
CMD_GetEncoderEnable = new DelegateCommand(PerformCMD_GetEncoderEnable);
CMD_SetEncoderEnable = new DelegateCommand(PerformCMD_SetEncoderEnable);
CMD_GetRunMode = new DelegateCommand(PerformCMD_GetRunMode);
CMD_SetRunMode = new DelegateCommand(PerformCMD_SetRunMode);
CMD_GetEncoderDir = new DelegateCommand(PerformCMD_GetEncoderDir);
CMD_SetEncoderDir = new DelegateCommand(PerformCMD_SetEncoderDir);
CMD_GetInputPolarity = new DelegateCommand(PerformCMD_GetInputPolarity);
CMD_SetInputPolarity = new DelegateCommand(PerformCMD_SetInputPolarity);
CMD_GetTriggerPolarity = new DelegateCommand(PerformCMD_GetTriggerPolarity);
CMD_SetTriggerPolarity = new DelegateCommand(PerformCMD_SetTriggerPolarity);
CMD_GetStrobePolarity = new DelegateCommand(PerformCMD_GetStrobePolarity);
CMD_SetStrobePolarity = new DelegateCommand(PerformCMD_SetStrobePolarity);
CMD_GetTriggerStartDelay = new DelegateCommand(PerformCMD_GetTriggerStartDelay);
CMD_SetTriggerStartDelay = new DelegateCommand(PerformCMD_SetTriggerStartDelay);
CMD_GetTriggerWidth = new DelegateCommand(PerformCMD_GetTriggerWidth);
CMD_SetTriggerWidth = new DelegateCommand(PerformCMD_SetTriggerWidth);
CMD_GetTriggerCount = new DelegateCommand(PerformCMD_GetTriggerCount);
CMD_SetTriggerCount = new DelegateCommand(PerformCMD_SetTriggerCount);
CMD_GetTriggerPulse = new DelegateCommand(PerformCMD_GetTriggerPulse);
CMD_SetTriggerPulse = new DelegateCommand(PerformCMD_SetTriggerPulse);
CMD_GetStrobeStartDelay = new DelegateCommand(PerformCMD_GetStrobeStartDelay);
CMD_SetStrobeStartDelay = new DelegateCommand(PerformCMD_SetStrobeStartDelay);
CMD_GetStrobeWidth = new DelegateCommand(PerformCMD_GetStrobeWidth);
CMD_SetStrobeWidth = new DelegateCommand(PerformCMD_SetStrobeWidth);
CMD_GetEndTrig = new DelegateCommand(PerformCMD_GetEndTrig);
CMD_ResetTrigger = new DelegateCommand(PerformCMD_ResetTrigger);
CMD_DebugMessageClear = new DelegateCommand(PerformCMD_DebugMessageClear);
MonitorTimer = new DispatcherTimer();
MonitorTimer.Tick += OnMonitoring;
MonitorTimer.Interval = TimeSpan.FromMilliseconds(1000);
IsFirst = true;
//EncoderEnableStatus = _Trigger._Config.EncEnable == true ? 1 : 0;
//TrigRunModeStatus = _Trigger._Config.RunMode;
//EncoderDirectionIndex = _Trigger._Config.EncDir == EncoderDirection.Forward ? 0 : 1;
//InputPolarityStatus = _Trigger._Config.Inputpol == true ? 0 : 1;
//TrigPolarityStatus = _Trigger._Config.Triggerpol == true ? 0 : 1;
//StrobePolarityStatus = _Trigger._Config.Strobepol == true ? 0 : 1;
//TrigStartDelayStatus = _Trigger._Config.triggercnt.ToString();
//TrigWidthStatus = _Trigger._Config.triggerwidth.ToString();
//TrigPulseStatus = _Trigger._Config.triggerpulse.ToString();
//StrobeStartDelayStatus = _Trigger._Config.triggercnt.ToString();
//StrobeWidthStatus = _Trigger._Config.triggerwidth.ToString();
var config = Application.Current.AuroraEnv().DeviceManager.GetDeviceConfig(device.DeviceId) as TriggerV3Config;
//var InsSetting = Application.Current.AuroraEnv().SettingEntry[SettingIds.Inspection] as InspectionSetting;
EncoderEnableStatus = config.EncEnable == true ? 1 : 0;
EncoderDirectionIndex = config.EncDir == EncoderDirection.Forward ? 0 : 1;
TrigRunModeStatus = config.RunMode;
InputPolarityStatus = config.Inputpol == true ? 1 : 0;
TrigPolarityStatus = config.Triggerpol == true ? 1 : 0;
StrobePolarityStatus = config.Strobepol == true ? 1 : 0;
TrigStartDelayStatus = config.StartDelay.ToString();
TrigWidthStatus = config.triggerwidth.ToString();
TriggerCountStatus = config.triggercnt.ToString();
TrigPulseStatus = config.triggerpulse.ToString();
StrobeStartDelayStatus = config.StrobeStartDelay.ToString();
StrobeWidthStatus = config.StrobeWidth.ToString();
//AuroraEnv.DeviceManager.SaveDeviceConfig(DeviceIds.TriggerBoardFDI);
}
private string hW_Ver;
public string HW_Ver { get => hW_Ver; set => SetProperty(ref hW_Ver, value); }
private string sW_Ver;
public string SW_Ver { get => sW_Ver; set => SetProperty(ref sW_Ver, value); }
private string dLL_Ver;
public string DLL_Ver { get => dLL_Ver; set => SetProperty(ref dLL_Ver, value); }
private void Unloaded(object obj)
{
//MonitorTimer.Stop();
}
private void Loaded(object obj)
{
//MonitorTimer.Start();
}
private void CheckVersionAndInitialize()
{
//_Trigger.ValueInit();
//string hw_ver, sw_ver, dll_ver;
//_Trigger.GetHWVersion(out hw_ver, out sw_ver);
//_Trigger.GetDllVersion(out dll_ver);
//HW_Ver = hw_ver;
//SW_Ver = sw_ver;
//DLL_Ver = dll_ver;
Timer_Set = 10000;
CheckedChannel1 = false;
CheckedChannel2 = false;
CheckedChannel3 = false;
CheckedChannel4 = false;
CheckedChannel5 = false;
CheckedChannel6 = false;
CheckedChannel7 = false;
CheckedChannel8 = false;
TableSettingIndex = 0;
EncoderInputByIndex = 0;
EncoderDirectionIndex = 0;
GeneratorModeIndex = 2;
ChOutputModeIndex = 0;
EncoderEnableStatus = 0;
TrigRunModeStatus = 0;
EncoderDirStatus = 0;
InputPolarityStatus = 0;
TrigPolarityStatus = 0;
StrobePolarityStatus = 0;
}
private void OnMonitoring(object sender, EventArgs e)
{
if (_Trigger.IsActivated) {
if (IsFirst == true) {
IsFirst = false;
CheckVersionAndInitialize();
}
}
}
private int encoderInputByIndex;
public int EncoderInputByIndex { get => encoderInputByIndex; set => SetProperty(ref encoderInputByIndex, value); }
private int tableSettingIndex;
public int TableSettingIndex { get => tableSettingIndex; set => SetProperty(ref tableSettingIndex, value); }
private int encoderDirectionIndex;
public int EncoderDirectionIndex { get => encoderDirectionIndex; set => SetProperty(ref encoderDirectionIndex, value); }
private int generatorModeIndex;
public int GeneratorModeIndex { get => generatorModeIndex; set => SetProperty(ref generatorModeIndex, value); }
private int chOutputModeIndex;
public int ChOutputModeIndex { get => chOutputModeIndex; set => SetProperty(ref chOutputModeIndex, value); }
private int encoderEnableSts;
public int EncoderEnableStatus { get => encoderEnableSts; set => SetProperty(ref encoderEnableSts, value); }
private int trigRunModeSts;
public int TrigRunModeStatus { get => trigRunModeSts; set => SetProperty(ref trigRunModeSts, value); }
private int encoderDirSts;
public int EncoderDirStatus { get => encoderDirSts; set => SetProperty(ref encoderDirSts, value); }
private int inputPolaritySts;
public int InputPolarityStatus { get => inputPolaritySts; set => SetProperty(ref inputPolaritySts, value); }
private int trigPolaritySts;
public int TrigPolarityStatus { get => trigPolaritySts; set => SetProperty(ref trigPolaritySts, value); }
private int strobePolaritySts;
public int StrobePolarityStatus { get => strobePolaritySts; set => SetProperty(ref strobePolaritySts, value); }
private string trigStartDelaySts;
public string TrigStartDelayStatus { get => trigStartDelaySts; set => SetProperty(ref trigStartDelaySts, value); }
private string trigWidthSts;
public string TrigWidthStatus { get => trigWidthSts; set => SetProperty(ref trigWidthSts, value); }
private string trigCountSts;
public string TriggerCountStatus { get => trigCountSts; set => SetProperty(ref trigCountSts, value); }
private string trigPulseSts;
public string TrigPulseStatus { get => trigPulseSts; set => SetProperty(ref trigPulseSts, value); }
private string strobeStartDelaySts;
public string StrobeStartDelayStatus { get => strobeStartDelaySts; set => SetProperty(ref strobeStartDelaySts, value); }
private string strobeWidthSts;
public string StrobeWidthStatus { get => strobeWidthSts; set => SetProperty(ref strobeWidthSts, value); }
private string endTrigSts;
public string EndTrigStatus { get => endTrigSts; set => SetProperty(ref endTrigSts, value); }
private void PerformCMD_GetEncoderEnable(object obj)
{
byte encoderEnable=0;
ushort ret = _Trigger.GetEncEnable(ref encoderEnable);
EncoderEnableStatus = encoderEnable;
DebugMessageString = String.Format("PerformCMD_GetEncoderEnable Ret : {0:x} {1:d}", ret, encoderEnable);
}
private void PerformCMD_SetEncoderEnable(object obj)
{
ushort ret = _Trigger.SetEncEnable(Convert.ToByte(EncoderEnableStatus));
DebugMessageString = String.Format("PerformCMD_SetEncoderEnable Ret : {0:x}", ret);
}
private void PerformCMD_GetRunMode(object obj)
{
byte runMode = 0;
ushort ret = _Trigger.GetRunMode(ref runMode);
TrigRunModeStatus = runMode;
DebugMessageString = String.Format("PerformCMD_GetRunMode Ret : {0:x} {1:d}", ret, runMode);
}
private void PerformCMD_SetRunMode(object obj)
{
ushort ret = _Trigger.SetRunMode(Convert.ToByte(TrigRunModeStatus));
DebugMessageString = String.Format("PerformCMD_SetRunMode Ret : {0:x}", ret);
}
private void PerformCMD_GetEncoderDir(object obj)
{
AuroraTriggerBoard.Trigger.EncoderDirection EncoderDir = 0;
ushort ret = _Trigger.GetEncoderDirection(out EncoderDir);
EncoderDirectionIndex = (int)EncoderDir;
DebugMessageString = String.Format("PerformCMD_GetEncoderDir Ret : {0:x} {1:d}", ret, EncoderDir);
}
private void PerformCMD_SetEncoderDir(object obj)
{
ushort ret = _Trigger.SetEncoderDirection((AuroraTriggerBoard.Trigger.EncoderDirection)EncoderDirectionIndex);
DebugMessageString = String.Format("PerformCMD_SetEncoderDir Ret : {0:x}", ret);
}
private void PerformCMD_GetInputPolarity(object obj)
{
byte inPolarity = 0;
ushort ret = _Trigger.GetInputPol(ref inPolarity);
InputPolarityStatus = (int)inPolarity;
DebugMessageString = String.Format("PerformCMD_GetInputPolarity Ret : {0:x} {1:d}", ret, inPolarity);
}
private void PerformCMD_SetInputPolarity(object obj)
{
ushort ret = _Trigger.SetInputPol(Convert.ToByte(InputPolarityStatus));
DebugMessageString = String.Format("PerformCMD_SetInputPolarity Ret : {0:x}", ret);
}
private void PerformCMD_GetTriggerPolarity(object obj)
{
byte trigPolarity = 0;
ushort ret = _Trigger.GetTriggerPol(ref trigPolarity);
TrigPolarityStatus = (int)trigPolarity;
DebugMessageString = String.Format("PerformCMD_GetTriggerPolarity Ret : {0:x} {1:d}", ret, trigPolarity);
}
private void PerformCMD_SetTriggerPolarity(object obj)
{
ushort ret = _Trigger.SetTriggerPol(Convert.ToByte(TrigPolarityStatus));
DebugMessageString = String.Format("PerformCMD_SetTriggerPolarity Ret : {0:x}", ret);
}
private void PerformCMD_GetStrobePolarity(object obj)
{
byte strobePolarity = 0;
ushort ret = _Trigger.GetStrobePol(ref strobePolarity);
StrobePolarityStatus = (int)strobePolarity;
DebugMessageString = String.Format("PerformCMD_GetStrobePolarity Ret : {0:x} {1:d}", ret, strobePolarity);
}
private void PerformCMD_SetStrobePolarity(object obj)
{
ushort ret = _Trigger.SetStrobePol(Convert.ToByte(StrobePolarityStatus));
DebugMessageString = String.Format("PerformCMD_SetStrobePolarity Ret : {0:x}", ret);
}
private void PerformCMD_GetTriggerStartDelay(object obj)
{
uint startDelay = 0;
ushort ret = _Trigger.GetTriggerStartdelay(ref startDelay);
TrigStartDelayStatus = startDelay.ToString();
DebugMessageString = String.Format("PerformCMD_GetTriggerStartDelay Ret : {0:x} {1:d}", ret, startDelay);
}
private void PerformCMD_SetTriggerStartDelay(object obj)
{
ushort ret = _Trigger.SetTriggerStartdelay(Convert.ToUInt32(TrigStartDelayStatus));
DebugMessageString = String.Format("PerformCMD_SetTriggerStartDelay Ret : {0:x}", ret);
}
private void PerformCMD_GetTriggerWidth(object obj)
{
uint width = 0;
ushort ret = _Trigger.GetTriggerWidth(ref width);
TrigWidthStatus = width.ToString();
DebugMessageString = String.Format("PerformCMD_GetTriggerWidth Ret : {0:x} {1:d}", ret, width);
}
private void PerformCMD_SetTriggerWidth(object obj)
{
ushort ret = _Trigger.SetTriggerWidth(Convert.ToUInt32(TrigWidthStatus));
DebugMessageString = String.Format("PerformCMD_SetTriggerWidth Ret : {0:x}", ret);
}
private void PerformCMD_GetTriggerCount(object obj)
{
uint trigCount = 0;
ushort ret = _Trigger.GetTriggerCnt(ref trigCount);
TriggerCountStatus = trigCount.ToString();
DebugMessageString = String.Format("PerformCMD_GetTriggerCount Ret : {0:x} {1:d}", ret, trigCount);
}
private void PerformCMD_SetTriggerCount(object obj)
{
ushort ret = _Trigger.SetTriggerCnt(Convert.ToUInt32(TriggerCountStatus));
DebugMessageString = String.Format("PerformCMD_SetTriggerCount Ret : {0:x}", ret);
}
private void PerformCMD_GetTriggerPulse(object obj)
{
uint trigPulse = 0;
ushort ret = _Trigger.GetTrigPulse(ref trigPulse);
TrigPulseStatus = trigPulse.ToString();
DebugMessageString = String.Format("PerformCMD_GetTriggerPulse Ret : {0:x} {1:d}", ret, trigPulse);
}
private void PerformCMD_SetTriggerPulse(object obj)
{
ushort ret = _Trigger.SetTrigPulse(Convert.ToUInt32(TrigPulseStatus));
DebugMessageString = String.Format("PerformCMD_SetTriggerPulse Ret : {0:x}", ret);
}
private void PerformCMD_GetStrobeStartDelay(object obj)
{
uint startDelay = 0;
ushort ret = _Trigger.GetStrobeStartdelay(ref startDelay);
StrobeStartDelayStatus = startDelay.ToString();
DebugMessageString = String.Format("PerformCMD_GetStrobeStartDelay Ret : {0:x} {1:d}", ret, startDelay);
}
private void PerformCMD_SetStrobeStartDelay(object obj)
{
ushort ret = _Trigger.SetStrobeStartdelay(Convert.ToUInt32(StrobeStartDelayStatus));
DebugMessageString = String.Format("PerformCMD_SetStrobeStartDelay Ret : {0:x}", ret);
}
private void PerformCMD_GetStrobeWidth(object obj)
{
uint width = 0;
ushort ret = _Trigger.GetStrobeWidth(ref width);
StrobeWidthStatus = width.ToString();
DebugMessageString = String.Format("PerformCMD_GetStrobeWidth Ret : {0:x} {1:d}", ret, width);
}
private void PerformCMD_SetStrobeWidth(object obj)
{
ushort ret = _Trigger.SetStrobeWidth(Convert.ToUInt32(StrobeWidthStatus));
DebugMessageString = String.Format("PerformCMD_SetStrobeWidth Ret : {0:x}", ret);
}
private void PerformCMD_GetEndTrig(object obj)
{
byte endtrig = 0;
ushort ret = _Trigger.GetEndTrigger(ref endtrig);
EndTrigStatus = endtrig.ToString();
DebugMessageString = String.Format("PerformCMD_GetEndTrig Ret : {0:x} {1:d}", ret, endtrig);
}
private void PerformCMD_ResetTrigger(object obj)
{
ushort ret = _Trigger.ResetTriggerCount();
DebugMessageString = String.Format("PerformCMD_ResetTrigger Ret : {0:x}", ret);
}
private void PerformCMD_DebugMessageClear(object obj)
{
DebugMessageString = "";
}
private void PerformCMD_Setting(object obj)
{
//SetTriggerTableSetting()
int i = TableSettingIndex;
ushort rtn;
if (i == 0) {
rtn = _Trigger.DisableTrigCorrectTable();
if (rtn == 0) {
Log.D("Encoder / Position 1:1 Match Setting OK");
} else {
Log.D("Encoder / Position 1:1 Match Setting Fail");
}
} else {
double[] Pos_Table = new double[256];
ulong[] Enc_Table = new ulong[256];
for (int J = 0; J < 256; J++) {
Pos_Table[J] = 0;
Enc_Table[J] = 0;
}
Pos_Table[0] = 0; Pos_Table[1] = 10000; Pos_Table[2] = 20000; Pos_Table[3] = 30000; Pos_Table[4] = 40000; Pos_Table[5] = 100000000;
Enc_Table[0] = 0; Enc_Table[1] = 1010000; Enc_Table[2] = 1020000; ; Enc_Table[3] = 1030000; Enc_Table[4] = 1040000; Enc_Table[5] = 100000040000;
rtn = _Trigger.SetTrigCorrectTable(Pos_Table, Enc_Table);
if (rtn == 0) {
Log.D("Encoder / Position Calibration Mode Setting OK");
} else {
Log.D("Encoder / Position Calibration Mode Setting Fail");
}
}
////
///
//SetDropWatcherSetting()
// 1. Set Input mode (Encoder or Automatic increase)
i = EncoderDirectionIndex;
rtn = _Trigger.SetEncoderDirection(i == 0 ? EncoderDirection.Forward : EncoderDirection.Backward); // 0 : normal / 1 : reverse
if (rtn == 0) {
if (0 == i) Log.D("EncoderDirection Normal");
else Log.D("EncoderDirection Reverse");
} else {
Log.D("EncoderDirection Set Fail");
return;
}
// 2. Set Input Trigger Generation mode and Out mode
TriggerGenMode GenMode; // 0 -> Sequence, 1 -> Timer, 2 -> ExternalInput
i = GeneratorModeIndex;
switch (i) {
case 0: GenMode = TriggerGenMode.Sequence; break;
case 1: GenMode = TriggerGenMode.Timer; break;
default: GenMode = TriggerGenMode.ExternalInput; break;
}
ChannelOutMode OutMode; // 0 - > Simple, 1 -> DirectMask;
i = ChOutputModeIndex;
if (i == 0) { OutMode = ChannelOutMode.Simple; } else { OutMode = ChannelOutMode.DirectMask; }
rtn = _Trigger.SetTrigMode(GenMode, OutMode);
if (rtn == 0) {
Log.D("4-2 Trig Generation Mode : {GenMode} / Trig Out Mode : {OutMode}");
} else {
Log.D("Trigger Set Fail");
return;
}
// 3. Set parameter according to GenMode
switch ((int)GenMode) {
case 0: // Sequence mode
{
byte NumberOfTrigSet = 2; // Max 254
TrigSeqSet[] TrigCmdSet = new TrigSeqSet[254]; // Max Sequence Set : 254
for (int k = 0; k < NumberOfTrigSet; k++) {
TrigCmdSet[k].StartPosition = (1000000 * i) - 100;
TrigCmdSet[k].Interval = 10.5;
TrigCmdSet[k].Iteration = 1000;
//TrigCmdSet[i].Out2_SeqMode_Sel = (byte)(k % 7); // You can select 0~6 MaskSeqSet, if you don't use OutMode == 2 ignore this
//TrigCmdSet[i].WD_Set_Sel = (byte)(k % 8); // Width Delay Set select
}
rtn = _Trigger.SetTriggerSet(NumberOfTrigSet, ref TrigCmdSet);
if (rtn == 0)
Log.D("Set Normal Trig Mode OK");
else
Log.D("Set Normal Trig Mode Fail");
}
break;
case 3:
//double.TryParse(Timer_Set, out double timerPeriod_us);
rtn = _Trigger.SetTrigTimerSeq(Timer_Set);
if (0 != rtn) {
if (rtn == 0x0101) Log.D("Timer Trig Mode Setting ERROR");
else Log.D("Timer Trig Mode Run Error");
} else {
Log.D("Set Timer Trig Mode OK");
}
break;
}
/* NumberOfTrigSet = 20; // Max 254
for (i = 0; i < NumberOfTrigSet; i++) {
TrigCmdSet[i].TrigStart_Pos = 1000 - ( 1000 * i);
TrigCmdSet[i].TrigInterbal = -101;
TrigCmdSet[i].Iteration_Num = 10;
}*/
if (rtn == 0) {
Log.D("Trig Generation Mode Parameter Setting OK");
} else {
Log.D("Trig Generation Mode Parameter Setting Fail");
return;
}
// 4. Set parameter according to OutMode
//double Trig_Width_Delay_us[16];
bool[][] StrobeEnable = new bool[8][];
double[][] Trig_Width = new double[8][];
double[][] Trig_Delay = new double[8][];
for (i = 0; i < 8; i++) {
StrobeEnable[i] = new bool[8];
Trig_Width[i] = new double[8];
Trig_Delay[i] = new double[8];
for (int j = 0; j < 8; j++) {
StrobeEnable[i][j] = false;
Trig_Width[i][j] = 0;
Trig_Delay[i][j] = 0;
}
}
byte Strobe_Ch = 0;
StrobeEnable[0][0] = (bool)CheckedChannel1;
Trig_Delay[0][0] = DelayChannel1;
Trig_Width[0][0] = WidthChannel1;
StrobeEnable[1][0] = (bool)CheckedChannel2;
Trig_Delay[1][0] = DelayChannel2;
Trig_Width[1][0] = WidthChannel2;
StrobeEnable[2][0] = (bool)CheckedChannel3;
Trig_Delay[2][0] = DelayChannel3;
Trig_Width[2][0] = WidthChannel3;
StrobeEnable[3][0] = (bool)CheckedChannel4;
Trig_Delay[3][0] = DelayChannel4;
Trig_Width[3][0] = WidthChannel4;
StrobeEnable[4][0] = (bool)CheckedChannel5;
Trig_Delay[4][0] = DelayChannel5;
Trig_Width[4][0] = WidthChannel5;
StrobeEnable[5][0] = (bool)CheckedChannel6;
Trig_Delay[5][0] = DelayChannel6;
Trig_Width[5][0] = WidthChannel6;
StrobeEnable[6][0] = (bool)CheckedChannel7;
Trig_Delay[6][0] = DelayChannel7;
Trig_Width[6][0] = WidthChannel7;
StrobeEnable[7][0] = (bool)CheckedChannel8;
Trig_Delay[7][0] = DelayChannel8;
Trig_Width[7][0] = WidthChannel8;
double[] Trig_Width_Delay_us = new double[16];
switch ((int)OutMode) {
case 0: // Sequencial output by 1 trigger
// Sequencial output by 1 trigger
uint Trig_Mask = 0;
for (int j = 0; j < /*SJT_STROBE_MAX_CH*/8; j++) {
Strobe_Ch = (byte)j;
for (i = 0; i < /*SJT_STROBE_MAX_STEP*/8; i++) {
if (StrobeEnable[Strobe_Ch][i]) Trig_Mask |= (uint)(0x1 << i);
else Trig_Mask &= (uint)(0xff ^ (0x1 << i));
Trig_Width_Delay_us[i * 2] = Trig_Width[Strobe_Ch][i];
Trig_Width_Delay_us[i * 2 + 1] = Trig_Delay[Strobe_Ch][i];
}
_Trigger.SetStrobe(Strobe_Ch, Trig_Mask, Trig_Width_Delay_us);
}
break;
case 2:
byte[] MaskBitSet = new byte[8];
for (i = 0; i < 8; i++)
MaskBitSet[i] = 0;
for (i = 0; i < /*SJT_STROBE_MAX_CH*/8; i++) {
for (int j = 0; j < /*SJT_STROBE_MAX_STEP*/8; j++) {
if (true == StrobeEnable[i][j]) {
MaskBitSet[j] |= (byte)(0x1 << i);
}
}
}
rtn = _Trigger.SetMaskSet(ref MaskBitSet);
for (int j = 0; j < /*SJT_STROBE_MAX_CH*/8; j++) {
Strobe_Ch = (byte)j;
Trig_Mask = 0;
for (i = 0; i < /*SJT_STROBE_MAX_STEP*/8; i++) {
//if (m_bStrobe_En[Strobe_Ch][i]) StrobeSet_Ch[Strobe_Ch].Sequence_Mask |= (0x1 << i);
if (((MaskBitSet[i] >> j) & 0x1) == 1) Trig_Mask |= (uint)(0x1 << i);
else Trig_Mask &= (uint)(0xff ^ (0x1 << i));
Trig_Width_Delay_us[i * 2] = Trig_Width[Strobe_Ch][i];
Trig_Width_Delay_us[i * 2 + 1] = Trig_Delay[Strobe_Ch][i];
}
_Trigger.SetStrobe(Strobe_Ch, Trig_Mask, Trig_Width_Delay_us);
}
break;
}
if (rtn == 0)
Log.D("Trig Output Mode Parameter Setting OK");
else
Log.D("Trig Output Mode Parameter Setting Fail");
}
private void PerformCMD_TriggerStart(object obj)
{
ushort rtn = _Trigger.StartTrigger();
if (rtn == 0)
Log.D("SJT Trigger Start OK");
else
Log.D("SJT Trigger Start Fail");
}
private void PerformCMD_TriggerStop(object obj)
{
ushort rtn = _Trigger.StopTrigger();
if (rtn == 0)
Log.D("SJT Trigger Stop OK");
else
Log.D("SJT Trigger Stop Fail");
}
private double timer_Set;
public double Timer_Set { get => timer_Set; set => SetProperty(ref timer_Set, value); }
private bool? checkedChannel1;
private bool? checkedChannel2;
private bool? checkedChannel3;
private bool? checkedChannel4;
private bool? checkedChannel5;
private bool? checkedChannel6;
private bool? checkedChannel7;
private bool? checkedChannel8;
public bool? CheckedChannel1 { get => checkedChannel1; set => SetProperty(ref checkedChannel1, value); }
public bool? CheckedChannel2 { get => checkedChannel2; set => SetProperty(ref checkedChannel2, value); }
public bool? CheckedChannel3 { get => checkedChannel3; set => SetProperty(ref checkedChannel3, value); }
public bool? CheckedChannel4 { get => checkedChannel4; set => SetProperty(ref checkedChannel4, value); }
public bool? CheckedChannel5 { get => checkedChannel5; set => SetProperty(ref checkedChannel5, value); }
public bool? CheckedChannel6 { get => checkedChannel6; set => SetProperty(ref checkedChannel6, value); }
public bool? CheckedChannel7 { get => checkedChannel7; set => SetProperty(ref checkedChannel7, value); }
public bool? CheckedChannel8 { get => checkedChannel8; set => SetProperty(ref checkedChannel8, value); }
private double widthChannel1;
private double widthChannel2;
private double widthChannel3;
private double widthChannel4;
private double widthChannel5;
private double widthChannel6;
private double widthChannel7;
private double widthChannel8;
public double WidthChannel1 { get => widthChannel1; set => SetProperty(ref widthChannel1, value); }
public double WidthChannel2 { get => widthChannel2; set => SetProperty(ref widthChannel2, value); }
public double WidthChannel3 { get => widthChannel3; set => SetProperty(ref widthChannel3, value); }
public double WidthChannel4 { get => widthChannel4; set => SetProperty(ref widthChannel4, value); }
public double WidthChannel5 { get => widthChannel5; set => SetProperty(ref widthChannel5, value); }
public double WidthChannel6 { get => widthChannel6; set => SetProperty(ref widthChannel6, value); }
public double WidthChannel7 { get => widthChannel7; set => SetProperty(ref widthChannel7, value); }
public double WidthChannel8 { get => widthChannel8; set => SetProperty(ref widthChannel8, value); }
private double delayChannel1;
private double delayChannel2;
private double delayChannel3;
private double delayChannel4;
private double delayChannel5;
private double delayChannel6;
private double delayChannel7;
private double delayChannel8;
public double DelayChannel1 { get => delayChannel1; set => SetProperty(ref delayChannel1, value); }
public double DelayChannel2 { get => delayChannel2; set => SetProperty(ref delayChannel2, value); }
public double DelayChannel3 { get => delayChannel3; set => SetProperty(ref delayChannel3, value); }
public double DelayChannel4 { get => delayChannel4; set => SetProperty(ref delayChannel4, value); }
public double DelayChannel5 { get => delayChannel5; set => SetProperty(ref delayChannel5, value); }
public double DelayChannel6 { get => delayChannel6; set => SetProperty(ref delayChannel6, value); }
public double DelayChannel7 { get => delayChannel7; set => SetProperty(ref delayChannel7, value); }
public double DelayChannel8 { get => delayChannel8; set => SetProperty(ref delayChannel8, value); }
private void PerformCMD_SetStrobe(object obj)
{
string ch = obj as string;
int chIndex = 0;
if (ch == "Ch1") { chIndex = 0; } else if (ch == "Ch2") { chIndex = 1; } else if (ch == "Ch3") { chIndex = 2; } else if (ch == "Ch4") { chIndex = 3; } else if (ch == "Ch5") { chIndex = 4; } else if (ch == "Ch6") { chIndex = 5; } else if (ch == "Ch7") { chIndex = 6; } else if (ch == "Ch8") { chIndex = 7; } else { chIndex = 0; }
SetChStrobe(chIndex);
}
private void SetChStrobe(int chIndex)
{
byte Strobe_Ch = (byte)chIndex;
uint Trig_Mask = 0;
bool[][] StrobeEnable = new bool[8][];
double[][] Trig_Width = new double[8][];
double[][] Trig_Delay = new double[8][];
for (int i = 0; i < 8; i++) {
StrobeEnable[i] = new bool[8];
Trig_Width[i] = new double[8];
Trig_Delay[i] = new double[8];
for (int j = 0; j < 8; j++) {
StrobeEnable[i][j] = false;
Trig_Width[i][j] = 0;
Trig_Delay[i][j] = 0;
}
}
switch (chIndex) {
case 0: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel1;
Trig_Width[Strobe_Ch][0] = WidthChannel1;
Trig_Delay[Strobe_Ch][0] = DelayChannel1;
}
break;
case 1: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel2;
Trig_Width[Strobe_Ch][0] = WidthChannel2;
Trig_Delay[Strobe_Ch][0] = DelayChannel2;
}
break;
case 2: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel3;
Trig_Width[Strobe_Ch][0] = WidthChannel3;
Trig_Delay[Strobe_Ch][0] = DelayChannel3;
}
break;
case 3: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel4;
Trig_Width[Strobe_Ch][0] = WidthChannel4;
Trig_Delay[Strobe_Ch][0] = DelayChannel4;
}
break;
case 4: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel5;
Trig_Width[Strobe_Ch][0] = WidthChannel5;
Trig_Delay[Strobe_Ch][0] = DelayChannel5;
}
break;
case 5: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel6;
Trig_Width[Strobe_Ch][0] = WidthChannel6;
Trig_Delay[Strobe_Ch][0] = DelayChannel6;
}
break;
case 6: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel7;
Trig_Width[Strobe_Ch][0] = WidthChannel7;
Trig_Delay[Strobe_Ch][0] = DelayChannel7;
}
break;
case 7: {
StrobeEnable[Strobe_Ch][0] = (bool)CheckedChannel8;
Trig_Width[Strobe_Ch][0] = WidthChannel8;
Trig_Delay[Strobe_Ch][0] = DelayChannel8;
}
break;
}
double[] Trig_Width_Delay_us = new double[16];
for (int i = 0; i < 8; i++) {
if (StrobeEnable[Strobe_Ch][i]) Trig_Mask |= (uint)(0x1 << i);
else Trig_Mask &= (uint)(0xff ^ (0x1 << i));
Trig_Width_Delay_us[i * 2] = Trig_Width[Strobe_Ch][i];
Trig_Width_Delay_us[i * 2 + 1] = Trig_Delay[Strobe_Ch][i];
}
_Trigger.SetStrobe(Strobe_Ch, Trig_Mask, Trig_Width_Delay_us);
}
private void PerformCMD_GetEncoderCnt(object obj)
{
long encoderCount;
_Trigger.GetEncoderCount(out encoderCount);
EncoderTriggerCount = encoderCount.ToString();
}
private void PerformCMD_ResetEncoderCount(object obj)
{
_Trigger.ResetEncoderCount();
}
private void PerformCMD_SetEncoderCount(object obj)
{
_Trigger.SetEncoderCount(Convert.ToInt32(EncoderTriggerCount));
}
private void PerformCMD_ResetSystem(object obj)
{
_Trigger.ResetSystem();
}
private string encoderTriggerCount;
public string EncoderTriggerCount { get => encoderTriggerCount; set => SetProperty(ref encoderTriggerCount, value); }
private string debugMessageString;
public string DebugMessageString { get => debugMessageString; set => SetProperty(ref debugMessageString, value); }
}
}