Ejemplo n.º 1
0
        public uMCPInoPort(string portName, BaudRate baudrate, bool selectDefaultState,
                           uint selectIntMs, uint timeoutIntMs, byte packetSize, byte maxMessages)
        {
            timer        = new PrecisionTimer();
            timer.Period = 100;
            timer.Mode   = Mode.Periodic;
            timer.Tick  += (o, e) => { node.OnTick(); };

            node = new uMCPInoNode(selectDefaultState, timeoutIntMs, selectIntMs, packetSize, maxMessages);
            node.OnSTATEChangedEventHandler          += (o, e) => { OnStateChangedEventHandler.Rise(this, e); };
            node.OnSELECTChangedEventHandler         += (o, e) => { OnSelectChangedEventHandler.Rise(this, e); };
            node.OnDataBlockAcknowledgedEventHandler += (o, e) => { OnDataBlockAcknowledgedEventHandler.Rise(this, e); };
            node.OnDataBlockReceivedEventHandler     += (o, e) => { OnDataBlockReceivedEventHandler.Rise(this, e); };
            node.OnActionInfoEventHandler            += (o, e) => { OnActionInfoEventHandler.Rise(this, e); };
            node.OnTransmitterEmptyEventHandler      += (o, e) => { OnTransmitterEmptyEventHandler.Rise(this, e); };
            node.OnOutcomingEventHandler             += new EventHandler <uMCPInoDataEventArgs>(node_OnOutcomingEventHandler);

            port = new SerialPort(portName, (int)baudrate);
            port.DataReceived += (o, e) =>
            {
                var data = new byte[port.BytesToRead];
                port.Read(data, 0, data.Length);
                node.OnIncomingData(data);
            };

            port.ErrorReceived += (o, e) => { PortErrorEventHandler.Rise(this, e); };
        }
Ejemplo n.º 2
0
        private void onDTADTE(uMCPPacket packet)
        {
            DTADTEReceived++;

            if (state == uMCPState.RUNNING)
            {
                uMCPDATAPacket dPacket = (packet as uMCPDATAPacket);

                if (dPacket.TCNT <= R + 1)
                {
                    if (dPacket.TCNT == Convert.ToByte((R + 1) % 256))
                    {
                        R++;
                        OnDataBlockReceivedEventHandler.Rise(this, new uMCPDataEventArgs(dPacket.DATA));
                        BytesReceived += Convert.ToUInt32(dPacket.DATA.Length);
                    }

                    SACK = true;
                }

                SREP = false;
                IsTimeoutTimerRunning = false;

                if ((dPacket.RCNT == N) || (IsByteInRangeExclusive(A, N, dPacket.RCNT)))
                {
                    AcknowledgeSentItems(dPacket.RCNT);
                }

                if (dPacket.PTYPE == uMCPPacketType.DTA)
                {
                    IsTimeoutTimerRunning = true;
                }

                SELECT = (dPacket.PTYPE == uMCPPacketType.DTE);
            }
        }