PDA

Просмотр полной версии : ПЛК110. Пересекаются области данных?!



Anton441
17.03.2018, 20:03
ПЛК110 в режиме Master получает от устройства Slave строковую переменную длиной 98 символов, то есть длиной 98/2=49 байт, не считая нулевого байта в конце строки.
Далее после обработки программой ПЛК переменная STRING(98) принимается другим мастером сети, ПЛК при этом работает в режиме SLAVE.
В конфигурации ПЛК организован String input modul с переменной String с установленной длиной 100 байт. См. скриншот.

36089

Наблюдаю предупреждение "Переполнение строки" во входных данных.
В выходных данных в программе также вижу, что содержимое входной строковой переменной длиной ровно 80 символов.
Выходные данные как '206$R$N207$R$N920$R$N... и т. д.' Замечу, что $N и $R занимают по одному символу. В строковой переменной перечислены трёхзначные числа с разделителями между ними.
Такое ощущение, что принимаемая строковая переменная осталась длиной 80 символов (по умолчанию), а данные, которые не уместились появились в местах нахождения других данных ниже.
Как будто области с данными перекрываются! На скриншоте они обведены прямоугольником.

36091


В чём дело? Помогите!
Проект ПЛК110 во вложении.

Anton441
18.03.2018, 10:08
Хм...
Со STRING разобрался. Оказывается при конфигурировании ПЛК невозможно объявить входную переменную типа STRING длиной более 80 символов.
См. "Конфигурирование области ввода/вывода ПЛК. Руководство пользователя", стр. 60, п. 3.2.2
https://ftp.owen.ru/CoDeSys/Arxiv_prowivki/2.02.8/PLC_Configuration_OWEN.pdf

capzap
18.03.2018, 10:25
можно же две строки считывать, просто Вы с самого начала не верный подход выбрали, ни какими AT в программе пользоваться не нужно, намного надежнее было бы если б Вы начали использовать указатели, тогда было бы не важно из чего состоит область модбас, главное проименовать начальный регистр и знать размерность всего используемого пространства

Anton441
18.03.2018, 10:30
Вставил в конфигурацию ПЛК две переменные типа STRING(80) и STRING(60) одну за другой итого общей длиной 80+60=140. Указал номера регистров подчинённого устройства откуда считываются данные 7005 и 7045 соответственно.

36094

В программе в области объявлений переменных объявляю переменную типа STRING(140) с указанием адреса из области ввода данных.

36095

capzap
18.03.2018, 11:19
я тоже две картинки выложу