да массив же подряд идёт))) ну тут у меня эйфория и накатал что в голову пришло.
Вид для печати
Добрый день! Теперь у меня та же проблема, как в сообщении https://owen.ru/forum/showthread.php...l=1#post312256 - ошибка при попытке подключения к СПК110. Буквально за день до этого всё было хорошо и загружалось.
Вложение 58988Вложение 58989
Интересно, получилось у вас помочь ему в этом, и если да - то как?
Добрый день.
На скрине видно, что не запущены службы CODESYS Gateway и Codemeter.
Проверьте их состояние:
Вложение 58991
Если самостоятельно решить проблему не получится - обеспечьте в понедельник удаленный доступ к ПК (лучше утром).
Добрый вечер! ребят подскажите пожалуйста как узнать сколько занимает переменная в байтах? ну или массив сколько занимает, чтобы не сидеть и в ручную не считать))
Используйте оператор SIZEOF.
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
Лучше добавлять библиотеки вот так:
Вложение 59007
Здравствуйте знатоки. Нам - эксплуатации, необходимо реализовать настройку модулей с панели оператора(СП270), а то при замене датчика постоянно необходим ноутбук или похожий датчик. Вопрос - можно ли установить конфигураторы модулей Mx110 и Mx210 на ПЛК210 и конфигурировать эти модули с ОП(СП270). Если можно, то ссылки на примеры или подобные темы.
Добрый день.
Установить конфигуратор на ПЛК нельзя.
Для Mx210 можно изменить тип датчика по Modbus.
В шаблоне уже есть нужные каналы:
https://owen.ru/forum/showthread.php?t=31176
Для Mx110 это можно сделать только по протоколу ОВЕН.
Задача не самая простая, и примеров для конкретно вашего случая нет.
Начать можно с этого документа:
https://ftp.owen.ru/CoDeSys3/11_Docu...lOWEN_v2.1.pdf
какой путь можно использовать для создания файлов в виртуальном ПЛК?
на живом плк я использую '/mnt/ufs/home/ftp/in/base.bin'
Добрый день!
Не могу настроить связь между ноутом и ПЛК-200-03,
==============================
DETAILED VERSION INFORMATION
Created at 01.02.2022
==============================
Startup profile: .................................................. ............. CODESYS V3.5 SP16 Patch 3
OS version: .................................................. .................. Microsoft Windows NT 10.0.19042.0
.NET version: .................................................. ................ 4.0.30319.42000
Вот здесь не находит устройство, сканнер ничего не находит:
Вложение 59045
Версии таргетов:
Вложение 59046
Ноут включен в ПЛК-200-03 напрямую кабелем в порт ПЛК "lan", IP адреса настроены, веб-конфигуратор загружается и работает:
Вложение 59047,
но никак не могу продключиться через CodeSys !
Помогите пожалуйста!!
+++++ PS: прошивку обновил дважды аппаратно как и написано, (единственно что между первым и вторым обновлением прошивки я заходил в веб-интерфейс, надеюсь это не повлияло)
Добрый день.
См. https://owen.ru/forum/showthread.php...l=1#post330018
Если не поможет - обеспечьте удаленный доступ по TeamViewer или AnyDesk.
Магия,
Вложение 59048
- кто бы мог подумать :) видимо каспер блокирует
Спасибо!!!
Доброго времени коллеги.
Столкнулся с подобной проблемой при подключении к проекту в режиме эмуляции.
Вложение 59120
P.S.
Проект - долгострой. Когда открывал его в последний раз(месяца два назад), подобного не наблюдалось. Настройки КДС никакие не менял, пароли не ставил. Версия КДС- 3.5 SP16 +
Добрый день! Выполнил все что вы скинули по данной ссылке. но через пару дней все равно выскакивает данная ошибка. Я так понимаю данная ошибка появляется из-за переполнении памяти плк? Можно ли сделать запись трендов на на microsd карту?
Данная ошибка обычно появляется из-за повреждения файла трендов при перезагрузке по питанию.
Возможность записи трендов на MicroSD появится в следующей прошивке.
Также в ближайшем времени мы приступим к разработке собственной библиотеки трендов, что перестать зависеть от проблем встроенного компонента.
Добрый день.
Нет, за это время не устанавливал ничего. Единственное, пробовал переустановить таргет сегодня.
Наполовину разобрался с проблемой. Проект изначально создавался в версии SP14, но при открытии через ярлык проекта открывался SP16.
Но остался вопрос по SP16. При создании нового проекта - просит залогиниться (в SP14 все без проблем создается и открывается)
Ответил вам в личку.
Всем хорошего дня!
Как выполнить поиск в массиве структуры?
имеем структуру
WORD это номер
WSTRING это текстовое поле, тут нужно выполнить поиск, результатом поиска должны быть значения номеров записи записанных в массив. чтобы по номерам из массива можно было подгрузить необходимый номер записи
Вот структура:
этот массив структуры сохраняю в бинарный фаил, в этом бинарном файле нужно выполнить поиск по номеру испытуемого клапанаЦитата:
TYPE StTestKoKs: //Структура данных
STRUCT
//Входные данные
TestNomer: WORD; //Номер тестирования
TestDT: WSTRING(16); //Дата и время тестирования
TipKoKs: WSTRING(25); //Тип КО/КС
Razmer: WSTRING(5); //Размер
Model: WSTRING(50); //Модель
ZavodNomer: WSTRING(50); //Заводской номер
ZavodIzgotovitel: WSTRING(50); //Завод изготовитель
IzgotShtucera: WSTRING(50); //Изготовитель штуцера
ShlamoUlovitel: WSTRING(10); //Шламоуловитель
DlinnaShlamovoiTruby: WSTRING(10); //Длинна шламовой трубы
PropuskShlamoulovitely: WSTRING(10); //Пропускная способность шламоуловителя
Vladelec: WSTRING(50); //Владелец (Собственник)
Zakazchik: WSTRING(50); //Заказчик
Operator: WSTRING(50); //Оператор
//Статус испытаний
SEtap1: WSTRING(25); //Давление 1 этап
SEtap2: WSTRING(25); //Давление 2 этап
SEtap3: WSTRING(25); //Давление 3 этап
SEtap4: WSTRING(25); //Давление 4 этап
SEtap5: WSTRING(25); //Давление 5 этап
SEtap6: WSTRING(25); //Давление 6 этап
//Время испытаний
TimeEtap1: BYTE; //Время 1 этап
TimeEtap2: BYTE; //Время 2 этап
TimeEtap3: BYTE; //Время 3 этап
TimeEtap4: BYTE; //Время 4 этап
TimeEtap5: BYTE; //Время 5 этап
TimeEtap6: BYTE; //Время 6 этап
//Данные и результаты тестирования
PFact: ARRAY [0..599] OF WORD; //Давление фактическое
PUstavka: ARRAY [0..599] OF WORD; //Давление эталон
Resultat: WSTRING(25); //Результат тестирования (годен/негоден)
GlubinaArray: REAL; //Глубина массива графика
END_STRUCT
END_TYPE
все записи которые есть те номера ихЦитата:
ZavodNomer: WSTRING(50); //Заводской номер
вывести значения в массив подряд везде где номер клапана совпал со строкой поиска, по номеру в массиве уже буду вытаскиваеть нужное тестирование в протокол данныхЦитата:
TestNomer: WORD; //Номер тестирования
по номеру тестирования я обращаюсь к файлу и выгружаю нужный мне диапазон данных.
в принцепи номер тестирования и номер клапана могу вытащить в отдельный массив для поиска в нем, но нужно сделать както эффективно так как записей может быть больше 100 000
А теперь приведите конкретный пример, как должен работать поиск.
Пусть TestNomer = 123, ZavodNomer = "abcdef", и что дальше надо сделать-то?
Когда-то ОЧЕНЬ давно на Visual Basic я писал свой MP3-плеер, как аналог Foobar2000. Там у меня была база ID3-тэгов и статистики прослушивания песен.Цитата:
так как записей может быть больше 100 000
База представляла собой массив структур в бинарном файле. Записей тоже было дофига - под 50 000. И поиск нужной был очень затруднён, конечно же.
Я решил это созданием индекса по хэшу пути и имени MP3-файла (а тут это будет номер клапана и какая-нибудь хэш-функция от него - наприсер CRC32 от строки, занимает 4 байта - я им и пользовался). Индексом был отдельный файл, в котором были блоки по 512 из массивов структур с указанием на данные.
Короче, на моём примере было так:
1. Описание одного объекта - структура STRUCT фиксированной длины (у меня 1024 байт вышло).
2. Ключ (ID) записи - функция CRC32 от полного пути файла (тут может быть CRC32 от серийника клапана). Это значение занимает 4 байта.
3. Описание индекса - это STRUCT длиной 8 байт из двух полей: ID (ключ) и смещение в файле данных на начало этого блока (куда надо перейти операцией Seek и сразу читать данные).
Грубо:
4. Чтобы можно было быстрее читать индексы, они хранились в файле как вложенные STRUCT из индексных (где ID и Смещение):Код:STRUCT IndexRecord
dwID : DWORD;
dwPos : DWORD;
END_STRUCT
Общая длина структуры IndexData была равна 512 байт, соответственно (512 - 8 (заголовок)) / 8 (длина IndexRecord) = 63 штуки.Код:STRUCT IndexData
dwCount : DWORD; (* Сколько штук записей заполнено *)
dwEmpty : DWORD; (* Чтобы и этот заголовок занимал 8 байт *)
arrIdx : ARRAY [1..63] OF IndexRecord;
END_STRUCT
Мой алгоритм при чтении быстренько читал индексы в память и потом рылся в них поиском по массиву IDшек. А зная IDшку он знал на какой байт файла данных встать, чтобы прочитать STRUCT оттуда.
а есть готовый фб, для конвертации Dword в элементы времени?
Хочу по модбас получать 2 регистра Unix времени и перебрасывать его на rtc модуль для записи
Дмитрий, ну вы могли бы напрямую у коллег спросить.)
https://owen.ru/forum/showthread.php...l=1#post351122
Элемент "Индикатор выполнения", можно ли его повернуть, чтобы он стал вертикальным, а не горизонтальным?
К сожалению, данное пожелание до сих пор не реализовали.
Вложение 59209