Здравствуйте.
Подскажите, а есть ли способ поиска подстроки в строке (типа OwenStringUtils.WFindSubstringPosAfterN от ОВЕНа),
но с wstring длинной 16000 символов? (а не 255 символов).
Спасибо.
Вид для печати
Здравствуйте.
Подскажите, а есть ли способ поиска подстроки в строке (типа OwenStringUtils.WFindSubstringPosAfterN от ОВЕНа),
но с wstring длинной 16000 символов? (а не 255 символов).
Спасибо.
Здравствуйте уважаемые форумчане. Возник вопрос. Можно ли как то поменять адрес модуля расширения или датчика(например ПД150) без использования специальной утилиты для изменения конфигурации? каким образом изменить адрес modbus rtu модуля ввода/вывода через спк?(т.е. мне нужно нажать кнопку и прочитать текущий адрес modbus rtu модуля, после чего оно будет в текстовом поле, потом я хочу изменить его и чтобы он записался в модуле, как читать адреса модулей на самой панели PD150.SlaveAddress, а как именно с модуля)
В документации на конкретный модуль или датчик и смотрите.
Вот для ПД150 например:
Вложение 77029
Извините если туплю. Я не совсем понимаю как мне обратиться к модулю. Получается чтобы мне прочитать адрес модуля мне нужно используя библиотеку owencommunication перебрать все адреса и прочитать все что есть в модуле и от туда взять сетевой адрес, а потом как его записать в него? Просто я не совсем даже понимаю как реализовать сканирование сети и последующее изменение адреса на самом модуле
Чтобы задавать правильные вопросы уже нужны какие-то базовые знания об использовании протокола Modbus.
Почитайте здесь, чтобы хоть с чего-то начать
Привет.
Я получаю от ВЕБ-сервера строку типа wstring длинной около 15Кб. Я создал строку wstring(16000).
Потом я пытаюсь ее сохранить к другую локальную строку того же типа.
Какую длину я должен поставить для функции копирования MEM.MemMove? 16000 или 32000?
Вложение 77037
Я думал, что 32000, т.к. каждый символ в wstring - это 2 байта.
Скрытый текст:
Мне хочется ругаться и плёткой, плёткой.
Чтобы программы потом не глючили, НЕЛЬЗЯ указывать прямой размер данных в цифрах!
Надо использовать SIZEOF. Тогда всё будет правильно: размер буфера в байтах.
Да ладно, погоди ты с плеткой. Вот еще прикол:
1. Получаю от сервера ответ 200 (iStatus).
2. Получаю длину ответа от сервера - 15162 байта (diLen).
3. Копирую ответ от сервера в переменную wsResult : wstring(16000). Но! Копирую только 7000 байт.
4. Ищу в этой строке подстроку wsOlolo := "2020". Этот фрагмент внизу ВЕБ-страницы сервера (в подвале).
5. Получаю успешный поиск на позиции 15109!
Перед запуском делал сброс, что-бы все переменные были пустыми.
Вложение 77039
Ну похоже там фантомные данные, я обычно в подобных случаях сначала нулями всё забиваю. Иначе тоже начинаются всякие аномалии приходить.
PS
Типа
https://ftp.owen.ru/CoDeSys3/98_Book...nipulation.pdfКод:MEM.MemFill(ADR(STR1000), SIZEOF(STR1000), 16#20);
STR1000:= ' ';
С плёткой ПРОДЛОЖУ. Потому что СБРОС НЕ РАВЕН ОЧИСТКЕ ПАМЯТИ ПЕРЕМЕННОЙ.
У тебя ошибки, как у программиста СИ 80ых, блин. Смысл в том, что переменная просто указывает на область памяти.
И никто не говорит, что эта память не останется заполненной чем-то.
Магия по шагам:
1. Все строки заканчиваются символом нуля. В конце строки. Все строковые функции работают со строками по этому символу.
2. Ты копируешь буфер целиком. Что там в конце и где там конечный символ нуля строки - хрен знает.
3. Сброс может не очищать память ПЛК. Он просто перезапускает программу с самого начала. Поэтому некая твоя строка до сих пор хранит старый результат. Возможно, это строка, ИЗ который ты копируешь данные.
Поэтому правилом хорошего тона является правило инициализировать и очищать все переменные и буферы, которые используются.
Делаешь MemSet(), заполняя буфер нулями. А потом с ним работаешь.
Почему я упомянул про СИ - потому что там в некоторых компиляторах была такая фишка:
* Если программа компилируется в DEBUG - то все переменные очищаются сами и заполняются нулями.
* Если программа компилируется в RELEASE - то никакие переменные не очищаются вообще.
И поэтому какое-нить объявление типа int i в DEBUG будет равно нулю, а в RELEASE - 31525, например.
Чисть буферы!
Да. Дело было в буферах. Если его чистить, то все норм. Поведение СБРОСа буду учитывать. Спасибо.
Скрытый текст:
ОК. Ради интереса, если это не личное, скажи, почему у тебя так получается (я ж по форуму вижу): ты делаешь, не подумаешь, накосячишь, закидываешь форум вопросами, потом на тебя орут, показывают как надо...
При этом ошибки у тебя элементарные. Вон типа как с SIZEOF().
Мне бы вот хотелось узнать то, как ты мыслишь и рассуждаешь, раз упускаешь такие ошибки. Я не берусь поучать, а просто спрошу: неужели ты не считаешь время, которое тратишь на поиск косяков? У тебя ж его уходит значительно больше, чем на сами программы.
(Вот тут позанудствую) У Жени Кислова есть крутая статья про отладку программ. Там как раз про буфера есть =)
Хм.
Ну я вообще-то об этом не задумываюсь. Просто когда есть вопрос, я пишу на форуме всё. А когда нет вопросов, делаю программу и все.
Я не считаю, что на меня орут на форуме. Это всего лишь решения рабочих вопросов.
И оно может быть полезным даже кому-то другому. Или кому то на этом форуме жалко места на серверах.
Только ты не подумай, что я оправдываюсь.
Не, не! Я не про оправдываться или винить. Мне был интересен именно сам ход мышления.
Мол, почему один раз не разобраться, не проверить всё-всё - и потом фигачить программы быстрее и без ошибок, чем на каждую спрашивать.
Коллеги, добрый день.
Настроил удалённое подключение к ПЛК210 через интернет.
Подключаюсь к веб-визуализации, всё работает.
Пытаюсь подключиться к ПЛК из среды Codesys - подключается с 5-го раза или вообще не подключается. Пишет "Никакое устройство не отвечает на запрос поиска".
По ощущениям, просто не успевает соединиться из-за медленного интернета.
Можно ли как-то увеличить время ожидание ответа контроллера?
Спасибо.Вложение 77048
Доброго времени суток!
Нашел видео как организовать ввод в таблицу (https://www.youtube.com/watch?v=-qPyjuiPbbk).
Аналогичным образом, как я понимаю, можно организовать запись сообщений в таблицу и отображать их в виде журнала в визуализации.
Т.е. это некоторый способ обхода использования Alarm Logging.
Но возникает вопрос, как при таком способе указывать время деактивации? И как показать цветом, что сообщение активно (красный), а после деактивации не активно (например, белый)?
Добрый день.
Путем вывода метки времени деактивации в соответствующем столбце.Цитата:
Но возникает вопрос, как при таком способе указывать время деактивации?
В видео же показано, как менять цвет ячеек таблицы.Цитата:
И как показать цветом, что сообщение активно (красный), а после деактивации не активно (например, белый)?
Метку поставить можно, но мне же в этом случае нужно будет как-то эту строчку "запомнить".
Вот у меня повысился уровень, я вывел в массив строку: "Уровень выше максимального", указал время текущее, метку активности.
Затем было множество других сообщений. Мой массив заполнился другими сообщениями. Уровень упал. Как мне сделать, чтобы та строка (с сообщением "Уровень выше..."), которая была красной, стала белой?
Мне нужно в массиве найти эту строку и поменять метку, а также заполнить метку времени деактивации.
Так это видится?
Но тогда эта в общем целая реализация Alarm Logging!
Вы написали всё верно. Разумно каждой тревоге назначить уникальный идентификатор - он поможет произвести поиск по массиву.
...существенно упрощенная и находящаяся под вашим полным контролем.
Но, конечно, вы можете использовать и стандартный "Alarm Logging" - хотя тогда не очень понятна причина ваших вопросов.
Вложение 77060
Не совсем пойму, где и в какой момент происходит преобразование INT в UINT при использовании библиотеки для СМИ-2М?
Это предупреждение на работу не влияет. У меня таких десяток и происходит в сторонней библиотеке, а не в коде. Если работает, не заморачивайтесь.
Alarm Logging не устраивает, так как его заполнять довольно трудоемко. Помнил, что Вы упоминали о неком другом методе создания журнала тревог. Вот только сейчас дошли руки в нем разобраться.
Но способ не очень простой. Получается нужно делать, то, что по логике вещей должно быть вложено в IDE. Alarm Logging вложен в IDE вопросов нет, но у него недостаток связан с тем, что конфигурирование сообщений/тревог оторвано от реализации объекта и при этом трудоемко модифицируемо!
Если помните, Евгений, Ваш вопрос о том, что в Мастерскаде (3V и 4D) сделано лучше?
Так вот подсистема сообщений, там сделана лучше. Там в объекте создается элемент "Тревога" и когда я копирую объект, я вместе с ним копирую и все его тревоги и не нужно их многократно копировать в Alarm Logging.
В любом случае спасибо за предоставленные материалы! Они интересны и полезны!
Так! Меня твой случай вдохновил, и я написал ПОСТ https://cs-cs.net/codesys-kultura-ko...anicy-massivov
Там про буферЫ (не буферА), про переменные, про границы массивов и циклов и про прочие штуки с памятью ПЛК. Всем читать! =)
Соглашусь.
Но надо принять во внимание, что MasterSCADA - это SCADA, а CODESYS - это IDE для ПЛК.
CODESYS тоже постепенно движется в этом направлении - в свежих версиях плагина визуализации.
См. это видео: https://www.youtube.com/watch?v=WKmYro1lhrU&t=85s
Спасибо за добрые слова. =)
Здравствуйте. Где можно скачать библиотеку visuinputs 4.1.0.0 (System)?
Возникает ошибка об ее отсутствии. А загрузить не может. Хотел загрузить с сайта кодесис, но стоят ограничения. Видел на форуме, что в прошлом году выкладывали ссылку на файлообменник с этой библиотекой. Но сейчас ссылка уже не рабочая
Такая ошибка - косвенный показатель того, что что-то делается не так.
Вы можете связаться завтра утром со мной по телеграм (в подписи) и показать по AnyDesk, что именно у вас происходит - и мы со всем разберемся.
Но если вы считаете, что наличие данной библиотеки является гарантированным вариантом решения ваших проблем - то, пожалуйста, подтвердите это в своем следующем посте и завтра утром я ее выложу.
Я бы, конечно, попробовал ее так установить для начала. Пожалуйста, выложите ее, если не затруднит. Спасибо
Привет.
Подскажите как обратиться к биту в цикле? См. пример.
Вложение 77138
Уважаемые... А нет ли ссылки на полной документацию по Codesys 3.5.17.30... Дело в том , что предстоит разработка и отладка в месте , где очень хрееново обстоят дела с интернетом... Подошнл бы какой-то pdf - без разницы английский или русский... ужо задумался httrack сделать зеркало, но пока остановился