123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- using MECF.Framework.Simulator.Core.Driver;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Timers;
- using Aitex.Core.Util;
- namespace MECF.Framework.Simulator.Core.Temperatures
- {
- class SimOmronEJ1 : SerialPortDeviceSimulator
- {
- public bool Failed { get; set; }
- public bool IsOn { get; set; }
- public bool IsHalo { get; set; }
- public bool IsContinueAck { get; set; }
- Stopwatch _timer = new Stopwatch();
- private System.Timers.Timer _tick;
- Random _rd = new Random();
- private object _locker = new object();
- public string ResultValue { get; set; }
- Dictionary<int, Dictionary<int, int>> _setpoint = new Dictionary<int, Dictionary<int, int>>();
- Dictionary<int, Dictionary<int, int>> _poweron = new Dictionary<int, Dictionary<int, int>>();
- Dictionary<int, int> _querySetpointPairs = new Dictionary<int, int>();
- Dictionary<int, int> _poweronSetpointPairs = new Dictionary<int, int>();
- List<byte> _cached = new List<byte>();
- List<byte> _buffer = new List<byte>();
- public SimOmronEJ1(string port)
- : base(port, -1, "", ' ', false)
- {
- ResultValue = "";
- _tick = new System.Timers.Timer();
- _tick.Interval = 200;
- _tick.Elapsed += _tick_Elapsed;
- _tick.Start();
- _setpoint[1] = new Dictionary<int, int>() { { 0xC0, 0 }, { 0xC1, 0 } };
- _setpoint[2] = new Dictionary<int, int>() { { 0xC0, 0 }, { 0xC1, 0 }, { 0xC2, 0 }, { 0xC3, 0 } };
- _setpoint[3] = new Dictionary<int, int>() { { 0xC0, 0 }, { 0xC1, 0 }, { 0xC2, 0 }, { 0xC3, 0 } };
- _poweron[1] = new Dictionary<int, int>() { { 0xC0, 1 }, { 0xC1, 1 } };
- _poweron[2] = new Dictionary<int, int>() { { 0xC0, 1 }, { 0xC1, 1 }, { 0xC2, 1 }, { 0xC3, 1 } };
- _poweron[3] = new Dictionary<int, int>() { { 0xC0, 1 }, { 0xC1, 1 }, { 0xC2, 1 }, { 0xC3, 1 } };
- _querySetpointPairs.Add(0x80, 0xC0);
- _querySetpointPairs.Add(0x81, 0xC1);
- _querySetpointPairs.Add(0x82, 0xC2);
- _querySetpointPairs.Add(0x83, 0xC3);
- _poweronSetpointPairs.Add(0x0A00, 0xC0);
- _poweronSetpointPairs.Add(0x0A01, 0xC1);
- _poweronSetpointPairs.Add(0x0A02, 0xC2);
- _poweronSetpointPairs.Add(0x0A03, 0xC3);
- _poweronSetpointPairs.Add(0x0B00, 0xC0);
- _poweronSetpointPairs.Add(0x0B01, 0xC1);
- _poweronSetpointPairs.Add(0x0B02, 0xC2);
- _poweronSetpointPairs.Add(0x0B03, 0xC3);
- }
- private void _tick_Elapsed(object sender, ElapsedEventArgs e)
- {
- lock (_locker)
- {
- if (_timer.IsRunning && _timer.Elapsed > TimeSpan.FromSeconds(10))
- {
- _timer.Stop();
- }
- }
- }
- protected override void ProcessUnsplitMessage(byte[] message)
- {
- _buffer.AddRange(message);
- if (_buffer.Count < 7)
- {
- return;
- }
- message = _buffer.ToArray();
- _buffer.Clear();
- _cached.Clear();
- int slave = message[0];
- int cmd = message[1];
- if (cmd == 0x06)
- {
- int address = message[2] * 256 + message[3];
- int data = message[4] * 256 + message[5];
- if (address == 0xFFFF)
- {
- if (data == 0x0A00 || data == 0x0A01 || data == 0x0A02 || data == 0x0A03)
- {
- _poweron[slave][_poweronSetpointPairs[data]] = 0;
- }
- else if (data == 0x0B00 || data == 0x0B01 || data == 0x0B02 || data == 0x0B03)
- {
- _poweron[slave][_poweronSetpointPairs[data]] = 1;
- }
- }
- else
- {
- _setpoint[slave][address] = data;
- }
- }
- if (cmd == 0x03)
- {
- _cached.Add((byte)slave);
- _cached.Add(message[1]);
- _cached.Add(32);
- int address = message[2] * 256 + message[3];
- for (int i = 0; i < 16; i++)
- {
- int data = 0;
- if (i % 3 == 0)
- {
- var setpointKey = 0;
- if (_querySetpointPairs.ContainsKey(address))
- {
- setpointKey = _querySetpointPairs[address];
- data = _setpoint[slave][setpointKey];
- }
-
- //data = (50 + slave * 10 + i) * 10;
- }
- else if ((i - 1) % 3 == 0)
- {
- }
- else if ((i - 2) % 3 == 0)
- {
- var setpointKey = 0;
- if (_querySetpointPairs.ContainsKey(address))
- {
- setpointKey = _querySetpointPairs[address];
- data = _poweron[slave][setpointKey];
- }
-
- }
- else
- {
- data = 0;
- }
- byte dataH = Convert.ToByte((data >> 8) & 0xff);
- byte dataL = Convert.ToByte(data & 0xff);
- _cached.Add(dataH);
- _cached.Add(dataL);
- }
- _cached.Add(0);
- _cached.Add(0);
- OnWriteMessage(_cached.ToArray());
- return;
- }
- OnWriteMessage(message);
- return;
- }
- }
- }
|