Вопрос: а меняли ли что то в контроллере...? Точно нет обращения к несуществующей переменной контроллера?
Вид для печати
Вопрос: а меняли ли что то в контроллере...? Точно нет обращения к несуществующей переменной контроллера?
В вашем проекте какая то каша с рецептами, мало того что вместо 16 у вас 17 регистров на это отведено (это думаю не так важно), но отображение текущего рецепта организовано не как в справке, на таблице какой то фантомный регистр (у меня при создании таблицы такого нет). Что бы отобразить рецепт вы читаете регистр из ПЛК, чему он у вас равен? Если там не 1, то наверно поэтому и тормоза... Но сама организация работы с рецептами придумана вами, без промежуточных регистров, как в справке. С рецептами не работал, но это сразу бросается в глаза... Попробуйте сделать так как в справке, а потом переделывайте под себя. 4 рецепта хотите, но при этом сразу в таблицу выводите их все, возможно вы просто с кучей хотите работать, но тогда зачем этот рецептный механизм использовать?...
PS У вас уже в таблице энергонезависимые переменные области рецепта, на кой вы добавили кнопки работы с рецептами вообще непонятно...
[QUOTE=МихаилГл;450073]В вашем проекте какая то каша с рецептами, мало того что вместо 16 у вас 17 регистров на это отведено (это думаю не так важно), но отображение текущего рецепта организовано не как в справке, на таблице какой то фантомный регистр (у меня при создании таблицы такого нет). Что бы отобразить рецепт вы читаете регистр из ПЛК, чему он у вас равен? Если там не 1, то наверно поэтому и тормоза... Но сама организация работы с рецептами придумана вами, без промежуточных регистров, как в справке. С рецептами не работал, но это сразу бросается в глаза... Попробуйте сделать так как в справке, а потом переделывайте под себя. 4 рецепта хотите, но при этом сразу в таблицу выводите их все, возможно вы просто с кучей хотите работать, но тогда зачем этот рецептный механизм использовать?...
спасибо за подсказку. Все верно. 8 ячеек по 2 регистра. Итого должно быть 16 то есть от 0 до 15. Вечером поправлю и попробую.
По сути вы правы. Потому что у меня окна открывались оперативно и с таким количеством регистров)
В настройках рецепта указывается начальный регистр с которого и начинается отчет регистров по ячейкам слева направо. Указывается количество данных в рецепте и количество рецептов.
В данном случае 16 и 1 соответственно. В данном случае - это регистр 0 и, соответственно, с него берется начало отчета. То есть при нажатии на "считать" или "записать" ведется опрос с регистра 0 (он указан в настройке) и дальше на протяжении 16 регистров.
Можно оформить 4 рецепта по 2 переменные в каждом. Но суть такая что придется оператору нажимать несколько раз на "записать в ПЛК", а он может забыть) и процесс пойдет нештатно.
Если вы предложите другой вариант сохранения буду признателен.
когда вы вводите в таблицу значения то они в ПЛК появляются только тогда когда нажимается кнопка "записать в ПЛК".
Правда после перезагрузки панели значения обнуляются, но если нажать "выгрузить из ПЛК" то они снова появляются. То есть нужно писать пока неизвестный мне код что бы они автоматически появлялись после перезагрузки СП.
Вы немного запутались. У вас панель мастер, при этом как вы собираетесь в контроллере увидеть модбас рту регистры панели? Вы должны это как то передать используя функциональные области или что-то другое посредством функционала самой панели. Забудьте про рецепты, это должно быть в ПЛК, а по нажатию кнопки вы должны отобразить эти регистры из ПЛК и иметь возможность изменить эти регистры с панели. А рецепты в самой панели имеют немного другой функционал...
Думаю да. Тем более что это за pfw256 в левом верхнем углу, может я плохо смотрел, но где это задано не нашёл. В настройках стоит pfw300, а отображается pfw256. Возможно я просто плохо смотрел, я с таким не сталкивался.
PS И это не таблица с рецептами, если на то пошло, а таблица с регистрами данных рецептов. Т.к. с рецептами работают через промежуточные регистры, судя по справке. Поэтому называть это таблицей рецептов я бы считал неправильным.
Добрый вечер.
Объясните, пожалуйста, почему в таблице распределения битов управления обменом (документация к СП-3хх, стр. 245) на каждое подключенное по TCP устройство выделено по 255 бит?
В протоколе ModbusTCP имеется поле UnitID, которое может иметь значение от 0 до 255.
Т.е. сам протокол позволяет адресоваться к конкретному устройству внутри одного IP-адреса.
Вложение 79853
Когда Вы создадите устройство с конкретным IP-адресом, а потом будете добавлять элементы, то кроме номера регистра можно указать и номер устройства внутри одного IP-адреса:
Вложение 79854
Соответственно, выставив нужный бит, Вы отключите опрос конкретного устройства внутри одного IP-адреса.
Спасибо за ответ
Получается, таким образом можно обойти ограничение на 8 подключенных устройств (стр. 53)? Или это так не работает?
Допустим Вы решили подключить несколько независимых RS485-х сетей через МКОН-ы.
Таких МКОН-ов можно подключить к СП3хх через Ethernet не более 8 c разными IP-адресами. Но зато к каждому МКОН-у Вы сможете подключить до 254-х ведомых Modbus-устройств.
Понял, спасибо еще раз
Здравствуйте. при запуске эмуляции оффлайн проект панели сп307 работает стабильно. при запуске эмуляции онлайн проекта сп307 сразу вылетает. в чем причина? макросы комилируются успешно. никаких ошибок нет.
вы понимаете, что есть разница между этими режимами? если не понимаете, то вероятно по названию можно предполагать о существовании разницы, да?Цитата:
эмуляции оффлайн .....эмуляции онлайн
а если открыть Справку, которая находится в одном клике мышкой, в этой же программе, в которой вы работаете, то вы могли бы прочесть
после этого вопросовЦитата:
3.9. Эмуляция
--------------------------------------------------------------------------------
Для отладки проекта необязательно загружать его в панель – можно воспользоваться режимом эмуляции и проверить работу проекта на ПК.
Offline эмуляция позволяет проверить работу проекта без подключения внешних устройств;
Online эмуляция, помимо этого, позволяет проверить обмен со slave-устройствами (при условии, что они подключены к пользовательскому ПК или находятся в одной локальной сети с ним).
Работа макросов, системных регистров и протокола Modbus ASCII в эмуляции не поддерживается.
Также эмуляция не поддерживает работу с PFW регистрами с номерами выше 4095.
не было бы, потому чтоЦитата:
в чем причина?
вы бы сами поняли, что ошибка именно в этомЦитата:
макросы комилируются успешно. никаких ошибок нет.
Создайте новый проект, добавьте 1 -2 дисплея и проверьте работу. В онлайн эмуляции, если панель мастер, должно быть подключено какое нибудь устройство, которое вы хотите опросить.
На сайте есть примеры, запустите их.
Если задаёте вопросы по работе, то выкладывайте свои проекты, иначе помочь вам не получится.
Если что, здесь не только работа Онлайн эмуляции панели, но и проверка восстановления связи после перезагрузки ПЛК и отключения линии
по Модбас и по ТСР
https://owen.ru/forum/showthread.php?t=40089#8
Здравствуйте коллеги.
Подскажите - а видео уроки по панели с ютуба не переносили никуда? Может скачать можно где?
Доброго дня!
Есть СП307Р-мастер который опрашивает ПР200-слейв в котельной по RS485.
Подскажите как привязать зуммер СП307 к окну тревоги, чтобы при квитировании зуммер умолкал на заданное время окна.
Если же авария не устранена в течении заданного времени, зуммер опять пищал вместе с появлением окна тревоги?
Можно ли это реализовать на самом СП, или надо вносить дополнительную переменную в ПР200?
Спасибо коллеги :)
День добрый.
Поскажите что не правильно в макросе прописал. Напрямую в поле читает через макрос нет. Спасибо за помощь.
Вложение 80101
PSW[710] = HIWORD(ValueFloat1); PSW[711] = LOWORD(ValueFloat1);
Наверно так правильно будет, но проверить нечем
Код:float ValueFloat1=0; float ValueFloat2=0; DWORD ValueInteger1=0;
Reads (PLC, 1, MODBUS_RTU_REG_3X, 49226, 2, &ValueFloat1); PSW[710]=ValueFloat1;
Reads (PLC, 1, MODBUS_RTU_REG_3X, 32800, 2, &ValueInteger1); PSW[720]=ValueInteger1;
Reads (PLC, 1, MODBUS_RTU_REG_3X, 32802, 2, &ValueFloat2); PSW[730]=ValueFloat2;
Капец блин насоветовали.
А где вы вообще проверяете что читаеццо если на рез-ты функций положили болт?
Уберите "чтение напрямую". Либо-либо. Мастер - 1 штука.
Уберите эти левые переменные, читайте сразу в нужное место
Если обмен только пробуете и где-то там лежит флоат32, всегда сначала и воспроизводите на экран[/B] как целое 32-битное чтоб с порядком слов разобратся.Код:Reads (PLC, 1, MODBUS_RTU_REG_3X, 49226, 2, &PSW[710]);
А если за каким-то чешется через переменные - приводите типы. Си же. Даже в РП есть.
И перепишите дефективный (аж 1000) таймаут в нормальные 20..50мс. В РП всё есть.Код:DWORD ValueFloat1=0; DWORD ValueFloat2=0; DWORD ValueInteger1=0; //да хоть float
Read (PLC, 1, MODBUS_RTU_REG_3X, 49226, 0, 2, &ValueFloat1); PSW[710]=ValueFloat1; //ничего не смущает?
Утак вроде автор повторил всё то, что написано в РПЦитата:
берите эти левые переменные, читайте сразу в нужное место
почему 2 разных графических элемента не могут работать одновременно?Цитата:
Уберите "чтение напрямую". Либо-либо. Мастер - 1 штука.
Но нифига не прочитал "Предусловия" (v2.1 от 17-01-21/8.2.1).
Да и
Цитата:
Си же
1.Макросы и "примые" отдельно друг от друга работают 100%
2.Вместе - хз. Хотите - разбирайтесь
-
Если нужно решить задачу обмена - накой начинать с варианта который хз?
-----
Тут 2 задачи
1.Обмен.
есть рез-т функций - болт
есть абстрактные 2 регистра - покажите как просто целые. Накой вид флоат?
не решив 1-ую нет смысла к 2й
2.Интерпритация полученного как флоат
Если нет явного указания порядка на слейве (в его доках, в самой панели мл,ст) то вытекает из содержимого 2х абстрактных регистров и предполагаемого исходного
Спасибо Валенок! Через косвенную &PSW[710] сработало!
Причем одновременно и "на прямую" и через макрос с одного регистра слэйва читает без ошибок в разные поля.
Остальные примеры\советы не работают. Но спасибо всем неравнодушным!
Ну-уж извините дальше больше дров (-: Нужно в поле записать сумму, в слэйве один рег. целое число, другой рег. дробная часть в формате флоат.
Все вместе как ххх,ххх счетчика расходомера.
Read (PLC, 1, MODBUS_RTU_REG_3X, 32802, 0, TYPE_DWORD, &PSW[310]); //Float в слэйве
Read (PLC, 1, MODBUS_RTU_REG_3X, 32800, 0, TYPE_DWORD, &PSW[312]); //Integer в слэйве
Как понимаю финт ушами типа PSW[320]=PSW[310]+PSW[312] не прокатит, проверить на текущий момент нет возможности, только через пару дней.
Вероятно надо использовать преобразование (*(float*)&(dw)) т.е. типа так?
float TempFloat; //переменная в донном случае нужна?
PSW[320] = (*(float*)&(PSW[312])) //в хелпе ни ни ни примера )-: преобразуем дворд в флоат.
PSW[322] = PSW[320] + PSW[310] // сложение двух "флоатов"
Ну и после, полем забираем сумму из PSW[322] Так получится?
[И перепишите дефективный (аж 1000) таймаут в нормальные 20..50мс. В РП всё есть.]
Вот этот момент не понял. Функц-я обл. как "Непрерывно" или что то другое?
потому что целая часть float ограничена размером. а чистый double по каким-то причинам не понимает прибор (процессор) вот и извращаются как могут.
Не получится так, в этой панели нет поддержки 64 битных переменных. Выводить придётся только 2 дисплеями рядом в каждом своя 32 битная переменная.
Целиком можно вывести только в ПЛК2хх, а в в ПЛК1хх только в виде String
Валенок потому что приборы, процессоры которых работают с double напрямую так и передают это значение. А вот много приборов, процессоры которых не умеют работать с double и нужно подобное вещественное число - то тут как раз разработчики и прибегают к подобным механизмам. типа целая часть в виде 32-х битного числа, дробная в виде обычного float.
Какой тут INT нафик, по вашему расход больше 32767 кубов быть не может или пусть даже WORD -65535 и всё ?
И не надо утрировать, выводить достаточно 12345678.52, то есть 1-2 знака после запятой.
И что получим после вывода на экран числа 12345678.52 Вложение 80190 Float просто округлит последние 3 знака
Хороший подсчёт расхода, откидывание нескольких знаков.
Здравствуйте. Не о том пошел разговор! Читает все нормально из слэйва.
Вложение 80215
Сложить надо интеджер и флоат.
Вложение 80214
Кстати почемуто флоат + флоат тоже не отображает )-: