This is topic modbus in forum Общие вопросы / Common questions at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/45/t/000088.html

Posted by drooha (Участник № / Member № 3306) on :
 
Для записи в контроллер 4-х байтового значения необходима функция 16(10 Hex) Preset Multiple Regs, протокола Modbus RTU.
В TM6 для работы с 4-х байтовыми значениями имеется W_Float(16), которая передаёт значение с плавающей точкой типа out,и естественно с использованием этой функции передается совсем другое число. Подскажите пожалуйста как мне реализовать передачу 4-х байтового значения по средствам тех функций протокола Modbus RTU, которые есть в ТМ6.06?
 
Posted by drooha (Участник № / Member № 3306) on :
 
Считываю данные с контроллера используя протокол ModBus RTU.Возникла такая задача. В контроллере имеется список аварий и событий, а так же список истории. При возникновении кокого либо события или аварии необходимо зачитать эти значения вывести на экран и сохранить в файл.
С выводом на экран вопросов не возникает, а вот как эту информацию сохранить в файл, подскажите пожалуйста.
Для считывания информации с контроллера использую групповой запрос. Релиз TM6.06
С уважением Андрей.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. В чистом Modbus'е нет 4-х байтовых регистров. Нужно передавать два 2-х байтовых значения.

2. Можно сохранять в ОТ. Также есть функция для каналов Call WFile.

Запись в файл (129, WFile) – при посылке в этот атрибут неотрицательного значения V текущие значения аргументов канала записываются в текстовый файл <имя канала>_<N>.dat (N – целая часть V; если N=0, файл имеет имя <имя канала>.dat), каждая строка которого содержит обозначение аргумента и его значение.
 
Posted by drooha (Участник № / Member № 3306) on :
 
А как сообщения сохранять в ОТ ? У меня используется групповой запрос. Данные с контроллера передаются в виде 16-ного представления ASCII. Каждый аргумент группового запроса содержит два символа. Допустим, строку я формирую программно, а вот как её поместить в ОТ?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
То есть, у Вас сообщения в текстовом виде?

Тогда только второй способ. Или через документ.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Да сообщение идёт в текстовом виде. И что бы сформировать строку целиком использую программу. Вот как мне из этой программы записать в файл?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Аргументы любого канала Call можно сохранять в тектовый файл с помощью атрибута (129, WFile). Вы можете создать отдельный канал Call для сообщений, чтобы не было лишних аргументов.
 
Posted by drooha (Участник № / Member № 3306) on :
 
А если, допустим, аргумент канала, который мне нужно записать в файл имеет тип STRING, в файл запишется полностью стрпока или же только 4 символа?
 
Posted by drooha (Участник № / Member № 3306) on :
 
Спасибо, но я уже проверил пишеться только 4 символа.
1. Как записать значение аргумента в файл больше 4-х символов?
2. Как записать значение Даты и времени в файл (можно в любом формате)?

С уважением Андрей.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Привязать к текстовому атрибуту канала
2. Ставите аргументу формат DATE_AND_TIME.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Спасибо с п.1. получилось, а вот с датой ни как не разберусь.
Аргументу поставил тип DATE_AND_TIME, а привязывать его надо? И если да то к чему?
 
Posted by drooha (Участник № / Member № 3306) on :
 
Все разобрался спасибо.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Считываю данные с контроллера по протоколу Modbus RTU. С контроллера считывается примерно около 80 различных параметров. Использую как групповые, так и единичные запросы. Возникла такая ситуация. Проект который я делаю расчитан на 4 контроллера, с каждого контроллера должено считываться столько же параметров. Контроллеры для "общения" с ТМ6.06.2 используют один и тот же порт компьютера. Сейчас работаю пока с одним контроллером ни каких проблем не возникает. Как только в источниках/приемниках другим контроллерам назначаю номер порта, через который должны зачитываться данные, наблюдается резкий спад реактивности системы, данные считывания и записи с контроллера идут примерно 15-20 сек!!. При назначении любого другого порта - все нармально, ни каких проблем не возникает.
Или вот такая ситуация имеется 2 контроллера объеденены в сеть RS485, используется так же протокол ModBusRTU и ТМ6.06.2. Наблюдается такая картина при выключении питания одного из контроллеров резко падает считывание и запись с контроллера всё теже 15-20 сек. В чём может быть проблема? Скорость стоит 19200.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Это нормальная ситуация. Когда нет ответа от контроллера, то непрерывно шлются запросы ему. В Modbus TCP есть настройка на выключение канала в таких случаях. В RTU такого нет. Нужно отслеживать такое программно, и принудительно отключать каналы.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Отключить - это значит послать единицу в атрибут канала (3,С)? Это я пробывал каналы отключаются а ситуация не изменяется. Или же надо отключать как-то компоненты в источниках/приёмниках?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Необходимо отключать все каналы, по которым идет недостоверность.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Вот в том-то и дело что не получается отключить все каналы. Провел такой эксперемент - программно сделал проверку на достоверность канала если канал имеет не достоверность то отключапем его, но отключение не происходит в файл xxx_0.txt пишет ошибки COM1 error 8 Ubat. Именно его (Ubat) я проверяю на достоверность и отключаю в програме.
Интересный факт, что если меняю номер порта компонента в источниках\приёмниках, например, на не существующий, отключение происходит!!. И вот еще, без проверки на достоверность в программе отключение происходит. Получается, что как только я хочу проверить включён у меня контроллер или нет каналы почему-то не отключаются.Что можете посоветовать?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Возможны 2 варианта:
- либо Вы некорректно осуществляется выключение канала,
- либо у Вас к этому устройству обращаются не 1, а больше каналов, и реализуются групповые запросы. В таком случае выключением одного канала обойтись нельзя.

Если не разберетесь, присылайте проект. Посмотрим.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Спасибо я разобрался. Почему то в программе не корректно работала связка "аргумент программы - проверка его условием if..then..end_if". Нужно было ввести лакальную переменную, присвоить ей значение аргумента программы и потом уже проверять условием if..then..end_if". И всё работает. Так и не понял почему именно так нужно.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Имеется 4 контроллера. Обмен с ним идёт по протоколу ModBus RTU. Используются как групповые так и единичные запросы. А ситуация возникла такая, при подключении 2-го и последующик контроллеров резко спала скорость опроса каналов. Значение меняется 1 раз за 5 сек. Хотя время пересчёта стоит 55 ms. Ошибок при обмене не возникает. Как можно выйти из этой ситуации.?
И вот ещё что это за ошибка Wrn_R: COM3 error 10 <имя канала>?
Заранее благадарю.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Попробуйте посмотреть Portmon'ом, что происходит с запросами. Возможно какой-либо контроллер тормозит обмен. Тогда и все остальные будут работать с задержкой.

Ошибка 10 - это ошибка ответа.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Посмотрел Portmon'ом запросы. Данные идут без какой либо задержки. При подключении второго и последующих контроллеров ситуация не изменяется.Скорость обмена пробывал разную 0т 19200 до 57600. Ошибок при передаче не возникает.
Когда каналу в настройках ставлю единица измерения цикл FAST,то значения меняются в соответствии с временем пересчёта (55ms). Как только ставлю цикл CALC значение изменяется примерно 1 раз в 5-7 сек, что не приемлемо к данному каналу. Мне в принципе не нужно, чтобы все каналы отрабатывались так быстро, поэтому я выделил несколько каналов и присвоил им единицу измерения цикл FAST, но и тут тоже возникла проблема. По циклу FAST отрабатывается только определённое количество каналов, примерно 20 каналов (точно не считал) при присвоении последующему каналу цикла FAST, он в нем не отрабатывается, так как значения канала меняется как и в цикле CALC. Не знаю с чем это связанно? В звязи с этой задержкой плохо отрабатываются каманды при передаче в контроллер по нажатию ГЭ кнопка. Приходится нажимать кнопку по несколько раз чтобы отослать команду (посмотрел Portmon'ом) что вообще не приемлеммо. Необходимо на кнопки установить высший приоретет.Как мне быть в данной ситуации? И вообще как избавиться от этой задержки опроса каналов? Это только используются 3 контроллера, хотя планируется до 5 шт. и что будет при подсоединении их просто страшно представить.
Я надеюсь на Вашу помощь.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Пришлите, пожалуйста, Ваш проект и протокол PortMon.
 
Posted by drooha (Участник № / Member № 3306) on :
 
27.07.2009 Отослал Вам проект. Можно узнать примерно когда будут известны результаты.
Суважением Андрей.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Очень не рекомендуем менять настройки приоритетов.

2. У Вас в проекте 90 запросов по Modbus. При этом некоторые из них очень массивные. Скорее всего 5-7 сек для такого количества запросов максимальная скорость обмена.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Да действительно, убрал все приорететы, и у некоторых каналов убрал цикл FAST. Задержка стала 3 сек.

Ну а можно как нибудь, добиться чтобы кнопки отрабатывались быстрее?

И ещё вопрос такой:
У меня сбор информаци идет с 4-х контроллеров. Плата интерфейса (RS485) в компьютере имеет 2 порта. Если два первых контроллера "повесить" на один порт, а другие два на 2-й, скорость обмена увеличится? (Пробывал в своём проекте отключал отработку двух контроллеров, скорость становилась приемлемая)
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да, при использовании 2 COM-портов скорость обмена должна возрасти.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Почему 90 запросов по Modbus занимает такое количество времени не понятно?
Пользуясь всё тойже программой PortMon определил какое количество байтов передает контроллер, получилось около 300 байт для одного контроллера. для 4-х контроллеров получается 1200 байт т.е. минимальная скорость должна быть в реале 9600 бод/с. У меня стоит обмен с контроллером на скорости 57600 бод/с, а это уже 7200 байт.
При помощи ещё одной утилиты делал запросы всё техже 1200 байт с 4-х контроллеров, минимальная задержка составила не более 1 сек!! При посылке в регистр контроллера значения(как бы нажатие на кнопку) запрос отрабатывался также не более 1 сек. Пробывал использовать МРВ постовляемый вместе с контроллерами, такойже результат задержки не наблюдается.
Может быть протокол ModBus RTU как-то не корректно построен в ТМ ?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Статистика запросов по присланному Вами логу.

Length 8: 01 03 00 FC 00 0D 44 3F 325 раз
Length 8: 02 03 00 FC 00 0D 44 0C 325 раз
Length 8: 03 03 00 FC 00 0D 45 DD 325 раз
Length 8: 01 03 01 3A 00 01 A5 FB 81 раз
Length 8: 02 03 00 AE 00 01 E5 D8 38 раз
Length 8: 03 03 0E 02 00 03 A7 01 37 раз

и еще 65 запросов по 19-20 раз.

Так вот первые запросы у Вас забивают канал связи из-за чего остальные каналы не могут обновляться быстрее. Первые каналы Вы поставили в цикл FAST и из-за этого они обрабатываются гораздо чаще чем нужно.

P. S. Не применяйте те настройки, которые приводят к неожиданным для Вас результатам . При этом Вы делаете ошибочные выводы и вводите в заблуждение остальных читателей форума.
 
Posted by drooha (Участник № / Member № 3306) on :
 
Так с этим я уже разобрался (я же писал выше). Все приорететы потоков и циклы каналов поставил как было изначально(Default и CALC). Задержка стала 3 сек. Вот и не понятно почему такая задержка в скорости обмена. При том что некоторые каналы группового запроса отключаются программно а другие отрабатываются каждые 5 сек.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Пришлите лог и обновленный файл проекта.
 
Posted by ilovefiniki (Участник № / Member № 4106) on :
 
Столкнулся с такой проблемой, возможно ли в Trace mode считывать сразу несколько значений за один запрос?
Нашел компонент Rin_Word(4), но он позволяет считать только одно значение, в то время как в описании modbus эта же функция позволяет считать несколько значений, указав адрес 1-го регистра и количество регистров. А тут всегда указывается количество 1 и этот параметр не редактируется.
В случае проводной связи это не столь важно, но при соединении через GSM модем каждый раз звонить чтобы прочитать всего 1 регистр это не приемлемо.
Каким образом в Trace Mode возможно групповое считывание значений за одно модемное соединение?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Воспользуйтесь механизмом

Привязка источника MODBUS чтения или записи

Выполняется соответственно групповое чтение или групповая запись (WORD, FLOAT) при обмене с заданным устройством по MODBUS (в том числе по MODBUS TCP/IP). Устройство и начальный адрес задаются в источнике, количество считываемых/устанавливаемых параметров определяется числом аргументов канала.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Кроме того Trace Mode не разрывает связь после опроса одного регистра. Система опрашивает все регистры, которые необходимо, за один коннект.
 
Posted by ilovefiniki (Участник № / Member № 4106) on :
 
Возникла такая проблема. Считываю 20 регистров по Modbus. Считываю группой через канал CALL. При прямом соединении по RS232 всё нормально. Однако требуется соединяться через gsm модемы. Так вот почему-то именно с каналом CALL номер телефона не отправляется модему. Модему отправляется пустая команда ATD. Если вместо канала CALL привязать источник modbus к каналу float или hex, то номер набирается. Но нужно считывать сразу несколько регистров, поэтому хотелось бы задействовать именно канал CALL.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Вам отправлено обновление, которое должно обеспечить работу по GSM каналами ChGroupReq.
 
Posted by ilovefiniki (Участник № / Member № 4106) on :
 
вопрос немного не по теме. А как обновление устанавливать? Потому как после банальной замены файлов на новые, профайлер вообще перестал запускаться.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Обновление должно действительно осуществляться заменой файлов инструментальной среды.
После замены надо заново сохранить проект для МРВ и запустить его под профайлером.
Я взял релиз 6.06.3, обновил его посланными Вам файлами, сконвертировал и запустил демо-проект. Все работает.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2