. Делается эта замена после
подсчета контрольной суммы при передаче. Соответственно при
приеме SHIFT выбрасывается, а к следующему за ним байту прибавляется
значение START.
Были выбраны следующие значения специальных байт:
START   AAH
STOP    ABH
SHIFT   ACH
На правильно принятый пакет устройство должно ответить пакетом
аналогичного формата, но без START. То есть ответный пакет должен
начинаться с адреса устройства и заканчиваться контрольной суммой
и STOP.
Например, если вы хотите послать в устройство с адресом 01H пять
байт 10H 20H 30H ABH 02H, а оно в ответ должно послать два байта
AAH и 00H, обмен в линии будет выглядеть так:
От ЭВМ:
AAH | 01H | 10H | 20H | 30H |
ACH | 01H | 02H | A8H | ABH |
От устройства:
В случае неправильной контрольной суммы или если устройство не
распознает пакет как допустимый, ответный пакет не передается.
Поскольку передача и прием информации производится по одним и
тем же проводам, нельзя передавать несколько пакетов подряд,
необходимо дождаться ответа на каждый переданный пакет либо истечения
таймаута, прежде чем передавать следующий. Величина таймаута
зависит от конкретного устройства. Для КШД-485 таймаут определяется
только временем передачи пакета, зависяшим от скорости
передачи, поскольку ответ КШД-485 посылает сразу.
Команды КШД-485
Команды передаются в КШД-485 в виде пакетов ПИВ-485, описанных
выше. Первый байт тела пакета является кодом команды за которым
следуют параметры, зависящие от команды. В параметрах, являющихся
целым или длинными целыми числами, первым передается старший
байт.
Большинство команд, если не указано особо, возвращают в качестве
ответа один байт состояния устройства следующего формата:
Байт состояния (по битам):
0 | сработал концевик | прециз.скорость* |
датчик | К+ | К- | иду | готов |
Обрабатываются следующие команды (команды и параметры помеченные
"*" поддерживаются только в версии 2.0 и выше):
Идентификация - сообщить информацию об устройстве
формат:
ответ:
'W' | 'S' | номер версии | серийный номер* |
Повторить последний ответ - на случай, если ответ был принят с
ошибкой, а очень хочется его знать
формат:
ответ - повторяет последний ответ
Запрос состояния - просто возвращает байт состояния (см. выше)
формат:
Идти
формат:
4 | кол-во шагов со знаком (4-байта) |
Идти без ускорения
формат:
5 | кол-во шагов со знаком (4-байта) |
Конфигурация
формат (все параметры байтовые):
6 | ток движения | ток удержания |
задержка удержания | CFG |
здесь
ток движения, ток удержания:
код | ток (А) |
0 | 0.0 |
1 | 0.2 |
2 | 0.3 |
3 | 0.5 |
4 | 0.6 |
5 | 1.0 |
6 | 2.0 |
7 | 3.5 |
задержка удержания - в 1/30сек (30 = 1сек)
CFG (по битам):
AccLeave* | LeaveK* | SoftK* | датчик |
К+ | К- | 0 | half |
биты "К+", "К-", "датчик" - определяют тип датчиков (0 - нормально замкнутый,
1 - нормально разомкнутый)
бит "half" - режим движения (0 - 4х-фазный, 1 - 8ми-фазный; рекомендуется 1)
бит "SoftK*" - "мягкие" концевики, при срабатывании концевиков
остановка делается с плавным торможением, а не сразу
бит "LeaveK*" - автоматически сходить с концевика
бит "AccLeave*" - в дополнение к предыдущему параметру, использовать
ускорение при сходе с концевика (можно использовать для подключения кнопок
ручного управления параллельно концевикам либо вместо них)
Установка скорости
формат:
7 | мин.скорость | макс.скорость |
ускорение |
мин.скорость, макс.скорость - 32..12000 шагов/сек
ускорение - беззнаковое целое 32..65535 шаг/сек/сек
Принудительная остановка
формат
В версии 1.0 остановка делается без плавного торможения в
состоянии 0-й фазы. В версии 2.0 и выше остановка производится
плавно.
Выключение тока - служит для полного выключения тока мотора, даже
если был выбран ненулевой ток удержания.
формат:
Сохранить параметры - записывает уставки в энергонезависимую память
формат:
Выдача импульсов - позволяет выдавать выходные импульсы во время
движения. Действует только на одну следующую команду движения.
формат:
11(0BH) | сколько | начиная | через |
все параметры беззнаковые целые:
"сколько" - нужное количество импульсов (в версии 2.0* 0 - бесконечно, в
версии 1.0 0 - 65536)
"начиная" - с какого шага начать (0 - 65536)
"через" - через сколько шагов повторять (0 - 65536)
Сколько осталось* - узнать сколько шагов осталось непройдено (при
остановке по срабатыванию концевика или по команде
принудительной остановки). Может также использоваться при
движении с прецизионной скоростью. Во время обычного движения и
после автоматического схода с концевика не действует.
формат:
ответ:
Прочитать конфигурацию*
формат:
ответ:
ток движения | ток удержания | задержка удержания | CFG |
значение ответа аналогично команде конфигурации
Прочитать скорость*
формат:
ответ:
мин.скорость | макс.скорость | ускорение |
значение ответа аналогично команде установки скорости
Тест частоты* - позволяет точно измерить частоту внутреннего
генератора (для калибровки). По этой команде на выход импульсов
выдается частота тактового генератора /4. Выдача прекращается
при получении любой посылки по RS485, на время измерения частоты
любой обмен по RS485 необходимо прекратить.
формат:
ответа на эту команду нет
Калибровка* - задание периода таймера для движения с прецизионной
скоростью.
формат:
"Period" - период таймера в наносекундах, равный 256 периодам
тактового генератора т.е. 64 периодам частоты, измеренной с
помощью предыдущей команды.
Идти с прецизионной скоростью*
формат:
17(11H) | кол-во шагов со знаком (4-байта) |
время между шагами (4-байта) |
"время между шагами" - время в наносекундах между соседними
шагами. Разумеется, каждый шаг не отрабатывается с точностью до
наносекунды, точность отработки одного шага ~200мкс. Однако
ошибка не накапливается и точность отработки, к примеру, 1000000
шагов будет 200мкс+1000000*0.5нс=700мкс.
Замечание: период не обязательно мерять в наносекундах, можно
использовать любые удобные единицы измерения, главное чтобы
период калибровки и период движения был измерен в одних и тех же
единицах.
Выдать выходной импульс* - позволяет использовать выход импульсов
для управления каким-либо внешним устройством
формат:
Установка адреса и скорости передачи
Установка адреса и скорости передачи производится программно.
В версии 2.0 и выше для программирования адреса и скорости
необходимо передать со скоростью 600 бод следующую
последовательность:
0 | AAH | 'W' | 'S' | серийный номер |
RATE | ADDR |
RATE | BAUD |
0 | 1200 |
1 | 2400 |
2 | 4800 |
3 | 9600 |
4 | 19200 |
5 | 38400 |
6 | 57600 |
Если серийный номер нулевой, действует на любой контроллер, иначе
только на заданный. Если ADDR нулевой, адрес останется без
изменения.
В версии 1.0 для установки адреса необходимо, чтобы к моноканалу
было подключено только одно устройство, иначе всем подключенным
приборам будет присвоен один адрес. Для программирования адреса
и скорости необходимо установить "разрыв линии (break)" RS232 на
0.1 сек а затем передать со скоростью 600 бод следующую
последовательность:
Для совместимости этот способ допустим и в контроллерах версии
2.0, однако новый способ предпочтительнее.
После программирования адреса и скорости любым из этих способов
нужно переключиться на выбранную скорость передачи, проверить
работоспособность устройства с новыми параметрами и выполнить
команду сохранения параметров в энергонезависимой памяти.
Некоторые особенности работы с КШД-485
После включения питания ток в обмотках шагового двигателя отсутствует.
Включение тока производится в момент подачи команды движения
либо установки тока.
Включение тока происходит в состоянии 0-й фазы двигателя. Таким
образом, если перед выключением питания установить двигатель в
положение с 0-й фазой (координата кратная 8-ми шагам), после
включения он не сдвинется с места.
При наезде на концевик остановка производится без плавного тормо-
жения в состоянии 0-й фазы, если не были установлены "мягкие"
концевики в конфигурации.
А.А. Волков
(3832)39-4664.
ИЯФ СО РАН