Пример #1
0
        private const float SeriesBase = 1111111.111111F;       // Base of values to return: SeriesBase * (0..SeriesLength-1)

        // ------------------ M A I N  ----------------------

        // Setup function
        public void Setup()
        {
            // Create Serial Port object
            _serialTransport = new SerialTransport
            {
                CurrentSerialSettings = { PortName = "COM15", BaudRate = 115200 } // object initializer
            };

            // Initialize the command messenger with the Serial Port transport layer
            // Set if it is communicating with a 16- or 32-bit Arduino board
            _cmdMessenger = new CmdMessenger(_serialTransport, BoardType.Bit16);

            // Attach the callbacks to the Command Messenger
            AttachCommandCallBacks();

            // Start listening
            _cmdMessenger.Connect();

            _receivedItemsCount = 0;
            _receivedBytesCount = 0;

            // Clear queues
            _cmdMessenger.ClearReceiveQueue();
            _cmdMessenger.ClearSendQueue();

            Thread.Sleep(100);

            // Send command requesting a series of 100 float values send in plain text form
            var commandPlainText = new SendCommand((int)Command.RequestPlainTextFloatSeries);

            commandPlainText.AddArgument((UInt16)SeriesLength);
            commandPlainText.AddArgument((float)SeriesBase);
            // Send command
            _cmdMessenger.SendCommand(commandPlainText);

            // Now wait until all values have arrived
            while (!_receivePlainTextFloatSeriesFinished)
            {
                Thread.Sleep(100);
            }


            // Clear queues
            _cmdMessenger.ClearReceiveQueue();
            _cmdMessenger.ClearSendQueue();

            _receivedItemsCount = 0;
            _receivedBytesCount = 0;
            // Send command requesting a series of 100 float values send in binary form
            var commandBinary = new SendCommand((int)Command.RequestBinaryFloatSeries);

            commandBinary.AddBinArgument((UInt16)SeriesLength);
            commandBinary.AddBinArgument((float)SeriesBase);

            // Send command
            _cmdMessenger.SendCommand(commandBinary);

            // Now wait until all values have arrived
            while (!_receiveBinaryFloatSeriesFinished)
            {
                Thread.Sleep(100);
            }
        }
Пример #2
0
        /// <summary>连接串口</summary>
        public void Connect()
        {
            var name = cbName.SelectedItem + "";

            if (String.IsNullOrEmpty(name))
            {
                "请选择串口".SpeechTip();
                MessageBox.Show("请选择串口!", Text);
                cbName.Focus();
                return;
            }
            var p = name.IndexOf("(");

            if (p > 0)
            {
                name = name.Substring(0, p);
            }

            SaveInfo();
            var cfg = SerialPortConfig.Current;

            var pt = Port;

            if (pt != null)
            {
                // 如果上次没有关闭,则关闭
                try
                {
                    pt.Close();
                }
                catch
                {
                    pt = null;
                }
            }
            if (pt == null)
            {
                pt = new SerialTransport();
            }
            pt.PortName = name;
            pt.BaudRate = cfg.BaudRate;
            pt.Parity   = cfg.Parity;
            pt.DataBits = cfg.DataBits;
            pt.StopBits = cfg.StopBits;

            //pt.Open();

            pt.Disconnected += Port_Disconnected;
            pt.Received     += OnReceived;
            pt.Open();

            //pt.EnsureCreate();

            Port = pt;

            var sp = pt.Serial;

            // 这几个需要打开端口以后才能设置
            try
            {
                if (sp.DtrEnable != miDTR.Checked)
                {
                    sp.DtrEnable = miDTR.Checked;
                }
                if (sp.RtsEnable != miRTS.Checked)
                {
                    sp.RtsEnable = miRTS.Checked;
                }
                if (sp.BreakState != miBreak.Checked)
                {
                    sp.BreakState = miBreak.Checked;
                }
            }
            catch { }

            Enabled = false;
        }