Страница 100 из 1043 ПерваяПервая ... 50909899100101102110150200600 ... ПоследняяПоследняя
Показано с 991 по 1,000 из 10426

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #991

    По умолчанию

    Цитата Сообщение от Рамиль Ш Посмотреть сообщение
    А почему именно I1, I2, I3? Или можно и другими буквами? И еще вопрос: Всё это вручную забивать?
    I1, I2, I3 --- это я так назвал, а вы можете оставить ваши, но только вам их следует перенести в раздел VAR_INPUT или VAR_OUTPUT. Адреса вручную забивать

  2. #992

    По умолчанию

    Цитата Сообщение от Flicker Посмотреть сообщение
    Посмотрите мой скриншот вашей программы, я только пару переменных переименовал I1,I2,I3(поставьте объявление переменных таблицей, так сразу будет понятно) Переменные входов должны объявлены в разделе VAR_INPUT, выходов в соответствующем VAR_OUTPUT


    Не доходит до меня дурака. Не могли бы вы присвоить имена переменных этой программе. Может так понятней будет?

  3. #993

    По умолчанию

    Цитата Сообщение от Andrei Z Посмотреть сообщение
    Нууу.. Вы уже продвинуто по моей точке зрения, пользуетесь Кодесисом. Поэтому я тут точно не помощиник, у меня пишет нет библиотек 3 из 7.. это раз. И во вторых почему в Настройках целевой платформы не настроена Конфигурация на конкретный ПЛК?

    Программа сделана в XP. Когда я её открываю в WINDOWS 7 тоже так же пишет. Может библиотеки добавить нужно? А платформу кажется можно настроить в Ресурсах- настройки целевой платформы.

  4. #994

    По умолчанию

    Цитата Сообщение от Рамиль Ш Посмотреть сообщение
    Не доходит до меня дурака. Не могли бы вы присвоить имена переменных этой программе. Может так понятней будет?
    переменная x1 у вас как локальная, ее нужно перенести в VAR_INPUT. это можно сразу делать в окне объявление переменных. Также там можно указать физический адрес контроллера(это не всегда удобно). Также переменная y1 должна быть перенесена в VAR_OUT. Я обычно делаю так: удаляю переменную в таблице переменных, потом нахожу этот элемент стираю название и пишу заново, но уже выбираю каком разделе она должна быть(как на рисунке). Адреса входов и выходов смотрю в конфигураторе) Программу загрузил и изменил, попробуйте ее отправить прямо на ПЛК110-32 и проверить работу, задействован первый вход и первый выход. Потом отпишитесь.

  5. #995

    По умолчанию

    Простите великодушно, но не могу не вмешаться, так как проскальзывают не совсем верные утверждения.
    Итак,
    Рамиль, вы выложили пример некой пограммы, которая как-то работает, и что в ней правильно, а что нет, кроме вас никто не знает. Одно маленькое НО. В ней не указана целевая платформа, поэтому она годится только для работы в эмуляторе.

    Кроме того, вы жаловались, что сделали простую программу с одним входом и одним выходом и она не работает. Вот ее и выкладывайте, будем начинать с простого.
    Теперь о неверных или частично неверных утверждениях:
    Flicker говорит о том, что привязки переменных к аппаратным входам и выходам нужно делать путем явного указания AT в разделе описания переменных. Можно делать так, а можно и по другому. Но в любом случае нужно выбрать целевую платформу и тогда в окне конфигурации ПЛК появится выбранный вами контроллер с его набором входов и выходов с конкретными обозначениями, которые вы можете прописывать после AT%.

    Второй способ привязки переменных к физическим входам и выходам состоит в их внесении в конфигурацию. Об этом достаточно подробно рассказано в книге, которая начинает рождаться на сайте кодесис.рф усилиями Кирилла Гайнутдинова, за что ему огромное спасибо скажут многие, кто эту книгу прчитает. Так вот, если в конфирурации выделить один из входов или выходов, и щелкнуть по нему левой клавишей мышки, откроется квадратик для внесения имени переменной, которая будет связана с этим входом или выходом. НО (большое и жирное НО, потому что на эти грабли наступают почти все) эта переменная не должна дублироваться вами в программе. То есть вручную ее не нужно объявлять ни в разделе локальных переменных, ни в разделе глобальных.
    Она сама попадет куда надо и будет иметь характер глобальной.
    И теперь, если вы хотите ее использовать в программе, просто указывайте ее имя, и все будет работать. А чтобы не делать синтаксческих ошибок, удобно пользоваться ассистентом ввода. Выделяете в программе имя элемента, нажимаете А2 и получаете список всех доступных имен. Там в разделе глобальных переменных уже будет то имя, которое вы присвоили в входу в конфигурации. БОЛЬШЕЕГО НИГДЕ ОБЪЯВЛЯТЬ НЕ НУЖНО, В ПРОТИВНОМ СЛУЧАЕ, ИМЯ, ОБЪЯВЛЕННОЕ В ДРУГОМ МЕСТЕ, ПЕРЕОПРЕДЕЛИТ ЕГО, И СВЯЗЬ С ВХОДОМ ПОТЕРЯЕТСЯ.

    Второе неверное утверждение Flickeraкасается Var_Input b Var_Output.
    Эты типы переменных предназначены не для привязки к входам и выходам контроллера, а для создания функциональных блоков. Когда вы пишете не основную программу, а свой собственный функциональный блок, то там они реально нужны. Еу пкркменные, которые будут входами вашего функционального блока, нужно объявлять как var_Input, те, которые будут выходами - как Var_Output. Переменные для внутрениих нужд - как обычные var. А для связи с физическими выходами и входами этого вовсе не требуется. Для этого требуется ИЛИ прописать их в конфигурации ИЛИ прописать их в разделе описания переменных (в том числе при помощи окна автоопределения).

    Ну и напоследок еще раз для Рамиля - выкладывайте маленькую программку, с ней разберемся, пойдете дальше, всё будет щелкать релюшками в соответствии с программой.

  6. #996

    По умолчанию

    Добрый день. В работе в среде CoDeSyS я новичок, да и в программировании тоже особо не силен.

    Подскажите, пожалуйста, как преобразовать два идущих подряд элемента массива ARRAY [0..255] OF BYTE в одно значение типа WORD (или INT)? Массив играет роль буфера, откуда выполняется чтение/запись при работе по modbus RTU. Вроде, что-то в него записывается, а понять, что именно, не получается. :-) Т.к. чтение-запись идут в виде регистров, а не байтов.

  7. #997

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Вариантов как это реализовать достаточно. Вот один из них:
    Создаете массив из 128 инт-ов, объявляете указатель на него, а в программе присваиваете указателю указатель на байтовый массив
    Мысль теоретически понятна... Спасибо!

    *уходит смотреть, как работать с указателями*

  8. #998

    По умолчанию

    Цитата Сообщение от YuriBel Посмотреть сообщение
    маленькое НО. В ней не указана целевая платформа, поэтому она годится только для работы в эмуляторе.
    Вот и я об этом говорил, но не мог настоять потому как сам знания эти получил только из книги. Причём в примере был выложен язык LD а не сфк. как изучали в книге. но я порадовался что уже немножко но знаю о чём идёт речь

  9. #999

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Вариантов как это реализовать достаточно. Вот один из них:
    Создаете массив из 128 инт-ов, объявляете указатель на него, а в программе присваиваете указателю указатель на байтовый массив
    Все вроде получилось. :-) Может, подскажете еще, можно ли как-нибудь сделать очистку буферного массива? Чтобы он заполнялся при чтении-записи, а потом очищался бы. Чтобы всякой фигней левой, хранящейся в нем, не смущать. Я в том, плане, может есть какая стандартный метод или встроенная функция, без придумывания своих велосипедов (типа заполениня его нулями в цикле, перед тем, как делать чтение-запись регистров слэйвов и т.п.).

    UPD: И еще такой вопрос, значения-то я получил в формате INT. Устройство -- ТРМ202. Только значение немного не похоже на значение температуры на экранчике самого прибора. В инструкции к ТРМке сказано, что по адресу 0x0001 лежит значение температуры по каналу 1. Однако, то, что я вижу в INT-массиве, немного не сходится с тем, что показывает ТРМка. Может, надо еще какие преобразования выполнять?

  10. #1000

    По умолчанию

    Все вроде получилось. :-) Может, подскажете еще, можно ли как-нибудь сделать очистку буферного массива? Чтобы он заполнялся при чтении-записи, а потом очищался бы. Чтобы всякой фигней левой, хранящейся в нем, не смущать. Я в том, плане, может есть какая стандартный метод или встроенная функция, без придумывания своих велосипедов (типа заполениня его нулями в цикле, перед тем, как делать чтение-запись регистров слэйвов и т.п.).
    Кажется есть такая функция SysMemSet из библиотеки SysLibMem
    Инициализирует блок памяти указанным значением. Как аргументы принимает адрес блока памяти, его размер, и значение для инициализации, например 0.
    42 is the answer

Страница 100 из 1043 ПерваяПервая ... 50909899100101102110150200600 ... ПоследняяПоследняя

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •