|
Связь с внешним миром Modbus, RS232, RS485, Lon и другое. |
|
Опции темы | Поиск в этой теме |
03.01.2008, 22:30 | #91 |
Новичок
Регистрация: Dec 2007
Адрес: Санкт-Петербург
Сообщения: 17
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
Добавление.
Из текста примера видно, конечно, что я слегка соврал и преобразую таким способом Малого Индейца в Большого. Но, всё равно, практически даром |
04.01.2008, 12:59 | #92 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
Практически, но не даром Модбас так и построен, чтобы вынимать данные напрямую из памяти. Как раз для того, чтобы избежать лишней загрузки процессора. Несколько сотен таких "даровых" преобразований в секунду и немалая часть быстродействия процессора уйдёт буквально впустую...
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
04.01.2008, 16:40 | #93 |
Senior Member
Регистрация: Jan 2006
Сообщения: 172
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
и эти люди еще говорят про лишнюю загрузку! У вас ведь в ядре лоджика в части модбаса и работы с последовательными портами наверное все еще используется куча malloc/free и копирование буферов? да еще и регистры модбаса после записи перечитываются?
|
05.01.2008, 12:47 | #94 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
Нет, уже не используются.
А регистры модбаса перечитываются максимально быстрым способом %) __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
05.01.2008, 17:21 | #95 |
Новичок
Регистрация: Dec 2007
Адрес: Санкт-Петербург
Сообщения: 17
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
То есть как это не используются? Посмотрите внимательно свои файлы smhcom.hpp, smhproto.hpp и др.
То, что мои "преобразования" жутко и бесполезно загружают процессор, то это вы зря написали. По моим прикидкам это "преобразование" отнимает максимум 0.1% от времени на выполнение команды Модбас с ответом. А аналоги этого текста есть и в лоджике. Часто в виде memcpy. Что, тоже впустую тратите быстродействие? Можно было-бы поспорить и о том, что ваш Модбас "так и построен, чтобы вынимать данные напрямую из памяти" и "не терять время на транзитную перекодировку". Но не хочу тратить своё и ваше время. Лучше повторю свой первый вопрос: Как передаются 4-х байтовые числа в SMH? Какой порядок байтов? И ещё. Нельзя-ли посмотреть как реализованы на С++ блоки ввода/вывода long, real в лождике? Хотя-бы куски с "транзитной перекодировкой" (или без неё ). |
10.01.2008, 12:21 | #96 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
smhcom.hpp, smhproto.hpp отражают состояние дел на 2005 год. Более новых не существует, т.к. ядро перестроено по структуре (оптимизация быстродействия) и из него нельзя выделить BIOS.
Насчёт блоков ввода-вывода, то это происходит как правило не чаще 10 раз в секунду. А то и гораздо реже. От сети требуется иногда гораздо большая частота. Передаются так: bool = 1 status (coil/input) int = 1 register (holding/input) long = 2 registers (holding/input) real = 2 registers (holding/input) real = стандартный четырёхбайтный вещественный тип (IEEE 854-1987). Очерёдность регистров прямая, очерёдность байтов внутри регистров обратная: Lo_R(Hi->Lo)->Hi_R(Hi->Lo). __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
10.01.2008, 20:52 | #97 |
Новичок
Регистрация: Dec 2007
Адрес: Санкт-Петербург
Сообщения: 17
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Реализация чтения длинных чисел Modbus
По первой половине вопроса: Вроде-бы, я не то спрашивал. Ну, да ладно.
По второй: спасибо за точный ответ. |
15.01.2008, 20:31 | #98 |
Новичок
Регистрация: Dec 2007
Адрес: Санкт-Петербург
Сообщения: 17
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Modbus: Как ответить с кодом ошибки?
Как SMH отрабатывает команды и ответы с кодом ошибки (исключения)?
Возможно ли из SMH-слейва ответить на запрос, установив в ответе код ошибки (исключения)? Такое может понадобиться, например, когда SMH опрашивает свои неисправные слейвы и транслирует их данные какому-то высшему мастеру. SMH исправен, но ответить надо, что данные недействительны. Два вопроса: 1. Если неисправный слейв сообщит об ошибке (или не ответит вообще), то как SMH сможет распознать, что ответ - это не данные, а исключение? 2. Как SMH может сообщить об этом высшему мастеру? Хотелось-бы транслировать данные ответа слейва наверх. |
16.01.2008, 11:58 | #99 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 170
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Modbus: Как ответить с кодом ошибки?
Запросов с кодом ошибки несуществует. Это исключено на уровне протокола.
Невозможно. Контроллер сам разбирает запрос. В случае некорректного запроса возвращается исключение. Такое не может понадобиться в описываемом вами случае. Как вы представляете такую ситуацию: вышестоящий мастер посылает запрос SMH (именно ему, а не кому-то, это подразумевается топологией сети), а SMH отвечает исключением... И что это исключение означает? То ли слейв "отвалился", то ли запрос некорректен... Как быть? 1) прибавится единица в статистику NoRespons (блок SMH2010(Link). 2) как угодно, но не исключением. Исключением он имеет право ответить только в случае ошибки обмена между собой и мастером. Подобная трансляция на уровне протокола принципиально невозможна в любой сети. Вам придётся сделать контроль слейвов в контроллере (есть разные способы) и выделить переменную для отсылки статистики работы слейвов верхнему уровню. Это единственно правильный путь. Если вы хотите иметь прямой доступ от "вышестоящего мастера" к слейвам, то MODBUS не даёт вам иного выбора, как прямое подключение. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
16.01.2008, 19:51 | #100 |
Senior Member
Регистрация: Jan 2006
Сообщения: 172
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus: Как ответить с кодом ошибки?
Стандарт Modbus, кстати, прямо запрещает подобное использование сообщений об ошибках.По стандарту все сообщения об ошибках должны относиться исключительно к обмену, и не должны использоваться, скажем, для сообщения о выходе передаваемых значений за допустимы пределы и т.д.
|
16.01.2008, 21:10 | #101 | |
Новичок
Регистрация: Dec 2007
Адрес: Санкт-Петербург
Сообщения: 17
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus: Как ответить с кодом ошибки?
Цитата:
В стандарте есть коды исключения (коды ошибки) : 3: ILLEGAL DATA VALUE (нелегальные данные) 4: SLAVE DEVICE FAILURE 5: ACKNOWLEDGE (устройство чем-то занято) 6: SLAVE DEVICE BUSY При этих ошибках с обменом как раз всё в порядке, но слейв по тем или иным причинам не может корректно ответить. У меня проблема в том, что эти ошибки могут возникнуть не на уровне SMH, а в слейве более низкого уровня в сети. И хотелось транслировать эти сообщения от слейва сквозь SMH на самый верхний уровень. Но, Arsie меня отговорил |
|
16.01.2008, 23:26 | #102 |
Senior Member
Регистрация: Jan 2006
Сообщения: 172
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Modbus: Как ответить с кодом ошибки?
Вот про это я и говорил:
03 ILLEGAL DATA VALUE A value contained in the query data field is not an allowable value for server (or slave). This indicates a fault in the structure of the remainder of a complex request, such as that the implied length is incorrect. It specifically does NOT mean that a data item submitted for storage in a register has a value outside the expectation of the application program, since the MODBUS protocol is unaware of the significance of any particular value of any particular register. 05 ACKNOWLEDGE я так понимаю устроййстро занято не просто чем-то, а программированием. (Specialized use in conjunction with programming commands.) Интересно, в стандарте (MODBUS Application Protocol Specification V1.1) упоминаются межсетевые шлюзы (GATEWAY), но нет никаких подробностей |
25.01.2008, 11:00 | #103 |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Кто-нибудь пытался связать между собой SMH2010 и ECL300 через ЕСА-71? Дружат они? Какие могут быть при этом подводные камни?
|
27.01.2008, 17:56 | #104 | |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
|
|
28.01.2008, 08:07 | #105 |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 056
Благодарил(а): 20 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Я пытался снять данные с ECL300 через ECA71, и у меня возникла небольшая проблема. В инструкции написано как при помощи прогрммы Ecat задать адрес контроллеру через порт RS232 на передней панели. При этом говорилось что все модули расширеня надо извлечь. Что я и сделал. ПРи этом программа мне писала что адрес успешно задан, но при попытке считывания ставила в качестве адреса опять 0. Пробовал всякие разные комбинации. При нажатии на кнопку Blink лампочка связи мигала, тоетсь связь с с конроллером была. После этого я попытался считать с данные, установив модуль ECA71 и подключив к компу. Пробовал 2 разных опс-сервера для modbus. Ничего не вышло. Связи с контроллерм небыло. По все видимости адрес так и не задался. Затем скачал с сайта данфоса их бесплатный ОПС-сервер. В нем есть функция поиска контроллера. Чем я и воспользовался. При поиске контроллер обнаружился на 68 адресе. Почему - совершенно непонято. Я пытсля задавать адрес - 1. Псоле чего опять пробовал через передний порт задать адрес, после чго поставть модуль ECA71 и снова выполнить сканирование сети. Результат тот-же контроллер на 68 адресе. Попробовал загрузить из контроллера карут памяти - все поулчилось. Передал данные в СКАДу - все номрально, связь работала (но при помощи данфосовского ОПС-сервера).Решил снова помучить другие ОПС-сервера. Задавал адерс контроллера - 68. Снова ничего не вышло ниодним ОПС-сервером для modbus. Попытался связаться с техподдержкой данфоса. Оказалось что в России только один человек может проконсультироватьпо этому вопросу. Позвонил ему - пообщался. Ответ был примерно вот такой: "Ну я уже не помню, задавал вроде как я адрес контроллеру. А связывался только нашим ОПС-сервером, все работало.". Может кто-нибудь еще пытался работать с модулем ECA 71? Мне все-таки хочется разобраться как задать адрес чтобы все работало.
|
28.01.2008, 08:28 | #106 | |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
|
|
28.01.2008, 13:09 | #107 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
по-моему, как и все опции к ЕСЛ, ЕСА-71 стоит больше SMH, поэтому наверно немного "кривой" тандем получится . Так сколько он стоит, Макс вы в курсе ?
|
28.01.2008, 13:43 | #108 |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 056
Благодарил(а): 20 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
че-то около 12 т.р.... А вообще розничные цены есть на сайте у данфоса. Мне выбирать не приходилось.... В тепловом пункте уже стоял контроллер ECL-300, который надо было включить в систему диспетчеризации здания. Дешевле автоматизацию теплового пунтка делать на SMH2010... к тому же им можно управлять 4-мя приводами клапанов (если не использовтаь слейвы) а ECL-300 может управлять только двумя... и к тому же с дискретным управлением.
|
28.01.2008, 13:44 | #109 | ||
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
Цитата:
|
||
28.01.2008, 17:47 | #110 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Ща Арсений обидется
|
28.01.2008, 20:06 | #111 | |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
|
|
26.02.2008, 17:29 | #112 |
Senior Member
Регистрация: Jan 2006
Сообщения: 172
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Как у вас успехи с диспетчеризацией? Удалось заставить работать ECA 71? У нас возникла полностью аналогичная задача, но есть сомнения что SMH будет достаточно.
|
27.02.2008, 07:37 | #113 |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 056
Благодарил(а): 20 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Как я говорил у меня возникла проблема с заданием адреса контроллеру. Если у вас все получится то должно быть нормально. (Опять же должно быть). Со своим контроллером я ковырялся несколько дней, но так ничего и не вышло. Удлалось прочитать данные только данфосовским опс сервером. Я бы советовал купить ECA71 и попробовать. Раньше вас вряд-ли кто-нибудь попробует, потому что даже техподдержка в России толком в этом не разбирается.
|
27.02.2008, 14:46 | #114 |
Новичок
Регистрация: Jan 2008
Сообщения: 7
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Добрый день.
Ситуация такая: есть master & slave. К слэйву подключен, скажем, датчик температуры и температура должна передаваться на мастер. Однако передачи нет. В чем может быть причина? |
27.02.2008, 16:01 | #115 |
Senior Member
Регистрация: Jun 2007
Адрес: Tyumen
Сообщения: 2 056
Благодарил(а): 20 раз(а)
Поблагодарили:
22 раз(а) в 22 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Ну вы и написали. А есть вообще связь между мастером и слейвом? При чин может быть куча. Нет физической связи между матсером и слейвом, они могут работать на разных скоростях, быть неправильно запрограммированными, так как не во всех картах памяти одинково обознчают адреса модбаса. К примеру если взять карту памяти для модбаса у контроллера ПВУ GOLD то у него для того чтобы работала связь надо к адресу прибавить 1 и перевести получившееся в шестнадцатиричную систему.
|
27.02.2008, 20:12 | #116 | |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
|
|
24.03.2008, 12:52 | #117 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Народ, прошу высказать свои мысли (или исходя из опыта) по поводу сбора данным АРМ-мом из сети, состоящей из 7 SMH. На каждом слейве "крутятся" порядка 50 переменных, их которых 10-15 аналогов, остальные дискреты. Соотношение R и R/W примерно 60 на 40% (т.е. 60 процентов только читаются). Как считаете уважаемые, будет ли сеть работать стабильно на 115200, если ее общая длина около 70-100 метров. Спасибо.
|
24.03.2008, 19:50 | #118 | |
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
Максимальную на текущий момент конфигурацию (для нас), запускал год назад: 22 SMH-рабов опрашиваются SMH-хозяином, в сети туда-сюда гуляет около 150 переменных типа integer. Общая протяжённость RS-485 - х.з., оценочно - далеко за километр, накидано как попало (топология - ветвистое дерево со звёздами на ветвях). Правда, на 115200, я даже не пробовал запускать. На 19200 (я с этой скорости начал и на ней и остановился) работает удовлетворительно. Сейчас этот объект дорабатываем (диспетчеризируем теплопункты, автоматизированные также на SMH), в ближайшие дни (по планам - до конца недели) в сети появятся ещё 3 SMH-раба, около 30 дополнительных переменных и около 100м витой пары, подключенной к одной из "ветвей дерева". Если Вам интересно, напишу о результатах. Последний раз редактировалось SMH, 24.03.2008 в 19:52 |
|
25.03.2008, 13:03 | #119 |
Senior Member
Регистрация: Feb 2007
Сообщения: 174
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Конечно интересно.
Упаковать в интеггеры я не могу ибо скада потом не может их назад "расколбасить" (бесплатная ) Как сильно тормозит работу контроллера обмен с ним по МОДБАСу ? Или пофиг если ТИК в норме ? |
25.03.2008, 16:31 | #120 | ||
НЕ сотрудник Segnetics
Регистрация: Feb 2006
Сообщения: 540
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
Ответ: Диспетчеризация, OPC-сервер и modbus
Цитата:
Цитата:
|
||