123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Util;
- using MECF.Framework.Common.Communications;
- using MECF.Framework.Common.Device.Bases;
- using System.Collections.Generic;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs.HoribaMFC
- {
- public abstract class HoribaHandler : HandlerBase
- {
- private const byte Header = 0x40;
- private const byte STX = 0x02;
- private const byte ETX = 0x03;
- protected HoribaConnection _connection;
- public string Address { get; set; }
- protected HoribaHandler(HoribaConnection connection, string msdLsdAddress, string data)
- : base(BuildMessage(msdLsdAddress, data))
- {
- Address = msdLsdAddress;
- _connection = connection;
- }
- private static byte[] BuildMessage(string msdLsdAddress, string data)
- {
- List<byte> message = new List<byte>();
- message.Add(Header);
- PacketMessage(msdLsdAddress, message);
- message.Add(STX);
- PacketMessage(data, message);
- message.Add(ETX);
- message.Add((byte)CalcBBC(data));
- if (SC.ContainsItem("System.IsSimulatorMode") && SC.GetValue<bool>("System.IsSimulatorMode"))
- message.Add(0x0D);
- return message.ToArray();
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- private static int CalcBBC(string value)
- {
- int sum = 0;
- foreach (var item in value)
- {
- sum += (int)item;
- }
- sum += ETX;
- return sum % 128;
- }
- private static List<byte> PacketMessage(string msg, List<byte> msgList)
- {
- foreach (var item in msg)
- {
- msgList.Add((byte)item);
- }
- return msgList;
- }
- private static byte[] String2Ascii(string s)
- {
- byte[] array = System.Text.Encoding.ASCII.GetBytes(s);
- return array;
- }
- }
- public class HoribaMFCSetFlow : HoribaHandler
- {
- public HoribaMFCSetFlow(HoribaConnection connection, string deviceAddress, float flow)
- : base(connection, deviceAddress, $"AFC{flow},B")
- {
- Name = "SetFlow";
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- var result = msg as HoribaMessage;
- handled = false;
- if (!result.IsResponse) return true;
- if (result.IsError || result.IsFormatError || result.IsNak)
- {
- _connection.SetError(result.RawMessage);
- }
- else
- {
- if (result.Datas[0] != 0x4f && result.Datas[0] != 0x4b)
- {
- _connection.SetError(result.RawMessage);
- }
- }
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- }
- public class HoribaMFCQueryFlow : HoribaHandler
- {
- public HoribaMFCQueryFlow(HoribaConnection connection, string deviceAddress)
- : base(connection, deviceAddress, $"RFV")
- {
- Name = "QueryFlow";
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- var result = msg as HoribaMessage;
- handled = false;
- if (!result.IsResponse) return true;
- if (result.IsError || result.IsFormatError || result.IsNak)
- {
- _connection.SetError(result.RawMessage);
- }
- else
- {
- float.TryParse(System.Text.Encoding.ASCII.GetString(result.Datas), out float flow);
- //MFCDevice.FeedBack = flow;
- _connection.NoteFlowReadout(Address, flow);
- }
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- }
- public class HoribaMFCQueryScale : HoribaHandler
- {
- public HoribaMFCQueryScale(HoribaConnection connection, string deviceAddress)
- : base(connection, deviceAddress, $"RFS")
- {
- Name = "QueryScale";
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- var result = msg as HoribaMessage;
- handled = false;
- if (!result.IsResponse) return true;
- if (result.IsError || result.IsFormatError || result.IsNak)
- {
- _connection.SetError(result.RawMessage);
- }
- else
- {
- var dataArray = System.Text.Encoding.ASCII.GetString(result.Datas).Split(',');
- float.TryParse(dataArray[0], out float range);
- //temporary comment to fix compile issue
- if (dataArray.Length > 1)
- {
- //if (MFCDevice.Unit != dataArray[1].ToUpper())
- // EV.PostInfoLog(MFCDevice.Module, $"{MFCDevice.Module} {MFCDevice.Name} change from {MFCDevice.Unit} to {dataArray[1].ToUpper()}");
- //MFCDevice.Unit = dataArray[1].ToUpper();
- _connection.NoteUnitReadout(Address, dataArray[1].ToUpper());
- }
- }
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- }
- public class HoribaMFCSetDigitalMode : HoribaHandler
- {
- public HoribaMFCSetDigitalMode(HoribaConnection connection, string deviceAddress)
- : base(connection, deviceAddress, $"'!+REVERSE")
- {
- Name = "SetDigitalMode";
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- var result = msg as HoribaMessage;
- handled = false;
- if (!result.IsResponse) return true;
- if (result.IsError || result.IsFormatError || result.IsNak)
- {
- _connection.SetError(result.RawMessage);
- }
- else
- {
- if (result.Datas[0] != 0x4f && result.Datas[0] != 0x4b)
- {
- _connection.SetError(result.RawMessage);
- }
- }
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- }
- public class HoribaMFCSetAnalogMode : HoribaHandler
- {
- public HoribaMFCSetAnalogMode(HoribaConnection connection, string deviceAddress)
- : base(connection, deviceAddress, $"'!+NORMAL")
- {
- Name = "SetAnalogMode";
- }
- public override bool HandleMessage(MessageBase msg, out bool handled)
- {
- var result = msg as HoribaMessage;
- handled = false;
- if (!result.IsResponse) return true;
- if (result.IsError || result.IsFormatError || result.IsNak)
- {
- _connection.SetError(result.RawMessage);
- }
- else
- {
- if (result.Datas[0] != 0x4f && result.Datas[0] != 0x4b)
- {
- _connection.SetError(result.RawMessage);
- }
- }
- ResponseMessage = msg;
- handled = true;
- return true;
- }
- }
- }
|