Просмотр полной версии : Синхронизация времени
VanoKing
08.09.2011, 07:01
Как выполнить синхронизацию времени ПЛК-100 с ПК Win7 ???
Необходимо на плк время выставлять такое же как на ПК.
Гарчев Евгений
08.09.2011, 09:43
Здравствуйте!
Такой возможности нет, ПЛК 100 не поддерживает системную библиотеку SysLibRTC.lib
VanoKing
08.09.2011, 10:06
А если через определенные интервалы времени (10мин. например) производить установку времени в ПЛК по измеренному времени в opc-клиенте masterSCADA и переданному как обычная переменная (кол-во сек. с начала дня).
Возможно ли добиться точности хотяб в +-1с?
Как оценить время передачи переменной до контроллера?
напишите демон слейв устройства, который будет содержать три регистра, для часов, минут и секунд. Демон каждую секунду меняет значения регистров, а ПЛК когда нужно берет инфу с этих регистров
VanoKing
08.09.2011, 10:44
напишите демон слейв устройства, который будет содержать три регистра, для часов, минут и секунд. Демон каждую секунду меняет значения регистров, а ПЛК когда нужно берет инфу с этих регистров
Я не волшебник, только учусь) поэтому не очень понимаю жаргон. что вы имели ввиду под "демон слейв устройства"?
демон это программа работающая в фоновом режиме, определение не точное но смысл должен быть понятен. Вот выкладываю для мастера МодбасТСР слейв с адресом 2. Регистр №0 - часы, №1 - минуты и №3 - секунды.
import java.net.*
import java.util.*
import net.wimpi.modbus.*
import net.wimpi.modbus.net.*
import net.wimpi.modbus.io.*
import net.wimpi.modbus.msg.*
import net.wimpi.modbus.util.*
import net.wimpi.modbus.procimg.*
cal = new GregorianCalendar();
spi = new SimpleProcessImage();
def getSiPrIm() { return spi; }
def getGreg() { return cal; }
def mySlave() {
ModbusTCPListener listener = null;
getSiPrIm().addRegister(new SimpleRegister(0));
getSiPrIm().addRegister(new SimpleRegister(0));
getSiPrIm().addRegister(new SimpleRegister(0));
ModbusCoupler.getReference().setProcessImage(spi);
ModbusCoupler.getReference().setMaster(false);
ModbusCoupler.getReference().setUnitID(2);
listener = new ModbusTCPListener(3);
listener.setPort(Modbus.DEFAULT_PORT);
listener.start();
println listener.isListening()
}
tScript = new Thread(new Runnable() {
public void run() {
mySlave()
}
});
tScript.start();
tScript1 = new Thread(new Runnable() {
public void run() {
while(true) {
try{Thread.sleep(1000)}catch(Exception e){}
getGreg().setTime(new java.util.Date())
getSiPrIm().getRegister(0).setValue(getGreg().get( Calendar.HOUR_OF_DAY))
getSiPrIm().getRegister(1).setValue(getGreg().get( Calendar.MINUTE))
getSiPrIm().getRegister(2).setValue(getGreg().get( Calendar.SECOND))
}
}
});
tScript1.start();
VanoKing
08.09.2011, 13:32
Со стороны плк понял так:
в конфигурации создать modbus(slave) с адресом2 в нем перем. типа 2byte
Со стороны ПК ничего не понял.(
Код написан на Java? какой компилятор нужен?
в том варианте что я предложил, ПЛК в качестве мастера, вечером выложу более оптимальный вариант, когда плк в роли слейва, а прога на пк мастер, её поставить в список задачь винды(линукса) запускающихся по расписанию. На плк в слейве должно быть четыре регистра, это часы,минуты, секунды и некий флаг, по которому в программе плк устанавливать время. Мастер выдал обновленное время и флаг в положение true, после завершил свою работу, до следущего времени по расписанию. А в ПЛК, когда условие выполняется IF flag=TRUE THEN выполнить код, взяв регистры, в которых лежит время и сбросить флаг. Вообщем как то так
Да, если с ПК связь последовательная, то нужны настройки порта
VanoKing
08.09.2011, 15:09
Да, если с ПК связь последовательная, то нужны настройки порта
связь Ethernet через коммутатор.Настройка нужна только в ПЛК или на ПК в коде тоже?
для мастера нужны как обычно IP-адрес, адрес ведомого устройства, порт и номера регистров. Я пишу на скриптах, поэтому если разобраться, всегда можно легко поправить
флажок на то и оставил, что к этим данным ни кто необратится, пока он опущен так что в моем случае обнулять не нужно и к тому же остается время последней синхронизации
P.S. жаль что в плк миллисекунды только от текущей секунды, а не от 01.01.10970, непришлось бы разбивать на состовляющие даты
А зачем разбивать чего там ?
В Яве, как и в других языках, задав объекту миллисекунды с начала "эпохи электроники" получаем сразу всевозможные вариации даты и времени. Long, в который умещаются эти миллисекунды, занимает 8 байт, в конфигураторе который у Вас надо передать 24 байта. Вот и сожалею что это не осуществимо, а то непременно бы вспомнил поговорку про Досю
VanoKing
09.09.2011, 07:24
Спасибо огромное! все заработало.:) Вот оно счастье.
Сам бы такое не скоро додумал. От сюда вопрос:
1.Подскажите литературу для начинающих на java. Так понял на Pascal и Codesys далеко не уедешь. В свободное время буду почитывать-пописывать. Чтоб каждый раз не обращаться за помощью.
VanoKing
09.09.2011, 07:58
clock-net.zip
зачем там вторые 4байта? в конфигПЛК?
clock-net.zip
зачем там вторые 4байта? в конфигПЛК?
Прочтите документ SysLibTime_RU.pdf, в нем приведена структура SystemTimeDate, пара 4-х байтных значений это текущее время локального компьютера в микросекундах
1.Подскажите литературу для начинающих на java
2.Эта прога в дереве процессов как наз-ся?
3.Она не будет мешать обмену ПЛК-OPC-MasterSCADA ?
1) http://progbook.net/java/927-java-2-biblioteka-professionalov-tom1.html
2) непонял вопроса, укажите на скрине, что именно имели ввиду
3) В КДС данному слейву поменяйте номер порта, например на 503, в программе в скрипте tcpmast.mls после строчки
con = new TCPMasterConnection(InetAddress.getByName(host))
вставте
con.setPort(503)
Хотя если прочитать http://www.owen.ru/forum/showpost.php?p=11444&postcount=2 то мешать друг другу не должны
VanoKing
09.09.2011, 09:46
жаль с ярлыка в планировщике не запускается прога в свернутом виде. чтоб скрыть окно.
А вот в скаде есть возможнолсть запуск с ярлыка, счас попробую
VanoKing
09.09.2011, 10:34
запуск из планировщика - 6с. передача
запуск ярлыка из mSCADA - 7c. передача, окно скрыто)
Здравствуйте! Подскажите новичку. Задача следующая: нужно управлять освещением в здании через дискретные выходы. Управление привязывается к реальному времени в соответствии с рабочим графиком. Почитал на форуме, нашел библиотеку SysLibtime и хочу использовать блок CurTimeEX, только не могу понять из примеров как он работает. Есть ли примеры на CFC? Подскажите как мне сравнивать системное время с заданным для своевременного включения контактов.
lara197a
05.09.2013, 13:45
Вам удобнее будет купить УТ24
http://www.owen.ru/forum/showthread.php?t=13588 6,7 пример
http://www.owen.ru/forum/showthread.php?t=13588 6,7 пример
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?
В режиме эмуляции реальное время не работает,поменяйте значение переменных если хотите попробовать, а лучше зацепите контроллер.
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?
В библиотеке оскат имеется эмулятор времени,который должен работать и в эмуляторе плк, может он как то подойдет в Вашем случае
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?
Для себя написал симулятор времени. Может вам пригодится.
все здравствуйте! подскажите как сделать привязку программы к реальному времени ПЛК. Пробовал использовать конструкции TimeAndDate, но как то не очень красиво получается, тем более что необходимо выделять интервалы времени и что бы ПЛК понимал в каком интервале сейчас находится, в зависимости от этого и выполняются алгоритмы для своих определенных интервалов, подскажите кто знает как это реализовать?
P.S. Я работаю на CFC,не получается выделить время интервалами из блоков TimeAndDate т.к. там значения разбиты по отдельности т.е. - минуты, часы, секунды; поэтому простое сравнение этих значений с константой (<,>,=) не решает проблему
Николаев Андрей
15.11.2013, 22:41
Еще как решает.
При автоматизации включения\выключения вент. установки сравнивал именно так.
А вообще всем рекомендую поискать в интернете статьи Игоря Петрова про работу со временем (есть в открытом доступе).
http://prolog-plc.ru/docs/TimeExperience.pdf
Sergey666
16.11.2013, 00:55
все здравствуйте! подскажите как сделать привязку программы к реальному времени ПЛК. Пробовал использовать конструкции TimeAndDate, но как то не очень красиво получается, тем более что необходимо выделять интервалы времени и что бы ПЛК понимал в каком интервале сейчас находится, в зависимости от этого и выполняются алгоритмы для своих определенных интервалов, подскажите кто знает как это реализовать?
P.S. Я работаю на CFC,не получается выделить время интервалами из блоков TimeAndDate т.к. там значения разбиты по отдельности т.е. - минуты, часы, секунды; поэтому простое сравнение этих значений с константой (<,>,=) не решает проблему
Время "тикает" в миллисекундах , попробуйте простое преобразование (В Оскатовских библиотеках должно быть) DWORD(интервал в миллисекундах)_to_DT . Сам так уже давно не работаю (отсчитываю время работы в нужном мне формате по секундному таймеру , но если было отключение питания и это надо фиксировать надо привязываться к DT ) .
Вообще больше внимания на библиотеки ОСКАТ , там коды открытые , хотя ПИД регуляторы там косячные (но это компенсируется бесплатностью и открытостью;)).
А вообще всем рекомендую поискать в интернете статьи Игоря Петрова про работу со временем (есть в открытом доступе).
http://prolog-plc.ru/docs/TimeExperience.pdf
Я конечно же читал статьи Петрова, и нашел там такой пример PackTime упаковка времени с последующими преобразованиями в TIME или в DT и т.д. Стал делать по примеру в котором сказано "Умножаем значение часов на число минут в часе, прибавляем число минут, умножаем на число секунд в минуте и т.д." Если вам нужно получить значение типа TOD, то необходимо ввести проверку результата на максимум (24 часа) и заменить DWORD_TO_TIME на DWORD_TO_TOD.
З.Ы. Когда проделал вышеизложенные операции и преобразовал в DT то получил фигню полную...Потом даже преобразовывал число DWORD, которое должно было получиться в формат DT, но фигня осталась фигней. Не ясно в чем касяк, ясно только что мой.
Sergey666
16.11.2013, 22:54
Переведите текущую дату в ДВОРД (DT_to_DWORD)и получите текущее ДТ в миллисекундах.
Есть ФБ Оскат "Сет ДТ" (по русски пишу!!!).
текущее ДТ в миллисекундах
....секундах
Здравствуйте! Подскажите насколько надежны часы реального времени ПЛК, какая есть вероятность что они просто собьются или перестанут идти совсем?
У меня вся рабочая программа привязана к часам ПЛК, время из контроллера достаю с помощью конструкций TimeAndDate, из этого времени формирую интервалы нужной длительности. Если вдруг сигнал пропадет, это будет не очень хорошо
Здравствуйте! Подскажите насколько надежны часы реального времени ПЛК, какая есть вероятность что они просто собьются или перестанут идти совсем?
У меня вся рабочая программа привязана к часам ПЛК, время из контроллера достаю с помощью конструкций TimeAndDate, из этого времени формирую интервалы нужной длительности. Если вдруг сигнал пропадет, это будет не очень хорошо
Время в плк не такое стабильное как хотелось бы, хотя пропажа времени произойти не может. Периодически необходимо синхронизировать р тогда проблем не должно возникнуть
Периодически необходимо синхронизировать тогда проблем не должно возникнуть
Как синхронизировать? Подскажите что нужно сделать для этого
Способов достаточно много, с пк(панели) задавать время и по флагу устанавливать, с плк брать время у панели или др.устройств предоставляющих время, :) доработать под себя мой проект http://www.owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot