• обязательно заполнить свой профиль на русском языке кириллицей
  • не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему
  • дублирование сообщений приравнивается к спаму
  • за поиск и предложение пиратского ПО - бан без предупреждения
  • рекламу и частные объявления мы не размещаем ни на каких условиях

Unity Pro XL WRITE_VAR READ_WAR

Ответить
Аватара пользователя

Автор темы
kasper00761
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 11 апр 2018, 16:24
Имя: Александр
Благодарил (а): 2 раза

Unity Pro XL WRITE_VAR READ_WAR

Сообщение kasper00761 » 12 мар 2019, 11:15

Всем привет. Вопрос такой, у меня есть блоки для чтения и записи по Modbus RS-485 и их очень много, и чтоб не засорять линию передачи данных надо выкупать бит типо запись прошла успешно или чтение прошло успешно. Потому что при формировании слова у меня встает запись в Set и после чего хочу сделать таким путем что, при успешной записи мне вернулся бит что запись закончена и ресетил бит записи.
Тут сетит
Сни1мок.PNG
Тут хочу включать ресет по биту успешной записи
Снимок.PNG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

Автор темы
kasper00761
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 11 апр 2018, 16:24
Имя: Александр
Благодарил (а): 2 раза

Unity Pro XL WRITE_VAR READ_WAR

Сообщение kasper00761 » 22 мар 2019, 16:58

Ребят, нужна ваша помощь. Подскажите как реализовать опрос и запись 5 Modbus устройств, чтоб при этом не забивалась линия передачи т.к. "чтение" должно происходить каждую секунду 5 модбас устройств и запись 2-ух модбас устройств каждую секунду. Или же кто знает описание слова ячейки GEST по каждому биту :ges_help:


MaksimNT
осмотрелся
осмотрелся
Сообщения: 121
Зарегистрирован: 31 авг 2012, 05:30
Имя: Фоменко Максим Анатольевич
Поблагодарили: 23 раза

Unity Pro XL WRITE_VAR READ_WAR

Сообщение MaksimNT » 22 мар 2019, 19:59

На ST в Unity Pro XL 12


(* если текущий шаг разрешен *)
IF Mod_Par_DD11_1[Mod_R_DD11_1.iStep].bEn = 1 THEN
IF Mod_R_DD11_1.bRead_CMD = 1 THEN
(* Присвоение параметров чтения *)
Mod_R_DD11_1.sADR := Mod_Par_DD11_1[Mod_R_DD11_1.iStep].sADR;
Mod_R_DD11_1.sOBJ := Mod_Par_DD11_1[Mod_R_DD11_1.iStep].sOBJ;
Mod_R_DD11_1.dNUM := Mod_Par_DD11_1[Mod_R_DD11_1.iStep].dNUM;
Mod_R_DD11_1.iNB := Mod_Par_DD11_1[Mod_R_DD11_1.iStep].iNB;

(* вызов функции чтения по команде в случае если обмен свободен *)
IF Mod_R_DD11_1.Rpara[0].0 = 0 THEN
(* очищаем область чтения *)
FOR iN_01 := 0 TO 15 BY 1 DO
Mod_R_DD11_1.Rdata[iN_01] := 0;
END_FOR;
(* системная функция чтения данных *)
READ_VAR (ADR := ADDM(IN := Mod_R_DD11_1.sADR),
OBJ := Mod_R_DD11_1.sOBJ,
NUM := Mod_R_DD11_1.dNUM,
NB := Mod_R_DD11_1.iNB,
GEST := Mod_R_DD11_1.Rpara,
RECP => Mod_R_DD11_1.Rdata);

(* флаги качества устанавливаем *)
Mod_R_DD11_1.bRead_OK := TRUE;
Mod_Par_DD11_1[Mod_R_DD11_1.iStep].bOK := TRUE;
(* флаг исполнения шага сбрасываем *)
Mod_R_DD11_1.bRead_CMD := False;
END_IF;
END_IF;
ELSE
(* переход к следующему шагу *)
Mod_R_DD11_1.iStep := Mod_R_DD11_1.iStep + 1;
END_IF;


(* в случае если обмен освободился и есть ошибка*)
IF Mod_R_DD11_1.Rpara[0].0 = 0 AND Mod_R_DD11_1.bRun = 1 AND Mod_R_DD11_1.Rpara[1] <> 0 THEN
(* сбрасываем флаг качества чтения *)
Mod_R_DD11_1.bRead_OK := FALSE;
Mod_Par_DD11_1[Mod_R_DD11_1.iStep].bOK := FALSE;
(* отчет обмена *)
Mod_Par_DD11_1[Mod_R_DD11_1.iStep].iErr := Mod_R_DD11_1.Rpara[1];
END_IF;

(* в случае если обмен освободился и прочитали новое значение *)
IF Mod_R_DD11_1.Rpara[0].0 = 0 AND Mod_R_DD11_1.iNumber <> Mod_R_DD11_1.iNumber_OLD THEN

(* то если достоверный запрос *)
IF ((Mod_R_DD11_1.sOBJ = '%IW' OR Mod_R_DD11_1.sOBJ = '%MW') AND Mod_R_DD11_1.Rpara[3] = (Mod_R_DD11_1.iNB * 2)) OR
((Mod_R_DD11_1.sOBJ = '%I' OR Mod_R_DD11_1.sOBJ = '%M') AND Mod_R_DD11_1.Rpara[3] = 1) THEN
CASE Mod_R_DD11_1.iStep OF

0: Modbus[0] := Mod_R_DD11_1.Rdata[0]; Modbus[1] := Mod_R_DD11_1.Rdata[1];
1: Modbus[2] := Mod_R_DD11_1.Rdata[0];
2: Modbus[3] := Mod_R_DD11_1.Rdata[0];
.......
END_CASE;
ELSE
Mod_Par_DD11_1[Mod_R_DD11_1.iStep].bOK := FALSE;
END_IF;

(* очищаем количество прочитанных регистров *)
Mod_R_DD11_1.Rpara[3] := 0;
(* переход к следующему шагу *)
Mod_R_DD11_1.iStep := Mod_R_DD11_1.iStep + 1;
(* Вызов функции чтения *)
Mod_R_DD11_1.bRead_CMD := TRUE;
(* сохранения значения текущего шага *)
Mod_R_DD11_1.iNumber_OLD := Mod_R_DD11_1.iNumber;

END_IF;

Отправлено спустя 6 минут 12 секунд:
kasper00761 писал(а):
22 мар 2019, 16:58
Или же кто знает описание слова ячейки GEST по каждому биту :ges_help:
В help Unity Pro XL 12

Отправлено спустя 3 минуты 45 секунд:
В help Unity Pro XL 12
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

Автор темы
kasper00761
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 11 апр 2018, 16:24
Имя: Александр
Благодарил (а): 2 раза

Unity Pro XL WRITE_VAR READ_WAR

Сообщение kasper00761 » 26 мар 2019, 12:16

Спасибо, но у меня все в FBD))

Ответить

Вернуться в «ПЛК»