Регистрация
 
Добро пожаловать на форум об электродвигателях!

Контроллер SMSD4.2 с RS 485 поддерживает Modbus ?
Прочитано 4074 раз
* 02 Ноября 2016, 08:32:28
Вопрос:
Контроллер SMSD4.2 с RS 485 поддерживает протокол Modbus RTU?

Записан


* 02 Ноября 2016, 11:04:37
#1
нет

Записан


* 02 Ноября 2016, 16:21:12
#2
 А какой протокол обмена Rs 485? Можно ссылку.

Записан


* 03 Ноября 2016, 13:06:23
#3
Протокол пока такой же, как у блоков с USB - http://electroprivod.ru/pdf/SMSD-4.2-pasp.pdf - раздел 7.

Записан


* 07 Ноября 2016, 07:42:30
#4
В паспорте указаны только АТ команды.Меня интересует формат посылки пакета.
Нам нужно управлять SMSD4.2 с RS 485 с панели оператора Weintek MT8070iE там нет винды. Какой протокол используется для связи по RS 485 ? ASCII? Можно документ-описание пакетной части?

Записан


* 07 Ноября 2016, 17:59:05
#5
используется ASCII, для RS-485 необходима посимвольная передача, т.к. контроллер отправляет эхо после каждого введенного символа. Формат команд и коды ответов приведены в паспорте.
В настоящий момент команды состоят из 2х символов кода команды, нескольких символов параметров (если команда предусматривает параметры) и символ *.

Для программирования в EasyBuilder в параметрах устройства для подключаемого контроллера SMSD необходимо выбрать тип PLC “Free Protocol”. Для отправки данных контроллеру используется команда OUTPORT, для чтения INPORT.

Записан


* 07 Ноября 2016, 18:13:01
#6
Пример для EasyBuilder Pro (для EasyBuilder 8000 тоже подходит):
В примере контроллер SMSD подключен к COM2
BytesToPort - переменная содержит количество байт для передачи в порт (количество символов в команде)       
command_string - строка, содержащая передаваемую команду
symb - переменная для чтения из порта
ResponseString - переменная для получения общего ответа от контроллера (эхо + код ответа)
       
              PURGE(2) //очистка буферов порта COM2
       for i=0 to (BytesToPort-1) step 1 // отправка команды по 1 байту,
          OUTPORT(command_string[ i ], "SMSD COM2 RS-485", 1) //посылка 1 байта в порт
          FILL(symb[0], '', 4)
          INPORT(symb[0], "SMSD COM2 RS-485", 1, return_value) //эхо команды
         StringCat(symb[0], ResponseString[0])
   
         SetData(ResponseString[0], "Local HMI", LW, 110, BytesFromPort) //при необходимости можно вывести данные в регистры панели, например, для отображения на экране
       next i
       i=i+1
       FILL(Symb[0], '', 4)
       INPORT(Symb[0], "SMSD COM2 RS-485", 4, return_value) // теперь нужно получить код ответа
       StringCat(symb[0], ResponseString[0])
                SetData(ResponseString[0], "Local HMI", LW, 110, BytesFromPort)
« Последнее редактирование: 10 Ноября 2016, 16:16:56 от Administrator »

Записан


* 09 Ноября 2016, 06:23:36
#7
А в комплекте с smsd можно получить готовый макрос (функцию, подпрограмму) для изибилдера для связи панели и контроллера?

Записан


* 09 Ноября 2016, 15:48:50
#8
Так пример выше - это и есть макрос для передачи данных для EasyBuilder.
Или Вы хотите готовый проект?

Для какой модели панели Вы пишете программу? Для MT8070iE?

P.S. Вы можете купить у нас панель Weintek с готовой программой для работы с блоками SMSD, BMSD и BLSD.
http://electroprivod.ru/mt6071ie.htm

Записан


* 09 Ноября 2016, 16:59:18
#9
Ощущение что мы общаемся на разных языках. Похоже ,что я не могу правильно задать вопрос поскольку не владею терминологией.
Я хочу подключить Контроллер SMSD к панели оператора Weintek по RS 485 И чтобы они друг -друга видели
Проект пишется в изибилдере
Что я должен указать в "Системные настройки" ,"Параметры устройства" ,"тип ПЛК" Чтобы панель оператора увидела Ваш контроллер?
Планируется использовать MT 8071iE  Нужны 3 сом порта, Изернет и УСБ
Кроме управления ШД нужно измерять температуру , вести учет входящих-исходящих образцов, сканер штрихкода , связь с диспечерским компьютером. В общем , если бы можно было вызывать Вашу программу из моего экрана - это бы устроило. То есть при нажатии кнопки на моем экране "изменить скорость" вызывалась бы Ваша программа типа  SMSD control. Там бы вносились изменения скорости и нажималась кнопка "Возврат" для возврата в основной экран. Можно ли получить такую встраиваемую подпрограмму? Как?  У кого?
Код SMSD control получить возможно?

Записан


* 09 Ноября 2016, 17:28:18
#10
Для подключения SMSD RS485 к панели Weintek нужно в EasyBuilder выбрать меню "правка" - "системные настройки" - "создать".

При этом будет создано подключение для нового устройства. Откроется окно настроек устройства, в котором нужно указать имя, по которому Вы будете обращаться к нему из скрипта (любое удобное Вам), тип ПЛК (free protocol), тип подключения ПЛК RS-485 2w, порт подключения  (выбирайте порт, к которому Вы будете подключать блок SMSD) и настройки порта по паспорту SMSD (8 бит данных, 1 стоп бит, проверка четности, скорость 9600):



Далее создаете скрипт со следующим содержимым:

             PURGE(2) //очистка буферов порта COM2 в этом примере SMSD подключен к COM2
                            //если у Вас другой номер порта, указываете его в параметре функции PURGE
       
             for i=0 to (BytesToPort-1) step 1 // отправка команды по 1 байту,
                             //BytesToPOrt содержит количество символов команды, которые нужно передать контроллеру.
                             
          OUTPORT(command_string[ i ], "SMSD COM2 RS-485", 1) //посылка 1 байта в порт
                        //"SMSD COM2 RS-485" - имя устройства, которое Вы дали блоку SMSD в настройках при подключении
          // command_string содержит строку команды, например, MV1000* - перемещение на 1000 шагов
                        FILL(symb[0], '', 4)
                        //symb - переменная для чтения из порта, предварительно ее значение стирается
          INPORT(symb[0], "SMSD COM2 RS-485", 1, return_value) //эхо команды
                       //командой INPORT считываем ответ, пришедший из порта. Сначала это эхо передаваемых символов                          команды         
                       StringCat(symb[0], ResponseString[0])
         //ResponseString переменная для хранения полного ответа из порта
         
         SetData(ResponseString[0], "Local HMI", LW, 110, BytesFromPort)
                        //выводится значение в регистр LW110 - например, для отображения на экране панели
       next i
       i=i+1
       FILL(Symb[0], '', 4)
       INPORT(Symb[0], "SMSD COM2 RS-485", 4, return_value) //ответ - т.е. код ответа - 4 символа
       StringCat(symb[0], ResponseString[0])
                 SetData(ResponseString[0], "Local HMI", LW, 110, BytesFromPort)
« Последнее редактирование: 10 Ноября 2016, 16:16:12 от Administrator »

Записан


* 09 Ноября 2016, 17:30:14
#11
Алгоритм подключения и настройки одинаков для всех устройств, которые подключаются к панели Weintek.
Если устройство имеет готовые драйвер Weintek - выбирайте его в списке "тип ПЛК" при подключении. Если готового драйвера нет - можно выбрать free protocol и использовать функции INPORT и OUTPORT.

Записан


* 09 Ноября 2016, 19:07:21
#12
Спасибо. Вроде понятно. Буду пробовать.
Еще вопрос:
Где определены функции OUTPORTи INPORT ?
В смысле: для разных протоколов используется разный формат кадров.
для RTU такой :http://autoworks.com.ua/setevye-resheniya/modbus-rtu/
для ASCII такой:http://autoworks.com.ua/setevye-resheniya/modbus-ascii/
где выбирается формат кадра для свободного протокола?

Записан


* 10 Ноября 2016, 16:13:01
#13
Здесь не используется спецификация Modbus. Свободный протокол подразумевает произвольные данные, отправляемые в порт. Формата кадра как такового (как для Modbus) не существует. Можно отправлять и принимать любые данные без ограничений.

Таким образом, функциями OUTPORT и INPORT можно отправлять и принимать из порта абсолютно любые данные, независимо от того, являются они ASCII или HEX. ASCII в обмене данными для SMSD используется лишь для упрощения и наглядности (Например, команда LD - LOAD, MV - MOVE и т.д.). Если удобно, можно вместо символов отправлять коды ASCII в шестнадцатеричном виде.

Функции INPORT и OUTPORT - это встроенные функции панелей Weintek. Их описание и примеры можно посмотреть в документации к  EasyBuilder наравне со всеми прочими функциями и структурами, которые используются для написания скриптов.

В приведенном выше примере OUTPORT отправляет в порт любые данные, содержащиеся в command_string. Точнее, command_string является стартовым адресом, с которого начинается передача данных.  Третий параметр функции определяет, какое количество данных (т.е. сколько байт) нужно отправить. В данных версиях SMSD с интерфейсом RS-485 требуется побайтная отправка данных, т.к. контроллер отправляет эхо каждого байта (символа).

Т.е. чтобы отправить команду MV10000* для интерфейса RS-232 command_string должна содержать строку "MV10000*", команда отправки OUTPORT(command_string[0], "SMSD COM2 RS-485", 8 ) //посылка 8 байт в порт, начиная с нулевого (первого) символа переменной Command_string.
Для RS-485 строка разбивается побайтно, в порт шлется каждый отдельный байт:
OUTPORT(command_string[ i ], "SMSD COM2 RS-485", 1) //посылка 1 байт в порт, начиная с i.
i увеличивается на единицу в цикле с 0 до длины команды:
for i=0 to 7 step 1 // отправка команды по 1 байту,
          OUTPORT(command_string[ i ], "SMSD COM2 RS-485", 1) //посылка 1 байта в порт
          FILL(symb[0], '', 4)
          INPORT(symb[0], "SMSD COM2 RS-485", 1, return_value) //получили из порта эхо команды 1 байт         
       next i

« Последнее редактирование: 10 Ноября 2016, 16:15:27 от Administrator »

Записан


* 10 Ноября 2016, 16:20:10
#14
P.S. пробелы в приведенных примерах в функии OUTPORT(command_string[ i ] до и после i в скриптах не нужны. Здесь они проставлены, только для того, чтобы форум отображал их, а не рассматривал как служебные теги разметки.

Записан