Просмотр полной версии : ПЛК, MODBUS, Web server
Добрый день, наваял не без помощи участников форума некого "Франкенштейна". Свет работает отлично, датчики воды не очень (что бы не создавать отделенную тему, электрокраны должны включаться и выключаться 2 раза в месяц, но на практики в скрипте, что-то не срабатывает, если кто-то может подсказать в чем дело буду благодарен).
Глобальная проблема в следующем. Я могу управлять светом или только с помощью физических кнопок или только из web интерфейса, т.к. состояние в котором в данный момент находится лампа не передается в web интерфейс и наоборот, если я выключаю свет через web интерфейс то на физическую кнопку нужно нажимать 2 раза, т.к. состояние лампы тоже не передается.
Посмотрите пожалуйста код и подскажите, что необходимо подкрутить.
Так-же из-за того, что проблемы с управлением, подключением и правильной обработкой событий для электрокранов, 2 я успешно спалил (как выяснилось сегодня). Данные эксперименты довольно дорого стоят, по этой причине я и обращаюсь за помощью к профессионалам.
приборист
28.01.2015, 12:48
Бегло просмотрел.
Какой смысл в таком:
CASE Kuhnja_led_STEP OF
0:
IF SWITCH_Kuhnja_led.Q THEN
DI_OU.0:=TRUE;
Kuhnja_led_STEP:=1;
END_IF
1:
IF SWITCH_Kuhnja_led.Q THEN
DI_OU.0:=FALSE;
Kuhnja_led_STEP:=0;
END_IF
END_CASE
Если нужно просто изменять состояние, то проще так:
IF SWITCH_Kuhnja_led.Q THEN
DI_OU.0:=NOT DI_OU.0;
END_IF
Про веб интерфейс - нужны файлы, чтобы понять.
Смотря что Вы оттуда пытаетесь включить.
Использую https://code.google.com/p/phpmodbus/ библиотеку, а какие именно файлы нужны?
А электрокраны по какой причине сгорели ?
Бегло просмотрел.
Какой смысл в таком:
Если нужно просто изменять состояние, то проще так:
IF SWITCH_Kuhnja_led.Q THEN
DI_OU.0:=NOT DI_OU.0;
END_IF
Про веб интерфейс - нужны файлы, чтобы понять.
Смотря что Вы оттуда пытаетесь включить.
Планировалось, что на одну физическую клавишу будет повешено несколько действий - включить свет, затем вытяжку, выключить все, но из-за неудобства использования такой схемы на практики, было решено на каждый прибор поставить отдельный выключатель.
lara197a
28.01.2015, 14:13
так присвойте переменной в веб интерфесе и кнопке разные имена.
а в программе используйте их через ИЛИ.
A:=А_web OR A_knopka
С первым вопросом разобрался, теперь осталось понять по какой причине не срабатывает данный код.
Sys_DateTime := Z;
GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime);
IF (Sys_DateTime.Day = 1 OR Sys_DateTime.Day = 28) AND Sys_DateTime.Hour = 15 AND Sys_DateTime.Minute = 27 THEN
out3 := TRUE;
out4 := TRUE;
ELSE
out3 := FALSE;
out4 := FALSE;
END_IF;
IF (Sys_DateTime.Day = 1 OR Sys_DateTime.Day = 28) AND Sys_DateTime.Hour = 15 AND Sys_DateTime.Minute = 28 THEN
out1 := TRUE;
out2 := TRUE;
ELSE
out1 := FALSE;
out2 := FALSE;
END_IF;
приборист
28.01.2015, 16:22
В примере есть такое:
(*Текущее время*)
Sys_DateTime.Day :=0;
Sys_DateTime.DayOfWeek :=0;
Sys_DateTime.dwHighMsec :=0;
Sys_DateTime.dwLowMSecs :=0;
Sys_DateTime.Milliseconds :=0;
Sys_DateTime.Minute :=0;
Sys_DateTime.Second :=0;
Sys_DateTime.Hour :=0;
Sys_DateTime.Year :=0;
Sys_DateTime.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime);
Обнулять переменные надо.
Визуально в блоке GetTime видно что время не меняется.
В примере есть такое:
(*Текущее время*)
Sys_DateTime.Day :=0;
Sys_DateTime.DayOfWeek :=0;
Sys_DateTime.dwHighMsec :=0;
Sys_DateTime.dwLowMSecs :=0;
Sys_DateTime.Milliseconds :=0;
Sys_DateTime.Minute :=0;
Sys_DateTime.Second :=0;
Sys_DateTime.Hour :=0;
Sys_DateTime.Year :=0;
Sys_DateTime.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime);
Обнулять переменные надо.
Визуально в блоке GetTime видно что время не меняется.
Это уже есть
Sys_DateTime,Z:SystemTimeDate;
GetTime:CurTimeEx;
Sys_Time: SysTime64;
приборист
28.01.2015, 17:55
Это уже есть
Sys_DateTime,Z:SystemTimeDate;
GetTime:CurTimeEx;
Sys_Time: SysTime64;
А где это:
Sys_DateTime.Day :=0;
Sys_DateTime.DayOfWeek :=0;
Sys_DateTime.dwHighMsec :=0;
Sys_DateTime.dwLowMSecs :=0;
Sys_DateTime.Milliseconds :=0;
Sys_DateTime.Minute :=0;
Sys_DateTime.Second :=0;
Sys_DateTime.Hour :=0;
Sys_DateTime.Year :=0;
Sys_DateTime.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
Я только что попробовал код в контроллере, без обнуления GetTime не меняет свои значения, с обнулением - все хорошо и код отрабатывает.
А где это:
Sys_DateTime.Day :=0;
Sys_DateTime.DayOfWeek :=0;
Sys_DateTime.dwHighMsec :=0;
Sys_DateTime.dwLowMSecs :=0;
Sys_DateTime.Milliseconds :=0;
Sys_DateTime.Minute :=0;
Sys_DateTime.Second :=0;
Sys_DateTime.Hour :=0;
Sys_DateTime.Year :=0;
Sys_DateTime.Month :=0;
Sys_time.ulHigh :=0;
Sys_time.ulLow :=0;
Я только что попробовал код в контроллере, без обнуления GetTime не меняет свои значения, с обнулением - все хорошо и код отрабатывает.
Да, так работает, дальше в коде была ошибка
webage, подскажите, каким образом реализована передача данных от modbas к web-серверу?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot