PDA

Просмотр полной версии : Синхронизация времени



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с?
Как оценить время передачи переменной до контроллера?

capzap
08.09.2011, 10:30
напишите демон слейв устройства, который будет содержать три регистра, для часов, минут и секунд. Демон каждую секунду меняет значения регистров, а ПЛК когда нужно берет инфу с этих регистров

VanoKing
08.09.2011, 10:44
напишите демон слейв устройства, который будет содержать три регистра, для часов, минут и секунд. Демон каждую секунду меняет значения регистров, а ПЛК когда нужно берет инфу с этих регистров

Я не волшебник, только учусь) поэтому не очень понимаю жаргон. что вы имели ввиду под "демон слейв устройства"?

capzap
08.09.2011, 11:29
демон это программа работающая в фоновом режиме, определение не точное но смысл должен быть понятен. Вот выкладываю для мастера МодбасТСР слейв с адресом 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? какой компилятор нужен?

capzap
08.09.2011, 14:21
в том варианте что я предложил, ПЛК в качестве мастера, вечером выложу более оптимальный вариант, когда плк в роли слейва, а прога на пк мастер, её поставить в список задачь винды(линукса) запускающихся по расписанию. На плк в слейве должно быть четыре регистра, это часы,минуты, секунды и некий флаг, по которому в программе плк устанавливать время. Мастер выдал обновленное время и флаг в положение true, после завершил свою работу, до следущего времени по расписанию. А в ПЛК, когда условие выполняется IF flag=TRUE THEN выполнить код, взяв регистры, в которых лежит время и сбросить флаг. Вообщем как то так
Да, если с ПК связь последовательная, то нужны настройки порта

VanoKing
08.09.2011, 15:09
Да, если с ПК связь последовательная, то нужны настройки порта

связь Ethernet через коммутатор.Настройка нужна только в ПЛК или на ПК в коде тоже?

capzap
08.09.2011, 15:29
для мастера нужны как обычно IP-адрес, адрес ведомого устройства, порт и номера регистров. Я пишу на скриптах, поэтому если разобраться, всегда можно легко поправить

capzap
08.09.2011, 19:17
флажок на то и оставил, что к этим данным ни кто необратится, пока он опущен так что в моем случае обнулять не нужно и к тому же остается время последней синхронизации
P.S. жаль что в плк миллисекунды только от текущей секунды, а не от 01.01.10970, непришлось бы разбивать на состовляющие даты

capzap
08.09.2011, 22:41
А зачем разбивать чего там ?

В Яве, как и в других языках, задав объекту миллисекунды с начала "эпохи электроники" получаем сразу всевозможные вариации даты и времени. Long, в который умещаются эти миллисекунды, занимает 8 байт, в конфигураторе который у Вас надо передать 24 байта. Вот и сожалею что это не осуществимо, а то непременно бы вспомнил поговорку про Досю

VanoKing
09.09.2011, 07:24
Спасибо огромное! все заработало.:) Вот оно счастье.
Сам бы такое не скоро додумал. От сюда вопрос:

1.Подскажите литературу для начинающих на java. Так понял на Pascal и Codesys далеко не уедешь. В свободное время буду почитывать-пописывать. Чтоб каждый раз не обращаться за помощью.

VanoKing
09.09.2011, 07:58
clock-net.zip
зачем там вторые 4байта? в конфигПЛК?

capzap
09.09.2011, 08:42
clock-net.zip
зачем там вторые 4байта? в конфигПЛК?

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

capzap
09.09.2011, 08:56
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. передача, окно скрыто)

Igor.m
05.09.2013, 13:06
Здравствуйте! Подскажите новичку. Задача следующая: нужно управлять освещением в здании через дискретные выходы. Управление привязывается к реальному времени в соответствии с рабочим графиком. Почитал на форуме, нашел библиотеку SysLibtime и хочу использовать блок CurTimeEX, только не могу понять из примеров как он работает. Есть ли примеры на CFC? Подскажите как мне сравнивать системное время с заданным для своевременного включения контактов.

lara197a
05.09.2013, 13:45
Вам удобнее будет купить УТ24

жекон
05.09.2013, 15:03
http://www.owen.ru/forum/showthread.php?t=13588 6,7 пример

Igor.m
06.09.2013, 07:41
http://www.owen.ru/forum/showthread.php?t=13588 6,7 пример

Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?

жекон
07.09.2013, 04:38
В режиме эмуляции реальное время не работает,поменяйте значение переменных если хотите попробовать, а лучше зацепите контроллер.

capzap
07.09.2013, 06:28
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?

В библиотеке оскат имеется эмулятор времени,который должен работать и в эмуляторе плк, может он как то подойдет в Вашем случае

amn
07.09.2013, 11:33
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?

Для себя написал симулятор времени. Может вам пригодится.

Igor.m
14.11.2013, 07:24
все здравствуйте! подскажите как сделать привязку программы к реальному времени ПЛК. Пробовал использовать конструкции 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 ) .
Вообще больше внимания на библиотеки ОСКАТ , там коды открытые , хотя ПИД регуляторы там косячные (но это компенсируется бесплатностью и открытостью;)).

Igor.m
16.11.2013, 13:52
А вообще всем рекомендую поискать в интернете статьи Игоря Петрова про работу со временем (есть в открытом доступе).
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)и получите текущее ДТ в миллисекундах.
Есть ФБ Оскат "Сет ДТ" (по русски пишу!!!).

Валенок
17.11.2013, 01:18
текущее ДТ в миллисекундах
....секундах

Igor.m
10.01.2014, 06:24
Здравствуйте! Подскажите насколько надежны часы реального времени ПЛК, какая есть вероятность что они просто собьются или перестанут идти совсем?
У меня вся рабочая программа привязана к часам ПЛК, время из контроллера достаю с помощью конструкций TimeAndDate, из этого времени формирую интервалы нужной длительности. Если вдруг сигнал пропадет, это будет не очень хорошо

capzap
10.01.2014, 08:20
Здравствуйте! Подскажите насколько надежны часы реального времени ПЛК, какая есть вероятность что они просто собьются или перестанут идти совсем?
У меня вся рабочая программа привязана к часам ПЛК, время из контроллера достаю с помощью конструкций TimeAndDate, из этого времени формирую интервалы нужной длительности. Если вдруг сигнал пропадет, это будет не очень хорошо
Время в плк не такое стабильное как хотелось бы, хотя пропажа времени произойти не может. Периодически необходимо синхронизировать р тогда проблем не должно возникнуть

Igor.m
10.01.2014, 10:10
Периодически необходимо синхронизировать тогда проблем не должно возникнуть
Как синхронизировать? Подскажите что нужно сделать для этого

capzap
10.01.2014, 10:38
Способов достаточно много, с пк(панели) задавать время и по флагу устанавливать, с плк брать время у панели или др.устройств предоставляющих время, :) доработать под себя мой проект http://www.owen.ru/forum/showthread.php?t=14056&p=126715&viewfull=1#post126715

Igor.m
10.01.2014, 13:20
Спасибо за подсказки!