- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Unity Pro XL WRITE_VAR READ_WAR
Модераторы: Глоб.модераторы, Специалисты SE
-
- здесь недавно
- Сообщения: 20
- Зарегистрирован: 11 апр 2018, 16:24
- Имя: Александр
- Страна: Россиия
- город/регион: Москва
- Благодарил (а): 2 раза
Unity Pro XL WRITE_VAR READ_WAR
Всем привет. Вопрос такой, у меня есть блоки для чтения и записи по Modbus RS-485 и их очень много, и чтоб не засорять линию передачи данных надо выкупать бит типо запись прошла успешно или чтение прошло успешно. Потому что при формировании слова у меня встает запись в Set и после чего хочу сделать таким путем что, при успешной записи мне вернулся бит что запись закончена и ресетил бит записи.
Тут сетит Тут хочу включать ресет по биту успешной записи
Тут сетит Тут хочу включать ресет по биту успешной записи
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 20
- Зарегистрирован: 11 апр 2018, 16:24
- Имя: Александр
- Страна: Россиия
- город/регион: Москва
- Благодарил (а): 2 раза
Unity Pro XL WRITE_VAR READ_WAR
Ребят, нужна ваша помощь. Подскажите как реализовать опрос и запись 5 Modbus устройств, чтоб при этом не забивалась линия передачи т.к. "чтение" должно происходить каждую секунду 5 модбас устройств и запись 2-ух модбас устройств каждую секунду. Или же кто знает описание слова ячейки GEST по каждому биту
-
- освоился
- Сообщения: 262
- Зарегистрирован: 31 авг 2012, 06:30
- Имя: Фоменко Максим Анатольевич
- Страна: РФ
- город/регион: гор. Нижнйи Тагил, Свердловской обл.
- Благодарил (а): 3 раза
- Поблагодарили: 76 раз
Unity Pro XL WRITE_VAR READ_WAR
На 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 секунд:
Отправлено спустя 3 минуты 45 секунд:
В help 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 секунд:
В help Unity Pro XL 12kasper00761 писал(а): ↑22 мар 2019, 16:58 Или же кто знает описание слова ячейки GEST по каждому биту
Отправлено спустя 3 минуты 45 секунд:
В help Unity Pro XL 12
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 20
- Зарегистрирован: 11 апр 2018, 16:24
- Имя: Александр
- Страна: Россиия
- город/регион: Москва
- Благодарил (а): 2 раза
-
- эксперт
- Сообщения: 1146
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 134 раза
Unity Pro XL WRITE_VAR READ_WAR
Дорабатываю старую программу на Unity, и уперся в следующий вопрос, а проверить негде (М340 нет).
В этой программе параллельно работают WRITE_VAR и READ_VAR на один физический порт RS485 одно устройство без всякого менеджмента.
Я раньше думал, что в таком случае ими надо управлять, чтобы они одновременно не работали, а работали по очереди.
Мне сейчас нужно добавить еще один запрос на чтение. Если я добавлю еще один блок READ_VAR, который обращается к тому же порту и так же постоянно работает, то будет ли работать обмен? Или надо все-таки реализовывать управление блоками, чтобы в один момент времени работал только один?
В этой программе параллельно работают WRITE_VAR и READ_VAR на один физический порт RS485 одно устройство без всякого менеджмента.
Я раньше думал, что в таком случае ими надо управлять, чтобы они одновременно не работали, а работали по очереди.
Мне сейчас нужно добавить еще один запрос на чтение. Если я добавлю еще один блок READ_VAR, который обращается к тому же порту и так же постоянно работает, то будет ли работать обмен? Или надо все-таки реализовывать управление блоками, чтобы в один момент времени работал только один?
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- почётный участник форума
- Сообщения: 1746
- Зарегистрирован: 18 янв 2009, 12:25
- Имя: Дмитрий
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 143 раза
Unity Pro XL WRITE_VAR READ_WAR
В свое время проводил эксперименты с RS-485 на М340. В общем случае, менеджмент посылок нужен. Если использовать только READ_VAR без WRITE_VAR, то таймауты пойдут после добавления 6-го - 8-го блока. Причем никакой закономерности в этом нет, опрашиваемые устройства могут быть одного производителя, серийники отличаться на 1, а откликаться с разными таймутами.leon78 писал(а): ↑19 сен 2019, 17:50 Я раньше думал, что в таком случае ими надо управлять, чтобы они одновременно не работали, а работали по очереди.
Мне сейчас нужно добавить еще один запрос на чтение. Если я добавлю еще один блок READ_VAR, который обращается к тому же порту и так же постоянно работает, то будет ли работать обмен? Или надо все-таки реализовывать управление блоками, чтобы в один момент времени работал только один?
"Умные люди обсуждают идеи, средние - события, а глупые - людей" Л.Н. Толстой
-
- эксперт
- Сообщения: 1146
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 134 раза
Unity Pro XL WRITE_VAR READ_WAR
Т.е. 2 READ_VAR и 1 WRITE_VAR можно смело использовать без менеджмента?
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- здесь недавно
- Сообщения: 54
- Зарегистрирован: 06 фев 2021, 02:47
- Имя: Юрий
- Страна: Россия
- город/регион: Челябинская облость
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза