Как выполнить синхронизацию времени ПЛК-100 с ПК Win7 ???
Необходимо на плк время выставлять такое же как на ПК.
Вид для печати
Как выполнить синхронизацию времени ПЛК-100 с ПК Win7 ???
Необходимо на плк время выставлять такое же как на ПК.
Здравствуйте!
Такой возможности нет, ПЛК 100 не поддерживает системную библиотеку SysLibRTC.lib
А если через определенные интервалы времени (10мин. например) производить установку времени в ПЛК по измеренному времени в opc-клиенте masterSCADA и переданному как обычная переменная (кол-во сек. с начала дня).
Возможно ли добиться точности хотяб в +-1с?
Как оценить время передачи переменной до контроллера?
напишите демон слейв устройства, который будет содержать три регистра, для часов, минут и секунд. Демон каждую секунду меняет значения регистров, а ПЛК когда нужно берет инфу с этих регистров
демон это программа работающая в фоновом режиме, определение не точное но смысл должен быть понятен. Вот выкладываю для мастера МодбасТСР слейв с адресом 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();
Со стороны плк понял так:
в конфигурации создать modbus(slave) с адресом2 в нем перем. типа 2byte
Со стороны ПК ничего не понял.(
Код написан на Java? какой компилятор нужен?
в том варианте что я предложил, ПЛК в качестве мастера, вечером выложу более оптимальный вариант, когда плк в роли слейва, а прога на пк мастер, её поставить в список задачь винды(линукса) запускающихся по расписанию. На плк в слейве должно быть четыре регистра, это часы,минуты, секунды и некий флаг, по которому в программе плк устанавливать время. Мастер выдал обновленное время и флаг в положение true, после завершил свою работу, до следущего времени по расписанию. А в ПЛК, когда условие выполняется IF flag=TRUE THEN выполнить код, взяв регистры, в которых лежит время и сбросить флаг. Вообщем как то так
Да, если с ПК связь последовательная, то нужны настройки порта
для мастера нужны как обычно IP-адрес, адрес ведомого устройства, порт и номера регистров. Я пишу на скриптах, поэтому если разобраться, всегда можно легко поправить
флажок на то и оставил, что к этим данным ни кто необратится, пока он опущен так что в моем случае обнулять не нужно и к тому же остается время последней синхронизации
P.S. жаль что в плк миллисекунды только от текущей секунды, а не от 01.01.10970, непришлось бы разбивать на состовляющие даты
В Яве, как и в других языках, задав объекту миллисекунды с начала "эпохи электроники" получаем сразу всевозможные вариации даты и времени. Long, в который умещаются эти миллисекунды, занимает 8 байт, в конфигураторе который у Вас надо передать 24 байта. Вот и сожалею что это не осуществимо, а то непременно бы вспомнил поговорку про Досю
Спасибо огромное! все заработало.:) Вот оно счастье.
Сам бы такое не скоро додумал. От сюда вопрос:
1.Подскажите литературу для начинающих на java. Так понял на Pascal и Codesys далеко не уедешь. В свободное время буду почитывать-пописывать. Чтоб каждый раз не обращаться за помощью.
clock-net.zip
зачем там вторые 4байта? в конфигПЛК?
1) http://progbook.net/java/927-java-2-...alov-tom1.html
2) непонял вопроса, укажите на скрине, что именно имели ввиду
3) В КДС данному слейву поменяйте номер порта, например на 503, в программе в скрипте tcpmast.mls после строчкивставтеЦитата:
con = new TCPMasterConnection(InetAddress.getByName(host))
Хотя если прочитать http://www.owen.ru/forum/showpost.ph...44&postcount=2 то мешать друг другу не должныЦитата:
con.setPort(503)
жаль с ярлыка в планировщике не запускается прога в свернутом виде. чтоб скрыть окно.
А вот в скаде есть возможнолсть запуск с ярлыка, счас попробую
запуск из планировщика - 6с. передача
запуск ярлыка из mSCADA - 7c. передача, окно скрыто)
Здравствуйте! Подскажите новичку. Задача следующая: нужно управлять освещением в здании через дискретные выходы. Управление привязывается к реальному времени в соответствии с рабочим графиком. Почитал на форуме, нашел библиотеку SysLibtime и хочу использовать блок CurTimeEX, только не могу понять из примеров как он работает. Есть ли примеры на CFC? Подскажите как мне сравнивать системное время с заданным для своевременного включения контактов.
Вам удобнее будет купить УТ24
Спасибо за примеры! Только вопрос возник: В режиме эмуляции (пример 7) пытаюсь установить параметры (TimeAndDate.Minute и т.д.) в другие, отличные от нуля значения, но они все равно устанавливаются в 0, объясните почему так происходит. Или как сымитировать нужное мне время?
В режиме эмуляции реальное время не работает,поменяйте значение переменных если хотите попробовать, а лучше зацепите контроллер.
все здравствуйте! подскажите как сделать привязку программы к реальному времени ПЛК. Пробовал использовать конструкции TimeAndDate, но как то не очень красиво получается, тем более что необходимо выделять интервалы времени и что бы ПЛК понимал в каком интервале сейчас находится, в зависимости от этого и выполняются алгоритмы для своих определенных интервалов, подскажите кто знает как это реализовать?
P.S. Я работаю на CFC,не получается выделить время интервалами из блоков TimeAndDate т.к. там значения разбиты по отдельности т.е. - минуты, часы, секунды; поэтому простое сравнение этих значений с константой (<,>,=) не решает проблему
Еще как решает.
При автоматизации включения\выключения вент. установки сравнивал именно так.
А вообще всем рекомендую поискать в интернете статьи Игоря Петрова про работу со временем (есть в открытом доступе).
http://prolog-plc.ru/docs/TimeExperience.pdf
Время "тикает" в миллисекундах , попробуйте простое преобразование (В Оскатовских библиотеках должно быть) DWORD(интервал в миллисекундах)_to_DT . Сам так уже давно не работаю (отсчитываю время работы в нужном мне формате по секундному таймеру , но если было отключение питания и это надо фиксировать надо привязываться к DT ) .
Вообще больше внимания на библиотеки ОСКАТ , там коды открытые , хотя ПИД регуляторы там косячные (но это компенсируется бесплатностью и открытостью;)).
Я конечно же читал статьи Петрова, и нашел там такой пример PackTime упаковка времени с последующими преобразованиями в TIME или в DT и т.д. Стал делать по примеру в котором сказано "Умножаем значение часов на число минут в часе, прибавляем число минут, умножаем на число секунд в минуте и т.д." Если вам нужно получить значение типа TOD, то необходимо ввести проверку результата на максимум (24 часа) и заменить DWORD_TO_TIME на DWORD_TO_TOD.
З.Ы. Когда проделал вышеизложенные операции и преобразовал в DT то получил фигню полную...Потом даже преобразовывал число DWORD, которое должно было получиться в формат DT, но фигня осталась фигней. Не ясно в чем касяк, ясно только что мой.
Переведите текущую дату в ДВОРД (DT_to_DWORD)и получите текущее ДТ в миллисекундах.
Есть ФБ Оскат "Сет ДТ" (по русски пишу!!!).
....секундахЦитата:
текущее ДТ в миллисекундах
Здравствуйте! Подскажите насколько надежны часы реального времени ПЛК, какая есть вероятность что они просто собьются или перестанут идти совсем?
У меня вся рабочая программа привязана к часам ПЛК, время из контроллера достаю с помощью конструкций TimeAndDate, из этого времени формирую интервалы нужной длительности. Если вдруг сигнал пропадет, это будет не очень хорошо
Способов достаточно много, с пк(панели) задавать время и по флагу устанавливать, с плк брать время у панели или др.устройств предоставляющих время, :) доработать под себя мой проект http://www.owen.ru/forum/showthread....l=1#post126715
Спасибо за подсказки!