Проблема отправки строки в контроллер шагового двигателя Applied Motion через C#

Я работаю над написанием простой программы для перемещения шагового двигателя в C#. У меня есть некоторый прошлый опыт работы с C++, но я решил перейти на него, так как мне пришлось бы немного переучиться на C++.

Ранее я управлял двигателем (используя шаговый контроллер Applied Motion ST5) с помощью последовательных команд через PuTTY. Я думаю, что я мог бы просто отправить те же команды, используя C#, открыв правильный COM-порт (который работает нормально, так как он аварийно завершает работу при вводе номера нерабочего порта) и отправив строку поверх. Однако, когда я посылаю строку той же команды, которую я использовал через последовательный терминал (FL1000, за которым следует возврат каретки, он говорит двигателю двигаться на 1000 шагов по часовой стрелке), двигатель ничего не делает. WriteLine должен быть правильным для использования здесь, так как он отправляет строку, а затем возвращает, правильно?

Кто-нибудь видит какие-либо явные ошибки, из-за которых моя строка не попадает в контроллер?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;

namespace ConsoleApp3
{
    class Program
    {
        static SerialPort comPort;
        static void Main()
        {
            //These values in the declared serial port match what my device manager says.
            comPort = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
            comPort.ReadTimeout = 5000;
            comPort.WriteTimeout = 5000;
            comPort.Open();
            //Pauses for a moment so that I can see the console otuput.
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
            string command = "FL1000";
            Console.WriteLine("Moving Motor...");
            //Tells the controller to move the motor 1000 steps clockwise
            comPort.WriteLine(command);
            //confirms that the code made it past the comPort writeline
            Console.Write("Command Sent");
            //Pauses for a moment so that I can see the console output.
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
        }

    }
}

Я ожидаю, что это будет двигать двигатель 1000 шагов. Единственные результаты, которые я вижу, это то, что мои "маркеры" появляются на консоли. Программа завершается без ошибок.

Заранее спасибо!

1 ответ

Решение

Ваша команда не содержит возврата каретки или перевода строки. Двигатель ищет один из них, чтобы знать, что команда выполнена.

Я не работал с их линейкой двигателей ST5, но другие продукты, которые они несут, требуют, чтобы команда заканчивалась возвратом каретки. Попробуйте изменить свое сообщение на:

строка команда = "FL1000\r";

Другие вопросы по тегам