Compare commits

...

3 Commits

Author SHA1 Message Date
atvstdla
b707eee6ea .. 2025-10-02 14:38:46 +09:00
atvstdla
9887cc7540 .. 2025-10-02 14:37:39 +09:00
atvstdla
c3889b9f0a UI Design modify
Multi SID Select
2025-10-02 14:28:30 +09:00
31 changed files with 2177 additions and 192 deletions

View File

@@ -59,11 +59,10 @@ namespace Project
PUB.flag.set(eVarBool.FG_RDY_PORT_PC, false, "SW_START");
PUB.flag.set(eVarBool.FG_RDY_PORT_PR, false, "SW_START");
//얼라인 상태를 모두 초기화 한다
//loader1.arVar_Port.ToList().ForEach(t => t.AlignOK = 0);
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] = false;
//언로더 체크작업은 항상 다시 시작한다
if (PUB.Result.UnloaderSeq > 1) PUB.Result.UnloaderSeq = 1;
//언로더 체크작업은 항상 다시 시작한다
if (PUB.Result.UnloaderSeq > 1) PUB.Result.UnloaderSeq = 1;
//팝업메세지가 사라지도록 한다
PUB.popup.needClose = true;

View File

@@ -463,10 +463,7 @@ namespace Project
PRE_USE_REELID_R,
NEED_JOBCANCEL,
LCONVER_REEL_DECTECT_ALL =150,
RCONVER_REEL_DECTECT_ALL,
LCONVER_REEL_DECTECT_IN,
@@ -480,8 +477,6 @@ namespace Project
NOBYPASSSID,
CONFIG_KEYENCE,
PRINTER_LPRINTER_NOUP,
PRINTER_RPRINTER_NOUP,
NOECSDATA,
@@ -494,6 +489,7 @@ namespace Project
INBOUNDWEBAPIERROR,
SIDINFORDUP,
NOECSDATAACTIVE,
NOTSELECTMULTISID,
}
public enum eNextStep : byte

View File

@@ -30,7 +30,7 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fSelectSIDInformation));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
this.tbSID = new System.Windows.Forms.TextBox();
this.tbLot = new System.Windows.Forms.TextBox();
this.tbMFG = new System.Windows.Forms.TextBox();
@@ -397,6 +397,7 @@
this.dv1.AllowUserToAddRows = false;
this.dv1.AllowUserToDeleteRows = false;
this.dv1.AutoGenerateColumns = false;
this.dv1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.dv1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.dv1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dv1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
@@ -410,15 +411,15 @@
this.mFGDATEDataGridViewTextBoxColumn,
this.qTYDataGridViewTextBoxColumn});
this.dv1.DataSource = this.bs;
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle2.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle2.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dv1.DefaultCellStyle = dataGridViewCellStyle2;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle1.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dv1.DefaultCellStyle = dataGridViewCellStyle1;
this.dv1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dv1.Location = new System.Drawing.Point(0, 0);
this.dv1.Name = "dv1";

View File

@@ -37,9 +37,10 @@ namespace Project.Dialog
AR.VAR.I32[AR.eVarInt32.PickOnRetry] = 0;
VAR.TIME[eVarTime.KEYENCEWAIT] = DateTime.Now;
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] = true;
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECT] = false;
PUB.Result.ItemDataC.VisionData.PropertyChanged -= VisionData_PropertyChanged;
////사용자가 정보를 정확히 입력하지 않고 닫았다
//if (PUB.Result.ItemDataC.VisionData.Confirm == false)
//{
@@ -379,7 +380,7 @@ namespace Project.Dialog
if (tbBatch.Text.isEmpty() == false)
{
itemC.VisionData.BATCH = tbBatch.Text.Trim();
}
if (tbLot.Text.isEmpty() == false)
{
@@ -882,7 +883,7 @@ namespace Project.Dialog
// {
// tb.Text = value;
// }
//}
}

View File

@@ -170,9 +170,6 @@
8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="dsWMS.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>364, 17</value>
</metadata>
<metadata name="ta.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>525, 17</value>
</metadata>

View File

@@ -257,6 +257,7 @@ namespace Project
}
//키엔스데이터 기다리는중
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] = false;
PUB.sm.seq.Update(cmdIndex);
return false;
}
@@ -305,20 +306,31 @@ namespace Project
//아무것도 하지 않는다
//사용자가 정보를 설정하는 중
}
else
{
bool SHowUserFormINF = true;
else {
//사용자 확인창을 표시한다
if (SHowUserFormINF) //다중SID정보 선택건
//사용자사 해당 창을 닫았다.
if (VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] == true & PUB.Result.ItemDataC.VisionData.SID.isEmpty())
{
this.Invoke(new Action(() =>
{
PUB.log.Add("Calling user selection window (INF)");
var f = new Dialog.fSelectSIDInformation();
f.Show();
}));
//사용자가 창을 닫았고 SID값이 없다면 오류 처리한다.
PUB.Result.SetResultMessage(eResult.OPERATION, eECode.NOTSELECTMULTISID, eNextStep.PAUSE);
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECTCLOSE] = false;
}
else
{
bool SHowUserFormINF = true;
//사용자 확인창을 표시한다
if (SHowUserFormINF) //다중SID정보 선택건
{
this.Invoke(new Action(() =>
{
PUB.log.Add("Calling user selection window (INF)");
var f = new Dialog.fSelectSIDInformation();
f.Show();
}));
}
}
}
return false;
}

View File

@@ -1867,35 +1867,35 @@
// axis0ToolStripMenuItem
//
this.axis0ToolStripMenuItem.Name = "axis0ToolStripMenuItem";
this.axis0ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.axis0ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.axis0ToolStripMenuItem.Text = "Axis 0";
this.axis0ToolStripMenuItem.Click += new System.EventHandler(this.axis0ToolStripMenuItem_Click);
//
// axis1ToolStripMenuItem
//
this.axis1ToolStripMenuItem.Name = "axis1ToolStripMenuItem";
this.axis1ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.axis1ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.axis1ToolStripMenuItem.Text = "Axis 1";
this.axis1ToolStripMenuItem.Click += new System.EventHandler(this.axis1ToolStripMenuItem_Click);
//
// axis2ToolStripMenuItem
//
this.axis2ToolStripMenuItem.Name = "axis2ToolStripMenuItem";
this.axis2ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.axis2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.axis2ToolStripMenuItem.Text = "Axis 2";
this.axis2ToolStripMenuItem.Click += new System.EventHandler(this.axis2ToolStripMenuItem_Click);
//
// axis3ToolStripMenuItem
//
this.axis3ToolStripMenuItem.Name = "axis3ToolStripMenuItem";
this.axis3ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.axis3ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.axis3ToolStripMenuItem.Text = "Axis 3";
this.axis3ToolStripMenuItem.Click += new System.EventHandler(this.axis3ToolStripMenuItem_Click);
//
// axis4ToolStripMenuItem
//
this.axis4ToolStripMenuItem.Name = "axis4ToolStripMenuItem";
this.axis4ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.axis4ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.axis4ToolStripMenuItem.Text = "Axis 4";
this.axis4ToolStripMenuItem.Click += new System.EventHandler(this.axis4ToolStripMenuItem_Click);
//
@@ -3910,7 +3910,7 @@
this.hmi1.R_PICK_BW = false;
this.hmi1.R_PICK_FW = false;
this.hmi1.Scean = UIControl.HMI.eScean.Nomal;
this.hmi1.Size = new System.Drawing.Size(786, 403);
this.hmi1.Size = new System.Drawing.Size(546, 403);
this.hmi1.TabIndex = 0;
this.hmi1.ZoneItemClick += new System.EventHandler<UIControl.HMI.ZoneItemClickEventargs>(this.hmi1_ZoneItemClick);
//
@@ -3969,7 +3969,7 @@
column2.State = System.Windows.Forms.DataGridViewElementStates.None;
column2.Style = null;
column2.Text = "";
column2.Width = 50;
column2.Width = 80;
column3.DataGridViewInternal = null;
column3.DisplayIndex = 0;
column3.IndexInternal = 0;
@@ -3978,7 +3978,7 @@
column3.State = System.Windows.Forms.DataGridViewElementStates.None;
column3.Style = null;
column3.Text = "";
column3.Width = 100;
column3.Width = 150;
column4.DataGridViewInternal = null;
column4.DisplayIndex = 0;
column4.IndexInternal = 0;
@@ -3987,7 +3987,7 @@
column4.State = System.Windows.Forms.DataGridViewElementStates.None;
column4.Style = null;
column4.Text = "";
column4.Width = 50;
column4.Width = 80;
column5.DataGridViewInternal = null;
column5.DisplayIndex = 0;
column5.IndexInternal = 0;
@@ -3996,7 +3996,7 @@
column5.State = System.Windows.Forms.DataGridViewElementStates.None;
column5.Style = null;
column5.Text = "";
column5.Width = 100;
column5.Width = 150;
column6.DataGridViewInternal = null;
column6.DisplayIndex = 0;
column6.IndexInternal = 0;
@@ -4005,7 +4005,7 @@
column6.State = System.Windows.Forms.DataGridViewElementStates.None;
column6.Style = null;
column6.Text = "";
column6.Width = 50;
column6.Width = 80;
column7.DataGridViewInternal = null;
column7.DisplayIndex = 0;
column7.IndexInternal = 0;
@@ -4014,7 +4014,7 @@
column7.State = System.Windows.Forms.DataGridViewElementStates.None;
column7.Style = null;
column7.Text = "";
column7.Width = 100;
column7.Width = 150;
this.listView21.Columns = new arCtl.ListView2.Column[] {
column2,
column3,
@@ -4030,7 +4030,7 @@
this.listView21.Dock = System.Windows.Forms.DockStyle.Right;
this.listView21.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.listView21.ForeColor = System.Drawing.Color.White;
this.listView21.Location = new System.Drawing.Point(786, 0);
this.listView21.Location = new System.Drawing.Point(546, 0);
this.listView21.MinimumSize = new System.Drawing.Size(30, 30);
this.listView21.Name = "listView21";
this.listView21.RowHeight = 25;
@@ -5160,7 +5160,7 @@
itemStyle2.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
itemStyle2.ForeColor = System.Drawing.Color.Black;
this.listView21.RowStyle = itemStyle2;
this.listView21.Size = new System.Drawing.Size(451, 403);
this.listView21.Size = new System.Drawing.Size(691, 403);
this.listView21.TabIndex = 7;
this.listView21.Text = "listView21";
//

View File

@@ -473,16 +473,16 @@ If pressed while motion is moving, motion will also stop.
<data name="btManualPrint.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIUSURBVGhD7ZPBShtRFIanL1DfIZDu1L5B7U4tQty1uxYK
FUGxIDKokBIptinFSrGaCmamEcaMlmhEX0B9gUrbTbtoU9Jtu80ip7n4h5nMnAuFzCQHnA++3Zz7f1nE
SEhIuEZM/m7ey9QbvzJ1ojicqDdqmXpzDHPRczXAj0dn4yfmoocfjF7MRQ83FoeYix5uLA4xFxHzny+M
ha+k5MbisL1nzH85Q0UXtB/rxw9Qdo3vMW4sDv2bqOgC32PcWBz6N1HRBb7HuLE49G+i4v+ZNXPjU2au
NmPmSJJXTSujyNQjMb7ttJn7gUw93KEkkamHO5IkMvVwR5JEph7uSJLI1MMdSRKZeoIH9x8+ocGhYUqn
0z1VbT54NNXRokSmnuBBP+LbDg7f7mhRIlNP8IB7uJcGe5CpJ3jAPdpLgz3I1PN41iS/qVSqrwZ7kBnG
dk5uWeXqRUuy3WORou1ctSLbQ8UHDwR7jmyP9+7Hv8yHQq3+QbZH0T285D8WqFP9hGwPa+/4A/uxRMtH
NrI9Wv+Bp+zHMp1DtkfRqYxY5aPWP12+drl6B9kepdLpzfzb7eaOUyHJqsaC6w4gu5OCvfd9e/eARFva
/4bcMBs7zsG7okPC3UdumLVCcelNwSLRblmLyA3zcn3j7ov1TZLs6trmCHLDENGN5eevDrPZbPPZ6muS
pGpaXMlXVCNyExISEhKuPYbxDwvXtwz5x5voAAAAAElFTkSuQmCC
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIUSURBVGhD7ZPNShthFIanN1DvIZDu/LmD2l1VhLirOwuF
SqFiQWRQISVSrC3FWrA2FsxMI4wZlWhEb0C9gYp20y5aS7qt2yxymg/fMJOZ80EhM8kB54FnN+d7nyxi
JCQk3CLG/tRHMtXa70yVKA5Hq7WrTLU+hLnouRngx6Oz9gtz0cMPRi/moocbi0PMRQ83FoeYi4iZizNj
9hspubE4bO4ZM5cnqGiD5mPd+AHKtvE9xo3FoX8TFW3ge4wbi0P/JirawPcYNxaH/k1U/D9TZm540sxd
PTdzJMmbpsWHyNQjMb7pMzP3E5l6uENJIlMPdyRJZOrhjiSJTD3ckSSRqYc7kiQy9QQPHk08pd6+fkqn
0x1VbY4/nmxpUSJTT/CgG/FNe/sHWlqUyNQTPOAe7qTBHmTqCR5wj3bSYA8y9TyZMslvKpXqqsEeZIax
naN7Vqly1pBs91CkaDtVrcj2UPHBA8GeIttjw927Zj4UauUvsj0K7v45/7FAncpXZHtY24df2I8lWjqw
ke3R+A+8YD+W6TSyPQpOedAqHTT+6fK1S5X7yPYoFo/vLn/YqG86ZZKsasy7bg+yW8nb2z8+b+2SaIs7
35EbZm3T2f1YcEi4O8gNs5IvzL/PWyTaT9YccsMsr649eL26TpJdWlkfRG4YIrqz8Ortfjabrb9cekeS
VE1zi2/KqhG5CQkJCQm3HsP4B860twaYbLRsAAAAAElFTkSuQmCC
</value>
</data>
<data name="btJobCancle.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -571,7 +571,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQgAAd0MAAAlD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABQQgAAhEMAAL5C
AADIQgs=
</value>
</data>
@@ -579,7 +579,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACiQwAAd0MAAAlD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABhQwAAhEMAAL5C
AADIQgs=
</value>
</data>
@@ -587,7 +587,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAEAPRAAAd0MAAAlD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADHQwAAhEMAAL5C
AADIQgs=
</value>
</data>
@@ -595,7 +595,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAAKBC
AAAAAAs=
</value>
</data>
@@ -603,7 +603,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAAAAAABZD
AAAAAAs=
</value>
</data>
@@ -611,7 +611,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAAAAAAKBC
AAAAAAs=
</value>
</data>
@@ -619,7 +619,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAAAAAABZD
AAAAAAs=
</value>
</data>
@@ -627,7 +627,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAAAAAAKBC
AAAAAAs=
</value>
</data>
@@ -635,7 +635,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAAAAAABZD
AAAAAAs=
</value>
</data>
@@ -643,7 +643,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAAKBC
AADIQQs=
</value>
</data>
@@ -651,7 +651,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAAAAAABZD
AADIQQs=
</value>
</data>
@@ -659,7 +659,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAAAAAAKBC
AADIQQs=
</value>
</data>
@@ -667,7 +667,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAAAAAABZD
AADIQQs=
</value>
</data>
@@ -675,7 +675,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAAAAAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAAAAAAKBC
AADIQQs=
</value>
</data>
@@ -683,7 +683,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAAAAAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAAAAAABZD
AADIQQs=
</value>
</data>
@@ -691,7 +691,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAAAAAwCxE
AADIQQs=
</value>
</data>
@@ -699,7 +699,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEEAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEEAAKBC
AADIQQs=
</value>
</data>
@@ -707,7 +707,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAyEEAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAyEEAABZD
AADIQQs=
</value>
</data>
@@ -715,7 +715,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAyEEAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAyEEAAKBC
AADIQQs=
</value>
</data>
@@ -723,7 +723,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAyEEAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAyEEAABZD
AADIQQs=
</value>
</data>
@@ -731,7 +731,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAyEEAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAyEEAAKBC
AADIQQs=
</value>
</data>
@@ -739,7 +739,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAyEEAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAyEEAABZD
AADIQQs=
</value>
</data>
@@ -747,7 +747,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEEAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEEAwCxE
AADIQQs=
</value>
</data>
@@ -755,7 +755,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEIAAKBC
AADIQQs=
</value>
</data>
@@ -763,7 +763,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAASEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAASEIAABZD
AADIQQs=
</value>
</data>
@@ -771,7 +771,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAASEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAASEIAAKBC
AADIQQs=
</value>
</data>
@@ -779,7 +779,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAASEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAASEIAABZD
AADIQQs=
</value>
</data>
@@ -787,7 +787,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAASEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAASEIAAKBC
AADIQQs=
</value>
</data>
@@ -795,7 +795,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAASEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAASEIAABZD
AADIQQs=
</value>
</data>
@@ -803,7 +803,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEIAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEIAwCxE
AADIQQs=
</value>
</data>
@@ -811,7 +811,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkIAAKBC
AADIQQs=
</value>
</data>
@@ -819,7 +819,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAlkIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAlkIAABZD
AADIQQs=
</value>
</data>
@@ -827,7 +827,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAlkIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAlkIAAKBC
AADIQQs=
</value>
</data>
@@ -835,7 +835,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAlkIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAlkIAABZD
AADIQQs=
</value>
</data>
@@ -843,7 +843,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAlkIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAlkIAAKBC
AADIQQs=
</value>
</data>
@@ -851,7 +851,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAlkIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAlkIAABZD
AADIQQs=
</value>
</data>
@@ -859,7 +859,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkIAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkIAwCxE
AADIQQs=
</value>
</data>
@@ -867,7 +867,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEIAAKBC
AADIQQs=
</value>
</data>
@@ -875,7 +875,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAyEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAyEIAABZD
AADIQQs=
</value>
</data>
@@ -883,7 +883,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAyEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAyEIAAKBC
AADIQQs=
</value>
</data>
@@ -891,7 +891,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAyEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAyEIAABZD
AADIQQs=
</value>
</data>
@@ -899,7 +899,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAyEIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAyEIAAKBC
AADIQQs=
</value>
</data>
@@ -907,7 +907,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAyEIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAyEIAABZD
AADIQQs=
</value>
</data>
@@ -915,7 +915,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEIAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAyEIAwCxE
AADIQQs=
</value>
</data>
@@ -923,7 +923,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAA+kIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAA+kIAAKBC
AADIQQs=
</value>
</data>
@@ -931,7 +931,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAA+kIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAA+kIAABZD
AADIQQs=
</value>
</data>
@@ -939,7 +939,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAA+kIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAA+kIAAKBC
AADIQQs=
</value>
</data>
@@ -947,7 +947,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAA+kIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAA+kIAABZD
AADIQQs=
</value>
</data>
@@ -955,7 +955,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAA+kIAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAA+kIAAKBC
AADIQQs=
</value>
</data>
@@ -963,7 +963,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAA+kIAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAA+kIAABZD
AADIQQs=
</value>
</data>
@@ -971,7 +971,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAA+kIAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAA+kIAwCxE
AADIQQs=
</value>
</data>
@@ -979,7 +979,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAFkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAFkMAAKBC
AADIQQs=
</value>
</data>
@@ -987,7 +987,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAFkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAFkMAABZD
AADIQQs=
</value>
</data>
@@ -995,7 +995,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAFkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAFkMAAKBC
AADIQQs=
</value>
</data>
@@ -1003,7 +1003,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAFkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAFkMAABZD
AADIQQs=
</value>
</data>
@@ -1011,7 +1011,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAFkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAFkMAAKBC
AADIQQs=
</value>
</data>
@@ -1019,7 +1019,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAFkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAFkMAABZD
AADIQQs=
</value>
</data>
@@ -1027,7 +1027,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAFkMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAFkMAwCxE
AADIQQs=
</value>
</data>
@@ -1035,7 +1035,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAL0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAL0MAAKBC
AADIQQs=
</value>
</data>
@@ -1043,7 +1043,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAL0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAL0MAABZD
AADIQQs=
</value>
</data>
@@ -1051,7 +1051,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAL0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAL0MAAKBC
AADIQQs=
</value>
</data>
@@ -1059,7 +1059,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAL0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAL0MAABZD
AADIQQs=
</value>
</data>
@@ -1067,7 +1067,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAL0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAL0MAAKBC
AADIQQs=
</value>
</data>
@@ -1075,7 +1075,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAL0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAL0MAABZD
AADIQQs=
</value>
</data>
@@ -1083,7 +1083,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAL0MAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAL0MAwCxE
AADIQQs=
</value>
</data>
@@ -1091,7 +1091,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEMAAKBC
AADIQQs=
</value>
</data>
@@ -1099,7 +1099,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAASEMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAASEMAABZD
AADIQQs=
</value>
</data>
@@ -1107,7 +1107,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAASEMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAASEMAAKBC
AADIQQs=
</value>
</data>
@@ -1115,7 +1115,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAASEMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAASEMAABZD
AADIQQs=
</value>
</data>
@@ -1123,7 +1123,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAASEMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAASEMAAKBC
AADIQQs=
</value>
</data>
@@ -1131,7 +1131,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAASEMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAASEMAABZD
AADIQQs=
</value>
</data>
@@ -1139,7 +1139,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAASEMAwCxE
AADIQQs=
</value>
</data>
@@ -1147,7 +1147,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAYUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAYUMAAKBC
AADIQQs=
</value>
</data>
@@ -1155,7 +1155,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAYUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAYUMAABZD
AADIQQs=
</value>
</data>
@@ -1163,7 +1163,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAYUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAYUMAAKBC
AADIQQs=
</value>
</data>
@@ -1171,7 +1171,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAYUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAYUMAABZD
AADIQQs=
</value>
</data>
@@ -1179,7 +1179,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAYUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAYUMAAKBC
AADIQQs=
</value>
</data>
@@ -1187,7 +1187,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAYUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAYUMAABZD
AADIQQs=
</value>
</data>
@@ -1195,7 +1195,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAYUMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAYUMAwCxE
AADIQQs=
</value>
</data>
@@ -1203,7 +1203,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAekMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAekMAAKBC
AADIQQs=
</value>
</data>
@@ -1211,7 +1211,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAekMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAekMAABZD
AADIQQs=
</value>
</data>
@@ -1219,7 +1219,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAekMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAekMAAKBC
AADIQQs=
</value>
</data>
@@ -1227,7 +1227,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAekMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAekMAABZD
AADIQQs=
</value>
</data>
@@ -1235,7 +1235,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAekMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAekMAAKBC
AADIQQs=
</value>
</data>
@@ -1243,7 +1243,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAekMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAekMAABZD
AADIQQs=
</value>
</data>
@@ -1251,7 +1251,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAekMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAekMAwCxE
AADIQQs=
</value>
</data>
@@ -1259,7 +1259,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAiUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAiUMAAKBC
AADIQQs=
</value>
</data>
@@ -1267,7 +1267,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgCAiUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgCAiUMAABZD
AADIQQs=
</value>
</data>
@@ -1275,7 +1275,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwCAiUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwCAiUMAAKBC
AADIQQs=
</value>
</data>
@@ -1283,7 +1283,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwCAiUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwCAiUMAABZD
AADIQQs=
</value>
</data>
@@ -1291,7 +1291,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwCAiUMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwCAiUMAAKBC
AADIQQs=
</value>
</data>
@@ -1299,7 +1299,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwCAiUMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRACAiUMAABZD
AADIQQs=
</value>
</data>
@@ -1307,7 +1307,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAiUMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAiUMAwCxE
AADIQQs=
</value>
</data>
@@ -1315,7 +1315,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkMAAKBC
AADIQQs=
</value>
</data>
@@ -1323,7 +1323,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAlkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAlkMAABZD
AADIQQs=
</value>
</data>
@@ -1331,7 +1331,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAlkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAlkMAAKBC
AADIQQs=
</value>
</data>
@@ -1339,7 +1339,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAlkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAlkMAABZD
AADIQQs=
</value>
</data>
@@ -1347,7 +1347,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAlkMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAlkMAAKBC
AADIQQs=
</value>
</data>
@@ -1355,7 +1355,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAlkMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAlkMAABZD
AADIQQs=
</value>
</data>
@@ -1363,7 +1363,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAlkMAwCxE
AADIQQs=
</value>
</data>
@@ -1371,7 +1371,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAokMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAokMAAKBC
AADIQQs=
</value>
</data>
@@ -1379,7 +1379,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgCAokMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgCAokMAABZD
AADIQQs=
</value>
</data>
@@ -1387,7 +1387,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwCAokMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwCAokMAAKBC
AADIQQs=
</value>
</data>
@@ -1395,7 +1395,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwCAokMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwCAokMAABZD
AADIQQs=
</value>
</data>
@@ -1403,7 +1403,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwCAokMAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwCAokMAAKBC
AADIQQs=
</value>
</data>
@@ -1411,7 +1411,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwCAokMAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRACAokMAABZD
AADIQQs=
</value>
</data>
@@ -1419,7 +1419,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAokMAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAokMAwCxE
AADIQQs=
</value>
</data>
@@ -1427,7 +1427,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAr0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAr0MAAKBC
AADIQQs=
</value>
</data>
@@ -1435,7 +1435,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgAAr0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgAAr0MAABZD
AADIQQs=
</value>
</data>
@@ -1443,7 +1443,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwAAr0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwAAr0MAAKBC
AADIQQs=
</value>
</data>
@@ -1451,7 +1451,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwAAr0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwAAr0MAABZD
AADIQQs=
</value>
</data>
@@ -1459,7 +1459,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwAAr0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwAAr0MAAKBC
AADIQQs=
</value>
</data>
@@ -1467,7 +1467,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwAAr0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRAAAr0MAABZD
AADIQQs=
</value>
</data>
@@ -1475,7 +1475,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAr0MAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAAAAr0MAwCxE
AADIQQs=
</value>
</data>
@@ -1483,7 +1483,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAu0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAu0MAAKBC
AADIQQs=
</value>
</data>
@@ -1491,7 +1491,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQgCAu0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACgQgCAu0MAABZD
AADIQQs=
</value>
</data>
@@ -1499,7 +1499,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAWQwCAu0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABmQwCAu0MAAKBC
AADIQQs=
</value>
</data>
@@ -1507,7 +1507,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABIQwCAu0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACbQwCAu0MAABZD
AADIQQs=
</value>
</data>
@@ -1515,7 +1515,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACWQwCAu0MAAEhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADmQwCAu0MAAKBC
AADIQQs=
</value>
</data>
@@ -1523,7 +1523,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAACvQwCAu0MAAMhC
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAHRACAu0MAABZD
AADIQQs=
</value>
</data>
@@ -1531,7 +1531,7 @@ If pressed while motion is moving, motion will also stop.
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAu0MAgOFD
d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAAAAACAu0MAwCxE
AADIQQs=
</value>
</data>

View File

@@ -295,6 +295,7 @@ namespace AR
/// SID정보가 복수가 검출되었을때 사용자가 선택하는 창
/// </summary>
FG_WAIT_INFOSELECT,
FG_WAIT_INFOSELECTCLOSE,
/// <summary>
/// 작업시작화면
/// </summary>

View File

@@ -658,7 +658,7 @@ namespace UIControl
var port_space = CvtMMtoPX_H(350 / 2.0f, 0);
var port_spacex = CvtMMtoPX_W(10, 0); ;
var PickerSizeW = CvtMMtoPX_W(200, 0);// (float)(Math.Max(CvtMMtoPX_W(150, 0), CvtMMtoPX_H(15, 0)));
var PickerSizeW = CvtMMtoPX_W(150, 0);// (float)(Math.Max(CvtMMtoPX_W(150, 0), CvtMMtoPX_H(15, 0)));
var PickerSizeH = PickerSizeW;// CvtMMtoPX_H(130, 0);//(float)(Math.Max(CvtMMtoPX_W(150, 0), CvtMMtoPX_H(15, 0)));
var PickerSpaceW = CvtMMtoPX_H(100, 0);
@@ -728,8 +728,8 @@ namespace UIControl
}
//입출력포트의 영역을 다시 계산한다
var portW = (int)(rect_main.Width * 0.175f);
var portH = (int)(rect_main.Height * 0.25f);
var portW = (int)(rect_main.Width * 0.125f);
var portH = (int)(rect_main.Height * 0.35f);
var portPad = (int)(rect_main.Width / 7f);
var MarginX = (int)((rect_main.Width - portW * 3 - portPad * 2) / 2.0);
var MarginY = (int)(rect_main.Height - portH - (portPad / 2f));
@@ -738,7 +738,7 @@ namespace UIControl
{
arVar_Port[i].Rect = new Rectangle(
(int)rect_main.Left + MarginX + (i * portW) + (i * portPad),
(int)rect_main.Top + MarginY,
(int)rect_main.Top + MarginY+50,
portW, portH);
zitem.Add(new CItem
{
@@ -1037,17 +1037,17 @@ namespace UIControl
void Scean_Normal(Graphics g)
{
//전체 영역 테두리
g.DrawRectangle(new Pen(Color.White, 2), rect_main.Left, rect_main.Top, rect_main.Width, rect_main.Height);
//g.DrawRectangle(new Pen(Color.White, 2), rect_main.Left, rect_main.Top, rect_main.Width, rect_main.Height);
//포트표시(셔틀위에 표시됨)
Draw_Port(g); //front
//프린터영역그리기 201228
var printareahei = 50;
var printareahei = 100;
var printareaw = 100;
var printbordersize = 5;
var rectpl = new RectangleF(arVar_Port[0].Rect.Right + printbordersize, arVar_Port[0].Rect.Top - 85, printareaw, printareahei);
var rectpl = new RectangleF(arVar_Port[0].Rect.Right + printbordersize, arVar_Port[0].Rect.Top - printareahei-20, printareaw, printareahei);
var fColorPrn = arFGPrinter0END ? Color.Lime : (arFGPrinter0RDY ? Color.Gold : Color.Gray);
g.DrawRect(rectpl, fColorPrn, printbordersize);
var prnstrbase = "";// "Print Qty:" + arCountPrint0.ToString("000") + "\n";
@@ -1056,7 +1056,7 @@ namespace UIControl
g.DrawString(prnstr, new Font("Tahoma", 10, FontStyle.Bold), new SolidBrush(fColorPrn), rectpl,
new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
rectpl = new RectangleF(arVar_Port[2].Rect.Left - 90 - printbordersize, arVar_Port[2].Rect.Top - 85, printareaw, printareahei);
rectpl = new RectangleF(arVar_Port[2].Rect.Left - 90 - printbordersize, arVar_Port[2].Rect.Top - printareahei-20, printareaw, printareahei);
fColorPrn = arFGPrinter1END ? Color.Lime : (arFGPrinter1RDY ? Color.Gold : Color.Gray);
g.DrawRect(rectpl, fColorPrn, printbordersize);
prnstrbase = "";// "Print Qty:" + arCountPrint1.ToString("000") + "\n";

Submodule Handler/swPLC deleted from e583341e53

63
Handler/swPLC/.gitattributes vendored Normal file
View File

@@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

8
Handler/swPLC/.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
*.suo
*.user
*.pdb
bin
obj
desktop.ini
.vs
packages

34
Handler/swPLC/CSetting.cs Normal file
View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AR;
namespace Project
{
public class CSetting : AR.Setting
{
#region "swplc"
public string swplc_name { get; set; }
public int swplc_size { get; set; }
#endregion
public CSetting()
{
}
public override void AfterLoad()
{
if (swplc_size < 1) swplc_size = 100;
if (swplc_name.isEmpty()) swplc_name = "swplc";
}
public override void AfterSave()
{
}
}
}

402
Handler/swPLC/Form1.Designer.cs generated Normal file
View File

@@ -0,0 +1,402 @@
namespace Project
{
partial class Form1
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel();
this.logTextBox1 = new arCtl.LogTextBox();
this.gridView1 = new arCtl.GridView.GridView();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.button9 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.button12 = new System.Windows.Forms.Button();
this.button13 = new System.Windows.Forms.Button();
this.ioPanel1 = new arDev.AjinEXTEK.UI.IOPanel();
this.statusStrip1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// timer1
//
this.timer1.Interval = 250;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1,
this.toolStripStatusLabel2,
this.toolStripStatusLabel3});
this.statusStrip1.Location = new System.Drawing.Point(0, 564);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(760, 22);
this.statusStrip1.TabIndex = 2;
this.statusStrip1.Text = "statusStrip1";
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(73, 17);
this.toolStripStatusLabel1.Text = "AutoControl";
this.toolStripStatusLabel1.Click += new System.EventHandler(this.toolStripStatusLabel1_Click);
//
// toolStripStatusLabel2
//
this.toolStripStatusLabel2.Name = "toolStripStatusLabel2";
this.toolStripStatusLabel2.Size = new System.Drawing.Size(118, 17);
this.toolStripStatusLabel2.Text = "toolStripStatusLabel2";
//
// toolStripStatusLabel3
//
this.toolStripStatusLabel3.Name = "toolStripStatusLabel3";
this.toolStripStatusLabel3.Size = new System.Drawing.Size(118, 17);
this.toolStripStatusLabel3.Text = "toolStripStatusLabel3";
//
// logTextBox1
//
this.logTextBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24)))));
this.logTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.logTextBox1.ColorList = new arCtl.sLogMessageColor[0];
this.logTextBox1.DateFormat = "mm:ss.fff";
this.logTextBox1.DefaultColor = System.Drawing.Color.LightGray;
this.logTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.logTextBox1.EnableDisplayTimer = true;
this.logTextBox1.EnableGubunColor = true;
this.logTextBox1.Font = new System.Drawing.Font("Consolas", 9F);
this.logTextBox1.ListFormat = "[{0}] {1}";
this.logTextBox1.Location = new System.Drawing.Point(0, 116);
this.logTextBox1.MaxListCount = ((ushort)(200));
this.logTextBox1.MaxTextLength = ((uint)(4000u));
this.logTextBox1.MessageInterval = 50;
this.logTextBox1.Name = "logTextBox1";
this.logTextBox1.Size = new System.Drawing.Size(760, 193);
this.logTextBox1.TabIndex = 0;
this.logTextBox1.Text = "";
//
// gridView1
//
this.gridView1.arVeriticalDraw = false;
this.gridView1.BorderColor = System.Drawing.Color.Black;
this.gridView1.BorderSize = 0;
this.gridView1.ColorList = null;
this.gridView1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.gridView1.FontPin = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.gridView1.ForeColorPin = System.Drawing.Color.WhiteSmoke;
this.gridView1.Location = new System.Drawing.Point(0, 309);
this.gridView1.MatrixSize = new System.Drawing.Point(3, 5);
this.gridView1.MenuBorderSize = 1;
this.gridView1.MenuGap = 5;
this.gridView1.MinimumSize = new System.Drawing.Size(100, 50);
this.gridView1.Name = "gridView1";
this.gridView1.Names = null;
this.gridView1.ShadowColor = System.Drawing.Color.Transparent;
this.gridView1.showDebugInfo = false;
this.gridView1.ShowIndexString = true;
this.gridView1.ShowNameString = true;
this.gridView1.ShowValueString = true;
this.gridView1.Size = new System.Drawing.Size(760, 100);
this.gridView1.TabIndex = 3;
this.gridView1.Tags = null;
this.gridView1.Text = "gridView1";
this.gridView1.TextAttachToImage = true;
this.gridView1.Titles = null;
this.gridView1.Values = null;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 3;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33332F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F));
this.tableLayoutPanel1.Controls.Add(this.button1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.button2, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.button3, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.button4, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.button5, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.button6, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.button7, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.button8, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.button9, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.button10, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.button11, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.button12, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.button13, 0, 4);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 409);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 5;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 19.99851F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(760, 155);
this.tableLayoutPanel1.TabIndex = 4;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.Location = new System.Drawing.Point(3, 34);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(247, 25);
this.button1.TabIndex = 0;
this.button1.Tag = "0";
this.button1.Text = "Refresh Port";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
this.button2.Location = new System.Drawing.Point(509, 34);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(248, 25);
this.button2.TabIndex = 0;
this.button2.Tag = "2";
this.button2.Text = "Refresh Port";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button1_Click);
//
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Fill;
this.button3.Location = new System.Drawing.Point(256, 34);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(247, 25);
this.button3.TabIndex = 0;
this.button3.Tag = "1";
this.button3.Text = "Refresh Port";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button1_Click);
//
// button4
//
this.button4.Dock = System.Windows.Forms.DockStyle.Fill;
this.button4.Location = new System.Drawing.Point(3, 3);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(247, 25);
this.button4.TabIndex = 1;
this.button4.Tag = "0";
this.button4.Text = "Up";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button5
//
this.button5.Dock = System.Windows.Forms.DockStyle.Fill;
this.button5.Location = new System.Drawing.Point(256, 3);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(247, 25);
this.button5.TabIndex = 1;
this.button5.Tag = "1";
this.button5.Text = "Up";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button4_Click);
//
// button6
//
this.button6.Dock = System.Windows.Forms.DockStyle.Fill;
this.button6.Location = new System.Drawing.Point(509, 3);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(248, 25);
this.button6.TabIndex = 1;
this.button6.Tag = "2";
this.button6.Text = "Up";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button4_Click);
//
// button7
//
this.button7.Dock = System.Windows.Forms.DockStyle.Fill;
this.button7.Location = new System.Drawing.Point(509, 65);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(248, 25);
this.button7.TabIndex = 1;
this.button7.Tag = "2";
this.button7.Text = "Down";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button9_Click);
//
// button8
//
this.button8.Dock = System.Windows.Forms.DockStyle.Fill;
this.button8.Location = new System.Drawing.Point(256, 65);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(247, 25);
this.button8.TabIndex = 1;
this.button8.Tag = "1";
this.button8.Text = "Down";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.button9_Click);
//
// button9
//
this.button9.Dock = System.Windows.Forms.DockStyle.Fill;
this.button9.Location = new System.Drawing.Point(3, 65);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(247, 25);
this.button9.TabIndex = 1;
this.button9.Tag = "0";
this.button9.Text = "Down";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.button9_Click);
//
// button10
//
this.button10.Dock = System.Windows.Forms.DockStyle.Fill;
this.button10.Location = new System.Drawing.Point(3, 96);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(247, 24);
this.button10.TabIndex = 2;
this.button10.Tag = "0";
this.button10.Text = "Stop";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.button12_Click);
//
// button11
//
this.button11.Dock = System.Windows.Forms.DockStyle.Fill;
this.button11.Location = new System.Drawing.Point(256, 96);
this.button11.Name = "button11";
this.button11.Size = new System.Drawing.Size(247, 24);
this.button11.TabIndex = 2;
this.button11.Tag = "1";
this.button11.Text = "Stop";
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.button12_Click);
//
// button12
//
this.button12.Dock = System.Windows.Forms.DockStyle.Fill;
this.button12.Location = new System.Drawing.Point(509, 96);
this.button12.Name = "button12";
this.button12.Size = new System.Drawing.Size(248, 24);
this.button12.TabIndex = 2;
this.button12.Tag = "2";
this.button12.Text = "Stop";
this.button12.UseVisualStyleBackColor = true;
this.button12.Click += new System.EventHandler(this.button12_Click);
//
// button13
//
this.tableLayoutPanel1.SetColumnSpan(this.button13, 3);
this.button13.Dock = System.Windows.Forms.DockStyle.Fill;
this.button13.Location = new System.Drawing.Point(3, 126);
this.button13.Name = "button13";
this.button13.Size = new System.Drawing.Size(754, 26);
this.button13.TabIndex = 3;
this.button13.Text = "Exit";
this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.button13_Click);
//
// ioPanel1
//
this.ioPanel1.BorderColor = System.Drawing.Color.Empty;
this.ioPanel1.BorderSize = 0;
this.ioPanel1.ColorList = null;
this.ioPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.ioPanel1.FontPin = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.ioPanel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(200)))));
this.ioPanel1.ForeColorPin = System.Drawing.Color.WhiteSmoke;
this.ioPanel1.Location = new System.Drawing.Point(0, 0);
this.ioPanel1.MatrixSize = new System.Drawing.Point(3, 6);
this.ioPanel1.MenuBorderSize = 1;
this.ioPanel1.MenuGap = 5;
this.ioPanel1.MinimumSize = new System.Drawing.Size(100, 50);
this.ioPanel1.Name = "ioPanel1";
this.ioPanel1.ShadowColor = System.Drawing.Color.Transparent;
this.ioPanel1.showDebugInfo = false;
this.ioPanel1.ShowPinName = true;
this.ioPanel1.Size = new System.Drawing.Size(760, 116);
this.ioPanel1.TabIndex = 0;
this.ioPanel1.TextAttachToImage = true;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(760, 586);
this.Controls.Add(this.logTextBox1);
this.Controls.Add(this.gridView1);
this.Controls.Add(this.ioPanel1);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.statusStrip1);
this.MaximizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private arCtl.LogTextBox logTextBox1;
private System.Windows.Forms.Timer timer1;
private arDev.AjinEXTEK.UI.IOPanel ioPanel1;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
private arCtl.GridView.GridView gridView1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button11;
private System.Windows.Forms.Button button12;
private System.Windows.Forms.Button button13;
}
}

762
Handler/swPLC/Form1.cs Normal file
View File

@@ -0,0 +1,762 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Windows.Forms;
using AR;
namespace Project
{
public partial class Form1 : Form
{
AR.Log log;
arDev.DIO.IDIO dio;
StateMachine sm;
AR.MemoryMap.Server swplc;
bool exitforce = false;
byte[] buffer = new byte[16];
public Form1()
{
InitializeComponent();
this.Text = $"{Application.ProductName} ver {Application.ProductVersion}";
log = new AR.Log();
log.RaiseMsg += (p1, p2, p3) => { this.logTextBox1.AddMsg(p1, p2, p3); };
this.FormClosing += Form1_FormClosing;
this.logTextBox1.ColorList = new arCtl.sLogMessageColor[] {
new arCtl.sLogMessageColor("NORM",Color.Yellow),
new arCtl.sLogMessageColor("ERR",Color.Red),
new arCtl.sLogMessageColor("WARN",Color.Tomato),
new arCtl.sLogMessageColor("INFO",Color.LightSkyBlue)
};
List<string> piname = new List<String>();
List<string> titles = new List<String>();
List<bool> values = new List<bool>();
titles.AddRange(new string[] {
"Upper Limit","Reel Detect","Lower Limit",
"Motor Direction(1=DN,0=UP)","Motor Run","Emergency",
});
piname.AddRange(new string[] {
"X"+((int)eDIName.PORTL_LIM_UP).ToString("X2"),
"X"+((int)eDIName.PORTL_DET_UP).ToString("X2"),
"X"+((int)eDIName.PORTL_LIM_DN).ToString("X2"),
"Y"+((int)eDOName.PORTL_MOT_DIR).ToString("X2"),
"Y"+((int)eDOName.PORTL_MOT_RUN).ToString("X2"),"--"
});
titles.AddRange(new string[] {
"Upper Limit","Reel Detect","Lower Limit",
"Motor Direction(1=DN,0=UP)","Motor Run","--",
});
piname.AddRange(new string[] {
"X"+((int)eDIName.PORTC_LIM_UP).ToString("X2"),
"X"+((int)eDIName.PORTC_DET_UP).ToString("X2"),
"X"+((int)eDIName.PORTC_LIM_DN).ToString("X2"),
"Y"+((int)eDOName.PORTC_MOT_DIR).ToString("X2"),
"Y"+((int)eDOName.PORTC_MOT_RUN).ToString("X2"),"--"
});
titles.AddRange(new string[] {
"Upper Limit","Reel Detect","Lower Limit",
"Motor Direction(1=DN,0=UP)","Motor Run","--"
});
piname.AddRange(new string[] {
"X"+((int)eDIName.PORTR_LIM_UP).ToString("X2"),
"X"+((int)eDIName.PORTR_DET_UP).ToString("X2"),
"X"+((int)eDIName.PORTR_LIM_DN).ToString("X2"),
"Y"+((int)eDOName.PORTR_MOT_DIR).ToString("X2"),
"Y"+((int)eDOName.PORTR_MOT_RUN).ToString("X2"),"--"
});
for (int i = 0; i < titles.Count; i++)
values.Add(false);
ioPanel1.ColorList = new arDev.AjinEXTEK.UI.ColorListItem[] {
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" },
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Lime, BackColor2 = Color.Green, Remark="True" },
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.Magenta, BackColor2 = Color.Green, Remark="True" },
new arDev.AjinEXTEK.UI.ColorListItem{ BackColor1 = Color.SkyBlue, BackColor2 = Color.LightSkyBlue, Remark="True" },
};
this.ioPanel1.setTitle(titles.ToArray());
this.ioPanel1.setNames(piname.ToArray());
this.ioPanel1.setValue(values.ToArray());
this.ioPanel1.Invalidate();
//내부버퍼확인
titles.Clear();
piname.Clear();
var valueb = new List<ushort>();
for (int i = 0; i < 16; i++)
{
var addr = (eswPLCAddr)i;
piname.Add(i.ToString("X2"));
titles.Add(addr.ToString());
valueb.Add(0);
}
gridView1.ColorList = new arCtl.GridView.ColorListItem[] {
new arCtl.GridView.ColorListItem{ BackColor1 = Color.DimGray, BackColor2 = Color.FromArgb(30,30,30), Remark="False" },
new arCtl.GridView.ColorListItem{ BackColor1 = Color.Lime, BackColor2 = Color.Green, Remark="True" },
new arCtl.GridView.ColorListItem{ BackColor1 = Color.Magenta, BackColor2 = Color.Green, Remark="True" },
new arCtl.GridView.ColorListItem{ BackColor1 = Color.SkyBlue, BackColor2 = Color.LightSkyBlue, Remark="True" },
};
this.gridView1.setTitle(titles.ToArray());
this.gridView1.setNames(piname.ToArray());
this.gridView1.setValue(valueb.ToArray());
this.gridView1.ShowValueString = true;
this.gridView1.ShowNameString = true;
this.gridView1.ShowIndexString = false;
this.gridView1.Invalidate();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (exitforce == false)
{
this.WindowState = FormWindowState.Minimized;
e.Cancel = true;
return;
}
timer1.Stop();
dio.Dispose();
sm.Stop();
log.AddI("Program terminated");
log.Flush();
}
private void Form1_Load(object sender, EventArgs e)
{
log.AddI("Program started");
dio = new arDev.AjinEXTEK.DIO(arDev.AjinEXTEK.ELibraryType.AXT);// arDev.AjinEXTEK.DIO();
if (dio.Init())
{
dio.IOValueChanged += Dio_IOValueChanged;
dio.RunMonitor();
log.Add($"DI:{dio.GetDICount}/DO:{dio.GetDOCount}");
}
else log.AddE($"DIO initialization failed");
swplc = new AR.MemoryMap.Server(PUB.Setting.swplc_name, PUB.Setting.swplc_size);
swplc.ValueChanged += Plc_ValueChanged;
swplc.Start();
ioPanel1.ItemClick += IoPanel1_ItemClick;
sm = new AR.StateMachine();
sm.StepChanged += Sm_StepChanged;
sm.Running += Sm_Running;
sm.SPS += Sm_SPS;
if (dio.IsInit == false) log.AddE($"DIO initialization failed");
log.Add($"State machine started");
sm.Start();
sm.SetNewStep((byte)eSMStep.RUN);
this.starttime = DateTime.Now;
timer1.Start();
}
private void Plc_ValueChanged(object sender, AR.MemoryMap.Core.monitorvalueargs e)
{
}
private void Dio_IOValueChanged(object sender, arDev.DIO.IOValueEventArgs e)
{
if (e.Direction == arDev.DIO.eIOPINDIR.INPUT)
{
var pin = (eDIName)e.ArrIDX;
//센서가 활성화될때는 이값을 설정해준다
//나머지조건은 autocontrol 에서 처리된다.
var value = GetDIValue(pin);
if (value)
{
if (pin == eDIName.PORTL_LIM_DN) WriteBuffer(eswPLCAddr.LPort, 1);
if (pin == eDIName.PORTL_DET_UP) WriteBuffer(eswPLCAddr.LPort, 2);
if (pin == eDIName.PORTL_LIM_UP) WriteBuffer(eswPLCAddr.LPort, 3);
if (pin == eDIName.PORTC_LIM_DN) WriteBuffer(eswPLCAddr.CPort, 1);
if (pin == eDIName.PORTC_DET_UP) WriteBuffer(eswPLCAddr.CPort, 2);
if (pin == eDIName.PORTC_LIM_UP) WriteBuffer(eswPLCAddr.CPort, 3);
if (pin == eDIName.PORTR_LIM_DN) WriteBuffer(eswPLCAddr.RPort, 1);
if (pin == eDIName.PORTR_DET_UP) WriteBuffer(eswPLCAddr.RPort, 2);
if (pin == eDIName.PORTR_LIM_UP) WriteBuffer(eswPLCAddr.RPort, 3);
}
}
else
{
var pin = (eDOName)e.ArrIDX;
if (pin == eDOName.PORTL_MOT_RUN)
{
if (e.NewValue == false) WriteBuffer(eswPLCAddr.LMotor, 3);
else
{
//방향을 확인해야한다
var value = GetDOValue(eDOName.PORTL_MOT_DIR) ? 2 : 1;
WriteBuffer(eswPLCAddr.LMotor, (byte)value);
}
}
else if (pin == eDOName.PORTC_MOT_RUN)
{
if (e.NewValue == false) WriteBuffer(eswPLCAddr.CMotor, 3);
else
{
//방향을 확인해야한다
var value = GetDOValue(eDOName.PORTC_MOT_DIR) ? 2 : 1;
WriteBuffer(eswPLCAddr.CMotor, (byte)value);
}
}
else if (pin == eDOName.PORTR_MOT_RUN)
{
if (e.NewValue == false) WriteBuffer(eswPLCAddr.RMotor, 3);
else
{
//방향을 확인해야한다
var value = GetDOValue(eDOName.PORTR_MOT_DIR) ? 2 : 1;
WriteBuffer(eswPLCAddr.RMotor, (byte)value);
}
}
}
}
private void IoPanel1_ItemClick(object sender, arDev.AjinEXTEK.UI.IOPanel.ItemClickEventArgs e)
{
if (dio != null && dio.IsInit == false) return;
var name = this.ioPanel1.Names[e.idx];
if (name.StartsWith("Y"))
{
var pinno = Convert.ToInt32(name.Substring(1), 16);
var pin = (eDOName)pinno;
var cur = dio.GetDOValue(pinno);
dio.SetOutput(pinno, !cur);
log.Add($"value change [X{pinno:X2}] {pin} to {!cur}");
}
}
bool GetDOValue(eDOName pin)
{
return dio.GetDOValue((int)pin);
}
bool GetDIValue(eDIName pin)
{
if (pin == eDIName.PORTL_LIM_DN || pin == eDIName.PORTC_LIM_DN || pin == eDIName.PORTR_LIM_DN)
{
return !dio.GetDIValue((int)pin);
}
else if (pin == eDIName.PORTL_LIM_UP || pin == eDIName.PORTC_LIM_UP || pin == eDIName.PORTR_LIM_UP)
{
return !dio.GetDIValue((int)pin);
}
else if (pin == eDIName.PORTL_DET_UP || pin == eDIName.PORTC_DET_UP || pin == eDIName.PORTR_DET_UP)
{
return !dio.GetDIValue((int)pin);
}
else if (pin == eDIName.BUT_EMGF)
{
return !dio.GetDIValue((int)pin);
}
else return dio.GetDIValue((int)pin);
}
private void Sm_SPS(object sender, EventArgs e)
{
//limit 센서에 의해 자동 멈춤
if (swplc.Init)
{
AutoStop();
WriteBuffer();
CommandProcess();
}
}
void CommandProcess()
{
//시스템 상태값 0:7 기록
swplc.Write(0, buffer, 0, 12);
//명령어 가져오기 7:3개의 데이터 확인
if (swplc.ReadBytes(12, 3, out byte[] plcbuffer))
{
//내부버퍼에 상태를 기록한다
Array.Copy(plcbuffer, 0, this.buffer, 12, plcbuffer.Length);
}
//command value
var lcmd = ReadBuffer(eswPLCAddr.LCmd);
var ccmd = ReadBuffer(eswPLCAddr.CCmd);
var rcmd = ReadBuffer(eswPLCAddr.RCmd);
//left command check
if (lcmd == 1) MotorControl(eMotList.Left, eMotControl.Down);
else if (lcmd == 2) MotorControl(eMotList.Left, eMotControl.Up);
else if (lcmd == 3) MotorControl(eMotList.Left, eMotControl.Stop);
else if (lcmd == 4) MotorRefresh(eMotList.Left);
if (lcmd < 4 && ReadBuffer(eswPLCAddr.LSts) != 0) WriteBuffer(eswPLCAddr.LSts, 0);
//center command check
if (ccmd == 1) MotorControl(eMotList.Center, eMotControl.Down);
else if (ccmd == 2) MotorControl(eMotList.Center, eMotControl.Up);
else if (ccmd == 3) MotorControl(eMotList.Center, eMotControl.Stop);
else if (ccmd == 4) MotorRefresh(eMotList.Center);
if (ccmd < 4 && ReadBuffer(eswPLCAddr.CSts) != 0) WriteBuffer(eswPLCAddr.CSts, 0);
//right command check
if (rcmd == 1) MotorControl(eMotList.Right, eMotControl.Down);
else if (rcmd == 2) MotorControl(eMotList.Right, eMotControl.Up);
else if (rcmd == 3) MotorControl(eMotList.Right, eMotControl.Stop);
else if (rcmd == 4) MotorRefresh(eMotList.Right);
if (rcmd < 4 && ReadBuffer(eswPLCAddr.RSts) != 0) WriteBuffer(eswPLCAddr.RSts, 0);
}
/// <summary>
/// 모터를 down -> up 합니다.
/// </summary>
/// <param name="mot"></param>
/// <param name="cmd"></param>
void MotorRefresh(eMotList mot)
{
eswPLCAddr address = (eswPLCAddr)((int)eswPLCAddr.LSts + (int)mot);
var Sts = ReadBuffer(address);
//상태값을 변경한다
if (Sts == 0) //처음시작하는경우이다
{
motortime[(int)mot] = DateTime.Now;
MotorControl(mot, eMotControl.Down);
WriteBuffer(address, 1);
log.Add($"Motor[{mot}] Refresh #1 : Down,Addr={address}");
}
else if (Sts == 1) //3초간 내린다. 센서가 감지되면 계속 내려야 한다
{
//low limit check
if (mot == eMotList.Left && GetDIValue(eDIName.PORTL_LIM_DN))
{
log.Add($"Motor[{mot}] Refresh #2 : Down Limit,Addr={address}");
MotorControl(mot, eMotControl.Stop);
WriteBuffer(address, 2);
}
else if (mot == eMotList.Center && GetDIValue(eDIName.PORTC_LIM_DN))
{
log.Add($"Motor[{mot}] Refresh #2 : Down Limit,Addr={address}");
MotorControl(mot, eMotControl.Stop);
WriteBuffer(address, 2);
}
else if (mot == eMotList.Right && GetDIValue(eDIName.PORTR_LIM_DN))
{
log.Add($"Motor[{mot}] Refresh #2 : Down Limit,Addr={address}");
MotorControl(mot, eMotControl.Stop);
WriteBuffer(address, 2);
}
else if (mot == eMotList.Left && GetDIValue(eDIName.PORTL_DET_UP))
{
return;
}
else if (mot == eMotList.Center && GetDIValue(eDIName.PORTC_DET_UP))
{
return;
}
else if (mot == eMotList.Right && GetDIValue(eDIName.PORTR_DET_UP))
{
return;
}
else
{
var ts = DateTime.Now - motortime[(int)mot];
if (ts.TotalSeconds > 3)
{
log.Add($"Motor[{mot}] Refresh #2 : Down Time Over,Addr={address}");
MotorControl(mot, eMotControl.Stop);
WriteBuffer(address, 2);
}
}
}
else if (Sts == 2) //다시 올린다
{
log.Add($"Motor[{mot}] Refresh #3 : Up Addr={address}");
MotorControl(mot, eMotControl.Up);
motortime[(int)mot] = DateTime.Now;
WriteBuffer(address, 3);
}
else if (Sts == 3) //올라가는건
{
WriteBuffer(address, 0);
eswPLCAddr addressCmd = (eswPLCAddr)((int)eswPLCAddr.LCmd + (int)mot);
if (addressCmd == eswPLCAddr.CCmd)
{
}
log.Add($"Refresh[{mot}] Complete Addr={address}/{addressCmd} Reset");
swplc.Write((int)addressCmd, 0);
}
}
int[] motorseq = new int[] { 0, 0, 0 };
DateTime[] motortime = new DateTime[] { DateTime.Now, DateTime.Now, DateTime.Now };
void MotorControl(eMotList mot, eMotControl cmd)
{
if (cmd == eMotControl.Stop)
{
eDOName pin = eDOName.PORTL_MOT_RUN;
if (mot == eMotList.Center) pin = eDOName.PORTC_MOT_RUN;
else if (mot == eMotList.Right) pin = eDOName.PORTR_MOT_RUN;
//출력이켜져있다면 끈다
if (GetDOValue(pin)) SetOutput(pin, false);
}
else if (cmd == eMotControl.Down || cmd == eMotControl.Up)
{
var dir = cmd == eMotControl.Down ? true : false;
eDOName pinDir = eDOName.PORTL_MOT_DIR;
if (mot == eMotList.Center) pinDir = eDOName.PORTC_MOT_DIR;
else if (mot == eMotList.Right) pinDir = eDOName.PORTR_MOT_DIR;
eDOName pinRun = eDOName.PORTL_MOT_RUN;
if (mot == eMotList.Center) pinRun = eDOName.PORTC_MOT_RUN;
else if (mot == eMotList.Right) pinRun = eDOName.PORTR_MOT_RUN;
if (GetDOValue(pinDir) != dir) SetOutput(pinDir, dir);
if (GetDOValue(pinRun) == false) SetOutput(pinRun, true);
}
}
bool SetOutput(eDOName pin, bool value)
{
return dio.SetOutput((int)pin, value);
}
/// <summary>
/// Check the value of internal temporary buffer
/// </summary>
/// <param name="addr"></param>
/// <returns></returns>
byte ReadBuffer(eswPLCAddr addr)
{
return buffer[(int)addr];
}
void WriteBuffer(eswPLCAddr addr, byte value)
{
if (addr >= eswPLCAddr.LCmd) throw new Exception("Command must be written directly to swplc");
buffer[(int)addr] = value;
}
void WriteBuffer()
{
var idx = 0;
//현재상태를 기록합니다
var bReady = dio != null && dio.IsInit;
buffer[idx++] = bReady ? (byte)1 : (byte)2;
//모터상태값3개는 동작시 발생한다
idx++;
idx++;
idx++;
}
/// <summary>
/// Automatically stops when limit sensor and detect are detected.
/// </summary>
void AutoStop()
{
if (dio == null || dio.IsInit == false || autocontrol == false) return;
//모터가 동작중에만 처리한다.
var motrunL = dio.GetDOValue((int)eDOName.PORTL_MOT_RUN);
var motrunC = dio.GetDOValue((int)eDOName.PORTC_MOT_RUN);
var motrunR = dio.GetDOValue((int)eDOName.PORTR_MOT_RUN);
if (motrunL)
{
if (GetDIValue(eDIName.BUT_EMGF))
{
dio.SetOutput((int)eDOName.PORTL_MOT_RUN, false);
}
else
{
var dirDn = dio.GetDOValue((int)eDOName.PORTL_MOT_DIR);
var limUp = GetDIValue(eDIName.PORTL_LIM_UP);
var detect = GetDIValue(eDIName.PORTL_DET_UP);
var limDn = GetDIValue(eDIName.PORTL_LIM_DN);
if (dirDn == false)
{
if (detect)
dio.SetOutput((int)eDOName.PORTL_MOT_RUN, false);
else if (limUp)
dio.SetOutput((int)eDOName.PORTL_MOT_RUN, false);
}
else
{
if (limDn)
dio.SetOutput((int)eDOName.PORTL_MOT_RUN, false);
}
}
}
if (motrunC)
{
if (GetDIValue(eDIName.BUT_EMGF))
{
dio.SetOutput((int)eDOName.PORTC_MOT_RUN, false);
}
else
{
var dirDn = dio.GetDOValue((int)eDOName.PORTC_MOT_DIR);
var limUp = GetDIValue(eDIName.PORTC_LIM_UP);
var detect = GetDIValue(eDIName.PORTC_DET_UP);
var limDn = GetDIValue(eDIName.PORTC_LIM_DN);
if (dirDn == false)
{
if (detect)
dio.SetOutput((int)eDOName.PORTC_MOT_RUN, false);
else if (limUp)
dio.SetOutput((int)eDOName.PORTC_MOT_RUN, false);
}
else
{
if (limDn)
dio.SetOutput((int)eDOName.PORTC_MOT_RUN, false);
}
}
}
if (motrunR)
{
if (GetDIValue(eDIName.BUT_EMGF))
{
dio.SetOutput((int)eDOName.PORTR_MOT_RUN, false);
}
else
{
var dirDn = dio.GetDOValue((int)eDOName.PORTR_MOT_DIR);
var limUp = GetDIValue(eDIName.PORTR_LIM_UP);
var detect = GetDIValue(eDIName.PORTR_DET_UP);
var limDn = GetDIValue(eDIName.PORTR_LIM_DN);
if (dirDn == false)
{
if (detect)
dio.SetOutput((int)eDOName.PORTR_MOT_RUN, false);
else if (limUp)
dio.SetOutput((int)eDOName.PORTR_MOT_RUN, false);
}
else
{
if (limDn)
dio.SetOutput((int)eDOName.PORTR_MOT_RUN, false);
}
}
}
}
private void Sm_Running(object sender, AR.StateMachine.RunningEventArgs e)
{
//throw new NotImplementedException();
var step = (eSMStep)e.Step;
switch (step)
{
case eSMStep.RUN:
break;
}
}
private void Sm_StepChanged(object sender, AR.StateMachine.StepChangeEventArgs e)
{
var step = (eSMStep)e.New;
log.Add($"Step Changed : {step}");
}
DateTime starttime;
bool startminimize = false;
private void timer1_Tick(object sender, EventArgs e)
{
//io상태표시 시작시 최소한한다 230823
if (startminimize == false && this.IsDisposed == false && this.Disposing == false)
{
var ts = DateTime.Now - starttime;
if (ts.TotalSeconds > 3)
{
this.WindowState = FormWindowState.Minimized;
startminimize = true;
}
}
var idx = 0;
if (dio != null && dio.IsInit)
{
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTL_LIM_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTL_DET_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTL_LIM_DN));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTL_MOT_DIR));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTL_MOT_RUN));
ioPanel1.setValue(idx++, GetDIValue(eDIName.BUT_EMGF));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTC_LIM_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTC_DET_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTC_LIM_DN));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTC_MOT_DIR));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTC_MOT_RUN));
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTR_LIM_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTR_DET_UP));
ioPanel1.setValue(idx++, GetDIValue(eDIName.PORTR_LIM_DN));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTR_MOT_DIR));
ioPanel1.setValue(idx++, GetDOValue(eDOName.PORTR_MOT_RUN));
ioPanel1.setValue(idx++, false);
}
else
{
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
ioPanel1.setValue(idx++, false);
}
ioPanel1.Invalidate();
//내부버퍼표시
for (int i = 0; i < 16; i++)
{
var addr = (eswPLCAddr)i;
var val = ReadBuffer(addr);
var title = addr.ToString();
if (addr == eswPLCAddr.LCmd || addr == eswPLCAddr.CCmd || addr == eswPLCAddr.RCmd)
{
if (val == 0) title += "(--)";
else if (val == 1) title += "(up)";
else if (val == 2) title += "(up)";
else if (val == 3) title += "(stop)";
else if (val == 4) title += "(refresh)";
gridView1.setTitle(i, title);
}
else if (addr == eswPLCAddr.LSts || addr == eswPLCAddr.CSts || addr == eswPLCAddr.RSts)
{
if (val == 0) title += "(--)";
else title += "(~run~)";
gridView1.setTitle(i, title);
}
else if (addr == eswPLCAddr.LMotor || addr == eswPLCAddr.CMotor || addr == eswPLCAddr.RMotor)
{
if (val == 0) title += "(--)";
else if (val == 1) title += "(Down)";
else if (val == 2) title += "(up)";
else if (val == 3) title += "(stop)";
gridView1.setTitle(i, title);
}
else if (addr == eswPLCAddr.LPort || addr == eswPLCAddr.CPort || addr == eswPLCAddr.RPort)
{
if (val == 0) title += "(--)";
else if (val == 1) title += "(Limit -)";
else if (val == 2) title += "(Reel Detect)";
else if (val == 3) title += "(Limit +)";
gridView1.setTitle(i, title);
}
gridView1.setValue(i, val);
}
gridView1.Invalidate();
toolStripStatusLabel1.ForeColor = autocontrol ? Color.Green : Color.Black;
toolStripStatusLabel2.Text = swplc.Init ? "Connected" : "Disconnected";
toolStripStatusLabel2.ForeColor = swplc.Init ? Color.Black : Color.Red;
toolStripStatusLabel3.Text = $"Loop({sm.Loop_ms:N0}ms)";
}
bool autocontrol = true;
private void toolStripStatusLabel1_Click(object sender, EventArgs e)
{
this.autocontrol = !this.autocontrol;
}
private void button1_Click(object sender, EventArgs e)
{
var but = sender as Button;
var butno = int.Parse(but.Tag.ToString());
swplc.Write((int)eswPLCAddr.LCmd + butno, 4); //refresh port
}
private void button4_Click(object sender, EventArgs e)
{
var but = sender as Button;
var butno = int.Parse(but.Tag.ToString());
if (butno == 0)
MotorControl(eMotList.Left, eMotControl.Up);
else if (butno == 1)
MotorControl(eMotList.Center, eMotControl.Up);
else if (butno == 2)
MotorControl(eMotList.Right, eMotControl.Up);
}
private void button9_Click(object sender, EventArgs e)
{
var but = sender as Button;
var butno = int.Parse(but.Tag.ToString());
if (butno == 0)
MotorControl(eMotList.Left, eMotControl.Down);
else if (butno == 1)
MotorControl(eMotList.Center, eMotControl.Down);
else if (butno == 2)
MotorControl(eMotList.Right, eMotControl.Down);
}
private void button11_Click(object sender, EventArgs e)
{
}
private void button12_Click(object sender, EventArgs e)
{
var but = sender as Button;
var butno = int.Parse(but.Tag.ToString());
if (butno == 0)
MotorControl(eMotList.Left, eMotControl.Stop);
else if (butno == 1)
MotorControl(eMotList.Center, eMotControl.Stop);
else if (butno == 2)
MotorControl(eMotList.Right, eMotControl.Stop);
}
private void button13_Click(object sender, EventArgs e)
{
var dlg =UTIL.MsgQ("Do you want to exit the program?\nThis is a program that monitors I/O malfunction.It is recommended to run at all times");
if (dlg != DialogResult.Yes) return;
this.exitforce = true;
this.Close();
}
}
}

126
Handler/swPLC/Form1.resx Normal file
View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>104, 17</value>
</metadata>
</root>

26
Handler/swPLC/PUB.cs Normal file
View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.PerformanceData;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public static class PUB
{
private static CSetting setting;
public static CSetting Setting
{
get
{
if(setting == null)
{
setting = new CSetting();
setting.Load();
}
return setting;
}
}
}
}

88
Handler/swPLC/Program.cs Normal file
View File

@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
namespace Project
{
internal static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
if (CheckSingleInstance(false) == false) return;
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
/// <summary>
/// 중복실행 방지 체크
/// </summary>
/// <returns>단일 인스턴스인 경우 true, 중복실행인 경우 false</returns>
static bool CheckSingleInstance(bool prompt = true)
{
string processName = Process.GetCurrentProcess().ProcessName;
Process[] processes = Process.GetProcessesByName(processName);
if (processes.Length > 1)
{
if (prompt == false) return false;
// 중복실행 감지
string message = $"⚠️ {Application.ProductName} 프로그램이 이미 실행 중입니다!\n\n" +
"동시에 여러 개의 프로그램을 실행할 수 없습니다.\n\n" +
"해결방법을 선택하세요:";
var result = MessageBox.Show(message + "\n\n예(Y): 기존 프로그램을 종료하고 새로 시작\n아니오(N): 현재 실행을 취소",
"중복실행 감지",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
// 기존 프로세스들을 종료
try
{
int currentProcessId = Process.GetCurrentProcess().Id;
foreach (Process process in processes)
{
if (process.Id != currentProcessId)
{
process.Kill();
process.WaitForExit(3000); // 3초 대기
}
}
// 잠시 대기 후 계속 진행
Thread.Sleep(1000);
return true;
}
catch (Exception ex)
{
MessageBox.Show($"기존 프로그램 종료 중 오류가 발생했습니다:\n{ex.Message}\n\n" +
"작업관리자에서 수동으로 종료해주세요.",
"오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
else
{
// 현재 실행을 취소
return false;
}
}
return true; // 단일 인스턴스
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("Sofware PLC")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ATK")]
[assembly: AssemblyProduct("swPLC")]
[assembly: AssemblyCopyright("Copyright © ATK 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("efe600a7-d7b3-4d0a-a6a5-e95032733d11")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("23.07.24.0000")]
[assembly: AssemblyFileVersion("23.07.24.0000")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Properties {
using System;
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

1
Handler/swPLC/README.md Normal file
View File

@@ -0,0 +1 @@
# swPLC

3
Handler/swPLC/app.config Normal file
View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

28
Handler/swPLC/enumData.cs Normal file
View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public enum eSMStep
{
IDLE,
RUN,
}
public enum eMotList
{
Left=0,
Center,
Right,
}
public enum eMotControl
{
Stop,
Down,
Up,
}
}

View File

@@ -0,0 +1 @@
claude --dangerously-skip-permissions

111
Handler/swPLC/swPLC.csproj Normal file
View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Project</RootNamespace>
<AssemblyName>SoftwarePLC</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\STDLabelAttach%28ATV%29\swPLC\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="arCommUtil">
<HintPath>..\DLL\arCommUtil.dll</HintPath>
</Reference>
<Reference Include="arControl.Net4, Version=18.7.27.1500, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\arControl.Net4.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CSetting.cs" />
<Compile Include="enumData.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PUB.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Sub\arAjinextek\Library\arAjinextek_Union\arAjinextek_Union.csproj">
<Project>{62370293-92aa-4b73-b61f-5c343eeb4ded}</Project>
<Name>arAjinextek_Union</Name>
</ProjectReference>
<ProjectReference Include="..\Sub\CommData\CommData.csproj">
<Project>{14e8c9a5-013e-49ba-b435-efefc77dd623}</Project>
<Name>CommData</Name>
</ProjectReference>
<ProjectReference Include="..\Sub\CommSM\arCommSM.csproj">
<Project>{d54444f7-1d85-4d5d-b1d1-10d040141a91}</Project>
<Name>arCommSM</Name>
</ProjectReference>
<ProjectReference Include="..\Sub\MemoryMapCore\MemoryMapCore.csproj">
<Project>{140af52a-5986-4413-bf02-8ea55a61891b}</Project>
<Name>MemoryMapCore</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

78
Handler/swPLC/swPLC.sln Normal file
View File

@@ -0,0 +1,78 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 15 for Windows Desktop
VisualStudioVersion = 15.0.28307.1000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "swPLC", "swPLC.csproj", "{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arCommSM", "..\Sub\CommSM\arCommSM.csproj", "{D54444F7-1D85-4D5D-B1D1-10D040141A91}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommData", "..\Sub\CommData\CommData.csproj", "{14E8C9A5-013E-49BA-B435-EFEFC77DD623}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Import", "Import", "{946678A3-F25F-44B8-82E7-2E8437C6B33D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MemoryMapCore", "..\Sub\MemoryMapCore\MemoryMapCore.csproj", "{140AF52A-5986-4413-BF02-8EA55A61891B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arAjinextek_Union", "..\Sub\arAjinextek\Library\arAjinextek_Union\arAjinextek_Union.csproj", "{62370293-92AA-4B73-B61F-5C343EEB4DED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Debug|x86.ActiveCfg = Debug|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Debug|x86.Build.0 = Debug|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Release|Any CPU.Build.0 = Release|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Release|x86.ActiveCfg = Release|Any CPU
{EFE600A7-D7B3-4D0A-A6A5-E95032733D79}.Release|x86.Build.0 = Release|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Debug|x86.ActiveCfg = Debug|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Debug|x86.Build.0 = Debug|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Release|Any CPU.Build.0 = Release|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Release|x86.ActiveCfg = Release|Any CPU
{D54444F7-1D85-4D5D-B1D1-10D040141A91}.Release|x86.Build.0 = Release|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|Any CPU.Build.0 = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|x86.ActiveCfg = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|x86.Build.0 = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Release|Any CPU.ActiveCfg = Release|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Release|Any CPU.Build.0 = Release|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Release|x86.ActiveCfg = Release|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Release|x86.Build.0 = Release|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Debug|x86.ActiveCfg = Debug|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Debug|x86.Build.0 = Debug|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Release|Any CPU.Build.0 = Release|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Release|x86.ActiveCfg = Release|Any CPU
{140AF52A-5986-4413-BF02-8EA55A61891B}.Release|x86.Build.0 = Release|Any CPU
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Debug|x86.ActiveCfg = Debug|x86
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Debug|x86.Build.0 = Debug|x86
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Release|Any CPU.Build.0 = Release|Any CPU
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Release|x86.ActiveCfg = Release|x86
{62370293-92AA-4B73-B61F-5C343EEB4DED}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D54444F7-1D85-4D5D-B1D1-10D040141A91} = {946678A3-F25F-44B8-82E7-2E8437C6B33D}
{140AF52A-5986-4413-BF02-8EA55A61891B} = {946678A3-F25F-44B8-82E7-2E8437C6B33D}
{62370293-92AA-4B73-B61F-5C343EEB4DED} = {946678A3-F25F-44B8-82E7-2E8437C6B33D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A1453016-E3CB-4CF9-97A2-94AAAAD23E11}
EndGlobalSection
EndGlobal

View File

@@ -105,7 +105,6 @@ namespace Project
PUB._virtualFG40.FreeSystem();
PUB.log_[logIdx].AddE($"Open device failed : {status}");
PUB._isCrevisOpen[camIdx] = false;
return false;
}