Может для вызова макроса каждые 300 мс надо так задать ?
Вид для печати
Может для вызова макроса каждые 300 мс надо так задать ?
Не надо путать!
Я же писал, что нужно использовать другой режим
Вложение 45936Цитата:
Однако если использовать режим от Бита управления, то можно в качестве таких бит взять системные биты PSB3(импульсы с периодом 100 мс) или PSB6(импульсы с периодом 300 мс) и получить вызовы макроса каждые 100 мс или 300 мс.
Время цикла будет фиксированное
PSB3 вызовы макроса каждые 100 мс
PSB6 - 300 мс.
ЗЫ.
Точность отсчета времени
Т.е. точность отсчета 1 сек Вас не озадачило?
Для всех интервалов используют один источник
возьмите дисплей с регистром PSW38
Вложение 45937
Это время от включения панели с дискретностью 100мс и проверьте по секундомеру
:rolleyes:
В функциональной области математическая операция деления на "0" что даст? Мне нужно делить на содержание переменной и там может быть "0". Переменные целочисленные.
В результате деления на 0 - в регистр результата будет записано 0.
Давайте различать точность и разрешающую способность или дискретность задания интервала времени.
Но 10 мкс = 0,00001 с, это - нереальная величина даже для ПЛК
Дискретность отсчета времени меньше 0,1сек возможна только в макросе наСи с помощью функции
Delay(UINT); // задержка на время UINT, мс.
и то для СП270 минимальное значение - 10 мс, для СП300 будет 5 мс.
Не могу найти как отменить пиканье при нажатии кнопок на панели. Раздражает коллег.
п. 2.1 в FAQ
https://owen.ru/product/sp3xx/faq
или п.19. ОВЕН СП3хх. Tips&Tricks. Приятные мелочи в Видеокурс по СП3хх : 2:50 мин - 4:40мин
https://owen.ru/product/sp3xx/video
Добрый день всем. Есть в программе панели СП310Р график ТРЕНД, на него выводятся 12 температур Real, которые пишутся в ретайн, авто области PFW, это удобно для просмотра графиков. Так же, температуры пишутся в оперативную память PSW по 2 мин. и считываются циклом на флешку, которая постоянно стоит в панели. С этим нет проблем, запись на флешке происходит последовательно без сбоев и пробелов.
Но тут понадобилось не оставлять флешку в панели, а прийти когда надо и скачать весь архив целиком (например за четыре часа работы). вроде всё просто, тренд пишется в постоянную память, надо только скачать, делаю запись на USB, по нужному биту, выставляю начальный адрес PFW600, раз в 5 сек, 12 раз в минуту, 2880 записей за 4 часа ( и тут нельзя выбрать автообласть) нажимаю кнопку и тут возникают проблемы. Вроде всё пишется на флешку, но при просмотре часть файла нормальная, потом пропуски, данные вразнобой, полная чепуха вобщем. (Пробовал и 5 часов, 3600 записей с начальным адресом PFW400, т. е. укладывается в пределы от 256 до 4095 ). Если сделать тренд не в автообласти, то нельзя его просмотреть.
И вот вопрос: как правильно записать файл данных на флешку, 12 каналов за несколько часов, из области авторазмещения PFW ?
Пока сделал дополнительное архивирование в панели с адресом PFW400, за 5 час. 3600 записей, откуда и читаются данные для записи. Но вопрос остаётся открытым.
Оригинальные рассуждения!Цитата:
Пробовал и 5 часов, 3600 записей с начальным адресом PFW400, т. е. укладывается в пределы от 256 до 4095
Т.е. Вы считаете, что одна запись занимает один регистр? 400 + 3600 = 4000 и из этого следует, что укладывается в пределы от 256 до 4095?
Жесть!
Одна запись это 12 температур Real + временная отметка (Год, месяц, день, час, минута, секунда) и того 12х2 + 6 = 30 регистров
Одна запись - 30 регистров, Карл - 30, а не 1!
А все 3600 записей займут - 3600 х 30 = 108000 регистров.
В реальности
В общее количество нужно добавить 4 регистра для адресов кольцевого буфера и плюс одна запись сверху
ИТОГО
3601 х 30 + 4 = 108034
И в какие пределы они укладываются если начальный регистр PFW400?
Правильно, PFW400...PFW108433, что на много(в 30 раз) превышает "допустимые пределы" от 256 до 4095
ЗЫ.
Не нужно пытаться использовать "Архивирование на USB" параллельно тренду. Архив уже есть, он в ТРЕНДе.
Для сохранения архива ТРЕНДа используйте ф. кнопку с функцией "Экспорт CSV",
3600 записей, ЦИКЛИЧЕСКИЙ БУФЕР - ВКЛЮЧИТЬ!
Вложение 46055
Вложение 46056
Если тренд - в автообласти, то начальный адрес хранилища известен - PFW4096,
Вложение 46060
Спасибо за ответ))) Вообще то я создал тему в разделе для новичков, но меня оттуда послали сюда https://owen.ru/forum/showthread.php?t=10555&page=746
Переделал на запись по кнопке с функцией "Экспорт CSV". Вопрос только в количестве регистров, сколько всё таки надо 3600 или 108034
Если сделать как у меня то график начинает затираться.
Здравствуйте!
В целях сохранения ресурса в панели СП310Р настроено отключение подсветки.
Панель установлена в шоу-рум, поэтому для демонстрации возможностей и для удобства операторов задумал автоматическое включение подсветки по датчику движения. Датчик подключен к ПЛК, связь по Modbus TCP, панель мастер.
Что-то не нахожу такого бита в списке системных регистров PSB...
Подскажите пожалуйста: как организовать включение подсветки по команде с ПЛК?
В качестве костыля пока организовал переход на экран заставки (черный экран) по таймауту и возврат на предыдущий экран при срабатывании датчика движения.
Здравствуйте! Как прописать СМИ 2 в конфиг.ПЛК - как universal modbus device? (Если сконфигурирован под модбас) И добавить Register output module ? ( или как то хитрее?) :) понимаю, вопрос новичка, но об этом негде посмотреть!
Спасибо!-заработало. Но на скорости 9600. Поменять немогу- переходник rs-usb забыл отключить и он спалился (потеха, однако!)
В элементе "вентилятор" из библиотеки конфигуратора есть как бы управление скоростью вращения пропеллера с регистра. У меня не зависит от величины в регистре. Это вообще работает?
Это - работает!
Вложение 46107
Вложение 46108
Вы свой не работающий вариант предъявите!
Работает, на примере этом вижу. Но при "0" крутится же, что сбивает с толку. И как то очень нелинейно, заметно прибавляет обороты только выше 60, а туда не залезал. На глаз не видно различия в скорости для 0 и 30. Обычно частотник и работает в нижней половине, для такой визуализации незначительная разница. Думал будет заметнее. И при 0 наверное не надо крутиться,
У вентилятора всего 10 скоростей, диапазон, который задаются в настройках (0...100 или другой) линейно масштабируется к значению 0...9, назавём это - Задание. По этому большого смысла делать 0-100 нет, можно делать 0-9
Внутри генератор, который генерит импульсы смены фаз с периодом (10 - Задание)*100мс
По этому минимальное значение интервала одной фазы (10 -0)*0,1=1сек - Ваше "при "0" крутится же" :rolleyes:
Доброго времени суток! Разбираюсь с макросами в СП315. Возникла загвоздка..
Сначала я копирую регистр приходящий с ПР200 в PSW[600] ()
WORD Bit;
int i;
Read(PLC, 8, MODBUS_RTU_REG_4X, 555, 0, TYPE_WORD, &Bit); //chtenie registra
PSW[600] = Bit;
Далее мне нужно сравнить состояния бит внутри регистра.. я конечно накидал код, но на второй итерации всё виснет.
Основная проблема в том, какой же правильный синтаксис чтения бита.
Вот мой набросок
for ( i = 0; i < 12; i++ ) //cikl perebora bit
{
if ( PSW[600] & ( 1 << i ) != 1 ) //uslovie (собственно проблема в этом условии)
{
PSW[601] = i; //
if (i = 1)
{
SetPSB(600); //green
ResetPSB(601);
ResetPSB(602);
ResetPSB(603);
}
else if (i = 2)
{
SetPSB(601); //green flashing
ResetPSB(600);
ResetPSB(602);
ResetPSB(603);
}
else if (i = 3)
{
SetPSB(602); //yellow
ResetPSB(600);
ResetPSB(601);
ResetPSB(603);
}
else
{
SetPSB(603); //red
ResetPSB(600);
ResetPSB(601);
ResetPSB(602);
}
Delay (3000);
}
}
ПОМОГИТЕ ПОЖАЛУЙСТА
Я для работы с битами регистров использую такие макро
И использую эти макро наподобие функций, напримерКод:#define GetBit(Reg,bitno) ((Reg) & (1 << (bitno))) // Получить статус бита "bitno" в регистре "Reg"
#define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno))))) // Сбросить бит "bitno" в регистре "Reg"
#define SetBit(Reg,bitno) ((Reg) |= ( 1 << ((bitno)))) // Установить бит "bitno" в регистре "Reg"
#define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno))) // Инвертировать бит "bitno" в регистре "Reg"
Все справедливо и для переменных, например WORDКод://Эти строчки в начале программы
#define GetBit(Reg,bitno) ((Reg) & (1 << (bitno)))
#define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno)))))
#define SetBit(Reg,bitno) ((Reg) |= ( 1 << ((bitno))))
#define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno)))
//Далее в любом месте, где нужно работать с битами
//использую эти макро наподобие функций
if(GetBit(PSW[600],5)) { // Если "5" бит в регистре PSW[600] установлен, то
ResetBit(PSW[256],12); // Сбросить бит "12" в регистре PSW256
SetBit(PSW[300],7); // Установить бит "7" в регистре PSW300
ReversBit(PSW[500],3); // Инвертировать бит "3" в регистре PSW500
}
if(!GetBit(PSW[600],5)) { // Если "5" бит в регистре PSW[600] НЕ установлен, то
// сделать то-то
// сделать это
}
ЗЫКод:#define GetBit(Reg,bitno) ((Reg) & (1 << (bitno)))
#define ResetBit(Reg,bitno) ((Reg) &= ( ~ (1 << ((bitno)))))
#define SetBit(Reg,bitno) ((Reg) |= ( 1 << ((bitno))))
#define ReversBit(reg, bitno) ((reg) ^= (1 << (bitno)))
WORD wBIT;
WORD TEST;
Read(PLC, 8, MODBUS_RTU_REG_4X, 555, 0, TYPE_WORD, &wBIT); //chtenie registra
if(GetBit(wBIT,5)) { // Если "5" бит в регистре wBIT установлен, то
ResetBit(TEST,12); // Сбросить бит "12" в регистре TEST
SetBit(TEST,7); // Установить бит "7" в регистре TEST
ReversBit(TEST, 3); // Инвертировать бит "3" в регистре TEST
}
if(!GetBit(wBIT,12)) { //Если "5" бит в регистре wBIT НЕ установлен, то
// сделать это
//сделать то-то
}
Насколько я понимаю, в Вашем варианте нужно так писать
if (! (PSW[600] & ( 1 << i ) )) //uslovie (собственно проблема в этом условии)
{
Спасибо большое! Буду тестировать проверять)
Посоветуйте как временно погасить изображения функциональных областей. Нужно для снимка экранов.
Делаю просто, правой кнопкой вызываю подменю, опустить на слой ниже и прячу под любым дисплеем, кнопкой или залитым цветом прямоугольником. Если функциональная область глобальная, она и так ниже слоем, просто перетаскиваю под дисплей. Либо дисплей ставлю слоем выше.
Добрый день... Подскажите пожалуйста, у нас панель СП307 используется как SALVE, и при пропадании связи, естественно, переменные не обновляются... А как можно сделать, чтобы при пропадании связи с панелью, сама панель которая SLAVE писала что нет связи? Подключаемся по PLC порту.... Спасибо заранее...
Существуют ли аналоги конфигуратора? В программе существует ряд недостатков и багов, что с этим можно сделать?
Нужно завести в панели бит квитирования
В панели каждую сек устанавливать бит и запускать таймер, например, на 3 сек.
В плк постоянно читать бит квитирования и если он установлен - сбрасывать его
В панели если время таймера истекло, а бит не сброшен - показать окно о потери связи.
Это можно сделать с помощью трех ф. областей, они должны быть глобальными!
Вложение 46335
Скрытый текст:
1. В панели каждую сек устанавливать бит
Вложение 46336 Вложение 46337
2. запускать таймер, например, на 3 сек, если время таймера истекло, а бит не сброшен - показать окно о потери связи
Вложение 46338 Вложение 46339
3. При восстановлении связи закрывать окно автоматически
Вложение 46340 Вложение 46341
Пример окна
Вложение 46342
Баги с прозрачностью элемента "изображение" после размещения, плохая работа с самой прозрачностью, отсутствие сглаживания, баги масштабирования элемента "анимация изображений". Также очень странное поведение в некоторых ситуациях, например когда элемент больше экрана/окна, и программа нещадно перемещает его. Зачастую открывается слишком много бесполезных окон в настройках.
P.S. Смиряться с багами это плохая практика
Какие способы тестирования проекта помимо эмуляции в конфигураторе существуют?