This commit is contained in:
chi
2025-05-26 17:19:36 +09:00
parent 8d0f0f8c8f
commit d6e7c118fb
40 changed files with 1550 additions and 3133 deletions

View File

@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33801.468
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVEmulator", "AGVEmulator\AGVEmulator.csproj", "{9312AB43-72F6-4365-A266-E767215FA7F5}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnigEmulator", "AGVEmulator\EnigEmulator.csproj", "{9312AB43-72F6-4365-A266-E767215FA7F5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ENIGProtocol", "..\Cs_HMI\SubProject\EnigProtocol\enigprotocol\ENIGProtocol.csproj", "{FDB05AF0-DBF8-4CD2-BC02-BE251D8C5575}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,6 +17,10 @@ Global
{9312AB43-72F6-4365-A266-E767215FA7F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9312AB43-72F6-4365-A266-E767215FA7F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9312AB43-72F6-4365-A266-E767215FA7F5}.Release|Any CPU.Build.0 = Release|Any CPU
{FDB05AF0-DBF8-4CD2-BC02-BE251D8C5575}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDB05AF0-DBF8-4CD2-BC02-BE251D8C5575}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDB05AF0-DBF8-4CD2-BC02-BE251D8C5575}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDB05AF0-DBF8-4CD2-BC02-BE251D8C5575}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -1,64 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace AGVEmulator
{
class DevCAL : AR.Dev.RS232
{
public override bool ProcessRecvData(byte[] data)
{
var sample = "02 30 31 32 01 03";
var barr = sample.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray();
var sendstr = System.Text.Encoding.Default.GetString(barr);
//RaiseMessage(MessageType.Normal, "Tx:" + barr.HexString());
//WriteData(barr);
return true;
}
protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
{
List<byte> remain = new List<byte>();
bool retval = false;
foreach (var b in buf)
{
if (retval)
{
remain.Add(b);
continue;
}
if (b == 0x02) //stx
{
tempBuffer.Clear();
tempBuffer.Add(b);
}
else if (b == 0x03) //etx
{
tempBuffer.Add(b);
retval = true;
}
else
{
if (tempBuffer.Count > 0 && tempBuffer[0] == 0xDD)
{
tempBuffer.Add(b);
if (tempBuffer.Count > 10)
{
RaiseMessage(MessageType.Error, "buffer over");
tempBuffer.Clear();
retval = false;
}
}
else
{
//trash
}
}
}
remainBuffer = remain.ToArray();
return retval;
}
}
}

View File

@@ -1,298 +0,0 @@
using System;
using static AGVEmulator.DevBMS;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics.Contracts;
using arCtl;
using System.Xml.Schema;
using System.Drawing;
namespace AGVEmulator
{
class DevPLC : AR.Dev.RS232
{
byte runtime = 0;
public enum eCommand : byte
{
LOAD = 0, //EEPROM 불러오기
SAVE, //EEPROM 저장
RESET, //초기화
PINGCHK,
SET_PINMODE, //PINMODE 설정
SET_DOUTPUT, //디지털출력설정(포트번호,값[1,0])
SET_AOUTPUT, //아날로그출력설정(포트GET_SETTING = 50, //셋팅값 요청
SET_FLAG,
SET_EEPROM,
SET_MANUALSPEED,
GET_SETTING = 50,
GUIDE_MOT = 90, //가이드커버(양쪽) 0=멈춤,1=UP,2=DN 아스키코드표 90=Z
SET_EEP_DIREV,
};
public enum DOName
{
PINO_GUIDEMOTOR_LDIR,
PINO_GUIDEMOTOR_LRUN,
PINO_GUIDEMOTOR_RDIR,
PINO_GUIDEMOTOR_RRUN,
PINO_EMPTY_26,
PINO_EMPTY_27,
PINO_EMPTY_28,
PINO_EMPTY_29,
}
public enum DIName
{
PINI_EMG,
PINI_BTN_1,
PINI_BTN_2,
PINI_BTN_3,
PINI_BTN_4,
PINI_OVERLOADL,
PINI_OVERLOADR,
PINI_EMPTY_36,
PINI_EMPTY_37,
PINI_EMPTY_38,
PINI_BTN_ZUP,
PINI_BTN_ZDN,
PINI_LIMIT_LU,
PINI_LIMIT_LD,
PINI_LIMIT_RU,
PINI_LIMIT_RD,
PINI_STOP,
}
public class ValueChangedArgs : EventArgs
{
public int Idx { get; set; }
public bool Value { get; set; }
public bool IsOut { get; set; }
public ValueChangedArgs(int idx, bool val, bool isOut)
{
this.Idx = idx;
this.Value = val;
this.IsOut = isOut;
}
}
public class RequestBatteryDataArgs : EventArgs
{
public UInt32 IOValue { get; set; }
public UInt32 FGValue { get; set; }
public RequestBatteryDataArgs()
{
this.IOValue = 0x00;
this.FGValue = 0xFF;
}
}
public event EventHandler<RequestBatteryDataArgs> RequestData;
public event EventHandler<ValueChangedArgs> ValueChanged;
public override bool ProcessRecvData(byte[] data)
{
//dd로 시작하고 34개의 데이터
// var sample = "DD 03 00 1B 0A 65 00 00 21 63 29 04 00 00 2C 92 00 00 00 00 00 00 28 51 03 08 02 0B 69 0B 66 FC 9C 77";
// var barr = sample.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray();
var datalne = data[2];
byte[] buffer = new byte[datalen];
Array.Copy(data, 3, buffer, 0, buffer.Length);
var cmd = (eCommand)buffer[0];
if (cmd == eCommand.GUIDE_MOT)
{
var p1 = (char)buffer[1];
var p2 = (char)buffer[2];
switch (p1)
{
case 'A': //all
if (p2 == 'P')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, true, true));
}
else if (p2 == 'N')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, false, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, false, true));
}
else if(p2 == 'S')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, false, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, false, true));
}
break;
case 'L':
if (p2 == 'P')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, true, true));
}
else if (p2 == 'N')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, false, true));
}
else if (p2 == 'S')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, false, true));
}
break;
case 'R':
if (p2 == 'P')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, true, true));
}
else if (p2 == 'N')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true));
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, false, true));
}
else if (p2 == 'S')
{
ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, false, true));
}
break;
}
}
return true;
}
public override void AutoSendData()
{
//if (_device.DtrEnable == false) return;
List<byte> barr = new List<byte>();
barr.Add((byte)'@');
barr.Add((byte)'@');
barr.Add(10);
barr.Add((byte)'I');
//입/출력포트 각 16접 데이터 입력
UInt32 iovalue = 0;
//플래그 각 16접 데이터 입력
UInt32 fgvalue = 0;
if (RequestData != null)
{
var p = new RequestBatteryDataArgs();
RequestData.Invoke(this, p);
iovalue = p.IOValue;
fgvalue = p.FGValue;
}
var arr_volt = BitConverter.GetBytes(iovalue).ToArray();
foreach (var b in arr_volt)
barr.Add(b);
arr_volt = BitConverter.GetBytes(fgvalue).ToArray();
foreach (var b in arr_volt)
barr.Add(b);
if (runtime < 255) runtime += 1;
else runtime = 0;
barr.Add(runtime);
//체크섬무시
barr.Add((byte)'*');
//barr.Add((byte)'*');
barr.Add(0x0D);
barr.Add(0x0A);
RaiseMessage(MessageType.Normal, "Tx:" + barr.ToArray().HexString());
WriteData(barr.ToArray());
}
bool findstx2 = false;
byte datalen = 0;
protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
{
//DD A5 03 00 FF FD 77 0D
//remainBuffer = new byte[] { };
List<byte> remain = new List<byte>();
bool retval = false;
foreach (var b in buf)
{
if (retval)
{
remain.Add(b);
continue;
}
if (findSTX == false)
{
if (b == '@')
{
tempBuffer.Clear();
tempBuffer.Add(b);
findSTX = true;
findstx2 = false;
datalen = 0;
}
}
else if (findstx2 == false)
{
if (b == '@')
{
tempBuffer.Add(b);
findstx2 = true;
datalen = 0;
}
else
{
tempBuffer.Clear();
findSTX = false;
findstx2 = false;
}
}
else if (datalen == 0)
{
tempBuffer.Add(b);
datalen = b;
}
else
{
//데이터길이가 만족한 상태
tempBuffer.Add(b);
var maxlen = datalen + 3 + 3;
if (tempBuffer.Count == maxlen)
{
if (tempBuffer[tempBuffer.Count - 1] == 0x0A && tempBuffer[tempBuffer.Count - 2] == 0x0D)
{
//무조건 맞는걸로 하자 체크섬은 체크하지 말자
retval = true;
}
}
else if (tempBuffer.Count > maxlen)
{
RaiseMessage(MessageType.Error, $"buffer over({maxlen})");
findstx2 = false;
findSTX = false;
datalen = 0;
tempBuffer.Clear();
}
}
}
remainBuffer = remain.ToArray();
return retval;
}
}
}

View File

@@ -0,0 +1,87 @@
using ENIG;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace AGVEmulator
{
public class DevXBE : AR.Dev.RS232
{
private EEProtocol proto;
public event EventHandler<EEProtocol.DataEventArgs> ProtocReceived;
public DevXBE()
{
proto = new EEProtocol();
proto.OnDataReceived += Proto_OnDataReceived;
proto.OnMessage += Proto_OnMessage;
}
~DevXBE()
{
proto.OnDataReceived -= Proto_OnDataReceived;
proto.OnMessage -= Proto_OnMessage;
}
public override bool ProcessRecvData(byte[] data)
{
return true;
}
protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
{
//여기서 최초데이터를 파싱한다
remainBuffer = null;
this.proto.ProcessReceivedData(buf);
return false;
}
private void Proto_OnDataReceived(object sender, EEProtocol.DataEventArgs e)
{
var hexstrRaw = e.ReceivedPacket.RawData.HexString();
var hexstr = e.ReceivedPacket.Data.HexString();
var cmd = e.ReceivedPacket.Command.ToString("X2");
var id = e.ReceivedPacket.ID.ToString("X2");
var dataStr = System.Text.Encoding.Default.GetString(e.ReceivedPacket.Data);
RaiseMessage(MessageType.Recv, $"ID:{id},CMD:{cmd},DATA:{hexstr}");
ProtocReceived?.Invoke(this, e);
}
private void Proto_OnMessage(object sender, EEProtocol.MessageEventArgs e)
{
RaiseMessage(e.IsError, e.Message);
}
/// <summary>
/// 목적지 태그번호 전송
/// </summary>
public void SendGotoTag(uint tag)
{
Send(ENIGProtocol.AGVCommands.Goto, tag.ToString("0000"));
}
public void SendCurrentPos(uint tag)
{
Send(ENIGProtocol.AGVCommands.SetCurrent, tag.ToString("0000"));
}
private void Send(ENIGProtocol.AGVCommands Command, string datastr)
{
byte id = 0;
byte cmd = (byte)Command; //move to target
byte[] data = null;
if (datastr != null && string.IsNullOrEmpty(datastr) == false)
data = System.Text.Encoding.Default.GetBytes(datastr);
var packet = proto.CreatePacket(id, cmd, data);
if (WriteData(packet, false))
{
var hexstr = System.Text.Encoding.Default.GetString(data);
RaiseMessage(MessageType.Send, $"ID:{id},CMD:{cmd},DATA:{hexstr}");
}
}
}
}

View File

@@ -7,7 +7,7 @@
<ProjectGuid>{9312AB43-72F6-4365-A266-E767215FA7F5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>AGVEmulator</RootNamespace>
<AssemblyName>AGVEmulator</AssemblyName>
<AssemblyName>EnigEmulator</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
@@ -61,8 +61,7 @@
<ItemGroup>
<Compile Include="DevAGV.cs" />
<Compile Include="DevBMS.cs" />
<Compile Include="DevCAL.cs" />
<Compile Include="DevPLC.cs" />
<Compile Include="DevXBE.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
@@ -72,6 +71,15 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RS232.cs" />
<Compile Include="RunCode\_AGV.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="RunCode\_XBEE.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="RunCode\_BMS.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UC\SerialConn.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -117,5 +125,11 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Cs_HMI\SubProject\EnigProtocol\enigprotocol\ENIGProtocol.csproj">
<Project>{fdb05af0-dbf8-4cd2-bc02-be251d8c5575}</Project>
<Name>ENIGProtocol</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -16,11 +16,10 @@ namespace AGVEmulator
{
public partial class Form1 : Form
{
arUtil.Log logPLC, logAGV, logBMS, logCAL;
arUtil.Log logAGV, logBMS, logCAL;
DevBMS BMS;
DevAGV AGV;
DevPLC PLC;
DevCAL CAL;
DevXBE XBE;
float BMS_MaxA = 80f;
@@ -34,17 +33,18 @@ namespace AGVEmulator
public Form1()
{
InitializeComponent();
logPLC = new arUtil.Log();
this.Text = $"{Application.ProductName} ver.{Application.ProductVersion}";
// logPLC = new arUtil.Log();
logAGV = new arUtil.Log();
logBMS = new arUtil.Log();
logCAL = new arUtil.Log();
logPLC.FileNameFormat = "{yyyyMMdd}_PLC";
// logPLC.FileNameFormat = "{yyyyMMdd}_PLC";
logAGV.FileNameFormat = "{yyyyMMdd}_AGV";
logBMS.FileNameFormat = "{yyyyMMdd}_BMS";
logCAL.FileNameFormat = "{yyyyMMdd}_CAL";
logPLC.RaiseMsg += (s1, e1, d1) => { this.rtPLC.AddMsg(s1, e1, d1); };
// logPLC.RaiseMsg += (s1, e1, d1) => { this.rtPLC.AddMsg(s1, e1, d1); };
logAGV.RaiseMsg += (s1, e1, d1) =>
{
if (d1.StartsWith("Tx"))
@@ -65,7 +65,7 @@ namespace AGVEmulator
new arCtl.sLogMessageColor("TX", Color.Orange),
};
rtPLC.ColorList = logcolor;
//rtPLC.ColorList = logcolor;
rtAGV.ColorList = logcolor;
rtBMS.ColorList = logcolor;
rtCAL.ColorList = logcolor;
@@ -75,77 +75,40 @@ namespace AGVEmulator
BMS = new DevBMS();
AGV = new DevAGV();
PLC = new DevPLC();
CAL = new DevCAL();
XBE = new DevXBE();
this.serAGV.dev = AGV;
this.serPLC.dev = PLC;
this.serBMS.dev = BMS;
this.serCAL.dev = CAL;
this.serCAL.dev = XBE;
BMS.Message += Bms_Message;
AGV.Message += Bms_Message;
PLC.Message += Bms_Message;
CAL.Message += Bms_Message;
BMS.Message += BMS_Message;
AGV.Message += AGV_Message;
XBE.Message += CAL_Message;
BMS.RequestBatteryData += Bms_RequestBatteryData;
BMS.RequestVoltageData += BMS_RequestVoltageData;
PLC.RequestData += Plc_RequestData;
PLC.ValueChanged += Plc_ValueChanged;
XBE.ProtocReceived += CAL_ProtocReceived;
AGV.RequestStatusData += Agv_RequestStatusData;
AGV.ValueChanged += Agv_ValueChanged;
AGV.StsValueChanged += Agv_StsValueChanged;
AGV.Command += Agv_Command;
}
Random rnd;
private void Form1_Load(object sender, EventArgs e)
{
rnd = new Random(3000);
serAGV.BaudRate = 57600;
serPLC.BaudRate = 57600;
// serPLC.BaudRate = 57600;
trackBar1_Scroll(null, null);
timer1.Start();
//plc inout 이름 설정
List<string> titles = new List<string>();
List<bool> values = new List<bool>();
for (int i = 0; i < 16; i++)
{
var pin = (DevPLC.DIName)i;
titles.Add(pin.ToString());
values.Add(false);
}
for (int i = 0; i < 8; i++)
{
var pin = (DevPLC.DOName)i;
titles.Add(pin.ToString());
values.Add(false);
}
this.gvdPLCInOut.setTitle(titles.ToArray());
this.gvdPLCInOut.setValue(values.ToArray());
titles.Clear();
values.Clear();
for (int i = 0; i < 32; i++)
{
titles.Add(i.ToString());
values.Add(false);
}
this.gvdPLCFlag.setTitle(titles.ToArray());
this.gvdPLCFlag.setValue(values.ToArray());
this.gvdPLCInOut.ItemClick += GvdPLCInOut_ItemClick;
this.gvdPLCFlag.ItemClick += GvdPLCFlag_ItemClick;
this.gvdPLCFlag.ColorList = new arFrame.Control.ColorListItem[] {
new arFrame.Control.ColorListItem(){ BackColor1 = Color.DimGray, BackColor2 = Color.Gray },
new arFrame.Control.ColorListItem(){ BackColor1 = Color.Green, BackColor2 = Color.Lime },
new arFrame.Control.ColorListItem(){ BackColor1 = Color.Red, BackColor2 = Color.Tomato },
};
this.gvdPLCInOut.ColorList = this.gvdPLCFlag.ColorList;
var arrs = Enum.GetNames(typeof(DevAGV.esystemflag0));
foreach (var item in arrs)
@@ -256,15 +219,7 @@ namespace AGVEmulator
agvViewer1.MarkTouched += AgvViewer1_MarkTouched;
agvViewer1.Command += AgvViewer1_Command;
}
private void Agv_Command(object sender, commandargs e)
{
switch (e.Command.ToLower())
{
case "stopmark":
agvViewer1.StopbyMark = true;
break;
}
}
void MakeViewer()
{
//태그목록
@@ -385,143 +340,8 @@ namespace AGVEmulator
button18.PerformClick();
}
private void Agv_StsValueChanged(object sender, DevAGV.StsValueChangedArgs e)
{
Console.WriteLine($"STS [{e.vtype}] VAL={e.Value}");
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<StsValueChangedArgs>(Agv_StsValueChanged), sender, e);
return;
}
switch (e.vtype)
{
case DevAGV.estsvaluetype.direction:
foreach (RadioButton c in this.groupBox5.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
}
else
{
c.Checked = false;
}
c.Refresh();
}
groupBox5.Refresh();
break;
case DevAGV.estsvaluetype.bunki:
foreach (RadioButton c in this.groupBox2.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
case DevAGV.estsvaluetype.speed:
foreach (RadioButton c in this.groupBox4.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
case DevAGV.estsvaluetype.sensor:
foreach (RadioButton c in this.groupBox8.Controls)
{
if (c.Text.Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
}
}
private void Agv_ValueChanged(object sender, DevAGV.ValueChangedArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new EventHandler<ValueChangedArgs>(Agv_ValueChanged), sender, e);
return;
}
//내부값이 바뀌었다면 컨트롤을 변경해준다.
switch (e.vtype)
{
case DevAGV.evaluetype.system0:
foreach (CheckBox c in panel6.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.system1:
var v = (DevAGV.esystemflag1)e.Idx;
if (e.Value)
{
if (v == esystemflag1.agv_run)
{
agvViewer1.wat.Restart();
}
if (v == esystemflag1.agv_stop)
{
agvViewer1.wat.Stop();
}
}
foreach (CheckBox c in panel7.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.error:
foreach (CheckBox c in panel9.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.signal:
foreach (CheckBox c in panel8.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
}
}
char GetGroupItemCheckbox(GroupBox grp)
{
@@ -544,60 +364,7 @@ namespace AGVEmulator
int PLC_LeftDir = 0;
int PLC_RightDir = 0;
private void Plc_ValueChanged(object sender, DevPLC.ValueChangedArgs e)
{
if (e.IsOut)
{
this.gvdPLCInOut.setValue(e.Idx + 16, e.Value);
var doname = (DevPLC.DOName)e.Idx;
switch (doname)
{
case DevPLC.DOName.PINO_GUIDEMOTOR_RRUN:
break;
case DevPLC.DOName.PINO_GUIDEMOTOR_LRUN:
break;
}
}
else
{
this.gvdPLCInOut.setValue(e.Idx, e.Value);
}
this.gvdPLCInOut.Invalidate();
}
private void Plc_RequestData(object sender, DevPLC.RequestBatteryDataArgs e)
{
var idx = 0;
UInt32 val = 0;
foreach (var data in gvdPLCInOut.Values)
{
SetBit(ref val, idx++, (data > 0));
}
e.IOValue = val;
idx = 0;
val = 0;
foreach (var data in gvdPLCFlag.Values)
{
SetBit(ref val, idx++, (data > 0));
}
e.FGValue = val;
}
public void SetBit(ref UInt32 _value, int idx, Boolean value)
{
if (value)
{
var offset = (UInt32)(1 << idx);
_value = _value | offset;
}
else
{
var offset = (UInt32)(~(1 << idx));
_value = _value & offset;
}
}
public void SetBit(ref UInt16 _value, int idx, Boolean value)
{
if (value)
@@ -644,76 +411,8 @@ namespace AGVEmulator
private void Agv_RequestStatusData(object sender, DevAGV.RequestStatusDataArgs e)
{
//UInt16 system0 = 0xFFFF;
//UInt16 system1 = 0xFFFF;
//UInt16 error = 0xFFFF;
//byte signal = 0xFF;
aaplycheckboxbit(ref AGV.system0, panel6);
aaplycheckboxbit(ref AGV.system1, panel7);
aaplycheckboxbit(ref AGV.error, panel9);
aaplycheckboxbit(ref AGV.signal, panel8);
if (this.agvViewer1.StopbyMark) AGV.sts_speed = 'S';
else AGV.sts_speed = GetGroupItemCheckbox(groupBox4);
AGV.sts_bunki = GetGroupItemCheckbox(groupBox2);
AGV.sts_dir = GetGroupItemCheckbox(groupBox5);
AGV.sts_sensor = GetGroupItemCheckbox(groupBox8);
//this.Invoke(new Action(() =>
//{
// e.system0 = system0;
// e.system1 = system1;
// e.error = error;
// e.signal = signal;
// e.speed = GetGroupItemCheckbox(groupBox4);
// e.bunki = GetGroupItemCheckbox(groupBox2);
// e.direction = GetGroupItemCheckbox(groupBox5);
// e.sensor = GetGroupItemCheckbox(groupBox8);
// e.volt = 23.4f;
//}));
}
private void BMS_RequestVoltageData(object sender, DevBMS.RequestVoltageDataArgs e)
{
//cell전압값추가
for (int i = 0; i < cellvolt.Length; i++)
{
this.cellvolt[i] = (UInt16)rnd.Next(3300, 3350);
}
Array.Copy(this.cellvolt, 0, e.cellVolt, 0, 8);
this.btc1.Invoke(new Action(() => {
var idx = 0;
btc1.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc2.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc3.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc4.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc5.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc6.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc7.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc8.Text = (this.cellvolt[idx++] / 1000f).ToString();
}));
}
private void Bms_RequestBatteryData(object sender, DevBMS.RequestBatteryDataArgs e)
{
if (checkBox1.Checked)
this.trackBar1.Invoke(new Action(() =>
{
this.trackBar1.Value -= 1;
trackBar1_Scroll(null, null);
}));
e.CurA = (int)BMS_CurA;
e.MaxA = (int)BMS_MaxA;
e.Remain = BMS_Remain;
e.Volt = BMS_Volt;
}
private void button5_Click(object sender, EventArgs e)
{
AGV.WriteData("ACK");
@@ -724,43 +423,7 @@ namespace AGVEmulator
AGV.WriteData("NAK");
}
private void button7_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN;
var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN;
var pinDL = DevPLC.DOName.PINO_GUIDEMOTOR_LDIR;
var pinDR = DevPLC.DOName.PINO_GUIDEMOTOR_RDIR;
this.gvdPLCInOut.setValue((int)pinDL + 16, true);
this.gvdPLCInOut.setValue((int)pinDR + 16, true);
this.gvdPLCInOut.setValue((int)pinL + 16, true);
this.gvdPLCInOut.setValue((int)pinR + 16, true);
this.gvdPLCInOut.Invalidate();
}
private void button6_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN;
var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN;
var cur = gvdPLCInOut.Values[(int)pinL + 16];
this.gvdPLCInOut.setValue((int)pinL + 16, false);
this.gvdPLCInOut.setValue((int)pinR + 16, false);
this.gvdPLCInOut.Invalidate();
}
private void button8_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN;
var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN;
var pinDL = DevPLC.DOName.PINO_GUIDEMOTOR_LDIR;
var pinDR = DevPLC.DOName.PINO_GUIDEMOTOR_RDIR;
this.gvdPLCInOut.setValue((int)pinDL + 16, false);
this.gvdPLCInOut.setValue((int)pinDR + 16, false);
this.gvdPLCInOut.setValue((int)pinL + 16, true);
this.gvdPLCInOut.setValue((int)pinR + 16, true);
this.gvdPLCInOut.Invalidate();
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
@@ -780,14 +443,14 @@ namespace AGVEmulator
{
timer1.Stop();
sbAGV.ForeColor = AGV.IsOpen ? Color.ForestGreen : Color.Red;
sbPLC.ForeColor = PLC.IsOpen ? Color.ForestGreen : Color.Red;
// sbPLC.ForeColor = PLC.IsOpen ? Color.ForestGreen : Color.Red;
sbBMS.ForeColor = BMS.IsOpen ? Color.ForestGreen : Color.Red;
sbCAL.ForeColor = CAL.IsOpen ? Color.ForestGreen : Color.Red;
sbCAL.ForeColor = XBE.IsOpen ? Color.ForestGreen : Color.Red;
if (checkBox2.Checked && PLC != null && PLC.IsOpen) PLC.AutoSendData(); //자동전송해야함
//if (checkBox2.Checked && PLC != null && PLC.IsOpen) PLC.AutoSendData(); //자동전송해야함
if (checkBox3.Checked && AGV != null && AGV.IsOpen) AGV.AutoSendData(); //자동전송해야함
if (BMS != null && BMS.IsOpen) BMS.AutoSendData(); //자동전송해야함
if (CAL != null && CAL.IsOpen) CAL.AutoSendData(); //자동전송해야함
if (XBE != null && XBE.IsOpen) XBE.AutoSendData(); //자동전송해야함
if (chkSimulation.Checked && AGV.GetAGV(esystemflag1.agv_run))
{
@@ -805,202 +468,23 @@ namespace AGVEmulator
agvViewer1.Invalidate();
}
UpdatePLC();
label7.Text = $"I/O L({PLC_LeftPosition}),R({PLC_RightPosition})";
timer1.Start();
}
void UpdatePLC()
{
//plc값을 업데이트해준다.
var LRun = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN + 16) == 1;
var RRun = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN + 16) == 1;
var LDir = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_LDIR + 16) == 1;
var RDir = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_RDIR + 16) == 1;
if (LRun == false) this.PLC_LeftDir = 0;
else if (LDir == true) this.PLC_LeftDir = 1;
else this.PLC_LeftDir = -1;
if (RRun == false) this.PLC_RightDir = 0;
else if (RDir == true) this.PLC_RightDir = 1;
else this.PLC_RightDir = -1;
this.PLC_LeftPosition += this.PLC_LeftDir;
this.PLC_RightPosition += this.PLC_RightDir;
var maxvalue = 20;
if (PLC_LeftPosition >= maxvalue)
{
PLC_LeftPosition = maxvalue;
PLC_LeftDir = 0;//멈춤
var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN;
gvdPLCInOut.setValue(idx + 16, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_LD;
gvdPLCInOut.setValue(idx, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_LU;
gvdPLCInOut.setValue(idx, true);
}
else if (PLC_LeftPosition <= 0)
{
PLC_LeftPosition = 0;
PLC_LeftDir = 0;
var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN;
gvdPLCInOut.setValue(idx + 16, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_LU;
gvdPLCInOut.setValue(idx, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_LD;
gvdPLCInOut.setValue(idx, true);
}
else if (PLC_LeftPosition > 5 && PLC_LeftPosition < maxvalue - 5)
{
if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_LD) > 0)
gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_LD, false);
if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_LU) > 0)
gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_LU, false);
}
if (PLC_RightPosition >= maxvalue)
{
PLC_RightPosition = maxvalue;
PLC_RightDir = 0;//멈춤
var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN;
gvdPLCInOut.setValue(idx + 16, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_RD;
gvdPLCInOut.setValue(idx, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_RU;
gvdPLCInOut.setValue(idx, true);
}
else if (PLC_RightPosition <= 0)
{
PLC_RightPosition = 0;
PLC_RightDir = 0;
var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN;
gvdPLCInOut.setValue(idx + 16, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_RU;
gvdPLCInOut.setValue(idx, false);
idx = (int)DevPLC.DIName.PINI_LIMIT_RD;
gvdPLCInOut.setValue(idx, true);
}
else if (PLC_RightPosition > 5 && PLC_RightPosition < maxvalue - 5)
{
if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_RD) > 0)
gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_RD, false);
if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_RU) > 0)
gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_RU, false);
}
}
private void Bms_Message(object sender, AR.Dev.RS232.MessageEventArgs e)
{
var dev = sender as AR.Dev.RS232;
if (dev is DevBMS)
{
logBMS.Add(e.Message);
}
else if (dev is DevAGV)
{
logAGV.Add(e.Message);
}
else if (dev is DevPLC)
{
logPLC.Add(e.Message);
}
else if (dev is DevCAL)
{
if (e.MsgType == AR.Dev.RS232.MessageType.Send)
logCAL.Add(">> " + e.Data.HexString());
else if (e.MsgType == AR.Dev.RS232.MessageType.Recv)
logCAL.Add("<< " + e.Data.HexString());
else logCAL.Add(e.Message);
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
timer1.Stop();
logPLC.Flush();
logAGV.Flush();
logBMS.Flush();
logCAL.Flush();
}
private void btPLCemg_Click(object sender, EventArgs e)
{
var pin = DevPLC.DIName.PINI_EMG;
var cur = gvdPLCInOut.Values[(int)pin];
this.gvdPLCInOut.setValue((int)pin, cur == 0);
this.gvdPLCInOut.Invalidate();
}
private void button9_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DIName.PINI_LIMIT_LU;
var pinR = DevPLC.DIName.PINI_LIMIT_RU;
var cur = gvdPLCInOut.Values[(int)pinL];
this.gvdPLCInOut.setValue((int)pinL, cur == 0);
this.gvdPLCInOut.setValue((int)pinR, cur == 0);
pinL = DevPLC.DIName.PINI_LIMIT_LD;
pinR = DevPLC.DIName.PINI_LIMIT_RD;
this.gvdPLCInOut.setValue((int)pinL, false);
this.gvdPLCInOut.setValue((int)pinR, false);
this.gvdPLCInOut.Invalidate();
}
private void button10_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DIName.PINI_LIMIT_LD;
var pinR = DevPLC.DIName.PINI_LIMIT_RD;
var cur = gvdPLCInOut.Values[(int)pinL];
this.gvdPLCInOut.setValue((int)pinL, cur == 0);
this.gvdPLCInOut.setValue((int)pinR, cur == 0);
pinL = DevPLC.DIName.PINI_LIMIT_LU;
pinR = DevPLC.DIName.PINI_LIMIT_RU;
this.gvdPLCInOut.setValue((int)pinL, false);
this.gvdPLCInOut.setValue((int)pinR, false);
this.gvdPLCInOut.Invalidate();
}
private void button13_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DIName.PINI_BTN_1;
var cur = gvdPLCInOut.Values[(int)pinL];
this.gvdPLCInOut.setValue((int)pinL, cur == 0);
this.gvdPLCInOut.Invalidate();
}
private void button12_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DIName.PINI_BTN_2;
var cur = gvdPLCInOut.Values[(int)pinL];
this.gvdPLCInOut.setValue((int)pinL, cur == 0);
this.gvdPLCInOut.Invalidate();
}
private void button11_Click(object sender, EventArgs e)
{
var pinL = DevPLC.DIName.PINI_BTN_3;
var cur = gvdPLCInOut.Values[(int)pinL];
this.gvdPLCInOut.setValue((int)pinL, cur == 0);
this.gvdPLCInOut.Invalidate();
}
private void panel4_Paint(object sender, PaintEventArgs e)
{
}
private void groupBox9_Enter(object sender, EventArgs e)
{
}
private void button14_Click(object sender, EventArgs e)
{
@@ -1069,29 +553,6 @@ namespace AGVEmulator
AGV.SendTag(numericUpDown1.Value.ToString());
}
private void button1_Click(object sender, EventArgs e)
{
var bt = sender as Button;
var kitno = nudBMSKitNo.Value.ToString()[0];
var value = bt.Tag.ToString()[0];
var barr = new List<byte>();
barr.Add(0x02);
barr.Add((byte)kitno);
barr.Add((byte)value);
barr.Add(0x03);
CAL.WriteData(barr.ToArray());
}
private void serAGV_Load(object sender, EventArgs e)
{
}
private void agvViewer1_Click(object sender, EventArgs e)
{
}
private void agvViewer1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
@@ -1104,17 +565,21 @@ namespace AGVEmulator
}
}
private void radioButton20_Click(object sender, EventArgs e)
private void button6_Click(object sender, EventArgs e)
{
var rad = sender as RadioButton;
var kitno = int.Parse(rad.Text);
nudBMSKitNo.Value = (decimal)kitno;
var tagno =(uint) nudTagNo.Value;
this.XBE.SendGotoTag(tagno);
}
private void button1_Click(object sender, EventArgs e)
{
var tagno = (uint)numericUpDown2.Value;
this.XBE.SendCurrentPos(tagno);
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
serAGV.Connect();
serPLC.Connect();
serBMS.Connect();
serCAL.Connect();
}
@@ -1122,33 +587,10 @@ namespace AGVEmulator
private void toolStripButton2_Click(object sender, EventArgs e)
{
serAGV.Disconnect();
serPLC.Disconnect();
serBMS.Disconnect();
serCAL.Disconnect();
}
private void serBMS_Load(object sender, EventArgs e)
{
}
void checkboxevent()
{
}
private void GvdPLCFlag_ItemClick(object sender, arFrame.Control.GridView.ItemClickEventArgs e)
{
var newvalue = gvdPLCFlag.Values[e.idx];
this.gvdPLCFlag.setValue(e.idx, (ushort)(newvalue == 0 ? 1 : 0));
this.gvdPLCFlag.Invalidate();
}
private void GvdPLCInOut_ItemClick(object sender, arFrame.Control.GridView.ItemClickEventArgs e)
{
var newvalue = gvdPLCInOut.Values[e.idx];
this.gvdPLCInOut.setValue(e.idx, (ushort)(newvalue == 0 ? 1 : 0));
this.gvdPLCInOut.Invalidate();
}
}
}

View File

@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("9312ab43-72f6-4365-a266-e767215fa7f5")]
[assembly: Guid("9312ab43-72f6-FF65-a266-e767215fa7f5")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//

View File

@@ -305,6 +305,10 @@ namespace AR.Dev
/// </summary>
public event EventHandler<MessageEventArgs> Message;
public void RaiseMessage(bool iserr, string message)
{
Message?.Invoke(this, new MessageEventArgs(message, iserr));
}
#endregion
#region "Event Args"
@@ -428,7 +432,7 @@ namespace AR.Dev
/// <summary>
/// 포트에 쓰기(barcode_DataReceived 이벤트로 메세지수신)
/// </summary>
public Boolean WriteData(byte[] data)
public Boolean WriteData(byte[] data, bool useLog=true)
{
Boolean bRet = false;
@@ -457,7 +461,7 @@ namespace AR.Dev
//_device.Write(data, 0, data.Length);
//171113
this.Message?.Invoke(this, new MessageEventArgs(data, false));
if(useLog) this.Message?.Invoke(this, new MessageEventArgs(data, false));
bRet = true;
WriteError = 0;

View File

@@ -0,0 +1,214 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static AGVEmulator.DevAGV;
namespace AGVEmulator
{
public partial class Form1
{
private void Agv_Command(object sender, commandargs e)
{
switch (e.Command.ToLower())
{
case "stopmark":
agvViewer1.StopbyMark = true;
break;
}
}
private void Agv_StsValueChanged(object sender, DevAGV.StsValueChangedArgs e)
{
Console.WriteLine($"STS [{e.vtype}] VAL={e.Value}");
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<StsValueChangedArgs>(Agv_StsValueChanged), sender, e);
return;
}
switch (e.vtype)
{
case DevAGV.estsvaluetype.direction:
foreach (RadioButton c in this.groupBox5.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
}
else
{
c.Checked = false;
}
c.Refresh();
}
groupBox5.Refresh();
break;
case DevAGV.estsvaluetype.bunki:
foreach (RadioButton c in this.groupBox2.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
case DevAGV.estsvaluetype.speed:
foreach (RadioButton c in this.groupBox4.Controls)
{
if (c.Text[0].Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
case DevAGV.estsvaluetype.sensor:
foreach (RadioButton c in this.groupBox8.Controls)
{
if (c.Text.Equals(e.Value))
{
c.Checked = true;
c.Refresh();
break;
}
}
break;
}
}
private void Agv_ValueChanged(object sender, DevAGV.ValueChangedArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new EventHandler<ValueChangedArgs>(Agv_ValueChanged), sender, e);
return;
}
//내부값이 바뀌었다면 컨트롤을 변경해준다.
switch (e.vtype)
{
case DevAGV.evaluetype.system0:
foreach (CheckBox c in panel6.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.system1:
var v = (DevAGV.esystemflag1)e.Idx;
if (e.Value)
{
if (v == esystemflag1.agv_run)
{
agvViewer1.wat.Restart();
}
if (v == esystemflag1.agv_stop)
{
agvViewer1.wat.Stop();
}
}
foreach (CheckBox c in panel7.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.error:
foreach (CheckBox c in panel9.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
case DevAGV.evaluetype.signal:
foreach (CheckBox c in panel8.Controls)
{
var idx = int.Parse(c.Tag.ToString());
if (idx == e.Idx)
{
c.Checked = e.Value;
break;
}
}
break;
}
}
private void Agv_RequestStatusData(object sender, DevAGV.RequestStatusDataArgs e)
{
//UInt16 system0 = 0xFFFF;
//UInt16 system1 = 0xFFFF;
//UInt16 error = 0xFFFF;
//byte signal = 0xFF;
aaplycheckboxbit(ref AGV.system0, panel6);
aaplycheckboxbit(ref AGV.system1, panel7);
aaplycheckboxbit(ref AGV.error, panel9);
aaplycheckboxbit(ref AGV.signal, panel8);
if (this.agvViewer1.StopbyMark) AGV.sts_speed = 'S';
else AGV.sts_speed = GetGroupItemCheckbox(groupBox4);
AGV.sts_bunki = GetGroupItemCheckbox(groupBox2);
AGV.sts_dir = GetGroupItemCheckbox(groupBox5);
AGV.sts_sensor = GetGroupItemCheckbox(groupBox8);
//this.Invoke(new Action(() =>
//{
// e.system0 = system0;
// e.system1 = system1;
// e.error = error;
// e.signal = signal;
// e.speed = GetGroupItemCheckbox(groupBox4);
// e.bunki = GetGroupItemCheckbox(groupBox2);
// e.direction = GetGroupItemCheckbox(groupBox5);
// e.sensor = GetGroupItemCheckbox(groupBox8);
// e.volt = 23.4f;
//}));
}
private void AGV_Message(object sender, AR.Dev.RS232.MessageEventArgs e)
{
var dev = sender as AR.Dev.RS232;
if (dev is DevBMS)
{
logBMS.Add(e.Message);
}
else if (dev is DevAGV)
{
logAGV.Add(e.Message);
}
else if (dev is DevXBE)
{
if (e.MsgType == AR.Dev.RS232.MessageType.Send)
logCAL.Add(">> " + e.Data.HexString());
else if (e.MsgType == AR.Dev.RS232.MessageType.Recv)
logCAL.Add("<< " + e.Data.HexString());
else logCAL.Add(e.Message);
}
}
}
}

View File

@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AGVEmulator
{
public partial class Form1
{
private void BMS_Message(object sender, AR.Dev.RS232.MessageEventArgs e)
{
logBMS.Add(e.Message);
}
private void BMS_RequestVoltageData(object sender, DevBMS.RequestVoltageDataArgs e)
{
//cell전압값추가
for (int i = 0; i < cellvolt.Length; i++)
{
this.cellvolt[i] = (UInt16)rnd.Next(3300, 3350);
}
Array.Copy(this.cellvolt, 0, e.cellVolt, 0, 8);
this.btc1.Invoke(new Action(() =>
{
var idx = 0;
btc1.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc2.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc3.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc4.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc5.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc6.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc7.Text = (this.cellvolt[idx++] / 1000f).ToString();
btc8.Text = (this.cellvolt[idx++] / 1000f).ToString();
}));
}
private void Bms_RequestBatteryData(object sender, DevBMS.RequestBatteryDataArgs e)
{
if (checkBox1.Checked)
this.trackBar1.Invoke(new Action(() =>
{
this.trackBar1.Value -= 1;
trackBar1_Scroll(null, null);
}));
e.CurA = (int)BMS_CurA;
e.MaxA = (int)BMS_MaxA;
e.Remain = BMS_Remain;
e.Volt = BMS_Volt;
}
}
}

View File

@@ -0,0 +1,40 @@
using ENIG;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AGVEmulator
{
public partial class Form1
{
private void CAL_Message(object sender, AR.Dev.RS232.MessageEventArgs e)
{
if (e.MsgType == AR.Dev.RS232.MessageType.Send)
logCAL.Add(">> " + System.Text.Encoding.Default.GetString(e.Data));
else if (e.MsgType == AR.Dev.RS232.MessageType.Recv)
logCAL.Add("<< " + System.Text.Encoding.Default.GetString( e.Data));
else logCAL.Add(e.Message);
}
private void CAL_ProtocReceived(object sender, ENIG.EEProtocol.DataEventArgs e)
{
//throw new NotImplementedException();
var dev = (DeviceType)e.ReceivedPacket.ID;
if (dev == DeviceType.AGV1 || dev == DeviceType.AGV2)
{
//agv에서 들어오는 데이터
var cmd = e.ReceivedPacket.Command;
if(cmd == 3)
{
//status
}
}
}
}
}