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

Я работаю над написанием простой программы для перемещения шагового двигателя в 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 Ответ

0 голосов
/ 31 декабря 2018

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

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

string command = "FL1000 \ r";

...