I-8xx7 и ISaGRAF с чего начать? |
Ответить | Страница <1234> |
Автор | |
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
Опубликовано: 03 Август 2006 10:42 |
2 Ленин К сожалению, не могу выслать проект с блоком опроса Модбас, т.к. он используется в нашем оборудовании и является собственностью нашей организации. Я высылаю проект, содержащий программу опроса весового терминала CAS. Там есть функции опроса СОМ-порта, и используются встроенные массивы Изаграф. Используя описание протокола Модбас, на основании этого проекта можно сделать работающий вариант блока опроса. Добавлю, что блок для вычисления CRC-16 уже имеется в китайском таргете. На счет ошибки компилятора. Не мешало бы привести, какая ошибка выдается. Но можно предположить, что ты не создал экземпляр ФБД-блока mbus_n_r под названием BUS_N_R1, который, собственно, и пытаешься вызвать. Экземпляр создается в словаре на вкладке "FB экземпляры". Еще нужно смотреть типы переменных, поскольку Изаграф не поддерживает преобразование типа (только через специальные функции). Если попытаться присвоить вещественной переменной целое значение напрямую, будет ошибка при компиляции. |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
Да, да, конечно!
Я не только не создал экземпляр FBD блока, НО и не знал, что это нужно делать!!! :) Ещё 2 недель нет, как я на ISaGRAFе, извиняйте :) В двух словах может объясните, как сделать опрос нескольких анализаторов? можно ли наваять что-то типа классов, создать объкект "Анализатор"... или хотябы в цикле адреса слейвов перебирать, записывая данные в массив - это вообще возможно? |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
За проект спасибо, ща попытаюсь его распаковать - у меня пока демо версия ISaGRAF - кажись там это заблокировано
|
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
В демке должно распаковываться без проблем, это делается из меню программы "Проекты" (Инструменты -> Архив -> проекты). По сути дела, любая программа Изаграф - это экземпляр класса. Функция-элемент у нее одна (собственно программа), а локальные переменные - это элементы-данные. Это не совсем строгое определение, реально в коде Изаграф ООП не используется. Но понимать так немного легче. Вариантов решения задачи, на самом деле, много. Самый простой - написать прогу, которая опрашивает 1 анализатор и складывает данные в локальные переменные. Когда прога отлажена, можно начинать создавать ее копии. Поскольку приборы, висящие на одной линии интерфейса, нужно опрашивать последовательно, нужно позаботиться о том, чтобы прогаммы опроса не работали одновременно. Это можно сделать, например, с помощью SFC программы и глобальных переменных. Вариантов тут масса. Локальным переменным программы опроса нужно присвоить адреса Модбас, чтобы их можно было опрашивать с верхнего уровня. На счет массивов. Есть "встроенные" массивы, с которыми можно работать с помощью специальных функций (см. мой проект). Их использовать можно смело. А вот использовать произвольные массивы я пока не пробовал. Не было необходимости, да и методика, которую китайцы предлагают (модификация в разделе debug среды разработки!) вызывает сомнения. По-моему, делать такие манипуляции - значит напрашиваться на неприятности. Но если у кого-то есть положительный опыт общения с произвольными массивами в Изаграф 3 - поделитесь пожалуйста. |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
Кстати говоря, написал я кусок проги которая шлёт посылку в порт на SFC (уровенн 2 на ST) - так вот, оне не работает. То же самое написанное сразу на ST (секция Begin) - работает! В чём дело?
Посмотрел твой проект, что-то понял... Только вот "встроенный" массив задаётся на вкладке Messages что-ли? У тебя он назван Buffer, так? Вот КиТАйЦЫ кАзлЫ!!! не могли назвать вещи своими именами - не разберёшься без бутылки ни хрена! |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
Кто мне объяснит, как из SFC вызвать написанную функцию (например на FBD)?
|
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Куски ST в уровне 2 SFC должны быть оформлены в виде ACTION. Блок ACTION (N), например, будет исполняться на каждом цикле Изаграф, когда данный шаг активен. Возможно, причина отсутствия посылок в этом. Все подробности о языках программирования есть в документации непосредственно на Изаграф "Руководство пользователя ISaGRAF.pdf". Кстати, в отличие от последних веяний в области пользовательской документации, это руководство написано очень грамотно, дает всю теоретическую базу программирования. Без этого чтива работать в Изаграфе сложновато. Вызов функции производится очень просто: возвр_парам := имя_функции(парам1, парам2, ...); Но нужно помнить, что здешние функции не могут содержать локальных статических данных (с глобальными объектами работать можно). Если нужно хранить локальные данные между вызовами, придется юзать функциональные блоки. И еще одно ограничение. Возвращаемый параметр только один, а Изаграф 3 не поддерживает пользовательские типы данных (структуру вернуть нельзя). Китайские массивы задавать не надо, они уже определены в таргете и инициализированы нулями. Для работы с ними достаточно использовать функции из серии array...() |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
Да, не зря говорят: век живи-сЪ, век учись-сЪ :)
И тут у меня опять вопрос: Modbus протокол разносит данные разного типа по разным картам памяти (int и bool, например), причём адресация независимая - это всем известно. Так почему-же в словаре переменных, когда определяешь адрес переменной для карты памяти Modbus, типы int и bool не могут иметь одинаковый адрес? Непонятно! |
|
Новичок Присоединился: 27 Июль 2006 Категория: Russian Federation Online Status: Offline Публикации: 23 |
|
Обратил внимание, что если написать код в блоке InitialStep, то посылка шлётся, если же её написать в блоке Step - не работает
ACTION (P) : ERR := COMOPEN( 3, 19200, 8, 0, 1 ); BUS_N_R( 1, 16#0010 ); END_ACTION; |
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Действительно, Модбас так может. Но при этом предполагается, что булевые данные будут считывать только функцией 1, 16-битные регистры - только функцией 3 и т.д. ISaGRAF же позволяет считывать bool и командой 1, и командой 3 (см. "Руководство"). Отсюда и ограничение. С чем это связано, тоже приблизительно понятно. Дело в том, что и BOOL, и ANALOG переменные Изаграф представляют собой 32-битный int. Очевидно, реализация связи с протоколом Модбас для этих переменных производится в общем алгоритме, со сквозной адресацией по регистрам. |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Ответить | Страница <1234> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |