PDA

Просмотр полной версии : Панели оператора СП3xx. Вопросы и ответы



Страницы : 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17

konst_smn
23.05.2017, 10:32
del...
Ответ нашел, попробую :).

Минеев Антон
26.05.2017, 08:23
Да, ответ помог:
31252
Так все вижу - все меняется...
А вот таблица:
31253
Там вместо времени прочерки...

Народ, добрый день... Вопрос не закрыт... Есть 3 дисплея вывода в 16#, где часы, минуты и секунды отображаются. Есть таблица - в которой мне нужно их выводить на разных строках. Там прочерки...
Может чего в регистрах таблицы?
PSW300 ?
PSW308 ?
PSW316 ?
и т.д. Причем значение значение в 1 столбец пишется именно с этими регистрами. Формат времени H:M:S31375

Евгений Кислов
26.05.2017, 08:29
Антон, свяжитесь со мной по skype, пожалуйста.

Пьер
02.06.2017, 15:06
Есть 2 экрана на СП307.
Когда остаюсь на 2 экране, нужно, чтобы через минуту переключался полноценно на 1 экран. Использую стандартные срества, которые находятся в Настройках. Получается так, оно вроде переходит на экран 1, но при нажатии на него, снова появляется экран 2. Или так и должно быть? Или все таки есть способ полноценно автоматически переключить экран?

Евгений Кислов
02.06.2017, 15:14
Есть 2 экрана на СП307.
Когда остаюсь на 2 экране, нужно, чтобы через минуту переключался полноценно на 1 экран. Использую стандартные срества, которые находятся в Настройках. Получается так, оно вроде переходит на экран 1, но при нажатии на него, снова появляется экран 2. Или так и должно быть? Или все таки есть способ полноценно автоматически переключить экран?

Стандартные средства реализуют скринсэйвер - так что да, при нажатии на экран-скринсейвер вы должны вернуться на экран, на котором были до того, как включился скринсэйвер.

Вашу задачу (переключение экрана в случае заданного периода неактивности), в моем понимании, нельзя решить простыми средствами.

Пьер
02.06.2017, 15:28
Стандартные средства реализуют скринсэйвер - так что да, при нажатии на экран-скринсейвер вы должны вернуться на экран, на котором были до того, как включился скринсэйвер.

Вашу задачу (переключение экрана в случае заданного периода неактивности), в моем понимании, нельзя решить простыми средствами.

Я понял. Спасибо!

SokolovS
02.06.2017, 16:35
Вашу задачу (переключение экрана в случае заданного периода неактивности), в моем понимании, нельзя решить простыми средствами.

А сложными можно?

Евгений Кислов
02.06.2017, 18:23
А сложными можно?

Итак, формулировка задачи: по истечению заданного периода неактивности оператора произвести переход на экран 1.

1. В настройках проекта выбираем режим Заставка, указываем интервал и номер экрана заставки - 1.
2. На экране 1 размещаем функциональную область, тип запуска - Переход на экран элемента. В ней инвертируем выбранный нами бит (например, PSB400) и выполняем макрос с функцией WakeupScreen.
3. На экране 1 размещаем функциональную область, тип запуска - После загрузки проекта. В ней сбрасываем в FALSE бит PSB400.
4. Создаем глобальную функциональную область, тип запуска - от бита PSB400. В ней осуществляем переход на экран 1.

Shurakip
04.06.2017, 16:37
Добрый день. Получил СП307, залил программу. Появляется табличка " соединение PLС порт 1". как избавиться?

Евгений Кислов
04.06.2017, 18:05
Добрый день. Получил СП307, залил программу. Появляется табличка " соединение PLС порт 1". как избавиться?

Видимо, в проекте подразумевается опрос устройств, которые будут подключены к этому порту. Окно сигнализирует об отсутствии ответа от этих устройств, после их подключения оно не будет появляться (если опрос в проекте настроен корректно).

Shurakip
04.06.2017, 19:14
оно то появляется, то исчезает. снизил скорость до 9600. не сказал бы, что это помогло

Видимо, в проекте подразумевается опрос устройств, которые будут подключены к этому порту. Окно сигнализирует об отсутствии ответа от этих устройств, после их подключения оно не будет появляться (если опрос в проекте настроен корректно).

Евгений Кислов
04.06.2017, 19:41
Значит, проблема на уровне настройки обмена. Проверьте соответствие сетевых настроек устройств (четность, кол-во стоп бит), адреса устройств, адреса регистров, функции Modbus, распиновку кабеля и т.д.

Shurakip
04.06.2017, 21:16
Без настроек обмена вообще виснет. Интересно то, что при появлении этой таблички все работает. Есть показания и управление. Наблюдаю два часа уже. Табличка пропала и пока не появляется.

Евгений Кислов
04.06.2017, 21:20
Без настроек обмена вообще виснет. Интересно то, что при появлении этой таблички все работает. Есть показания и управление. Наблюдаю два часа уже. Табличка пропала и пока не появляется.

Пришлите, пожалуйста, проект для панели и описание подключенных к ней устройств на support@owen.ru

Shurakip
05.06.2017, 10:15
Пришлите, пожалуйста, проект для панели и описание подключенных к ней устройств на support@owen.ru
как и что пометить в письме? или пометить кому...?

Евгений Кислов
05.06.2017, 10:18
как и что пометить в письме? или пометить кому...?

Можно ничего не помечать - просто обозначить ваши контакты для связи и компанию, в письме продублировать описание проблемы и все необходимые материалы (проекты, руководства на др. устройства и т.д.).

petera
05.06.2017, 15:35
Без настроек обмена вообще виснет. Интересно то, что при появлении этой таблички все работает. Есть показания и управление. Наблюдаю два часа уже. Табличка пропала и пока не появляется.
Если панель подключена к ПЛК ОВЕН, то как правило при включении питания, ПЛК переходит в рабочий режим позже панели из-за этого может возникать эта табличка. Когда ПЛК завершит свою инициализацию, то окошко пропадает.
Можно делать в панели стартовый экран(Экран приветствия) без элементов, с которого автоматически с заданной задержкой переходить на главный экран.

Skyblazer
07.06.2017, 22:48
в режиме эмуляции offline макросы выполняются?

Евгений Кислов
08.06.2017, 06:49
в режиме эмуляции offline макросы выполняются?

Добрый день. Нет, в эмуляции макросы не работают.

Юрий27
20.06.2017, 14:54
Добрый день.
Не получается соединить СП307Б и ПЛК100.К-М, на пробной программе все работает.
А на той, которую прописываю, не проходят сигналы ни в панель, ни из панели.
Настройки панели: 115200, 8, нет, 1, галочка на передаче данных есть, адрес 1, RTU Slave/ порт PLC.
Настройки плк: Modbus (Master), speed 11520, data 8 bits, one stop bit, RTU. Пробовал порт RS232 и RS485.
Обратил внимание на ошибку при загрузке проекта в плк.31743
Подскажите, что не так...

Евгений Кислов
21.06.2017, 07:32
Добрый день.
Не получается соединить СП307Б и ПЛК100.К-М, на пробной программе все работает.
А на той, которую прописываю, не проходят сигналы ни в панель, ни из панели.
Настройки панели: 115200, 8, нет, 1, галочка на передаче данных есть, адрес 1, RTU Slave/ порт PLC.
Настройки плк: Modbus (Master), speed 11520, data 8 bits, one stop bit, RTU. Пробовал порт RS232 и RS485.
Обратил внимание на ошибку при загрузке проекта в плк.31743
Подскажите, что не так...

Добрый день. Отправьте, пожалуйста, проекты для обоих устройств на support@owen.ru

Укажите версию прошивки ПЛК (можно посмотреть через PLC browser в Codesys, команда PLC Info).

Sulfur
21.06.2017, 08:59
Добрый день. Получил СП307, залил программу. Появляется табличка " соединение PLС порт 1". как избавиться?

Имею такую же проблему. Обратил внимание, что табличка появляется так же при обращении к несуществующему регистру в ПЛК.

-----------------
Вопрос по СП307: опрос регистров ПЛК выполняется только для активного экрана или читаются все регистры проекта для всех экранов?

Евгений Кислов
21.06.2017, 09:05
Имею такую же проблему. Обратил внимание, что табличка появляется так же при обращении к несуществующему регистру в ПЛК.

-----------------
Вопрос по СП307: опрос регистров ПЛК выполняется только для активного экрана или читаются все регистры проекта для всех экранов?


Исключите из проекта обращение к несуществующим регистрам ПЛК - тогда сообщения об ошибке появляться, естественно, не будет.

Если опрос настроен через графические элементы - то он ведется только для активного экрана.

petera
21.06.2017, 09:38
Исключите из проекта обращение к несуществующим регистрам ПЛК - тогда сообщения об ошибке появляться, естественно, не будет.

Если опрос настроен через графические элементы - то он ведется только для активного экрана.
Небольшое дополнение
Если в проекте помимо графических элементов есть графики или элементы архивирования, то обращение к регистрам ПЛК будет даже если графики или элементы архивирования расположены на не активных экранах.

Если на активном экране есть ф.области с функциями чтения регистров ПЛК, то обращение к регистрам ПЛК будет даже если условия вызова ф.области не выполняются.

Евгений Кислов
21.06.2017, 10:21
Небольшое дополнение
Если в проекте помимо графических элементов есть графики или элементы архивирования, то обращение к регистрам ПЛК будет даже если графики или элементы архивирования расположены на не активных экранах.

Если на активном экране есть ф.области с функциями чтения регистров ПЛК, то обращение к регистрам ПЛК будет даже если условия вызова ф.области не выполняются.

Спасибо за уточнение, жаль, что оно не получилось полностью корректным.

Элементы архивирования (например, Архивирование на USB) генерируют запросы по Modbus только в том случае, если открыт экран, на котором они расположены. Поэтому в большинстве случаев имеет смысл делать их глобальными.

Pavel70
22.06.2017, 06:26
тут http://www.owen.ru/forum/showthread.php?t=22915&p=206286&viewfull=1#post206286 уже обсуждалось про импорт из csv, а получится импортировать значение в таблице, допустим от 0 до 50 и передавать это значение через определенный промежуток времени на частотник в виде управляющего сигнала? или обязательно нужно промежуточное звено между СП и ПЧ в виде ПЛК? или можно обойтись ПР200? с ПР200 уже имел дело, и очень понравилась простота программирования. задача управлять насосами фонтана по заданной программе, например написанной в таблице csv.31764

Евгений Кислов
22.06.2017, 06:43
получится импортировать значение в таблице, допустим от 0 до 50 и передавать это значение через определенный промежуток времени на частотник в виде управляющего сигнала?

Импорт CSV поддержан, передать импортированные значения по Modbus тоже не составит труда.

shardim
26.06.2017, 11:55
Есть панель СП307.
Мне необходимо отключить звук при нажатии кнопок. Нашел, что регистру PFW2 нужно присвоить 1. Но тогда происходит полностью отключение звука, а мне надо, чтобы при возникновении определенных условий звук был. Возможно это реализовать?

И еще при запуске эмуляции OffLine макросы не выполняются, это нормально?

Евгений Кислов
26.06.2017, 11:57
Есть панель СП307.
Мне необходимо отключить звук при нажатии кнопок. Нашел, что регистру PFW2 нужно присвоить 1. Но тогда происходит полностью отключение звука, а мне надо, чтобы при возникновении определенных условий звук был. Возможно это реализовать?

И еще при запуске эмуляции OffLine макросы не выполняются, это нормально?

1. Можно отключить звук нажатий на элементы через PFW2, и при определенных условиях активировать его через элемент Зуммер или макрос (функция Beep).
2. Да, в эмуляции макросы не работают.

shardim
26.06.2017, 12:17
1. Можно отключить звук нажатий на элементы через PFW2, и при определенных условиях активировать его через элемент Зуммер или макрос (функция Beep).

Beep не работает, а вот Зуммер работает.

Евгений Кислов
26.06.2017, 12:28
Beep не работает, а вот Зуммер работает.

Не соглашусь - Beep тоже работает.
Как выглядит макрос и каким образом его вызываете?

shardim
26.06.2017, 12:34
Создаю макрос, в нем одна команда Beep();. Далее создаю функциональную область,ставлю условие запуска циклическое, в функциях указываю вызвать мой макрос. Не пищит.

Евгений Кислов
26.06.2017, 12:42
Создаю макрос, в нем одна команда Beep();. Далее создаю функциональную область,ставлю условие запуска циклическое, в функциях указываю вызвать мой макрос. Не пищит.

Да, воспроизвел - если PFW=1, то Beep не работает. Справедливое замечание.

Пьер
11.07.2017, 08:51
Панель СП307 включается со второго или третьего раза, другие включаются такие же соответственно без проблем. Питание ОВЕН БП60Б-Д4 24 В. Других потребителей нет. Везти к вам?

Евгений Кислов
11.07.2017, 09:00
Панель СП307 включается со второго или третьего раза, другие включаются такие же соответственно без проблем. Питание ОВЕН БП60Б-Д4 24 В. Других потребителей нет. Везти к вам?

Да, в сервисный центр.

SokolovS
14.07.2017, 10:39
Доброго дня
Помнится, с СП270 была проблема убегания встроенных часов как самих по себе, так и в зависимости от нагрузки
Подскажите пожалуйста, наблюдается ли такая проблема с СП3хх?
Вообще, есть ли в этой панели энергонезависимые часы?

petera
14.07.2017, 10:51
Доброго дня
Помнится, с СП270 была проблема убегания встроенных часов как самих по себе, так и в зависимости от нагрузки
Подскажите пожалуйста, наблюдается ли такая проблема с СП3хх?
Вообще, есть ли в этой панели энергонезависимые часы?

Часы есть, номер экрана для настройки то же 60002.
По точности хода - тоже не хронометр.

SokolovS
14.07.2017, 11:15
Часы есть, номер экрана для настройки то же 60002.
По точности хода - тоже не хронометр.
Понятно, что не хронометр
Помнится, у СП270 по нескольку десятков секунд в сутки убегало
И зависело от нагрузки на панель
Здесь как обстоит ситуация?
И что с энергонезависимостью?
Спасибо

petera
14.07.2017, 11:20
Понятно, что не хронометр
Помнится, у СП270 по нескольку десятков секунд в сутки убегало
И зависело от нагрузки на панель
Здесь как обстоит ситуация?
И что с энергонезависимостью?
Спасибо

Что значит, энергонезависимость?
Часы сделаны на отдельной "часовой" микросхеме от Даллас, с питанием от резервной батарейки.
Экспериментов зависимости хода часов от режимов работы панели я не делал.

SokolovS
14.07.2017, 11:42
Что значит, энергонезависимость?
Часы сделаны на отдельной "часовой" микросхеме от Даллас, с питанием от резервной батарейки.Спасибо, именно это я и имел в виду

Экспериментов зависимости хода часов от режимов работы панели я не делал.Понятно
Будет возможность, обязательно поэкспериментирую

Vovsav
14.07.2017, 12:32
Подскажите, возможно ли применение в макросах массивов или динамической адресации?

Евгений Кислов
14.07.2017, 12:56
Подскажите, возможно ли применение в макросах массивов или динамической адресации?

Да, конечно. Тут, например, использовались массивы:
http://www.owen.ru/uploads/aip_47_sait_kislov_36-37.pdf

Vovsav
14.07.2017, 17:19
Евгений, использую функцию Copy из вашего примера. Компиляция проходит без ошибок, а при записи конфигурации в панель выходит ошибка32097
Причем ваш пример загружается и работает нормально, может быть надо что-то настроить-подключить?

Vovsav
14.07.2017, 17:23
Все, разобрался :)

Vovsav
18.07.2017, 19:59
Добрый день! Подскажите:
- есть возможность вызывать запись на USB флеш непосредственно из макроса, например какой-нибудь функцией? Вариант с дерганьем бита управления понятен.
- если вызвать запись на USB флеш непосредственно из макроса, как остановить выполнение макроса до момента завершения записи на USB флеш? Или в макросе получить значение успешного завершения записи в этом же цикле выполнения макроса?

Евгений Кислов
18.07.2017, 20:18
Добрый день! Подскажите:
- есть возможность вызывать запись на USB флеш непосредственно из макроса, например какой-нибудь функцией? Вариант с дерганьем бита управления понятен.
- если вызвать запись на USB флеш непосредственно из макроса, как остановить выполнение макроса до момента завершения записи на USB флеш? Или в макросе получить значение успешного завершения записи в этом же цикле выполнения макроса?

- если вариант с дерганьем бита не подходит, то смотрите в сторону Stdio.h - fopen, fwrite, fclose и вся прочая обвязка и обработка.
- макрос, работающий с файлами, должен вызываться в параллельном режиме. после закрытия файла инкрементируйте счетчик - если значение изменилось, то запись произошла. о том, была ли она успешной, можно судить по косвенным признакам - увеличившемуся размеру файла и т.д.

Vovsav
20.07.2017, 22:08
Стр 195 РП СП3ХХ регистры доступа первого-девятого уровня: при открытии более высокого уровня доступа бит предыдущего уровня сбрасывается в 0 или остается равным 1? Симуляция на ПК бит предыдущего уровня доступа сбрасывает в 0, а панель бит предыдущего доступа оставляет как 1.

Евгений Кислов
21.07.2017, 06:55
Стр 195 РП СП3ХХ регистры доступа первого-девятого уровня: при открытии более высокого уровня доступа бит предыдущего уровня сбрасывается в 0 или остается равным 1? Симуляция на ПК бит предыдущего уровня доступа сбрасывает в 0, а панель бит предыдущего доступа оставляет как 1.

Все верно. Если в панели уже есть открытые уровни доступа, то при открытии более высокого они сохранятся.
Пример:
1. активирован первый уровень доступ - PSB60 ВКЛ - доступны для ввода элементы первого уровня.
2. активирован второй уровень доступа - PSB60 ВКЛ, PSB61 ВКЛ - доступны для ввода элементы первого и второго уровня.
3. если вручную сбросить PSB60, то элементы первого уровня станут недоступны для ввода.

Vovsav
21.07.2017, 17:00
Евгений, спасибо за оперативные ответы. Еще вопросик - можно ли в интерфейсе окна разработки наряду с элементами указывать текстовые комментарии (как после // в си) - т.е. текст, который виден в окне конфигуратора, но не виден при выполнении программы в панели?

Евгений Кислов
21.07.2017, 17:37
Евгений, спасибо за оперативные ответы. Еще вопросик - можно ли в интерфейсе окна разработки наряду с элементами указывать текстовые комментарии (как после // в си) - т.е. текст, который виден в окне конфигуратора, но не виден при выполнении программы в панели?

Используйте обычный элемент Текст с битом видимости PSB1 (он всегда FALSE, так что текст не будет отображаться на экране панели).

Vovsav
25.07.2017, 17:27
Евгений, добрый день! Поясните, пож-та: элемент Экспорт CSV, вкладка данные, элемент кол-во регистров что определяет? он как-то должен зависить от размера буфера данных если выбран циклический буфер? В моем случае запись на USB происходит только если указать кол-во регистров 0 и записывается в таком случае весь ненулевой буфер.

Евгений Кислов
25.07.2017, 17:49
Евгений, добрый день! Поясните, пож-та: элемент Экспорт CSV, вкладка данные, элемент кол-во регистров что определяет? он как-то должен зависить от размера буфера данных если выбран циклический буфер? В моем случае запись на USB происходит только если указать кол-во регистров 0 и записывается в таком случае весь ненулевой буфер.

Добрый день. См. Руководство пользователя, п. 9.7.1. Пример из этого пункта доступен на сайте:
http://www.owen.ru/uploads/sp307_archivation.zip

Если коротко - то это кол-во строк, записываемых в файл при вызове действия экспорта.

Vovsav
25.07.2017, 18:13
Спасибо, я изучил эти примеры ранее. В том то и вопрос, если в вашем примере http://www.owen.ru/uploads/sp307_archivation.zip в элементе Экспорт CSV, вкладка данные, элемент кол-во регистров выставить 1 (также как и 2, 3) то экспортируется какая-то билиберда, но не первая (две , три) строка буфера. В билиберде кол-во экспортируемых строк соответствует выставленному значению. Может быть при выставлении 1 нужно давать правильный адрес строки?

Евгений Кислов
25.07.2017, 20:37
Если вы меняете кол-во регистров, то нужно соответствующим образом поменять кол-во записей в элементе Архивирование в панели.

Vovsav
26.07.2017, 10:06
Евгений, можно ли в элементе архивирование USB вывод столбцов дата и время перенести в начало данных в файле экспорта? Чтобы первыми были дата и время, а потом столбцы, которые формируются в закладке данные. Сбор данных времени PSW30-35 понятен, но образует 6 столбцов в файле экспорта. Хотелось бы видеть в файле экспорта: два столбца дата и время, затем основные данные экспорта.

Евгений Кислов
26.07.2017, 10:21
Евгений, можно ли в элементе архивирование USB вывод столбцов дата и время перенести в начало данных в файле экспорта? Чтобы первыми были дата и время, а потом столбцы, которые формируются в закладке данные. Сбор данных времени PSW30-35 понятен, но образует 6 столбцов в файле экспорта. Хотелось бы видеть в файле экспорта: два столбца дата и время, затем основные данные экспорта.

Можно - собирайте строки с датой и временем в макросах, записывайте их в регистры, в элементе Архивирование на USB выбирайте тип данных STRING.

petera
26.07.2017, 10:22
Евгений, можно ли в элементе архивирование USB вывод столбцов дата и время перенести в начало данных в файле экспорта? Чтобы первыми были дата и время, а потом столбцы, которые формируются в закладке данные. Сбор данных времени PSW30-35 понятен, но образует 6 столбцов в файле экспорта. Хотелось бы видеть в файле экспорта: два столбца дата и время, затем основные данные экспорта.

Регистры PSW30-35 для сбора данных времени не нужны!!!
Достаточно вкл. эту галку
32232
Оставить только регистры с данными
32233

И все.
32235

Vovsav
26.07.2017, 10:30
Идем дальше. ) А как сделать чтобы дата и время были первыми столбцами?

Евгений Кислов
26.07.2017, 10:33
Идем дальше. ) А как сделать чтобы дата и время были первыми столбцами?

Просто добавляйте архивируемые переменные в нужном порядке:

32236

Vovsav
26.07.2017, 12:14
А для элемента Архивирование USB это можно применить? Там запрашивается регистр данных.

Евгений Кислов
26.07.2017, 12:17
А для элемента Архивирование USB это можно применить? Там запрашивается регистр данных.

Можно, там настройки совершенно аналогичные. Выбирайте тип данных STRING - и архивируйте строку, которую сформировали нужным вам образом и записали в регистры панели.

Прикладываю абстрактный пример для запуска в эмуляции (в корне диска D создастся файл CE.csv). Чтобы использовать в панели, выберите ID устройства = 0. Вам нужно будет только формировать требуемые строки не через Текстовый ввод, а в макросе.

32240

Vovsav
26.07.2017, 12:49
Т.е. я должен дату и время преобразовать в текст, записать в регистры, а потом сохранить? а готовые значения времени в формате текст в регистрах есть? Может быть использовать экспорт текущего времени из настроек?

Евгений Кислов
26.07.2017, 12:58
Т.е. я должен дату и время преобразовать в текст, записать в регистры, а потом сохранить? а готовые значения времени в формате текст в регистрах есть? Может быть использовать экспорт текущего времени из настроек?

"Экспорт текущего времени из настроек" - в этом случае у вас всего равно будет шесть отдельных значений, которые придется склеивать в две строки (Date/Time). Так что придется создать макрос - но это не должно составить труда.

petera
26.07.2017, 13:35
Т.е. я должен дату и время преобразовать в текст, записать в регистры, а потом сохранить? а готовые значения времени в формате текст в регистрах есть? Может быть использовать экспорт текущего времени из настроек?
В Си есть функция форматной печати в строку. С учетом тог, что дата и время в регистрах PSW30..PSW35 в двоично-десятичном формате получим
sprintf((char*)&PSW[1000], "%4X-%2.2X-%2.2X %2.2X:%2.2X:%2.2X ", PSW[30], PSW[31], PSW[32], PSW[33], PSW[34], PSW[35]);

здесь в десяти регистрах PSW1000...PSW1009 получится строка вида 2017-07-26 13:36:15

32243

32244

Vovsav
26.07.2017, 15:13
Спасибо! Все работает.

Vovsav
27.07.2017, 23:15
Вот такое сообщение.32281
Видимо это связано с групповым сохранением не более 120 регистров, но почему мне не дает сохранить более 10 (дата-время)+24 (данные) регистров? Ну и текст сообщения надо бы поправить...

Евгений Кислов
28.07.2017, 07:07
Вот такое сообщение.32281
Видимо это связано с групповым сохранением не более 120 регистров, но почему мне не дает сохранить более 10 (дата-время)+24 (данные) регистров? Ну и текст сообщения надо бы поправить...

Выложите ваш проект, пожалуйста (или отправьте мне на почту).
Действительно, есть ограничение в 127 регистров на один элемент архивации.

Vovsav
28.07.2017, 14:10
Евгений, добрый день! Направил вам архив проекта электронкой, письмо дошло? а то в наше время электронного спама...

Евгений Кислов
28.07.2017, 14:12
Евгений, добрый день! Направил вам архив проекта электронкой, письмо дошло? а то в наше время электронного спама...

Да, получил. Отпишусь в начале следующей недели.

a_gricaj
28.07.2017, 23:56
Подскажите пожалуйста почему макрос не компилируется :
32290

Ввел в глобальном макросе одну строчку: SetPSB(301);

Где ошибка?

a_gricaj
29.07.2017, 00:59
Подскажите пожалуйста почему макрос не компилируется :
32290

Ввел в глобальном макросе одну строчку: SetPSB(301);

Где ошибка?

Разобрался вроде, правильно ли я понял, что глобальный макрос используется только для описания переменных????

petera
29.07.2017, 03:56
Разобрался вроде, правильно ли я понял, что глобальный макрос используется только для описания переменных????

Не только.
В глобальном макросе Вы можете писать функции, которые затем можно использовать в макросах наравне со стандартными функциями Си.

Например.
Глобальный макрос
32291

Макрос Таймер
Измеряет продолжительность включенного состояния бита PSB300 в секундах (дискретность 0,1 сек)
32294

Макрос генерации случайных чисел в диапазоне от А до В
32293

akledirs
07.08.2017, 08:44
Возможно ли подключить 3 панели СП310-Р к одному ПЛК. Было бы здорово просто подключить к коммутатору и пусть меж собой битики и байтики там гоняют панельки и контроллеры.

Евгений Кислов
07.08.2017, 08:49
Возможно ли подключить 3 панели СП310-Р к одному ПЛК. Было бы здорово просто подключить к коммутатору и пусть меж собой битики и байтики там гоняют панельки и контроллеры.

Да, с Modbus TCP это возможно.

Vovsav
09.08.2017, 08:17
Добрый день! СП310-Slave, обмен с ПЛК304 через библитеку Овена по Modbus RTU. С регистрами все ясно. Опрашиваю биты. Использую команду 01х. Запрашиваю бит 264, кол-во битов в запросе-1. В буфере с нулевым индексом 0 или 1 бита 264. Все нормально.
Запрашиваю группу 2 (3) бита - 264 и 265 (266), в ответ в буфере с нулевым индексом приходит число соответствующее битам 264+8 бит, т.е. 33 регистр области PSB.
Все работает. Но не соответствует логике запроса.
Так должно быть?

Евгений Кислов
09.08.2017, 08:38
Добрый день! СП310-Slave, обмен с ПЛК304 через библитеку Овена по Modbus RTU. С регистрами все ясно. Опрашиваю биты. Использую команду 01х. Запрашиваю бит 264, кол-во битов в запросе-1. В буфере с нулевым индексом 0 или 1 бита 264. Все нормально.
Запрашиваю группу 2 (3) бита - 264 и 265 (266), в ответ в буфере с нулевым индексом приходит число соответствующее битам 264+8 бит, т.е. 33 регистр области PSB.
Все работает. Но не соответствует логике запроса.
Так должно быть?

Вы, вероятно, при запросе одного (двух, трех) бит получаете весь байт, из которого следует выделить значащие биты.
Скорее всего - это особенность библиотеки.

Evlord
14.08.2017, 15:18
как вывести значение времени линии данных архивного графика в отдельное поле вывода (панель СП310)?

Global
15.08.2017, 16:53
все привет

подскажите, кто уже неплохо разбирается в Конфигураторе СП3хх- есть ли что-то типа "битовый переключатель" где состоянию Вкл можно было бы присвоит бит №1, а состоянию Выкл - бит №2?

Пытаюсь сделать отображение состояния задвижки, а штатные библиотеки арматуры ну что-то прям совсем неупотребимые в реальной жизни. Я понимаю, что взяли много от китайцев, но блин W***** простительно не знать наших стандартов отображения арматуры и механизмов на технологических схемах, то от нашего производителя ждёшь бОльшего внимания к нашим нуждам))).
Есть какой-нибудь редактор, где можно было бы самому cделать элемент, типа редактор карт в CS?
или подскажите где поискать "рукописную" библиотеку элементов? может от W*** можно использовать?

Евгений Кислов
15.08.2017, 17:58
Добрый день. Опишите более подробно, что вам нужно. Судя по первой половине поста - 2-битный индикатор (на 4 состояния, типа ВКЛ/ОТКЛ/Неопределенное состояние/Ремонт). Я вас правильно понял?

По второй половине вопроса - практически для любого элемента можно настроить внешний вид через загруженные изображения (кнопка Библиотека). Или я неправильно понял посыл?

Global
16.08.2017, 11:34
2-битный индикатор (на 4 состояния, типа ВКЛ/ОТКЛ/Неопределенное состояние/Ремонт). Я вас правильно понял?
в общем-то да. минимум 2 битный, в идеале - n-бит.
собственно, о чём речь
есть стандарты, обозначения на принципиальных схемах запорно-регулирующей арматуры, электрических двигателей и механизмов, средств автоматизации, как по стандарту DIN, так и по ГОСТ. И нужно стандартное ГОСТовское изображение арматуры(про насос другой разговор) типа такого
32635
и цветами отображается состояние арматуры - закрыто/открыто
32636
при этом цвет 1 - это бит№1(=1), цвет 2 - бит №2(=1). Это минимум.
а в идеале, если бы ещё привязать бит№3 - контакт SF электродвигателя, и красить фон или окружность двигателя при отключении - вас бы просто носили на руках
Я не могу сказать крупному заказчику, что я плевать хотел на ТЗ, на его корпоративные требования, на его корпоративные стандарты (которые калька с ГОСТа и DIN, потому что генподрядчик китайцы, технологи немцы, EPC контракторы итальянцы, генпроектировщики китайцы и тд) , на его операторов, которые задают вопрос, глядя на то, что предлагается в Конфигураторе - что это такое?
вот такая вот задача у нас. На данном этапе мы кое-как согласовали документацию, но к наладке на объекте мы должны сделать :)

практически для любого элемента можно настроить внешний вид через загруженные изображения (кнопка Библиотека)может я что-то не понял. Да, можно подсунуть другое "изображение" для состояния Выкл к примеру, перед этим его нарисовав (отдельная блин работа!) и загрузив в библиотеку, но моя самодельная картинка будет статической картинкой, а не настраиваемым элементом, я не могу картинке настроить цвет, фон, заполнение, рамку и т.д. - во вкладке "Цвет". Нужна настройка. Вот я про что.
Ладно, сами всё нарисуем, но дайте хотя бы простую инструкцию в чём рисовать и как интегрировать, чтобы можно было настраивать элемент
или сделайте импорт библиотек формата flb.
Потому как загрузить в дефолтную библиотеку покемонов и трансформеров - это конечно здорово, спасибо ребята, я посмеялся, но хотелось бы поддерживать отечественного производителя без насилия над собой.

п.с. И кстати - у панелей W***k в редакторе работает отображение элементов в состоянии 0, 1, и т.д..
У вас это не работает. точнее работает, но только для анимированных элементов.
А я просто хочу посмотреть, как у меня будет выглядеть весь экран в состоянии всех битов =1, всех битовых индикаторов, скрытых надписей, переключателей и тд
или я не разобрался до конца в интерфейсе?

Юрий27
16.08.2017, 11:43
Добрый день, какие возможности в сенсорных панелях есть для сохранения введеных данных, после отключения питания.
Я работаю над проектом, где есть плк100 и сп307б, параметров которые можно вводить много, каким образом можно ускорить этот процесс. В идеале, чтобы сохранялись ранее введеные параметры.
И еще, какие преимущества дает флешка в сп3ххр?

Евгений Кислов
16.08.2017, 11:48
Добрый день, какие возможности в сенсорных панелях есть для сохранения введеных данных, после отключения питания.
Я работаю над проектом, где есть плк100 и сп307б, параметров которые можно вводить много, каким образом можно ускорить этот процесс. В идеале, чтобы сохранялись ранее введеные параметры.
И еще, какие преимущества дает флешка в сп3ххр?

Используйте энергонезависимые регистры PFW.


И еще, какие преимущества дает флешка в сп3ххр?

Очевидные - позволяет архивировать данные на USB-накопитель и, потом, например можно открыть их на ПК, построить графики в Excel и т.д.
В случае ведения архива в панели придется вытягивать архивы по Modbus - это не всегда является удобным вариантом.

Евгений Кислов
16.08.2017, 11:53
Да, можно подсунуть другое "изображение" для состояния Выкл к примеру, перед этим его нарисовав (отдельная блин работа!) и загрузив в библиотеку, но моя самодельная картинка будет статической картинкой, а не настраиваемым элементом, я не могу картинке настроить цвет, фон, заполнение, рамку и т.д. - во вкладке "Цвет". Нужна настройка. Вот я про что.
Ладно, сами всё нарисуем, но дайте хотя бы простую инструкцию в чём рисовать и как интегрировать, чтобы можно было настраивать элемент
или сделайте импорт библиотек формата flb.

Такой функционал не предусмотрен. Можно использовать элемент Динамическое изображение, и через макрос в зависимости от состояния нужных битов генерировать номер отображаемой элементом картинки. Соответственно, потребуется дополнительная работа - в основном, нарисовать нужные картинки.

Собственно, все упомянутые настройки доступны у сенсорных панельных контроллеров СПК. Там можно динамизировать через переменные практически все, что душе угодно:
http://www.owen.ru/catalog/panelnij_programmiruemij_logicheskij_kontroller_ov en_spk107/opisanie

Панель, все же, достаточно простое устройство, и конфигуратор с сотнями настраиваемых параметров порадует, скажем так, только незначительное количество особых пользователей.


А я просто хочу посмотреть, как у меня будет выглядеть весь экран в состоянии всех битов =1, всех битовых индикаторов, скрытых надписей, переключателей и тд
или я не разобрался до конца в интерфейсе?

Прошу прощения, отредактировал пост. Такая возможность есть - выберите 1 и нажмите на желтую руку.

Global
16.08.2017, 13:05
Такой функционал не предусмотрен. Можно использовать элемент Динамическое изображение, и через макрос в зависимости от состояния нужных битов генерировать номер отображаемой элементом картинки. Соответственно, потребуется дополнительная работа - в основном, нарисовать нужные картинки.ну то что не предусмотрен, понятно, чудес не ждали
а вот с этого момента можно поподробнее, чего-то не догоняю как выкрутиться. Там используется 16 битов, у меня в наличии только 2.


Собственно, все упомянутые настройки доступны у сенсорных панельных контроллеров СПК. Там можно динамизировать через переменные практически все, что душе угодно:
http://www.owen.ru/catalog/panelnij_programmiruemij_logicheskij_kontroller_ov en_spk107/opisanieвы не будете больше развивать свой Конфигуратор?
серия 100 крайне неудобна из-за отсутствия Ethernet
серия 200 - CoDeSys 3.5 ? а нельзя прикрутить СП3хх туда? решения 2 в 1 крайне неудобны из-за того, что операторский интерфейс может находится в одном месте, а шкаф контроллера - в другом, и одна панель работать на несколько независимых локальных САУ.

Панель, все же, достаточно простое устройство, и конфигуратор с сотнями настраиваемых параметров порадуем, скажем так, только незначительное количество особых пользователей.Панель это лицо компании. Если контроллер стоит в шкафу и кроме АСУшников никто в него не лезет, то лицо Заказчика смотрит в вашу панель. И от качества интерфейса оператора складывается впечатление о всей продукции.
да много не надо, не надо сотни параметров. Сделайте ГОСТовскую библиотеку основных элементов, или дайте энтузиастам возможность сделать самим. Вот готов написать типа ТЗ разработчикам по 3-5 элементам, которые жизненно необходимы, если сделаете - вы реально будете №1 .

Такой возможности действительно нет. Спасибо за обратную связь, передам разработчикам.
ок, спасибо, очень ждём

про 2ух битный индикатор я так понял вы предлагаете либо СПК и в3.5, либо через динамическое изображение как-то заколхозить смену изображения?

Евгений Кислов
16.08.2017, 13:13
про 2ух битный индикатор я так понял вы предлагаете либо СПК и в3.5, либо через динамическое изображение как-то заколхозить смену изображения?

Есть как минимум еще одно решение - накладывание элементов друг на друга и манипуляция их битами видимости.
Но простых готовых решений нет - это верно.

Конкретно в вашем случае - не будет ли удобнее использовать несколько отдельных битовых индикаторов для клапана (можно настроить один раз, сгруппировать и потом тиражировать).


ок, спасибо, очень ждём
По поводу переключения изображения для битовых элементов в редакторе - я отредактировал предыдущий пост, см. там.


Там используется 16 битов, у меня в наличии только 2.

Элемент Динамическое изображение отображает картинку, номер которой совпадает со значением в регистре, привязанном к элементу.
Вы можете в макросе проверять состояния заданных битов и по условию формировать значение этого регистра.


Вот готов написать типа ТЗ разработчикам по 3-5 элементам, которые жизненно необходимы, если сделаете - вы реально будете №1 .

Если не сложно - напишите и отправьте мне на почту, пожалуйста.
И еще укажите номера стандартов (DIN, ГОСТ и т.д.), на которые вы ориентируетесь. Буду крайне признателен.

Global
16.08.2017, 13:39
Есть как минимум еще одно решение - накладывание элементов друг на друга и манипуляция их битами видимости.
Но простых готовых решений нет - это верно.да, вероятно это проще всего.
Только проверьте, если я правильно понял применение бита видимости?
индикатор №1
состояние Вкл - бит1=1 - чекбокс "Видимый" поставить, "Бит видимости" - поставить галочку и привязать бит1
состояние Выкл бит1=0 чекбокс "Видимый" снять, "Бит видимости" - поставить галочку и привязать бит1
?
индикатор №2
состояние Вкл - бит2=1 - чекбокс "Видимый" поставить, "Бит видимости" - поставить галочку и привязать бит2
состояние Выкл бит2=0 чекбокс "Видимый" снять, "Бит видимости" - поставить галочку и привязать бит2
?
и потом наложить из друг на друга.

По поводу переключения изображения для битовых элементов в редакторе - я отредактировал предыдущий пост, см. там.:) вот даже ни разу не подумал про это)))) спасибо

Евгений Кислов
16.08.2017, 13:42
Нет, бит видимости - он универсальный на весь элемент, он не связан с состояниями ВКЛ/ВЫКЛ. Он будет нужен только для одного элемента. На него можно опять же воздействовать из макроса.

Если есть возможность - свяжитесь со мной по skype, пожалуйста.

Евгений Кислов
16.08.2017, 13:48
Выкладываю простейший пример, посмотрите в эмуляции - станет ясно, что я имел в виду.

petera
16.08.2017, 13:53
п.с. И кстати - у панелей W***k в редакторе работает отображение элементов в состоянии 0, 1, и т.д..
У вас это не работает. точнее работает, но только для анимированных элементов.
А я просто хочу посмотреть, как у меня будет выглядеть весь экран в состоянии всех битов =1, всех битовых индикаторов, скрытых надписей, переключателей и тд
или я не разобрался до конца в интерфейсе?
И здесь работает
32642

32643

Global
16.08.2017, 14:03
бит видимости - он универсальный на весь элементнепонятный функционал его, в привязке к индикатору и сочетание с чекбоксом "Видимый"
это дополнительное управление отображением ВСЕГО элемента на экране вне зависимости состояния бита самого индикатора?
а что тогда делает чекбокс "Видимый"? в мануале написано он тупо скрывает ВЕСЬ элемент (кстати текст надписи при этом остаётся, как так-то? какая-то непонятная логика у разрабов)
и бит видимости тоже скрывает весь элемент

скайп к сожалению не могу, заблокирован( если без него никак, то нужен таймаут, надо пиво купить сисадминам))
в какое время удобно?

Евгений Кислов
16.08.2017, 14:05
непонятный функционал его, в привязке к индикатору и сочетание с чекбоксом "Видимый"
это дополнительное управление отображением ВСЕГО элемента на экране вне зависимости состояния бита самого индикатора?
а что тогда делает чекбокс "Видимый"? в мануале написано он тупо скрывает ВЕСЬ элемент (кстати текст надписи при этом остаётся, как так-то? какая-то непонятная логика у разрабов)
и бит видимости тоже скрывает весь элемент

скайп к сожалению не могу, заблокирован( если без него никак, то нужен таймаут, надо пиво купить сисадминам))
в какое время удобно?

Чекбокс Видимый не влияет на активность элемента (он нужен, например, для невидимой кнопки).
Бит видимости влияет - если он в FALSE, то элемент не виден и не активен.

Удобно до 16-00 по московскому времени, в любой будний день.

Global
16.08.2017, 14:07
И здесь работает
ага, увидели уже, спасибо
просто у W**** перключение автоматом, а здесь ещё "дай пять" нажать надо :D
в спешке не допёр

Global
16.08.2017, 16:55
кстати, вот чего я не увидел в Конфигураторе, так вот этой очень удобной штуки
при выборе типа элемента, сразу можно посмотреть его вид в разных состояниях и количество состояний

Евгений Кислов
16.08.2017, 18:04
кстати, вот чего я не увидел в Конфигураторе, так вот этой очень удобной штуки
при выборе типа элемента, сразу можно посмотреть его вид в разных состояниях и количество состояний

Предпросмотр есть. У битового индикатора в настройках видно, какие изображения используются для состояний ВКЛ и ВЫКЛ (но надо переключать их, чтобы увидеть, это верно).

Global, если будут еще вопросы - напишите нам на support@owen.ru, пожалуйста - это поможет оперативнее их решать.

Global
16.08.2017, 18:19
Предпросмотр есть. У битового индикатора в настройках видно, какие изображения используются для состояний ВКЛ и ВЫКЛ (но надо переключать их, чтобы увидеть, это верно).
я про другое. Я про предпросмотр состояния в окне Библиотеки, а не в окне настроек выбранного типа.
В конфигураторе надо выбрать элемент и в окне настройки переключить его.
и только тогда я увижу, что в состоянии Выкл он к примеру синего цвета.
Сразу в Библиотеке элементов этого увидеть невозможно. Приходиться делать много лишних движений

petera
16.08.2017, 19:20
уже сам нашёл) надо залезть в папку установки Конфигуратора и вручную переместить нужные папки с нужным файлом индикатора (заранее запишите название типа элемента когда смотрите в Галерее и найдите его папку) из папки Gallery в подпапку Map в той же самой папке Gallery. Тогда эта папка с индикатором будет видна в списке в Библиотеке

почему так криво сделано, ну чтоп скучно не было видимо;)
Совсем необязательно так делать.
Можно прямо в библиотеке добавлять рисунки, создавать свои папки.
32660
А можно совместить это с редактированием внешнего вида элемента.

Юрий27
17.08.2017, 11:03
Используйте энергонезависимые регистры PFW.



Очевидные - позволяет архивировать данные на USB-накопитель и, потом, например можно открыть их на ПК, построить графики в Excel и т.д.
В случае ведения архива в панели придется вытягивать архивы по Modbus - это не всегда является удобным вариантом.

Добрый день, заменил регистры в панели, они сохраняются. Но теперь их не понимает контроллер, что теперь поменять в плк?

Евгений Кислов
17.08.2017, 11:04
Добрый день, заменил регистры в панели, теперь их не понимает контроллер, что теперь поменять в плк?

Адресация по Modbus для PFW имеет смещение в +10000.

Если у вас, например, был PSW300, то вы в ПЛК задавали регистр номер 300.
Теперь у вас PFW300, и в ПЛК надо задать регистр номер 10300.

Юрий27
17.08.2017, 11:11
Адресация по Modbus для PFW имеет смещение в +10000.

Если у вас, например, был PSW300, то вы в ПЛК задавали регистр номер 300.
Теперь у вас PFW300, и в ПЛК надо задать регистр номер 10300.

Получилось, буду ща все менять. Спасибо.

Vovsav
17.08.2017, 15:27
Добрый день! Для отключения звука СП310 присваиваю PFW2=1, отключения звука не происходит. Что я делаю не так?

Евгений Кислов
17.08.2017, 15:29
Добрый день! Для отключения звука СП310 присваиваю PFW2=1, отключения звука не происходит. Что я делаю не так?

Требуется перезагрузить панель по питанию, чтобы настройка вступила в силу.

Vovsav
17.08.2017, 15:43
Понял, спасибо!

Yuran66
21.08.2017, 18:59
Добрый день, уважаемые. Помогите решить проблему. Имеется связка S7-1500 и панель СП310-Р. Подключение по modbusTCP. Необходимо на панели отображать состояние дискретных входов ПЛК с адресами I8.0-I8.7. При запросе регистра 1х64, как впрочем и 0х64 получаю состояние бита Q8.0, а до входов достучаться не могу. Где ошибка

Евгений Кислов
21.08.2017, 20:32
Добрый день, уважаемые. Помогите решить проблему. Имеется связка S7-1500 и панель СП310-Р. Подключение по modbusTCP. Необходимо на панели отображать состояние дискретных входов ПЛК с адресами I8.0-I8.7. При запросе регистра 1х64, как впрочем и 0х64 получаю состояние бита Q8.0, а до входов достучаться не могу. Где ошибка

Ошибки нет - вам надо найти подходящий мануал для ПЛК. Можно начать с этого:
https://cache.industry.siemens.com/dl/files/380/94766380/att_57741/v1/net_modbus_tcp_s7-1500_en.pdf

Yuran66
22.08.2017, 03:57
За мануал спасибо, он у меня есть, только при чем тут ПЛК, если другой панелью все вычитывается? Не получается именно в этой связке.

Евгений Кислов
22.08.2017, 06:47
За мануал спасибо, он у меня есть, только при чем тут ПЛК, если другой панелью все вычитывается? Не получается именно в этой связке.

Панель отправляет запрос по Modbus с указанием заданной области данных (Coils/Discrete Inputs и т.д.) и номера бита/регистра. Про I/Q/DB и т.д. она ничего не знает. Другая панель, вероятно, имеет готовый драйвер с адресацией.
В руководстве ПЛК должно быть описано, как соотносятся (если соотносятся) физические адреса с modbus-адресами.
Собственно, в документе по ссылке описан блок Modbus TCP Server - можно положить в него любые данные ПЛК, которое будут прочитаны панелью.

Yuran66
22.08.2017, 07:43
В другой панели специально использовал чистый modbus tcp драйвер. В общем всё пошло, оказывается не работает только в эмуляторе. На живой панели всё ОК. Спасибо за внимание.

AngryMoonk
24.08.2017, 15:13
Здравствуйте подскажите как вывести текст на текстовый дисплей из макроса?

petera
24.08.2017, 15:27
Здравствуйте подскажите как вывести текст на текстовый дисплей из макроса?

Сишной функцией sprintf()

Например
sprintf((char*)&PSW[1000], "My Text");

Получите в текстовом дисплее с регистром PSW1000 текст - "My Text"

http://www.owen.ru/forum/showthread.php?t=22915&p=253487&viewfull=1#post253487

AngryMoonk
24.08.2017, 15:51
Сишной функцией sprintf()

Например
sprintf((char*)&PSW[1000], "My Text");

Получите в текстовом дисплее с регистром PSW1000 текст - "My Text"

http://www.owen.ru/forum/showthread.php?t=22915&p=253487&viewfull=1#post253487
Спасибо! Ещё один вопрос не как не могу победить можно ли полностью очищать график XY+ модель. Как обычный график? Русский язык поддерживает текстовый дисплей?

Евгений Кислов
24.08.2017, 15:59
Спасибо! Ещё один вопрос не как не могу победить можно ли полностью очищать график XY+ модель. Как обычный график? Русский язык поддерживает текстовый дисплей?

1. Можно очищать с помощью обнуления регистров графика.
2. Поддерживает, Win-1251.

AngryMoonk
24.08.2017, 16:07
1. Можно очищать с помощью обнуления регистров графика.
2. Поддерживает, Win-1251.
Пробовал он просто перерисовывает следующую пару точек в 0.

petera
24.08.2017, 16:14
Русский язык поддерживает текстовый дисплей?
Дисплей-то поддерживает русский.
А вот редактор макросов нет:(
По этому сообщения на русском придется выводить с помощью кодов ASCII
Например
Если сообщение - "Мой текст"
то как-то так придется делать.
sprintf((char*)&PSW[1000], "\xCC\xEE\xE9\x20\xF2\xE5\xEA\xF1\xF2");

petera
24.08.2017, 16:25
Пробовал он просто перерисовывает следующую пару точек в 0.

Не регистры очищать нужно, а циклический буфер устанавливать в начальное состояние

Например если график в проекте всего один, и данные будут в области PSW с авторазмещением
32817
То циклический буфер расположен в PSW4096 и PSW4098 начальные значения - 4100
32816

А если данные в PFW, то соответственно заменить
PSW4096 и PSW4098 на PFW4096 и PFW4098

AngryMoonk
24.08.2017, 17:23
Спасибо большое. Буду пробовать.

AngryMoonk
25.08.2017, 08:55
Не регистры очищать нужно, а циклический буфер устанавливать в начальное состояние

Например если график в проекте всего один, и данные будут в области PSW с авторазмещением
32817
То циклический буфер расположен в PSW4096 и PSW4098 начальные значения - 4100
32816

А если данные в PFW, то соответственно заменить
PSW4096 и PSW4098 на PFW4096 и PFW4098
Не даёт так сбросить график. Выдаёт ошибку неверное значение поля 0-4095.

Евгений Кислов
25.08.2017, 09:32
Собственно, да - я ошибся, а Petera все пояснил правильно.

AngryMoonk, посмотрите приложенный пример, запустите его в эмуляции. В нем данные графика размешаются начиная с регистра PSW300.

petera
25.08.2017, 09:39
Не даёт так сбросить график. Выдаёт ошибку неверное значение поля 0-4095. Какая у вас версия конфигуратора у меня нет таких функций как у вас.
Сочувствую :(


https://www.youtube.com/watch?v=Vr24eZGEmJE

Возьмите готовую кнопку из вложенного проекта.

ЗЫ
Дело не в версии конфигуратора.

AngryMoonk
25.08.2017, 09:44
Собственно, да - я ошибся, а Petera все пояснил правильно.

AngryMoonk, посмотрите приложенный пример, запустите его в эмуляции. В нем данные графика размешаются начиная с регистра PSW300.

Спасибо сделал работает.

AngryMoonk
25.08.2017, 09:52
Сочувствую :(


https://www.youtube.com/watch?v=Vr24eZGEmJE

Возьмите готовую из вложенного проекта.
ЗЫ
Дело не в версии конфигуратора.
даже так не хочет.


https://youtu.be/Tq5TCL4NPWk

petera
25.08.2017, 11:23
даже так не хочет.


https://youtu.be/Tq5TCL4NPWk

Так Вы и не меняйте ничего внутри, и будет работать.

AngryMoonk
25.08.2017, 11:34
Так Вы и не меняйте ничего внутри, и будет работать.
Все равно не сбрасывает. Сделал как посоветовал Евгений Кислов работает. Спасибо большое за помощь

KIPetek
28.08.2017, 08:35
Подскажите, пожалуйста, каким образом передать время из проекта ПЛК в панель?
ПЛК160, Codesys 2.3. В проекте есть переменная типа TIME, какие нужно сделать преобразования (или не нужно), чтобы в читаемом виде передавать данные на панель оператора СП310. Какой элемент на панели использовать для отображения времени?
Заранее благодарен.

Евгений Кислов
28.08.2017, 08:39
Подскажите, пожалуйста, каким образом передать время из проекта ПЛК в панель?
ПЛК160, Codesys 2.3. В проекте есть переменная типа TIME, какие нужно сделать преобразования (или не нужно), чтобы в читаемом виде передавать данные на панель оператора СП310. Какой элемент на панели использовать для отображения времени?
Заранее благодарен.

Зависит от того, как именно вы хотите отображать время.
Можно в ПЛК конвертировать его в набор целочисленных переменных (день-часы-минуты-секунды-миллисекунды) и отображать в панели с помощью нескольких Цифровых дисплеев.
Можно подготовить в ПЛК форматированную строку (например, "день 3, 12:13:14") и в панели отобразить ее с помощью текстового дисплея.

KIPetek
28.08.2017, 09:03
Евгений Кислов, переменная вот такая Remain:= TON1.PT - TON1.ET;, значения будут не больше 60 минут.
Каким образом можно разбить переменную на минуты/секунды для передачи на панель в наборе целочисленных переменных?
К примеру, Remain = T#54m45s, миллисекунды не нужны на панели.

petera
28.08.2017, 09:29
[B]...переменная вот такая Remain:= TON1.PT - TON1.ET;
Преобразовать Remain в DWORD
Remain_HMI:= TIME_TO_DWORD(Remain);

Переменную Remain_HMI ---> в слейв ПЛК (4byte)

Oak
30.08.2017, 10:11
Можно ли передать в панель, подключенную к ПЛК, текстовую строку 6 символов, для отображения. Как передать и чем отображать?

Евгений Кислов
30.08.2017, 10:20
Можно ли передать в панель, подключенную к ПЛК, текстовую строку 6 символов, для отображения. Как передать и чем отображать?

Да, можно. См. пример:
http://www.owen.ru/upl_files/PO/SP300CODESYS2.3_v1.1.zip

Oak
30.08.2017, 11:00
D поле текстовый ввод, если установить цвет текста черный цвет фона беоый, то при вводе на панели с клавиатуры поле закрашивается черным и вводимые символы не видны до нажатия ентер. Как изменить цвет выделения поля при вводе? Или убрать выделение?

Евгений Кислов
30.08.2017, 11:05
D поле текстовый ввод, если установить цвет текста черный цвет фона беоый, то при вводе на панели с клавиатуры поле закрашивается черным и вводимые символы не видны до нажатия ентер. Как изменить цвет выделения поля при вводе? Или убрать выделение?

Цвет выделения изменить нельзя, убрать его - тоже.
Единственный вариант - изменить цвет текста.

Юрий27
07.09.2017, 09:50
Добрый день, хотел сделать маломальскую анимацию из меняющихся картинок, нарисовал картинки, при помощи фотошопа убрал фон, в форматах гиф и пнг получилось сохранить. При загрузке в панель (СП307б) фон появился, есть ли способ убрать его, или сделать прозрачным?
33012

Евгений Кислов
07.09.2017, 10:13
Добрый день, хотел сделать маломальскую анимацию из меняющихся картинок, нарисовал картинки, при помощи фотошопа убрал фон, в форматах гиф и пнг получилось сохранить. При загрузке в панель (СП307б) фон появился, есть ли способ убрать его, или сделать прозрачным?
33012

При добавлении изображений ставите галочку Прозрачность?

33013

Юрий27
07.09.2017, 13:54
При добавлении изображений ставите галочку Прозрачность?

33013

Поставил, все получилось, продолжаю работу...
Спасибо:)

paul-th
12.09.2017, 10:05
Разъясните темному,
Вот запись в панель по функции 4 идет групповая допустим из ТРМ138, а запись по функции 3 в ТРМ уставок как идет и осуществляется.
С , модбас и макросы начал осваивать только, но пока вообще темный. Изучаю примеры и начало программирования с помощником, но он знает только С немного..

Евгений Кислов
12.09.2017, 10:23
Добрый день. 3x и 4x - это не номера функций, а обозначения областей памяти Modbus - Input-регистры (3x) и holding-регистры (4x).
Для записи в ТРМ необходимо использовать элемент ввода с 4x, и при этом переключить системный бит PFW36.2 в состояние ВКЛ для выбора функции записи 0x10 (как того требует РЭ на ТРМ).
Подробнее см. в FAQ, п. 3.8:
http://www.owen.ru/catalog/sensornie_paneli_operatora_oven_sp3xx/81265010

petera
12.09.2017, 10:35
Разъясните темному,
Вот запись в панель по функции 4 идет групповая допустим из ТРМ138, а запись по функции 3 в ТРМ уставок как идет и осуществляется.
С , модбас и макросы начал осваивать только, но пока вообще темный. Изучаю примеры и начало программирования с помощником, но он знает только С немного..

Для темного :rolleyes:
Маленькая табличка
http://www.owen.ru/forum/attachment.php?attachmentid=12621&d=1397777586
Функции 04 и 03 - чтение, а не запись
Какая будет использоваться зависит от ссылки на области регистров слейва
04 для области 3х
03 для области 4х

Тип области адресов зависит от этих префиксов
33095 33096
Панель сама выберет правильную функцию для чтения.

paul-th
12.09.2017, 11:08
Разбираюсь потихоньку, СПАСИБО. Понял так, 3 и 4 это чтение но разных по назначению регистров.
Ещё вопрос, в паспорте ТРМа названы адреса модбаса, и адрес восьмого канала float ст.слово дан 26, а в примере на панель адрес восьмого канала 38.
В паспорте похоже ошибка?
И записывать уставки я хочу не с цифрового ввода, а из макроса по времени.

petera
12.09.2017, 11:22
Разбираюсь потихоньку, СПАСИБО. Понял так, 3 и 4 это чтение но разных по назначению регистров.
Ещё вопрос, в паспорте ТРМа названы адреса модбаса, и адрес восьмого канала float ст.слово дан 26, а в примере на панель адрес восьмого канала 38.
В паспорте похоже ошибка?
И записывать уставки я хочу не с цифрового ввода, а из макроса по времени.
Ни какой ошибки нет
В таблице из руководства адреса регистров указаны в шестнадцатеричном формате(Hex), а в примере для дисплеев адреса задаются в десятичном формате(Dec)
26(Hex) = 38(Dec)

paul-th
12.09.2017, 11:43
Понял, спасибо. Постепенно появляется свет в конце ...
В паспорте на панель написано что запись значений в слейв устройства производится однократно с отключением ожидания ответа.
Я хочу периодически переписывать значения уставок в ТРМ, будет ли это работать?

petera
12.09.2017, 11:47
Понял, спасибо. Постепенно появляется свет в конце ...
В паспорте на панель написано что запись значений в слейв устройства производится однократно с отключением ожидания ответа.
Я хочу периодически переписывать значения уставок в ТРМ, будет ли это работать?

А почему не не должно работать?

ЗЫ. Только не делайте вот это

при этом переключить системный бит PFW36.2 в состояние ВКЛ для выбора функции записи 0x10 (как того требует РЭ на ТРМ)
Потому, что для ТРМ138 для записи в регистры слейва нужна функция 06.

paul-th
12.09.2017, 12:06
В руководстве на панель не описан регистр PFW36.
Пока мучить буду макрос, в примерах вроде всё разжевано, собрать бы это всё в единый макрос правильно, остальное вроде пока понятно. Спасибо.

alexx751
12.09.2017, 13:13
Что-то не совсем понял - по TCP доступ к отдельным битам через 4х невозможен (при выборе у, допустим, "переключателя с индикацией" порта PLC опция выбора 4х появляется, выбираем сконфигурированное подключение TCP - исчезает)?

petera
12.09.2017, 13:31
Что-то не совсем понял - по TCP доступ к отдельным битам через 4х невозможен (при выборе у, допустим, "переключателя с индикацией" порта PLC опция выбора 4х появляется, выбираем сконфигурированное подключение TCP - исчезает)?

В этой версии конфигуратора нет.
Ждите новую, более старшую версию

alexx751
12.09.2017, 13:56
И как работать с битами? (просто наводку дайте, попробую сам разобраться).
И может обладаете инфой когда старшая версия выйдет?
Заранее спасибо.

petera
12.09.2017, 15:05
И как работать с битами? (просто наводку дайте, попробую сам разобраться).
....

Совсем забыл...
Если в качестве слейва используется ПЛК ОВЕН, то следует заметить, что в конфигурации слейва ПЛК биты(0х) и регистры(4х) находятся в одной и той же области памяти.
http://www.owen.ru/forum/attachment.php?attachmentid=12345&d=1395648726
т.е. например бит 01, регистра 4х01 тоже самое, что и бит 0х17.
Таким образом можно вместо разрядов регистров 4х использовать соответствующие биты 0х

alexx751
12.09.2017, 16:26
Я так и делаю (правда в эмуляторе). Связь начинает рваться. Работает если только адреса 0, 16, 32 и т.д.
ПЛК 154 реальный...

petera
12.09.2017, 16:46
Я так и делаю (правда в эмуляторе). Связь начинает рваться. Работает если только адреса 0, 16, 32 и т.д.
ПЛК 154 реальный...
Подтверждаю, но эмулятор не показатель!.
Например в эмуляторе и в Modbus RTU для кнопок нельзя использовать 4хNN.mm, эмулятор вылетает с ошибкой.

Надо проверить в реальной панели.

paul-th
17.09.2017, 16:11
А почему не не должно работать?

ЗЫ. Только не делайте вот это

Потому, что для ТРМ138 для записи в регистры слейва нужна функция 06.
Добрый день.
Макрос почти сделал с помощником, но много вопросов.
При прописывании функции 06 на запись в прибор компилятор панели ругается. В примерах везде использовано 4х. и 3х.
И ещё вопрос, чтение из прибора текущей температуры идет в шестнадцатеричном виде, мне нужно изменять это значение, добавляя 1 градус каждые 5 минут и записывать в прибор. Нужно ли переводить значение в десятичный вид? И в каком виде записывать значение в регистр уставки прибора, в DWORD, десятичном или как? Там два регистра , уставки и усредненное значение. Есть ли ограничения на количество раз записей в прибор?

petera
17.09.2017, 20:25
При прописывании функции 06 на запись в прибор компилятор панели ругается. В примерах везде использовано 4х. и 3х.

Просто Вы не знакомы с элементарными понятиями из теории Modbus. Вы путаете функции с адресными ссылками
Популярно можно ознакомится здесь https://sites.google.com/site/fieldbusbook/seti/modbus/modbuseducation
4x и 3х это не функции, а ссылки к областям памяти слева.
В общем случае существуют четыре области
0х - область дискретных выходов (доступны чтение и запись)
1х - область дискретных входов (доступно только чтение)
3х - область входных регистров (доступно только чтение)
4х - область выходных регистров (доступны чтение и запись)

Для каждой области существуют свои функции(команды) для записи или чтения. Так вот функция 06 это команда для записи одного значения в регистр из области 4х
Я сделал маленькую шпаргалку
http://www.owen.ru/forum/attachment.php?attachmentid=12621&d=1397777586
Панель сама выберет нужную функцию, в зависимости от заданного в Write() или Read() 4х или 3х


И ещё вопрос, чтение из прибора текущей температуры идет в шестнадцатеричном виде, мне нужно изменять это значение, добавляя 1 градус каждые 5 минут и записывать в прибор. Нужно ли переводить значение в десятичный вид? И в каком виде записывать значение в регистр уставки прибора, в DWORD, десятичном или как?

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

123(Dec) = 7B(Hex) = 173(Oct) = 1111011(Bin) и это одно и тоже значение!

Вы же записываете в прибор число, а не символьную строку.
Если записываете значение переменной Ustavka, то вообще задумываться не о чем.
Просто Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, Ustavka);

или если значение уставки в регистре PSW[256]

Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, *(DWORD*)(PSW + 256));

Если константу, то как Вам больше нравится хотите
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 123); десятичное представление
или
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 0173); восьмеричное представление
или
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 0х7В); шестнадцатеричное представление

paul-th
18.09.2017, 08:13
Извиняйте что путаю, я же писал что совсем темный, с "С" и модбасом дел вообще не имел, программировал только в LD и FBD и с однофамильными комплектами, где прописывать ручками ничего не надо. Макрос и писал как вы строки набросали, но возникли сомнения в правильности понимания процесса, так как помощник ничего не понимает в оборудовании а я в "С" и его тонкостях. Допилю макрос и выложу. Спасибо за понимание.

petera
18.09.2017, 09:16
Извиняйте что путаю, я же писал что совсем темный, с "С" и модбасом дел вообще не имел, программировал только в LD и FBD и с однофамильными комплектами, где прописывать ручками ничего не надо. Макрос и писал как вы строки набросали, но возникли сомнения в правильности понимания процесса, так как помощник ничего не понимает в оборудовании а я в "С" и его тонкостях. Допилю макрос и выложу. Спасибо за понимание.
Ничего страшного, научитесь!
Если Ваш макрос делает только

чтение из прибора текущей температуры идет в шестнадцатеричном виде,мне нужно изменять это значение, добавляя 1 градус каждые 5 минут и записывать в прибор
то и в панели можно обойтись без программирования на Си, штатными средствами, например одной только функциональной областью.

paul-th
18.09.2017, 09:55
На счет научитесь, это смело сказано, почитал первоисточники, чтобы освоить это нужно этим заниматься постоянно, а не раз в пятилетку.
По записи в панель я понял что можно обойтись без макросов с помощью цифровых панелей .
Прикрепил проект . Связка СП307-ТРМ138 один канал локальный макрос.
Возможны путаница и не стыковки.

petera
18.09.2017, 11:07
На счет научитесь, это смело сказано, почитал первоисточники, чтобы освоить это нужно этим заниматься постоянно, а не раз в пятилетку.
По записи в панель я понял что можно обойтись без макросов с помощью цифровых панелей .
Прикрепил проект . Связка СП307-ТРМ138 один канал локальный макрос.
Возможны путаница и не стыковки.

Т.к. у Вас в макросе есть цикл do....while, то
- сделайте режим выполнения макроса -Параллельный
33170

- и дайте панели возможность обслуживать элементы экрана (маленькая задержка в теле цикла)
33171
иначе не сможете на экране нажимать кнопку и вводить какие-либо значения пока макрос не завершит свою работу.
Функция sleep() работать не будет, замените ее на Delay

petera
18.09.2017, 11:22
Дополнение...
33172

Ведь PSW256 это не тоже самое, что и 3х256
33173
И почему 3х256?
33174

petera
18.09.2017, 12:01
И с чего Вы взяли, что уставка в формате DWORD?
33175
Один регистр - 0х0011
А это значит формат - Word !
И адрес регистра в руководстве в шестнадцатеричном представлении приведен, по этому не
Write(PLC, 16, MODBUS_RTU_REG_4X, 11, 0, TYPE_DWORD, CurTemp);

а так
Write(PLC, 16, MODBUS_RTU_REG_4X, 17, 0, TYPE_WORD, CurTemp);

или так
Write(PLC, 16, MODBUS_RTU_REG_4X, 0х11, 0, TYPE_WORD, CurTemp);

paul-th
18.09.2017, 13:07
Ошибки исправлю. Спасибо.
Опять же вопрос, считываю я два регистра и как получается что я делаю вычисления и записываю только один регистр?
И в принципе макрос работоспособен?
Ящик на объекте стоит в другом городе и управление пока в ручном режиме даже без контроля текущей температуры.
Датчики не знают как к ТРМу подключить.
Исправленный проект.

petera
18.09.2017, 16:45
Ошибки исправлю. Спасибо.
И в принципе макрос работоспособен?
Ящик на объекте стоит в другом городе и управление пока в ручном режиме даже без контроля текущей температуры.
Датчики не знают как к ТРМу подключить.
Исправленный проект.

Сомневаюсь, я :(

Много путаницы.
Вот зачем это?
33188
Убрать категорически!!!
Кроме того, значение температуры из ТРМ в регистре 3х0003 будет получено в виде числа с плавающей точкой(Float)
33189
А у дисплея формат - целое без знаковое число(Unsigned)
33190

Вопрос о том как текущая температура из ТРМ попадет в регистр PSW256 и соответственно в макрос остается не раскрытым:rolleyes:
33191
Да и формат не тот. Не может CurTemp,если ее читать из регистра 0х0003, быть DWORD, только float
Кроме того Вы читаете из ТРМ значение температуры в формате Float, а максимальную температуру задаете в регистре PSW260 в формате UINT и соответственно в макросе сравниваете между собой не сравниваемые величины.
Либо читайте другой регистр - 0х0001 значение в формате INT.

Такая запись при объявлении переменных

DWORD CurTemp=PSW[256];
WORD MaxTemp=PSW[260];
WORD SleepSec=PSW[258];
WORD StartTemp=PSW[256];

По моему не прокатит. Боюсь, что компилятор при загрузке проекта в панель будет ругаться.
Уж лучше использовать директивы #define
например

#define SleepSec PSW[258]
#define MaxTemp *(float*)(PSW + 260) // При условии, что Вы все таки исправите на экране цифровой ввод для MaxTemp (тип данных DWord, формат Float)
33193 33194

paul-th
18.09.2017, 18:34
Вот зачем это?
Нажмите на изображение для увеличения.

Название: Захват-1.png
Просмотров: 1
Размер: 37.2 Кб
ID: 33188
Убрать категорически!!!
Это было в примере чтение текущей температуры с ТРМ138.

petera
18.09.2017, 19:36
Вот зачем это?
Нажмите на изображение для увеличения.

Название: Захват-1.png
Просмотров: 1
Размер: 37.2 Кб
ID: 33188
Убрать категорически!!!
Это было в примере чтение текущей температуры с ТРМ138.

Убрать!
Вы не могли бы конкретно описать, что должен делать Ваш макрос?
Что у Вас означают переменные
StartTemp - если это начальная температура, то почему она записывается в самом конце?

paul-th
18.09.2017, 20:10
Описание процесса.
При нажатии кнопки старт, вызывается макрос для первого канала регулировки температуры. Для этого записывается стартовая температура, ниже на один градус текущей или равна текущей. В ТРМ138 нет ПИДа, нельзя построить набор температуры по времени. Меня поставили перед фактом существования уже закупленного комплекта и его запуска в работу. Далее, идет набор температуры по времени до заданной, потом выдержка заданное время набранной температуры и всё, конец макроса и сброс уставки на стартовую.
В панели программа управления, а ТРМ контроль температуры и исполнительные клапана.
Я решил что такое можно сделать для данной связки, и вот мучаюсь осваивая для себя новую область.
Каналов будет восемь.

petera
18.09.2017, 20:36
Описание процесса.
При нажатии кнопки старт, вызывается макрос для первого канала регулировки температуры. Для этого записывается стартовая температура, ниже на один градус текущей или равна текущей. В ТРМ138 нет ПИДа, нельзя построить набор температуры по времени. Меня поставили перед фактом существования уже закупленного комплекта и его запуска в работу. Далее, идет набор температуры по времени до заданной, потом выдержка заданное время набранной температуры и всё, конец макроса и сброс уставки на стартовую.
В панели программа управления, а ТРМ контроль температуры и исполнительные клапана.
Я решил что такое можно сделать для данной связки, и вот мучаюсь осваивая для себя новую область.
Каналов будет восемь.
Уточните

Для этого записывается стартовая температура, ниже на один градус текущей или равна текущей
Все таки равная или меньше на 1?
и в конце

конец макроса и сброс уставки на стартовую
на какую стартовую, ту что была в начале или в конце нужно уставке присвоить значение текущей температуры

ЗЫ.
А может все таки в начале нужно уставку записывать на 1 больше текущего значения иначе если она будет меньше текущего значения, то и нагрев не пойдет?

petera
18.09.2017, 21:00
Вариант
33199

Для такого распределения регистров, макрос может быть таким
33200


#define SleepMin PSW[258]
#define MaxTemp *(float*)(PSW + 260)
#define StartTemp *(float*)(PSW + 256)
float CurTemp;
unsigned int CurMinute;

Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
StartTemp = CurTemp;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(StartTemp + 1));
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;

if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}

Delay(10);

} while ( CurTemp < MaxTemp );

Delay(SleepMin * 60000U);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, (int)CurTemp);

ResetPSB(256);

ЗЫ,
Внимание, нашел и исправил "очепятку"
Было
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;

if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0, 0х03, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}
Должно быть
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;

if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}

paul-th
19.09.2017, 16:34
Ну как бы понятно что стартовая температура - это температура, с которой начинается процесс нагрева. И соответственно она должна быть равна или ниже текущей температуры чтобы регулятор не включал ВУ пока она не будет задана выше. Как её вводить и что вводить, текущая температура может гулять от времени года, утро или день. камера не остыла от предыдущего процесса и она может быть разная. Вот я и думал вводить её с цифрового ввода в зависимости от состояния текущей температуры. И в конце процесса нагрева она снова должна переписываться в прибор чтобы регулятор встал и ВУ не включалось, а иначе как остановить регулятор. Как то так.
И думаю может все переменные привести к одному виду WORD int и читать 0х001. вроде как есть такая возможность, большой точности там не надо, сотые и десятые градуса не надо ловить.
И что цифровая панель чтения из прибора

Вот зачем это??

Убрать категорически!!!

не будет работать на запись в регистры?

Koren
19.09.2017, 16:40
Добрый день.

Есть связка 310+ПР220-24. Связь по modbus rtu. Панель 310 - мастер.
В связке всё работает нормально.
Ниже кусок экрана панели.
33214
На панели есть выключатель 4х512.
Когда я его включаю в ПР-ку уходит время для таймера.
ПР-ка возвращает 1 в 4х513 пока таймер работает.
Как только время закончилось в 4х513 прилетает 0.
Я уже всю голову себе сломал как сделать так, чтобы как только в 4х513 прилетает 0, то выключатель 4х512 так же выключался и открывалось окно с ID=2? Собственно вторая часть с окном, это не столь важна.

petera
19.09.2017, 17:16
Добрый день.

Есть связка 310+ПР220-24. Связь по modbus rtu. Панель 310 - мастер.
В связке всё работает нормально.
Ниже кусок экрана панели.
33214
На панели есть выключатель 4х512.
Когда я его включаю в ПР-ку уходит время для таймера.
ПР-ка возвращает 1 в 4х513 пока таймер работает.
Как только время закончилось в 4х513 прилетает 0.
Я уже всю голову себе сломал как сделать так, чтобы как только в 4х513 прилетает 0, то выключатель 4х512 так же выключался и открывалось окно с ID=2? Собственно вторая часть с окном, это не столь важна.

Значит надо как только в 4х513 прилетает 0, т.е. по спаду бита 0 в 4х513 запускать ф.область с функциями 1. Выкл бит 0 в 4х512; 2 Вызвать окно с ID=2.
Только вот ф.область может запускаться только по фронту бита, а по спаду пока нет.

Однако можно воспользоваться ГМ "НЕ" из моей библиотеки http://www.owen.ru/forum/showthread.php?t=25052&p=232246&viewfull=1#post232246
На вход(Операнд) подавать бит 0 в 4х513, а на выходе(Результат) использовать промежуточный PSB. И уже от этого PSB запускать ф.область с функциями Выкл бит 0 в 4х512; 2 Вызвать окно с ID=2.


https://www.youtube.com/watch?v=d2QhPySsOok

petera
19.09.2017, 17:39
И что цифровая панель чтения из прибора

Вот зачем это??

Убрать категорически!!!

не будет работать на запись в регистры?
Эта галка
33215
Совсем не запись в регистр PSW256, т.е не 3x0003 ---> PSW256.

А сия галка включает динамическую переадресацию.
Т.е. если галка включена, то на самом деле адрес регистра в ТРМ будет вычисляться по формуле
Адрес=БазовыйАдрес + Коеффициент х СодержимоеИндексногоРегистра.
В данном случае
3 + N x (Содержимое регистра PSW256)
где коэффициент N задается на этой вкладке
33216

Таким образом панель будет читать из ТРМ именно 3x0003 регистр если только PSW256 = 0.
А если задать N=5, то меняя в процессе работы панели содержимое регистра PSW256 от 0 до 7 можно на этот один дисплей выводит температуру любого из восьми каналов.

По этому я и спрашивал неоднократно
33217

Но от Вас никакого ответа не получил.

В моем макросе CurTemp читается непосредственно из ТРМ

paul-th
19.09.2017, 18:27
Да, спасибо, разобрался, т.е. для цифровой индикации текущей температуры не надо использовать ту форму что я использую.
А в макросе прописать строку чтения из прибора и записи в регистр. Как туго то доходит...

paul-th
20.09.2017, 14:27
Вот пробный проект, хочу завтра съездить посмотреть что получилось, там все равно монтаж надо ещё доделывать.

petera
20.09.2017, 15:14
Вот пробный проект, хочу завтра съездить посмотреть что получилось, там все равно монтаж надо ещё доделывать.

Ну вот опять двадцать пять:rolleyes:

Уж и не знаю, что с Вами делать. Зачем я текст макроса выкладывал?

Поймите, что нельзя так сделать
WORD CurTemp=PSW[256];
.......

Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);

..............................................

Потому, что в ТРМ значения текущей температуры в формате float, а не WORD
С таким подходом Вы ничего похожего на текущую температуру не прочитаете.


ЗЫ.
Например, если в ТРМ температура 123.456 градусов, то в CurTemp получите
либо 17142 либо 59769, в зависимости от некоторых нюансов

Rake Runner
20.09.2017, 15:23
Ну вот опять двадцать пять:rolleyes:

Уж и не знаю, что с Вами делать. Зачем я текст макроса выкладывал?

Поймите, что нельзя так сделать
WORD CurTemp=PSW[256];
.......

Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);

..............................................

Потому, что в ТРМ значения текущей температуры в формате float, а не WORD
С таким подходом Вы ничего похожего на текущую температуру не прочитаете.

По адресу 0x01 таки в WORD (точнее, в INT, не суть):
33239

Мне логика paul-th понятна - ему же достаточно прибавать целое число (а не, например, 1.5).
Только прибавить, вероятно, надо 10, а не 1 (В ТРМ вроде для 25.5 в регистре 1 будет 255 и т.д.).

petera
20.09.2017, 15:34
По адресу 0x01 таки в WORD (точнее, в INT, не суть):
33239

Мне логика paul-th понятна - ему же достаточно прибавать целое число (а не, например, 1.5).

В точку!
А бревна-то я и не заметил, тогда беру свои слова обратно.

Koren
20.09.2017, 16:59
Однако можно воспользоваться ГМ "НЕ" из моей библиотеки http://www.owen.ru/forum/showthread.php?t=25052&p=232246&viewfull=1#post232246
На вход(Операнд) подавать бит 0 в 4х513, а на выходе(Результат) использовать промежуточный PSB. И уже от этого PSB запускать ф.область с функциями Выкл бит 0 в 4х512; 2 Вызвать окно с ID=2.


Спасибо огромное. Всё получилось. И даже лучше чем хотел.... Но возникла другая проблема - при включении панели каждый раз появляется окно ID=2 т.к. при включении в регистре 4х513 0, а после функции НЕ соответственно 1. И появляется окно 2. Что можно сделать?

И ещё вопрос по "дисплею для таймера" из ГМ можно ли его делать невидимым? Я хочу наложить два дисплея друг на друга и в зависимости от условий отображать один из двух.

paul-th
20.09.2017, 18:43
Присвоение WORD CurTemp=PSW[256]; я убрал, только забыл исправить, оставил WORD CurTemp;
прибавлять буду по 10. и записывать в в конце процесса буду 100. Завтра по результату отпишусь.
СПАСИБО.

m-krym
21.09.2017, 09:14
Приобрели СП310р.
Пропал красный цвет. Брак или мог при отладке интерфейса что-нибудь записать?

Евгений Кислов
21.09.2017, 09:51
Приобрели СП310р.
Пропал красный цвет. Брак или мог при отладке интерфейса что-нибудь записать?

Что значит "пропал красный цвет"? Можете подробнее описать проблему и выложить проект, в котором она наблюдается?

m-krym
21.09.2017, 10:23
при отображении любой графики на панельке нету красной составляющей в цвете.
33249 упарвляем через ПЛК клапанами и снимаем инфу с датчиков, строим графики.
Сегодня вылезла ошибка переполнение psw при работе с трендами, но я уменьшил кол-во срезов и она пропала.

ща на другой панельке попробую

Евгений Кислов
21.09.2017, 10:31
при отображении любой графики на панельке нету красной составляющей в цвете.
33249 упарвляем через ПЛК клапанами и снимаем инфу с датчиков, строим графики.
Сегодня вылезла ошибка переполнение psw при работе с трендами, но я уменьшил кол-во срезов и она пропала.

ща на другой панельке попробую

Проблема возникла в какой-то определенный момент или проявилась уже при первой загрузке проекта?
Попробуйте сделать принудительную загрузку проекта (см. в Руководстве пользователя п. 6.2).

m-krym
21.09.2017, 10:39
Проблема возникла в какой-то определенный момент или проявилась уже при первой загрузке проекта?
Попробуйте сделать принудительную загрузку проекта (см. в Руководстве пользователя п. 6.2).

вчера все было нормально, целый день с панелькой работал.

попробовал на другой СП310р, там все нормально.

Евгений Кислов
21.09.2017, 10:50
вчера все было нормально, целый день с панелькой работал.

попробовал на другой СП310р, там все нормально.

При работе с трендами используйте область память PFW, а не PSW (чтобы не было "переполнения").
Попробуйте сделать принудительную загрузку проекта, если красный цвет не будет отображаться - отправьте панель в сервисный центр.

И, если не сложно, сделайте фото дисплея "без красной составляющей цвета", пожалуйста.

m-krym
21.09.2017, 14:00
При работе с трендами используйте область память PFW, а не PSW (чтобы не было "переполнения").
Попробуйте сделать принудительную загрузку проекта, если красный цвет не будет отображаться - отправьте панель в сервисный центр.

И, если не сложно, сделайте фото дисплея "без красной составляющей цвета", пожалуйста.

Сделал принудительную загрузку проекта, изображение стало нормальным.
Спасибо.

paul-th
21.09.2017, 16:07
Итоги дня так сказать.
Проект залился в панель без проблем, но нет соединения с ТРМ, сообщение "Соединение PLC 16". Параметры соединения установил как в мануале на панель и в приборе тоже, провода проверил, распайку кабеля проверил, местами А и В менял. Терминаторов там нет, они обязательны? Шкаф не знаю где купили в готовом виде.
Ещё вопрос, как использовать PFW для хранения параметров и в программе? компилятор макроса ругается на это.

petera
21.09.2017, 16:31
Итоги дня так сказать.
Проект залился в панель без проблем, но нет соединения с ТРМ, сообщение "Соединение PLC 16". Параметры соединения установил как в мануале на панель и в приборе тоже, провода проверил, распайку кабеля проверил, местами А и В менял. Терминаторов там нет, они обязательны? Шкаф не знаю где купили в готовом виде.
Ещё вопрос, как использовать PFW для хранения параметров и в программе? компилятор макроса ругается на это.

Потеря связи возникает из-за не совпадения настроек параметров соединения.
Как правило начинающие игнорируют такой параметр как "Контроль четности"
В ТРМ значения по умолчанию
33262

Где отмечено, что контроль четности -"Нет"
А у Вас в проекте панели
33263
Контроль четности включен - контролируется четность. А нужно включить "Нет"

Регистры PFW можно только читать или писать через Read() и Write()

UINT Ustavka;

Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &Ustavka);

Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, Ustavka);

Использовать PFW в вычислениях напрямую нельзя.

paul-th
21.09.2017, 17:20
Ну да я в ТРМ установил как в панели контроль четности. А терминатор нужен или нет?
В PFW я хотел хранить время выдержки и максимальную температуру нагрева, а то их значения обнуляются при выключении панели.
Т.е. в цифровом вводе задать регистр PFW и в макросе переписывать значение в PSW, я правильно понял?

RomX
22.09.2017, 09:52
Не запускается режим онлайн эмуляции на конфигураторе СП3хх. Конфигуратор просит установить интерфейсы панели. В файл\настройки проекта\устройство выбран modbus rtu master. Как запустить?

petera
22.09.2017, 10:22
Не запускается режим онлайн эмуляции на конфигураторе СП3хх. Конфигуратор просит установить интерфейсы панели. В файл\настройки проекта\устройство выбран modbus rtu master. Как запустить?
Теперь уже никак. Придется создавать новый проект и копи/пастить экраны из старого проекта в новый.
ВАЖНО!
Онлайн эмуляция работает только с настройками портов modbus rtu master.
При создании новых проектов следует СРАЗУ, на начальном этапе выбирать для портов панели modbus rtu master (для Download можно - Не используется)
Потому, что если изначально был выбран тип modbus ASCII master или mobbus slave, то даже если в последующем Вы измените тип на rtu master, это не помогает. Проект не перестраивается и эмулятор не будет запускаться в онлайн.

paul-th
22.09.2017, 14:12
petera Спасибо ещё раз, связь наладилась, процесс пошел. То что касается температуры и ТРМа всё хорошо работает, логика цикла выполняется правильно.
Но есть но.
В выдержками времени, по задержке и работа в цикле происходит не понятно что.
Задал увеличение уставки на 10 единиц, Мах Темп 40 гр. время выдержки 10 мин. внутри цикла 5 мин., первое изменение произошло не через 5 минут, а через 2 минуты и сразу на 20 градусов, текущая была 22 гр. и цикл встал на ожидание выдержки, она закончилась через 3 мин. вместо 10.
Сделал увеличение 2 единицы и время выдержки 5 мин. Увеличение температуры произошло так же через две минуты, но уже на 6 градусов и следующее увеличение произошло буквально через 20 сек. на 12 градусов, уставка достигла 40 гр. цикл встал на выдержку.
Что то со временем не так и с суммированием, что сделать чтобы было нормально?

RomX
22.09.2017, 16:45
Спасибо. А эмуляция на СП3хх у всех с трудом работает? У меня что-то медленно информация обновляется, эмулятор вылетает и вообще не все пременные работают. (Пробовал пример со страницы панели с ПР200). Может посоветуете какие-то предпочтительные настройки modbus?

petera
22.09.2017, 16:55
petera Спасибо ещё раз, связь наладилась, процесс пошел. То что касается температуры и ТРМа всё хорошо работает, логика цикла выполняется правильно.
Но есть но.
В выдержками времени, по задержке и работа в цикле происходит не понятно что.
Задал увеличение уставки на 10 единиц, Мах Темп 40 гр. время выдержки 10 мин. внутри цикла 5 мин., первое изменение произошло не через 5 минут, а через 2 минуты и сразу на 20 градусов, текущая была 22 гр. и цикл встал на ожидание выдержки, она закончилась через 3 мин. вместо 10.
Сделал увеличение 2 единицы и время выдержки 5 мин. Увеличение температуры произошло так же через две минуты, но уже на 6 градусов и следующее увеличение произошло буквально через 20 сек. на 12 градусов, уставка достигла 40 гр. цикл встал на выдержку.
Что то со временем не так и с суммированием, что сделать чтобы было нормально?

Покажите проект с последними изменениями

ЗЫ.

Задал увеличение уставки на 10 единиц, Мах Темп 40 гр. время выдержки 10 мин. внутри цикла 5 мин., первое изменение произошло не через 5 минут, а через 2 минуты и сразу на 20 градусов, текущая была 22 гр. и цикл встал на ожидание выдержки,
Так и должно работать :

.............................................
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;

if (CurMinute % 5 == 0)
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
}

Delay(10);

} while ( CurTemp < MaxTemp );
..................................................

Пятиминутное изменение уставки привязано к часам панели и происходит каждые 0, 5, 10, 15 ... 55 мин. По этому если запустили макрос в 14:53 или 17:13, то первое изменение и произойдет через 2 минуты - в 14:55 или 17:15
И так как условие if (CurMinute % 5 == 0) будет истинно в течение последующих 60 секунд, то и тело if
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
}
будет выполнятся непрерывно, и будет казаться, что "сразу на 20 градусов"

Тут надо использовать другой источник времени - регистр PSW38. Формат у него DWord.
В PSW38 находится время работы панели от момента включения. Дискретность 0,1 сек.

paul-th
22.09.2017, 17:56
Ну да, я так примерно и думал об этом формате задания промежутков и событий.
А можно на "С" сваять какое то стандартное и понятное, для меня. реле времени и событие фиксировалось как то там по переднему фронту?
И опять же как быть с выдержкой на delay.она тоже сильно не соответствует тому что задано.

petera
22.09.2017, 18:08
Ну да, я так примерно и думал об этом формате задания промежутков и событий.
А можно на "С" сваять какое то стандартное и понятное, для меня. реле времени и событие фиксировалось как то там по переднему фронту?
И опять же как быть с выдержкой на delay.она тоже сильно не соответствует тому что задано.

Можно. Используйте регистр PSW38
Например http://www.owen.ru/forum/showthread.php?t=22915&p=253752&viewfull=1#post253752

Или так

WORD MaxTemp=PSW[260];
WORD CurTemp;
UINT tm;

Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
do {
if (*(DWORD*)(PSW + 38) >= tm + 3000) // 3000 это 5 х 60 х 10
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
}

Delay(10);

} while ((CurTemp < MaxTemp) && GetPSBStatus(256));

Про Delay у меня то же есть соображения. Я думаю, что неверно задано объявление

WORD CurMinute;
Нужно
DWORD CurMinute;

Потому, что диапазон чисел у Word от 0 до 65535. И результат операции SleepMinute * 60000 превышает это самое 65535

В моем варианте было
SleepMinute * 60000U

paul-th
22.09.2017, 18:35
Хорошо, спасибо. Проверю только в понедельник. Я упустил букву U,думал она ничего не значит, и больше минуты с небольшим время невозможно задать в моем варианте.
Ещё вопрос, на один экран не влазят все восемь окон восьми каналов.
Я так понял что работать будут одновременно только макросы расположенные на активном окне или я не прав и можно сделать окна глобальными?

petera
22.09.2017, 18:45
Хорошо, спасибо. Проверю только в понедельник.
Ещё вопрос, на один экран не влазят все восемь окон восьми каналов.
Я так понял что работать будут одновременно только макросы расположенные на активном окне или я не прав и можно сделать окна глобальными?

В вашем случае в теле макроса есть цикл do...while по этому запущенный на одном экране он будет продолжатся и после переходе на другой экран, пока будет истинно while.
А режим выполнения макроса -"Параллельный" и маленькая Delay() внутри do...while позволяет нажимать кнопки на экранах и как следствие ходит по любым экранам и запускать другие макросы.
Т.е. все восемь макросов будут работать параллельно не зависимо от экранов

paul-th
22.09.2017, 18:48
О. Это здорово. То что надо.

petera
22.09.2017, 18:58
О. Это здорово. То что надо.

Предлагаю вариант макроса для одного канала

WORD MaxTemp=PSW[260];
WORD CurTemp;
WORD SleepMinute=PSW[258];
UINT tm;

Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
do {
if (*(DWORD*)(PSW + 38) >= tm + 3000) // 3000 это 5 х 60 х 10
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
}

Delay(10);

} while ((CurTemp < MaxTemp) && GetPSBStatus(256));

// --- ожидание выдержки ---
tm = *(DWORD*)(PSW + 38);
while ((*(DWORD*)(PSW + 38) < tm + SleepMinute * 600) && GetPSBStatus(256))
{
Delay(10);
}

Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );
ResetPSB(256);

Он нужен только один!
И запускать его нужно в ф.области от бита PSB256, как и было сделано Вами в первоначальном варианте - бит PSB256 устанавливается и сбрасывается от переключателя с действием "Инверсия"
33270
Дополнительных макросов не нужно
Условие досрочного выкл. бита PSB256 проверяется в самом макросе. И в этом случае макрос завершит работу.

Koren
23.09.2017, 20:07
Нужно заменить ГМ "НЕ" на F_TRIGGER.
F_TRIGGER и R_TRIGGER добавил в библиотеку http://www.owen.ru/forum/showthread.php?t=25052&p=258412&viewfull=1#post258412


Petera, спасибо огромное за ответы. У меня отпуск на 5 дней. Я во вторник обязательно попробую и отпишусь по результатам.

paul-th
24.09.2017, 16:40
Да, понял, по предыдущей записи что можно все в одном сделать. Макрос скопировал.

Не получается в одном макросе, второй макрос у нас переписывает уставку на 10 градусов при любом неожиданном нажатии на кнопку.

petera
25.09.2017, 00:02
Да, понял, по предыдущей записи что можно все в одном сделать. Макрос скопировал.

Не получается в одном макросе, второй макрос у нас переписывает уставку на 10 градусов при любом неожиданном нажатии на кнопку.
http://www.owen.ru/forum/attachment.php?attachmentid=11962&d=1392751544
Мой вариант макроса при повторном нажатии на переключатель в любой момент, или в процессе нагрева или в процессе выдержки, останавливает процесс и записывает уставку 10.
do {
...........
} while ((CurTemp < MaxTemp) && GetPSBStatus(256));
.............
while ((*(DWORD*)(PSW + 38) < tm + SleepMinute * 600) && GetPSBStatus(256))
.............
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );


Тогда зачем еще какой-то макрос делать?

vniko
25.09.2017, 15:06
Добрый день.
В Конфигураторе СП300 в свойствах кнопок и ламп во вкладке "Кнопка" при нажатии на "Изменить" можно выбрать вид элемента (файл.xjt) из галереи.
Как можно отредактировать файл.xjt чтобы создать свой вид элемента с сохранением возможности изменять цвет кнопки и цвет рамки?

paul-th
25.09.2017, 18:15
Спасибо!!! Все работает как надо. Один канал исправно работает. Осталось размножить на восемь каналов. Дописал две строки для сохранения редко изменяемых параметров в PFW, тоже работает нормально.
У заказчика по мере готовности появились новые хотелки, управлять запуском и остановкой парового котла с той же панели, но я его пока разочаровал необходимостью новых затрат и времени.
Аварийку бы ещё какую сделать, но не знаю кто за ней смотреть будет, принцип "включили на ночь" и до утра никого нет.

Евгений Кислов
26.09.2017, 07:04
Добрый день.
В Конфигураторе СП300 в свойствах кнопок и ламп во вкладке "Кнопка" при нажатии на "Изменить" можно выбрать вид элемента (файл.xjt) из галереи.
Как можно отредактировать файл.xjt чтобы создать свой вид элемента с сохранением возможности изменять цвет кнопки и цвет рамки?

Добрый день. К сожалению, такой возможности не предусмотрено.

RomX
26.09.2017, 14:39
Пробовал пример со страницы панели с ПР200 [url]http://www.owen.ru/uploads/sp310_pr200modbus_v2.zip.
СП3хх- использовал онлайн эмулятор, ПР200 - живьем.
Есть след вопросы:
1. В эмуляторе при нажатии на переключатель с индикацией приложение стабильно вылетает с ошибкой. Пробовал на разных компах с семеркой и десяткой. Что не так?
2. В параметрах порта убрал галку "переставить word в float" соответственно в пр200 в настройках установил галку старшим регистром вперед. В результате отображение переменных F2...F5 отсталось нормальным, F1 отображается неверно, причем оно не зависить от расстановки галок в настройках ПР200 "старшим регистром вперед" и "старшим байтом вперед". Что происходит?

petera
26.09.2017, 14:55
Пробовал пример со страницы панели с ПР200 [url]http://www.owen.ru/uploads/sp310_pr200modbus_v2.zip.
СП3хх- использовал онлайн эмулятор, ПР200 - живьем.
Есть след вопросы:
1. В эмуляторе при нажатии на переключатель с индикацией приложение стабильно вылетает с ошибкой. Пробовал на разных компах с семеркой и десяткой. Что не так?
2. В параметрах порта убрал галку "переставить word в float" соответственно в пр200 в настройках установил галку старшим регистром вперед. В результате отображение переменных F2...F5 отсталось нормальным, F1 отображается неверно, причем оно не зависить от расстановки галок в настройках ПР200 "старшим регистром вперед" и "старшим байтом вперед". Что происходит?

Эмулятор не работает с битовыми переменными типа 4хNNN.mm

ЗЫ.
п.2
т.к. настройка в параметрах порта "переставить word в float" влияет только на чтение/запись единичных переменных DWord или Float.
Отображение переменных F2...F5 происходит через промежуточные PSW, в которые значения регистров копируются функцией "Копировать блок регистров". На эту функцию настройки "переставить word в float" не действует.
А действует только на правильность отображения перемеренной F1

Настройки вернуть как было в проектах изначально.

RomX
26.09.2017, 15:36
Спасибо petera.

paul-th
27.09.2017, 15:27
Добрый день. Это снова я.
Размножил макросы и попробовал это дело на панели. Сначала запустил сразу четыре макроса и панель встала не на что не реагируя. Помогло только отключение питания. Попробовал по одному макросу запускать. Работает только первый макрос нормально, остальные не работают, не переписывается текущее значение в уставку, пишет какие то непонятные цифры. Останов макросов происходит нормально с перезаписью на 10 единиц. Регистры все проверил всё соответствует.
В чем может быть проблема?

Проблема похоже в ТРМе, что в регистре положения точки? Потому что некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700. В восьмом канале ничего не происходит вообще. Как её там поправить я не знаю. На табло прибора и на панели текущее значение отображает нормально. Читать буду с регистров других. Но самое печальное что более трех макросов одновременно не могут работать, при запуске четвертого макроса панель встает и все процессы тоже.

petera
28.09.2017, 16:05
Добрый день. Это снова я.
Размножил макросы и попробовал это дело на панели. Сначала запустил сразу четыре макроса и панель встала не на что не реагируя. Помогло только отключение питания. Попробовал по одному макросу запускать. Работает только первый макрос нормально, остальные не работают, не переписывается текущее значение в уставку, пишет какие то непонятные цифры. Останов макросов происходит нормально с перезаписью на 10 единиц. Регистры все проверил всё соответствует.
В чем может быть проблема?

Проблема похоже в ТРМе, что в регистре положения точки? Потому что некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700. В восьмом канале ничего не происходит вообще. Как её там поправить я не знаю. На табло прибора и на панели текущее значение отображает нормально. Читать буду с регистров других. Но самое печальное что более трех макросов одновременно не могут работать, при запуске четвертого макроса панель встает и все процессы тоже.

В общем 8 параллельных макросов панель не тянет, мне удалось запустить только четыре одновременно работающих.
По этому нужно отказаться от циклов do...while и использовать вместо этого case и сделать один макрос для всех каналов
33352


static UINT tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8;
static int State1, State2, State3, State4, State5, State6, State7, State8;
static int CurTemp1, CurTemp2, CurTemp3, CurTemp4, CurTemp5, CurTemp6, CurTemp7, CurTemp8;
static int SleepMinute1, SleepMinute2, SleepMinute3, SleepMinute4, SleepMinute5, SleepMinute6, SleepMinute7, SleepMinute8;
static int MaxTemp1, MaxTemp2, MaxTemp3, MaxTemp4, MaxTemp5, MaxTemp6, MaxTemp7, MaxTemp8;
//--------- Canal 1 -----------------
if (!GetPSBStatus(256) && State1 > 0) {
State1 = 99;
}

switch (State1) {
case 0:
if (GetPSBStatus(256)) {
State1 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &SleepMinute1);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 258, 0, TYPE_WORD, &MaxTemp1);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0X01, 0, TYPE_WORD, &CurTemp1);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
tm1 = *(DWORD*)(PSW + 38);
State1 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm1 + 1800) {
tm1 = *(DWORD*)(PSW + 38);
CurTemp1 = CurTemp1 + 10;
if (CurTemp1 <= MaxTemp1) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
break;
}
else {
State1 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm1 + SleepMinute1 * 600)) {
ResetPSB(256);
State1 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );
State1 = 0;
}
//--------- Canal 2 -----------------
if (!GetPSBStatus(257) && State2 > 0) {
State2 = 99;
}

switch (State2) {
case 0:
if (GetPSBStatus(257)) {
State2 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 260, 0, TYPE_WORD, &SleepMinute2);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 262, 0, TYPE_WORD, &MaxTemp2);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x06, 0, TYPE_WORD, &CurTemp2);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
tm2 = *(DWORD*)(PSW + 38);
State2 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm2 + 1800) {
tm2 = *(DWORD*)(PSW + 38);
CurTemp2 = CurTemp2 + 10;
if (CurTemp2 <= MaxTemp2) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
break;
}
else {
State2 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm2 + SleepMinute2 * 600)) {
ResetPSB(257);
State2 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, 10 );
State2 = 0;
}
//--------- Canal 3 -----------------
if (!GetPSBStatus(258) && State3 > 0) {
State3 = 99;
}

switch (State3) {
case 0:
if (GetPSBStatus(258)) {
State3 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 264, 0, TYPE_WORD, &SleepMinute3);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 266, 0, TYPE_WORD, &MaxTemp3);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x0B, 0, TYPE_WORD, &CurTemp3);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
tm3 = *(DWORD*)(PSW + 38);
State3 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm3 + 1800) {
tm3 = *(DWORD*)(PSW + 38);
CurTemp3 = CurTemp3 + 10;
if (CurTemp3 <= MaxTemp3) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
break;
}
else {
State3 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm3 + SleepMinute3 * 600)) {
ResetPSB(258);
State3 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, 10 );
State3 = 0;
}
//--------- Canal 4 -----------------
if (!GetPSBStatus(259) && State4 > 0) {
State4 = 99;
}

switch (State4) {
case 0:
if (GetPSBStatus(259)) {
State4 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 268, 0, TYPE_WORD, &SleepMinute4);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 270, 0, TYPE_WORD, &MaxTemp4);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x10, 0, TYPE_WORD, &CurTemp4);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
tm4 = *(DWORD*)(PSW + 38);
State4 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm4 + 1800) {
tm4 = *(DWORD*)(PSW + 38);
CurTemp4 = CurTemp4 + 10;
if (CurTemp4 <= MaxTemp4) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
break;
}
else {
State4 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm4 + SleepMinute4 * 600)) {
ResetPSB(259);
State4 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, 10 );
State4 = 0;
}
//--------- Canal 5 -----------------
if (!GetPSBStatus(260) && State5 > 0) {
State5 = 99;
}

switch (State5) {
case 0:
if (GetPSBStatus(260)) {
State5 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 272, 0, TYPE_WORD, &SleepMinute5);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 274, 0, TYPE_WORD, &MaxTemp5);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x15, 0, TYPE_WORD, &CurTemp5);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
tm5 = *(DWORD*)(PSW + 38);
State5 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm5 + 1800) {
tm5 = *(DWORD*)(PSW + 38);
CurTemp5 = CurTemp5 + 10;
if (CurTemp5 <= MaxTemp5) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
break;
}
else {
State5 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm5 + SleepMinute5 * 600)) {
ResetPSB(260);
State5 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, 10 );
State5 = 0;
}
//--------- Canal 6 -----------------
if (!GetPSBStatus(261) && State6 > 0) {
State6 = 99;
}

switch (State6) {
case 0:
if (GetPSBStatus(261)) {
State6 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 276, 0, TYPE_WORD, &SleepMinute6);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 278, 0, TYPE_WORD, &MaxTemp6);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1A, 0, TYPE_WORD, &CurTemp6);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
tm6 = *(DWORD*)(PSW + 38);
State6 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm6 + 1800) {
tm6 = *(DWORD*)(PSW + 38);
CurTemp6 = CurTemp6 + 10;
if (CurTemp6 <= MaxTemp6) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
break;
}
else {
State6 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm6 + SleepMinute6 * 600)) {
ResetPSB(261);
State6 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, 10 );
State6 = 0;
}
//--------- Canal 7 -----------------
if (!GetPSBStatus(262) && State7 > 0) {
State7 = 99;
}

switch (State7) {
case 0:
if (GetPSBStatus(262)) {
State7 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 280, 0, TYPE_WORD, &SleepMinute7);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 282, 0, TYPE_WORD, &MaxTemp7);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1F, 0, TYPE_WORD, &CurTemp7);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
tm7 = *(DWORD*)(PSW + 38);
State7 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm7 + 1800) {
tm7 = *(DWORD*)(PSW + 38);
CurTemp7 = CurTemp7 + 10;
if (CurTemp7 <= MaxTemp7) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
break;
}
else {
State7 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm7 + SleepMinute7 * 600)) {
ResetPSB(262);
State7 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, 10 );
State7 = 0;
}
//--------- Canal 8 -----------------
if (!GetPSBStatus(263) && State8 > 0) {
State8 = 99;
}

switch (State8) {
case 0:
if (GetPSBStatus(263)) {
State8 = 1;
}
else break;

case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 284, 0, TYPE_WORD, &SleepMinute8);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 286, 0, TYPE_WORD, &MaxTemp8);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x24, 0, TYPE_WORD, &CurTemp8);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
tm8 = *(DWORD*)(PSW + 38);
State8 = 2;

case 2:
if (*(DWORD*)(PSW + 38) >= tm8 + 1800) {
tm8 = *(DWORD*)(PSW + 38);
CurTemp8 = CurTemp8 + 10;
if (CurTemp8 <= MaxTemp8) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
break;
}
else {
State8 = 3;
}
}

case 3:
if ((*(DWORD*)(PSW + 38) >= tm8 + SleepMinute8 * 600)) {
ResetPSB(263);
State8 = 99;
}
else break;

case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, 10 );
State8 = 0;
}

"Волшебное" слово static в объявлении переменных обязательно!

Макрос нужно запускать в ф.области с типом - Непрерывно.
33353 33354
Режим выполнения макроса - Последовательный.
Ф.область должна быть глобальной.

Контроль кнопок ПУСК/СТОП сделан в самом макросе. По этому нужно использовать обычные кнопки.
33355 33356

Проверил работу. Полет нормальный.
Измененный проект во вложении.

ЗЫ.
Конечно можно использовать 8 отдельных макросов и 8 ф.областей.
Но зачем, если и в одном макросе все работает?

paul-th
29.09.2017, 09:17
А я сижу как раз ковыряю это дело. Вы на чем проверяли? С ТРМом 138?
Потому что у меня не читает текущее значение правильно с регистров 0Х06,0Х0b,0X10,0X15,0X1a,0X1f,0Х24, а читает только правильно с 0X01, я переписал чтение с регистров float, может я неправильно форму записи номера регистра использую? Там есть в каждом канале регистр положения десятичной точки. как с ним работать? Четыре макроса не удавалось запустить. Три работали. В понедельник проверю работу макроса.Спасибо.

petera
29.09.2017, 10:07
А я сижу как раз ковыряю это дело. Вы на чем проверяли? С ТРМом 138?
Потому что у меня не читает текущее значение правильно с регистров 0Х06,0Х0b,0X10,0X15,0X1a,0X1f,0Х24, а читает только правильно с 0X01, я переписал чтение с регистров float, может я неправильно форму записи номера регистра использую? Там есть в каждом канале регистр положения десятичной точки. как с ним работать? Четыре макроса не удавалось запустить. Три работали. В понедельник проверю работу макроса.Спасибо.

ТРМ у меня нет. Во многих случаях, при отсутствии реального железа, я использую "PeakHMI MODBUS serial RTU slave simulator"
33368

33367

33369 33370

33371 33372

Незаменимый инструмент, совершенно бесплатный.
33366

http://www.hmisys.com/

petera
29.09.2017, 11:03
Там есть в каждом канале регистр положения десятичной точки. как с ним работать?
Все очень просто.
Из ТРМ можно читать значения или формате Float или Int.
Float - это вещественные числа или числа с плавающей запятой(точкой), тут присутствуют и целые и дробные числа
Int - это только целые числа, дробных нет. Но можно интерпретировать их как числа с фиксированной точкой(запятой), если договорится о требуемой точности представления. Для этого между двумя заранее определёнными разрядами ставится запятая для превращения целого числа в дробное. Например, целое число 1234 после вставки запятой превращается в дробное 12,34.
Так вот в регистре положения десятичной точки и находится число которое указывает сколько знаков после запятой(или от конца числа) отводится под дробную часть в измеренном значении.
Например.
Пусть температура среды равна 123,4гр.
если в регистре положения десятичной точки 0, то в регистре значения температуры получим 123
если в регистре положения десятичной точки 1, то в регистре значения температуры получим 1234
если в регистре положения десятичной точки 2, то в регистре значения температуры получим 12340

Аналогичные настройки есть и у дисплея панели для целых чисел(Dec, Unsigned)
33374 33375
По этому, если Вы у дисплея задали число знаков после запятой =1, то и В ТРМ в регистре положения десятичной точки должна быть 1.
В противном случае будет так

некоторые каналы читает со сдвигом влево вместо 11 гр. пишет 1.1, а другие каналы наоборот, вместо 7 гр. пишет 700
В первом случае в регистре положения десятичной точки число 0, а во втором - в регистре положения десятичной точки число 3.

А алогичный регистр положения десятичной точки есть и для уставок. И здесь нужно быть аккуратным. Если в регистре положения десятичной точки для уставки, например 1 канала 0x0010, записано
- число 0, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 10гр
- число 1, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 1,0гр
- число 2, то CurTemp1 = CurTemp1 + 10; увеличивает уставку на 0,10гр
и т.д.


В принципе можно принудительно записать в регистры положения десятичной точки для всех каналов измерения число 1. Добавить по одной строчке
case 1:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0, 0, TYPE_WORD, 1);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &SleepMinute1);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 258, 0, TYPE_WORD, &MaxTemp1);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0X01, 0, TYPE_WORD, &CurTemp1);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
tm1 = *(DWORD*)(PSW + 38);
State1 = 2;
Тут же можно для однозначности добавит запись в регистры положения десятичной точки уставок для всех каналов нужное число.

paul-th
29.09.2017, 12:05
Спасибо, понял, так и сделаю. По регистрам уставок вроде всё в порядке, а вот по регистрам в int десятичной точки похоже бардак и надо их переписать.
Проще наверно написать отдельный макрос и залить и выполнить его отдельно один раз, а потом уже залить основную программу, чтобы уже не лазить по готовой программе. Я то думал что это возможно в ТРМе ручками сделать, но нет.

Koren
29.09.2017, 13:11
Добрый день, господа.
В проекте создал окно в которое вставил "таблицу отображения данных":
33378
Проблема заключается в том, что отсчёт начинается с 0, а мне нужно строго с единицы.
С этим можно что-то сделать?

Евгений Кислов
29.09.2017, 13:18
Добрый день, господа.
В проекте создал окно в которое вставил "таблицу отображения данных":
33378
Проблема заключается в том, что отсчёт начинается с 0, а мне нужно строго с единицы.
С этим можно что-то сделать?

Можно отключить столбец с нумерацией и добавить свой столбец с заранее заданными значениями (1, 2, 3 и т.д.).

Koren
29.09.2017, 13:24
Можно отключить столбец с нумерацией и добавить свой столбец с заранее заданными значениями (1, 2, 3 и т.д.).

Блин. Тупанул. :)

paul-th
03.10.2017, 17:30
Добрый всем вечер.
Отчет по применению. petera макрос как бы работает, позволяет запускать сразу восемь каналов и панель не виснет, но, в работе самих каналов ничего не изменилось, нормально работает только первый канал. Загрузка в регистры десятичной точки вроде как вообще не происходит и исполнение этих команд приводит к перебоям связи с ТРМом. Пробовал запускать отдельным макросом эти восемь строк, при запуске макроса идет сбой связи. Вписывал строки в основной макрос, ничего не изменяется, со второго по шестой канал перезапись идет, но цифры не те со сдвигом точки как и было до этого, при запуске седьмого и восьмого каналов идет сбой связи с ТРМом и не видно что идет вообще какая то перезапись. Правильно исполняется во всех каналах последняя строка перезаписи 10 единиц в уставку.

petera
03.10.2017, 19:37
Добрый всем вечер.
Отчет по применению. petera макрос как бы работает, позволяет запускать сразу восемь каналов и панель не виснет, но, в работе самих каналов ничего не изменилось, нормально работает только первый канал. Загрузка в регистры десятичной точки вроде как вообще не происходит и исполнение этих команд приводит к перебоям связи с ТРМом. Пробовал запускать отдельным макросом эти восемь строк, при запуске макроса идет сбой связи. Вписывал строки в основной макрос, ничего не изменяется, со второго по шестой канал перезапись идет, но цифры не те со сдвигом точки как и было до этого, при запуске седьмого и восьмого каналов идет сбой связи с ТРМом и не видно что идет вообще какая то перезапись. Правильно исполняется во всех каналах последняя строка перезаписи 10 единиц в уставку.
Ну а в первом канале можно записать положение дес.точки? Какое-нибудь?

Koren
03.10.2017, 19:55
"Дни-часы-минуты" это что? Показания часов реального времени панели? Или это тоже "дисплей для таймера". Ведь дисплея с таким форматом я не делал.

Добрый вечер, уважаемый Petera.
Возникла проблема, о которой я не сразу подумал - максимальное количество дней в уставке 30. Те 720 часов. А в "дисплее для таймера" максимум 99 часов. Возможно ли прикрутить ещё один знак для таймера или сделать "дисплей для таймера" вида ДД:ЧЧ:ММ?

PS моя попытка найти как создавать такие "ГМ" не привела к успеху. Если есть ссылка, то киньте пожалуйста.

PPS спасибо за ГМ "Время наработки". Отличная вещь. Пригодится чуть позже. :rolleyes:

paul-th
04.10.2017, 10:13
Ну а в первом канале можно записать положение дес.точки? Какое-нибудь?
Я вообще то переписывал значение десятичной точки для всех восьми каналов, включая первый. Результата не увидел, получил сбой связи при запуске седьмого и восьмого канала. Причин не знаю, не моя это тема.

vniko
09.10.2017, 17:52
Добрый день. Стоит задача реализовать Символьное поле ввода/вывода. То есть при нажатии на текстовом поле вызывается диалог с несколькими текстовыми строками и при выборе одной из строк устанавливается один из битов переменной в ПЛК. В символьном поле ввода/вывода отображается текст соответствующей выбранной текстовой строки.
Пока ничего не получается. Пытаюсь реализовать через вызов окна с кнопками. Но выяснилось, что если под открытым окном на основном экране есть кнопки, то они нажимаются сквозь окно. Как решить эту проблему?

petera
09.10.2017, 18:50
Добрый день. Стоит задача реализовать Символьное поле ввода/вывода. То есть при нажатии на текстовом поле вызывается диалог с несколькими текстовыми строками и при выборе одной из строк устанавливается один из битов переменной в ПЛК. В символьном поле ввода/вывода отображается текст соответствующей выбранной текстовой строки.
Пока ничего не получается. Пытаюсь реализовать через вызов окна с кнопками. Но выяснилось, что если под открытым окном на основном экране есть кнопки, то они нажимаются сквозь окно. Как решить эту проблему?

Как сделать выпадающие списки можно посмотреть в моих примерах http://www.owen.ru/forum/showthread.php?t=17566&p=139727&viewfull=1#post139727
http://www.owen.ru/forum/attachment.php?attachmentid=13286&d=1402766858

petera
09.10.2017, 19:36
Пытаюсь реализовать через вызов окна с кнопками. Но выяснилось, что если под открытым окном на основном экране есть кнопки, то они нажимаются сквозь окно. Как решить эту проблему?
Этот эффект только в эмуляторе!!!
В панели кнопки под окнами не нажимаются!!!!

Во вложении пример для СП300
33575

Выпадающие списки - это окна с набором ф.кнопок
33576
Каждая кнопка
- присвоить значение
- закрыть окно

Поля выбора - бутерброд из
Вариационного текста
33578 33579

И такого же размера ф.кнопки, можно невидимой, а можно ее просто поместить под вариационный текст.
33577
Кнопка вызывает окно со списком

На втором экране кнопки с оформлением подходящим для списков
33580

vniko
10.10.2017, 16:53
Как сделать выпадающие списки можно посмотреть в моих примерах
Петр, большое спасибо за примеры и разъяснения. Отдельная благодарность за кнопки с оформлением. Очень интересна была бы информация как их сделать самостоятельно.

Добавил в Ваш пример Экран 3 со своим "Списком". Различия следующие:
1. Символьное поле ввода/вывода организовано по чтению/записи битов регистра в ПЛК (бит 0, бит 1, бит2), а не значения регистра в ПЛК.
2. Для того, чтобы на экране не нажимались кнопки (за пределами окна) при вызванном окне, а также для закрытия окна при нажатии вне окна, весь Экран закрыт скрытой функциональной кнопкой в верхнем слое.

Koren
11.10.2017, 15:59
Доброго дня.

Возникла странная проблема с окном печати в СП307
Вызываю окно 62002 функциональной кнопкой.
33616

поле загрузки в проект при нажатии кнопки печать окно печати открывается и сразу закрывается.
причём я вижу в окне которое мелькает те данные которые мне нужны.
Не могу понять что происходит - все остальные окна (кроме печати) ведут себя адекватно.
Проверил биты печати - больше нигде не используются.

petera
11.10.2017, 17:49
Доброго дня.

Возникла странная проблема с окном печати в СП307
Вызываю окно 62002 функциональной кнопкой.
33616

поле загрузки в проект при нажатии кнопки печать окно печати открывается и сразу закрывается.
причём я вижу в окне которое мелькает те данные которые мне нужны.
Не могу понять что происходит - все остальные окна (кроме печати) ведут себя адекватно.
Проверил биты печати - больше нигде не используются.

А я разве говорил, что окно печати нужно принудительно открывать?

Ни каких ф.областей с открытием окна 62002!

У окна печати в свойствах есть бит управления
33617

Присвойте ему, например, PSB256

Для печати Вам нужна обычная кнопка и не на окне печати, а на любом экране
33618
Здесь бит - тот, который в настройках окна печати, т.е. PSB256

Действие кнопки - ВКЛ. пока нажата
33619

Koren
12.10.2017, 08:12
А я разве говорил, что окно печати нужно принудительно открывать?

Ни каких ф.областей с открытием окна 62002!

У окна печати в свойствах есть бит управления

Присвойте ему, например, PSB256

Для печати Вам нужна обычная кнопка и не на окне печати, а на любом экране

Здесь бит - тот, который в настройках окна печати, т.е. PSB256

Действие кнопки - ВКЛ. пока нажата


Всё так и есть.
По кнопке срабатывает отправка на печать.... как обычно НО:
1) в эмуляторе происходит отправка на печать, но лист пустой. возможно так и должно быть, т.к. это эмулятор.
2) в панели тоже тоже пикает, но принтер не реагирует. возможно проблема с настройками принтера или проекта.
3) подключил к компу через COM порт и начал слушать. Ничего не шлёт панель. Пуст эфир.

Как ещё проверить пока не придумал, но есть ещё один принтер только кабель не распаян.

petera
12.10.2017, 10:50
Всё так и есть.
По кнопке срабатывает отправка на печать.... как обычно НО:
1) в эмуляторе происходит отправка на печать, но лист пустой. возможно так и должно быть, т.к. это эмулятор.
2) в панели тоже тоже пикает, но принтер не реагирует. возможно проблема с настройками принтера или проекта.
3) подключил к компу через COM порт и начал слушать. Ничего не шлёт панель. Пуст эфир.

Как ещё проверить пока не придумал, но есть ещё один принтер только кабель не распаян.


1) в эмуляторе происходит отправка на печать, но лист пустой. возможно так и должно быть, т.к. это эмулятор.
Панель печатает на матричном принтер, а эмулятор посылает данные диспетчеру печати Windows, а не напрямую в COM порт.
Из-за этого лист пустой, хотя если в настройках принтера Windows перенаправить вывод печати в файл, то можно увидеть, что лист на самом деле не пустой :)
33626

Это не что иное, как ESC команды(Epson ESP/p) управления принтером. Тут не все символы "печатные"
33627
Можно по таблице ESC кодов посмотреть, что это за команды

ЗЫ
1B 40 == ESC @ (инициализация принтера)
0D == (CR)Возврат каретки
1B 74 01 == (ESC t 1) Выбирает таблицу символов 1 (0, 1, 48,49)
1B 36 == ESC 6) Включает печать символов с кодами 128-159 (десятичные) как символов
1B 52 00 == (ESC R 0) Выбирает международный набор символов n=0 - США
1B 50 == (ESC P) Устанавливает размер символов 10 cpi
1B 32 == (ESC 2) Устанавливает промежуток между сторками равный 1/6 дюйма
1B 43 46 == (ESC C 112) Установить длинну страницы в строках n=112
0D == (CR) Возврат каретки
0C == (FF) На новую страницу
0D == (CR) Возврат каретки


2) в панели тоже тоже пикает, но принтер не реагирует. возможно проблема с настройками принтера или проекта.

Наверно так и есть.
Принтер должен подключаться только к порту Download
В проекте в настройках порта Download - Порт не используется

В настройках принтера (наверно это DIP переключатели)
Скорость передачи ТОЛЬКО 9600 и никакой другой!
Контроль четности - чет. (even)
Управление потоком - аппаратное ( не XON/XOFF)
Кабель для подключения
ДАННЫЕ передаются только в одну сторону - из панели в принтер, поэтому кабель "нестандартный"
панель --- принтер
2(RXD) --- 8(CTS) READY/BUSY Готовность принтера (Сигнал из принтера в панель)
3(TXD) --- 3(TXD) Данные (Сигнал из панели в принтер)
5(GND) --- 5(GND) Земля

Koren
12.10.2017, 16:41
Последние вести с полей:
Сумел подключить принтер к компу и через эмулятор даже напечатал кракозябры - хоть и не лучший результат, но хоть так. Дальше надо играть с настройками принтера, что само по себе не просто - нет у него DIPов только софт.
Попытка подключить к панели не увенчалась успехом. Возможно настройки или возможно принтер не подходит.
Буду бороться дальше.

PS программа которая слушает COM порт так ничего и не увидела от панели.

petera
12.10.2017, 16:49
Последние вести с полей:
Сумел подключить принтер к компу и через эмулятор даже напечатал кракозябры - хоть и не лучший результат, но хоть так. Дальше надо играть с настройками принтера, что само по себе не просто - нет у него DIPов только софт.
Попытка подключить к панели не увенчалась успехом. Возможно настройки или возможно принтер не подходит.
Буду бороться дальше.

PS программа которая слушает COM порт так ничего и не увидела от панели.

Фамилия принтера?

Koren
12.10.2017, 17:19
Фамилия принтера?

APS EPM203-MRS

есть ещё в наличии но пока без кабеля:
ALFAPANEL 3.24 HS
able DV0147

Карасев Александр Сергеев
17.10.2017, 14:45
Здравствуйте.
Помогите разобраться со следующей проблемой.
Передаю из ПЛК 110 в панель СП307 через элемент "цифровой дисплей" данные. Передаваемое значение 3-х значное число. В панели элемент "цифровой дисплей" настроен так что бы отображать 2 знака т. к. это необходимо и достаточно но отображение числа идет не с сотен, а единиц. Для примера допустим предается число 195,на панели отображается 95, а надо 19.

petera
17.10.2017, 19:38
Здравствуйте.
Помогите разобраться со следующей проблемой.
Передаю из ПЛК 110 в панель СП307 через элемент "цифровой дисплей" данные. Передаваемое значение 3-х значное число. В панели элемент "цифровой дисплей" настроен так что бы отображать 2 знака т. к. это необходимо и достаточно но отображение числа идет не с сотен, а единиц. Для примера допустим предается число 195,на панели отображается 95, а надо 19.

А масштабирование в дисплее использовать пробовали?

ЗЫ
33716

Результат
33717

Yury Evgenev
18.10.2017, 18:07
Ломается проект при портирований с СП200 на СП300.
А именно: элемент "историческая таблица" вдруг стал группой. Вкладка "события" исчезла. Теперь там группа с какими то внутренними регистрами. Как портировать правильно?

Евгений Кислов
18.10.2017, 19:21
Ломается проект при портирований с СП200 на СП300.
А именно: элемент "историческая таблица" вдруг стал группой. Вкладка "события" исчезла. Теперь там группа с какими то внутренними регистрами. Как портировать правильно?

Как указано в руководстве пользователя - экспорт происходит корректно, если проект для СП270 был создан в версии 2.С.6F.
У вас, очевидно, проект изначально был создан в версии 2.82. В этом случае следует пересоздать таблицу.

Yury Evgenev
18.10.2017, 21:22
Да. в старой версии делал. Потом качал 2.С.6F и преобразовывал к её версии. Потом открывал в СП300 конфигураторе. Я просто пересохранил проект в новой версии. Я правильно сделал или есть нюансы портирования?

Евгений Кислов
19.10.2017, 06:53
Да. в старой версии делал. Потом качал 2.С.6F и преобразовывал к её версии. Потом открывал в СП300 конфигураторе. Я просто пересохранил проект в новой версии. Я правильно сделал или есть нюансы портирования?

Нюанс только один - в СП300 корректно импортируются проекты из СП200 2.С.6F, но не из более ранних версий.
В вашем случае - следует пересоздать таблицу в СП300.

Евгений76
06.11.2017, 06:37
Здравствуйте! Хочу подсоединить панель СП307, 310 к частотнику АВВ580, у него 485 вход есть, возможно? Требуется управление пуск стоп скорость индикация скорости, тока, подключение к одной панели 3-х частотников,

Евгений Кислов
06.11.2017, 09:29
Здравствуйте! Хочу подсоединить панель СП307, 310 к частотнику АВВ580, у него 485 вход есть, возможно? Требуется управление пуск стоп скорость индикация скорости, тока, подключение к одной панели 3-х частотников,

Если частотники поддерживают протокол Modbus RTU - то возможно.

vniko
08.11.2017, 12:31
Добрый день.
Пытаюсь разобраться с самым "загадочным" параметром в Конфигураторе СП300 - "Задержка отправки".
Находится в Настройки проекта/Устройства/Параметры порта.
Описание в Руководстве пользователя: Задержка между запросами (для режима Master).
Сохраняется в регистре PFW35 (для PLC-порт) и в регистре PFW25 (для Download-порт).
В описании Руководства пользователя к этим регистрам указано: таймаут связи :confused:.

В Конфигураторе СП200 этот параметр назывался Коммуникационный интервал.
Вот здесь http://www.owen.ru/forum/showthread.php?t=8604&p=202521&viewfull=1#post202521
Уважаемый petera называет его также "периодом опроса".


1. Не надо было уменьшать время тайм-аута по умолчанию http://www.owen.ru/forum/showthread....l=1#post201255. Пусть бы оставалась 1000 мс.
2. Если у Вас такие "задумчивые" слейвы, то период их опроса
34028
нужно сделать не менее чем задержка их ответа.


В Конфигураторе СП300:

ЗЫ.
В дополнение к выше сказанному.
Может Ваши слейвы, те же МВ110 не успевают выполнять команды и еще не готовы к приему следующей посылки от панели, из-за этого тоже будут ошибки связи.
Ведь если здесь стоит 0
34030
то панель "пуляет" запросы к слейвам с максимально возможной частотой, может для МВ110 или ПР нужно не менее, например, 10мс между запросами? А они, к примеру, приходят от панели каждые 5 мс. Цифры условные, но такое может быть.
есть случаи решения проблем с "тормозами" панели http://www.owen.ru/forum/showthread.php?t=22915&p=247518&viewfull=1#post247518

Непонятно, "Задержка отправки" это все-таки период опроса или задержка между окончанием одного опроса и началом другого? Какие рекомендации по его установке? Что означает нулевое значение?

Евгений Кислов
08.11.2017, 12:48
Непонятно, "Задержка отправки" это все-таки период опроса или задержка между окончанием одного опроса и началом другого?

Второе.


Какие рекомендации по его установке?

Для большинства приборов 10-20 мс будет достаточно.


Что означает нулевое значение?

То, что следующий запрос будет отправлен сразу после получения ответа на предыдущий, без дополнительных задержек.

Tesla-pip
13.11.2017, 11:58
Можно ли сделать так чтобы сенсорная панель была мастером сети с ПР200, но вся исполняемая программа была в ПР200, а сенсорная панель использовалась только для отображения некоторых значений передаваемых ей ПР200, и в качестве управления (вместо тумблеров и кнопок)?

Евгений Кислов
13.11.2017, 12:08
Можно ли сделать так чтобы сенсорная панель была мастером сети с ПР200, но вся исполняемая программа была в ПР200, а сенсорная панель использовалась только для отображения некоторых значений передаваемых ей ПР200, и в качестве управления (вместо тумблеров и кнопок)?

Да, конечно.

Tesla-pip
13.11.2017, 12:22
А то, что ПР200 программируется в “OWEN Logic”, а СП3… – кстати; в чем программируется СП3?

Евгений Кислов
13.11.2017, 12:23
А то, что ПР200 программируется в “OWEN Logic”, а СП3… – кстати; в чем программируется СП3?

В конфигураторе СП300. Посмотрите ссылку в моей подписи - по ней найдете и ПО, и документацию, и пример настройки обмена между панелью и ПР200.

p-nik
05.12.2017, 18:22
Здравствуйте! Есть ли возможность в конфигураторе СП300 сделать экспорт/импорт сообщений таблицы тревог, журнала исторических событий?
Или может другие не "стандартные" способы их заполнения.

Евгений Кислов
05.12.2017, 18:24
Здравствуйте! Есть ли возможность в конфигураторе СП300 сделать экспорт/импорт сообщений таблицы тревог, журнала исторических событий?
Или может другие не "стандартные" способы их заполнения.

Такой возможности не предусмотрено.

kost2
11.12.2017, 17:00
День добрый!
Элемент Историческая таблица имеет очень интересную возможность - выбирать текущий индекс в таблице нажатием непосредственно на саму таблицу, который визуализируется рамкой. Как это реализовано и возможно ли добиться того же самого от таблицы вывода данных например?

Евгений Кислов
12.12.2017, 08:09
День добрый!
Элемент Историческая таблица имеет очень интересную возможность - выбирать текущий индекс в таблице нажатием непосредственно на саму таблицу, который визуализируется рамкой. Как это реализовано и возможно ли добиться того же самого от таблицы вывода данных например?

Добрый день. У таблицы вывода данных такая возможность отсутствует.
У Исторической таблицы она есть, т.к. есть возможность квитирования выделенного сообщения.

murzik
13.12.2017, 08:03
Всем коллегам здравствовать!
Подскажите начинающему:
- как сделать, чтобы по какому-то биту кнопка или лампа появлялась или пряталась? А то у меня всё выходит, что она спрятана всегда. Только надпись от неё по биту появляется и пропадает
- что означает вызов макроса "параллельный" и "последовательный"?

Евгений Кислов
13.12.2017, 08:06
Всем коллегам здравствовать!
Подскажите начинающему:
- как сделать, чтобы по какому-то биту кнопка или лампа появлялась или пряталась? А то у меня всё выходит, что она спрятана всегда. Только надпись от неё по биту появляется и пропадает
- что означает вызов макроса "параллельный" и "последовательный"?

Добрый день.

1. Посмотрите пример: http://www.owen.ru/uploads/example_basicelements.zip
2. Последовательный - макрос выполняется в блокирующем режиме (т.е. пока он не выполнится - никаких других операций выполняться не будет, в т.ч. отрисовки визуализации), параллельный - в неблокирующем. Параллельный режим может потребоваться, например, при работе с файлами.

murzik
13.12.2017, 08:27
спасибо, завтра буду пробовать. Сегодня под рукой девайсов нет

VaBo
08.01.2018, 15:47
Коллеги, прошу подсказать, - возможно ли написать самому какую-то фунцию (по типу API HMI Function, видимых в редакторе макросов) для вызова её из макроса? Или можно макрос из макроса вызвать?
Как вообще это делается?

Евгений Кислов
08.01.2018, 15:55
Коллеги, прошу подсказать, - возможно ли написать самому какую-то фунцию (по типу API HMI Function, видимых в редакторе макросов) для вызова её из макроса? Или можно макрос из макроса вызвать?
Как вообще это делается?

Тела функций описываются в глобальном макросе, и потом их можно вызвать в пользовательских.
Посмотрите пример архивации с помощью макросов - там это есть.