Спасибо!!!
Вид для печати
Спасибо!!!
Yegor действительно умножать часы на 100 вместо привычных 60 оригинально, получаем как бы привычный вид времени в программе.
Валенок да, очень неудобно в SisLibTime с Воскресеньем, надо оскатовскую проверить, может там лучше будет, пока не смотрел. LimitAlarm тоже смотрел, отлично подходит когда интервал один, уже готовое решение.
amn спасибо, тоже гляну. В вашем примере явно лажа, сравнивать секунды с секундами нет смысла, когда о них и речи нет.
melky, там вроде минуты, а не секунды.
Чесно говоря чуток шутил ))))
Отличное.. Вы же нормально воспримите диапазон типа 23-00 .. 1-00. А оно ? Лучше уж заточите свою функцию например под TOD. Не менее наглядно.
Когда один.. Ну массив с циклом прилепить
Воскресенье .. Уйти на маски
Например:
Код:program clock
var
std : systemtimedate;
now : tod;
..//получили время в std
now := dword_to_tod( ((std.hour*dword#60+std.minute)*60+std.second)*1000 );
fb period
var_input
t0,t1:tod;
maskweek:byte; //маска с очеловеченым видом типа 2#11111_00 для пн..вск
var_output
q : bool;
var_const
w : array[0..6] of byte := 1,64,32,16,8,4,2;
q := (w[clock.std.dayofweek] and maskweek) <> 0;
q := q and sel(t0 >= t1, clock.now >= t0 and clock.now =< t1, clock.now >= t0 or clock.now =< t1);
plc_prg (?)
const
N : word := ..
var
ok : bool;
is : array[1..N] of period :=
(t0 := tod#6:30, t1 := tod#8:30, maskweek := 2#11111_00),
(t0 := tod#18:30, t1 := tod#23:59:59, maskweek := 2#11111_00);
clock();
ok := false;
for i:=1 to N do
is[i](q=>ok);
if ok then exit; end_if
end_for
..
PS
Пардон. Переводить в CFC - не очень хочется
Валенок а для меня ST полутемный лес :) тут в нескольких строчках разбираться и разбираться.
amn out := datetime.Second >= after AND datetime.Second < before; - ну и где тут минуты ? да и сам по себе FB странно работает, но это мне надо с нуля его вписать в ПЛК, чтобы понять...
melky, вы правы, я не тот файл отправил. Исправляюсь.
amn , значит я правильно сообразил, как ваш FB модернизировать :), жалко только, что без контроллера нельзя проверить. Но самое интересное, что фактически это работает точно так же, как и LIMITALARM, только все обработки со временем внутри FB. Хотя может оно и лучше.
Вариант Валенка мне менее понятен, разбираться надо, не все мне там доступно для понимания с наскока.
Вообще-то это творение Егора, а я его применил к вашему случаю. Валенок вообще молодец, додумался, как облегчить ввод данных. Там сложного ничего нет для понимания, просто часы он выделил в целую часть, а минуты в дробную. Выкладываю версию с идеей Валенка.
Вложение 12751
amn у CodeSys действуют правила математики ?
Часы + Минуты / 100.0 или (часы + Минуты)/100.0 - что из этого правильно ? или все выполняется строго последовательно ?
А вообще с точки зрения программирования, если ставить два и более FB interval, на сколько увеличивается цикл программы, учитывая, что постоянно вызывается CurTimeEx ? в некоторой степени выглядит все красиво, но куча повторов.
Правила математики дейстуют как это и положено. А вот по поводу нескольких вызовов ФБ вы правы, стоит вынести CurTimeEx в самостоятельный отдельный блок, так как два блока могут не заработать вместе. Тогда наш ФБ будет состоять из 1 строчки:).
Во вложении два блока один из них get_time нужен для второго. Его просто вставить и ничего к нему подключать не надо.
amn да нет, они то работают, просто видно что при двух FB повторяются действия. которые ненужны.
Такая ситуация. ПЛК 110-60. К нему подключаю 2 модуля ввода/вывода с аналоговыми сигналами МВА и 2 модуля ввода/вывода с дискретными сигналами МДВВ. Протокол модбас рту. Вопрос такой, при записи регистров нужно ли учитывать последовательность подключения модулей или для каждого модуля регистры с нуля писать?
yurmik у каждого устройства свой адрес вне зависимости 1-м он подключен на шлейфе или последним. адрес + регистры модуля по документации.
Здравствуйте.
В наличии есть: ПЛК160-У-М, СП270, МВУ8, МВА8 и нулевой багаж знаний в программировании ПЛК.
Что надо сделать:
1. Завести в ПЛК 7 сигналов от термосопротивлений (заведены на МВА) и 2 сигнала 4-20мА (заведены на ПЛК). ПЛК их видит.
2. Отобразить все заведенные сигналы на СП270. Сигнал с термосопротивлений отобразил по подобию примеров с диска ПЛК. А вот 4-20 не получаеться, т.к. в ПЛК они заводятся в виде REAL, а в СП270 нашел отображение только в WORD.
3. В ПЛК будет крутится программа, работает с входными аналогами, дискретами и выходными дискретами (как нибудь, чего нибудь придумаю).
4. Вывести ВСЕ сигналы в формате 4-20 мА. Термосопротивления вывел с МВА, через ПЛК, на МВУ в формате WORD (снова по примеру), пока не смотрел как это выглядит в виде сигнала. Один 4-20 со входа ПЛК отправляю на выход МВУ. Второй 4-20 отправляю на выход ПЛК 0-10В (ПЛК160-У-М), а затем внешним преобразователем уже в 4-20 мА.
Вопросы:
В1. Как преобразовать REAL в WORD и обратно, либо как отобразить сигнал формата REAL в СП270.
В2. 4-20мА со входа ПЛК напрямую отправить на выход МВУ наверно не получиться. Нужен пересчет. Какой?
В3. 4-20мА со входа ПЛК напрямую отправить на выход ПЛК 0-10В тоже не получиться. Нужен пересчет. Какой?
С уважением. Илья
Для начала внимательно изучите этот документ http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf чтоб с Вами можно было предметно разговаривать
Земеля capzap, очень полезный совет. Рекомендуемый вами файл, есть на диске к ПЛК. И я естественное с ним ознакомился, нет не выучил наизусть, а ознакомился. Но так как опыт программирования у меня нулевой, то не все понял. Поэтому и попросил готовый "рецепт" решения банальной, с вашей точки зрения, проблемы.
Поиск по этому файлу у меня почему то не работает, а help по функциям в codesys почему то не полный. Однако "нашлась" функция REAL_TO_WORD, про которую help упрямо молчит. Будем дальше плясать с бубном :)
Уважаемый capzap, пишите ИСТЧЕ больше дельных, полезных, а главное простых советов.
По поводу поиска помоему Вам и к винде необходимо бубен искать, смотрите видео
а по поводу других преобразований, читайте еще и про LIN_TRAFO
Вооот, пошел же предметный разговор. А поиск, на портабельном фоксит ридере на машине включенной в домен и запароленной по самое немогу, действительно почему то не работает. Кстати и хелп не всех программ способен штатно работать на машине включенной в домен (отдельный рахмат нашим системщикам). К примеру хелп автокад электрик и т.п.
Отдельное и ОГРОМНОЕ спасибо за быстрый ответ.
нерекоендовал бы в WORD преобразовывать, а то отрицательные значения будут плохо выглядеть, как в документации для этого нужен INT
Так СП270 должна и Real показывать. раз уж ИП320 умеет или у СП270 с этим проблемы ?
Чесно говоря, я не понимаю фразы "экономить трафик" уменьшением кол-ва регистров.
Что 1 регистр переслать, что 10 - время одно. Варианты ASC на 2400 я не рассматриваю. Про ИП320 - тоже самое.
Трафик экономится не кол-вом байт, а оптимизацией самого обмена.
Может кто-то доказать необходимость вывода данных "для посмотреть" быстрее 0.5-1с ?
К тому же большая часть данных - с мва8, а там само обновление - от 0.4сек.
Скорость же собственных быстрых Ai ПЛК нужна для максимально быстрой реакции выходов, или думаете что увидев изменение на экране оператор быстрее повлияет на выходы чем код ?
можно конечно и так рассуждать, вполне оправдано, но если я в панели веду архив показаний, то через месяц накопленных данных будет существенно заметна разница, если собирались инты а не реалы
))) Это исключение. Но целый месяц и раз в секунду ? Причем что тут "только посмотреть" ? Не уверен что панель здесь оптимальна как хранитель.
Скажите: если я задам время в вот в этом формате "T#7D", оно будет работать или нет? Или надо указывать в часах?
Вопрос снимаю. Задал T#0.001D, проверил, всё работает. Значит "D" можно ставить.
Такой вопрос, правда не знаю, возможно больше в тему SCADA систем. SCADA будет опрашивать счетчики через ПЛК+панель (на панели показания счетчиков и так же построение графиков), в случае обрыва связи со Scada возможно писать архив показаний со счетчика и при восстановлении связи, чтобы этот архив передавался в Scada ?
И вообще сколько может потребоваться места для архива если снятие показаний раз в секунду ? дофигища наверное, и как тогда быть ?
Не, не дофигища - влезет в любую дамскую сумочку.Цитата:
И вообще сколько может потребоваться места для архива если снятие показаний раз в секунду ? дофигища наверное, и как тогда быть ?
В Scade скорее всего придется кодить. А нужный размер - это вопрос формата, точности, логики.
Валенок насколько понимаю, в scade придется кодить потом чтение архива и водружение его на потерянную часть времени разрыва связи. С этим понятно.
Вопрос записи архива в плк, если его писать в CSV, насколько можно сэкономить пространства и сэкономится ли оно вообще ? REAL занимает 4 байта, например значение 220,37 в CSV займет байт 6 и как тут сэкономить пространство ?
Формат:
csv,бинарник или что-то упакованное... 220,37 - прекрасно вписываются и в 2 байта
Точность:
А так уж нужны 7..8 значащих цифр ? Да еще -1е38..1е38 ? Для значительной части инженерки достаточно 3..4 знаков в достаточно узком диапазоне (0..16бар, -50..200*C, 0..100м3/ч и т.д.) Прямой или экспоненциальный масштаб - и иногда достаточно и 1 байта.
Логика:
Данные трепыхаются час 220,371..220,375 а после раз - и 345,67. И зачем целый час одно и тоже каждую секунду писать ? Может только при необходимом отклонении ?
Зачем вообще писать чего-то если все хорошо ? А вот накануне аварии поподробнее - самое то.
Комбинация этого - только от преполагаемого характера данных.
Это ж как надо данные по файлу размазать, чтобы памяти ПЛК не хватило для журнала на время восстановления связи со скадой? И какова вообще вероятность аварии во время отсутствия связи со скадой?
Чтобы «накануне аварии поподробнее» было. По кругу надо писать, и всё.Цитата:
И зачем целый час одно и тоже каждую секунду писать ?
Вот товарищ журналирование делал с периодическим скидыванием на ПК: http://owen.ru/forum/showthread.php?t=16563
Валенок объекты удаленные, скорее всего будут висеть на модемах типа iRZ RUH, по крайней мере такие в спеке, VPN канал через GPRS. как всегда у нас бывает, либо оператор лег, либо деньги на симке кончились :)
Измерения согласен, не меняются скачками, это относится к электричеству, но вот расход воды он изменчив и сильно. Просто вопрос куда копать ?
То, что в ПЛК должно писаться циклом на определенное время (будет обговариваться по ТЗ) это понятно. Но как можно сократить данные так, чтобы архив мог растянуться на месяц например ?
Сделать график в ПЛК при обрыве связи или таки как-то в CSV ? Понимаю. что чтение архива в случае потери связи ляжет именно на SCADA...
Ессно куча знаков после запятой и не нужна, сотых достаточно.
Yegor спасибо, гляну, может поможет определиться
Вот чтоб «накануне аварии поподробнее» было, вовсе необязательно все подряд в файл. Можно только заданное временное окно с подробностями перед аварией.
PS
)))) А если вероятность обрыва, да еще и долгого низкая - csv без разговоров. Тут capzap тоже целый месяц автономки рассматривал. Прикидываю - куда автор плк закидывает, если на Луну за 8-12 дней оборачивались.
Значащие цифры это не запятые : 5,00 > 5,05 100 > 101. Тут и тут 1%. Сколько % необходимо для фиксации изменения ?Цитата:
Ессно куча знаков после запятой и не нужна, сотых достаточно.
Валенок насколько долгая не скажу, но суть в том, что у юрлиц это в порядке вещей, пока прибегут в бухгалтерию, пока она оплатит, пока оплата пройдет, пока оператор опять включит симку.... бывает и сутки проходят....Россея....
За подсказку с процентами спасибо, не подумал как-то об этом.
)) Оптимально - нового отклонения от уставки от старого отклонения от уставки.
Real легко вкладывается в 16 бит c значениями +-1.3E+-7 с отклонением после распаковки в real не более 0.1%. Это за глаза перекроет большинство требуемых значений для архиваций.
А если точности достаточно около 0.6%, в 16 бит укладывается весь диапазон real.
Валенок проблема хранения данных счетчиков электроэнергии, сейчас 220,4 В на фазу, а через секунду 228,9В уже 0,96% от уставки 220В а может быть и 237В и так далее.
Понятно, пока связь со SCADA есть, на это все плевать, а вот если она оборвалась, надо как-то записывать данные со счетчиков на время восстановления связи и после восстановления чтобы SCADA загружала архив и восполняла пробелы в таблицах и графиках.
Счетчиков от 3-х штук и выше.
Можно ли как-то проинициализировать переменные, добавленные как регистры Модбас? То есть можно ли задать им какое-то начальное значение (кроме как вручную программно)?
Только если вручную к адресам прибивать. Зато есть бонус — можно тут же флаги PERSISTENT/RETAIN задать. У меня в одном проекте так сделано. Естественно, адреса могут «уплыть». С этим надо быть внимательнее.