 | |
Предыдущие результаты
В этом и загвоздка. На LADах проблем написать нету. Просто есть уже наработки на Си и перенести это на ST легче, чем на графические языки.
Посмотрел настройки модулей - нашел только на AIшки, возможно из-за того что всё железо довольно бюджетное. Плюс "пользовательских" настроек в том что их можно переносить с контроллера на контроллер (независимо от производителя и типа модулей).
По поводу размера программы - в 20 раз это существенно. Сам написал ~20 строк когда на ST и перевел этот код на LAD. Код ST оказался на 3 с лишним Кбайт тяжелее (
|
Ну если на человечном, то памяти никогда не будет хватать. 95% АСУТП-х задач пишутся на LD и FB.
А что имелось ввиду под типовыми задачами(обработка Di, Do, Ai ...)?
[quote:b3eecbff34="ferzio"]оп .. что-то я тупанул, IL нету, LADы естественно есть.
На них я и собирался всю технологию писать. А вот типовые задачи (обработка Di, Do, Ai ...) хотелось написать на чем-то более человечном, типа ST[/quote:b3eecbff34]
|
оп .. что-то я тупанул, IL нету, LADы естественно есть.
На них я и собирался всю технологию писать. А вот типовые задачи (обработка Di, Do, Ai ...) хотелось написать на чем-то более человечном, типа ST
|
Спасибо! Фишку UDDT уже уловил и активно этим пользуюсь.
А вот про языки стало для меня открытием.
Слыхал мнения тру-асушников что не стоит программировать контроллер на ST и Cи, но не сталкивался с доказательствами. Вот пожалуй первая ласточка.
Тогда вопросы вдогонку по языкам на AB: IL - исходник копируется в контроллер?
Нет случайно возможности конвертации одного языка в другой?
И почему такая несправедливость к ST :o
|
[quote:841c8cbc95="ferzio"]
Что сразу приходит на ум, так это компановка переменных. Битовые переменный хранить в массиве DINTa.
Ужимать DINTовские переменные в INTы смысла нету, т.к. весить они будут все равно 4байта.
[/quote:841c8cbc95]
Ну это совершенно не так. Просто надо пользоваться предусмотренными для этих целей инструментами, а именно "User Defined Data Types".
Структуры выравниваются по четырем байтам, но внутри все упаковывается плотно (конечно, если не будете чередовать байты и реалы). Поэкспериментируйте с ними и всё станет понятно, при сохранении сразу размер расчитывается и показывается.
[quote:841c8cbc95="ferzio"]
Заметил, что комментарии тоже занимают место в памяти (для возможности полноценной выгрузки проекта).
[/quote:841c8cbc95]
Настоящие программисты-асушники пишут на чём правильно, а не на чём легче :crazy:
Пишите на Ladder, а не на ST - и комментарии и исходник будут исключительно в файле проекта на компе, а в контроллере только компактный программный код.
:P
ЗЫ
и исполняться программа будет в разы быстрее :wink:
|
И еще вопрос вдогонку. Я правильно понял, CompactFlash нужна только для резервного хранения проекта и в экономии памяти это нам никак помочь не может?
|
[quote:0a6f224fa4="Naitek"] Формирую строку запроса, отправляю устройству (хочу считать дату и время, в каких регистрах они хранятся мне известно). Отправляется запрос без проблем, но устройство в ответ ничего не посылает!
[/quote:0a6f224fa4]
Ну если MCM опрашивает нормально, значит в устройстве протокол ModBus и было бы не плохо уточнить какой именно (RTU или ASCII)
В любом случае протокол ModBus накладывает строгие требования к запросам и ответам. Если с проводами и параметрами передачи (номер порта, скорость, четность, стоповые биты) всё на 100% проверено, то отсутствие ответа от устройства означает одно - [b:0a6f224fa4]неправильно сформирован или неправильно послан запрос![/b:0a6f224fa4]
Ещё имеет смысл проверить установку джамперов для режима работы портов (RS232/422/485).
Также не следует забывать, что в режиме работы по RS232 интерфейсу с устройством необходимо соединяться ноль-модемным кабелем.
|
Так, с комплилятором разобрался. Возникла новая проблема. Формирую строку запроса, отправляю устройству (хочу считать дату и время, в каких регистрах они хранятся мне известно). Отправляется запрос без проблем, но устройство в ответ ничего не посылает! Команда чтения выдает ошибку превышения таймаута. Если выставить в команде MVIsp_Gets таймаут на TIMEOUT_FOREVER то программа дальше нее не идет (соотвественно не может ничего получить).
Есть настроенный MCM модуль, который без проблем считывает из этого устройства все что надо, так что прибор рабочий.
Решил посмотреть какую строку запроса формирует MCM. Подключаю порт MCM напрямую к порту ADM (для этого использую два соедительных кабеля RJ-45 с одной стороны и разъем COM папа на другой, COM разъемов соединены клеммы 1-1, 8-8, 5-5). Пытаюсь считать сисвол с порта ADM командой MVIsp_Getch. Картина та же. На MCM порт моргает - следовательно что то передает. На ADM - мертво.
П.С.: оба модуля MVI56.
|
Можно и дальше в угадайку играть, или может всё-таки автор темы приведет реальные цифры?
повторяю, для прояснения ситуации требуется данные о том, как сконфигурирована команда на опрос и какой номер ошибки возникает, когда не работает:
чего у вас прописано в MCM.CONFIG.Port1MasterCmd[0,1,2...]
и чего вы видите в MCM.DATA.ReadData[ххх], где ххх - это адрес куда пишутся ошибки с порта (MCM.CONFIG.Port1.CmdErrPtr)
Предельное ограничение регистров в одном запросе 127, это обусловлено самим протоколом ModBus
У MCMR отличие только в уменьшенном размере блока данных, котором он обменивается с процессором (чтобы не занимал весь ControlNet-овский пакет)
|
Здравствуйте.
Подскажите, пожалуйста, имеем два контроллера 1756-L62 соединенных между собой сетью ControlNet, есть ли ограничения на максимальный объем данных, которые я могу считать из удаленного контроллера при помощи инструкции MSG тип сообщения CIP Data Table Read? Информации об ограничениях я не нашел, на эмуляторе пробовал, успешно передается структура объемом 1380 байт, но хотелось быть уверенным в правильности моих действий.
Код программы
[img]http://s019.radikal.ru/i617/1302/ee/8702ae71b03d.bmp[/img]
|
Предыдущие результаты
Ещё результаты |
|
| |
|