Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
 
Добавить ответ в эту темуОткрыть тему
> Modicon M340: Character Mode, Протокол символьного режима передачи данных
x-nikolas
сообщение 11.2.2013, 17:54
Сообщение #1





Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103



Здравствуйте!
Подскажите, пожалуйста, как осуществить передачу данных между Modicon М340 Р342020 и сторонним устройством, используя "Протокол символьного режима передачи данных" (character mode).
Все мануалы на английском и пока не помогают добиться результата. Делаю в языке лестничных диаграмм. Использую функции Print_char и Input_char. Пока без стороннего устройства, просто хочу увидеть, что модикон что-то пытается передать или прочитать. Но на выходах алгоблоков GEST вижу только нули.
Если кто-то уже налаживал такую связь, поделитесь опытом. Как вообще это должно обстоять в режиме запрос-ответ между приборами?
Заранее спасибо!!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 11.2.2013, 18:26
Сообщение #2





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Пробовал когда-то на Премиуме.
С какими-то комм. функциями вобще работали в UNITY PRO? Там особенность с формированием таблицы коммуникационных параметров, надо указать количестов байт для передачи, тайм-ауты. По памяти помню что были проблемы также с формированием правильного адреса (порта ПЛК) и настройкой служебных символов. Но пока нужно добиться, я так понимаю, только мигание лампочки?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
x-nikolas
сообщение 12.2.2013, 19:18
Сообщение #3





Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103



Unity pro только начал осваивать, прошёл краткий курс в Шнайдере, но этой темы как раз не касались совсем.
А надо связать: устройство с интерфейсом TTY --> преобразователь TTY-RS232 --> Modicon
Насчёт настроек таймаутов и прочего - это следующий шаг. Сейчас я хочу видеть, как алгоблоки "read" и "print" сами по себе работают. То есть увидеть байт ошибки чтения-записи, байт включения чтения-записи. То есть главное сейчас - понять, что он вообще что-то пытается отослать, или принять )
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 12.2.2013, 21:08
Сообщение #4





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Сразу предупреждаю, что симулятор UNITY PRO даже не попытается выполнить эту функцию. Так, на всяк случай сказал.
А вобще Вам может быть ещё полезен молодой неофициальный форум ШЕ: http://forum.se-automation.in.ua/index.php
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 13.2.2013, 14:53
Сообщение #5





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



поробовал на демо-стенде, с интерфейсом RS232. Есдинтсвенное, что в символьном режиме 0 принимается как конец строки.
Прикрепленные файлы
Прикрепленный файл  conf_char_mode.png ( 47,91 килобайт ) Кол-во скачиваний: 32
Прикрепленный файл  prog.png ( 23,4 килобайт ) Кол-во скачиваний: 54
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
x-nikolas
сообщение 14.2.2013, 20:41
Сообщение #6





Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103



Спасибо!
А правильно ли я понимаю, что если мне нужно посылать команды устройству в шестнадцатеричном коде, то тут ничего не выйдет? И тем более, что там есть нули в запросе (см. прикреплённую картинку). Или я неправильно понял?
Прикрепленный файл  ______.jpg ( 147,49 килобайт ) Кол-во скачиваний: 32
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 14.2.2013, 21:18
Сообщение #7





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Цитата(x-nikolas @ 14.2.2013, 20:41) *
Спасибо!
А правильно ли я понимаю, что если мне нужно посылать команды устройству в шестнадцатеричном коде, то тут ничего не выйдет? И тем более, что там есть нули в запросе (см. прикреплённую картинку). Или я неправильно понял?

Думаю, что да. Можно ещё у тех. поддержки спросить, может они что-то посоветуют.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 15.2.2013, 17:07
Сообщение #8





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



И это получилось.
Прикрепленные файлы
Прикрепленный файл  char_mode1.png ( 481,4 килобайт ) Кол-во скачиваний: 63
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 5.3.2013, 15:20
Сообщение #9





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



Всем привет!
У меня такая же проблема. Только связать контроллер М340 и устройство (электронные весы) вроде бы получилось. А вот получить данные в адекватном виде не получается. весы передают информацию в непрерывном режиме по ASCII-протоколу объем данный 22 байта, два последних байта CR и LF. При использовании в контроллере команд INPUT_CHAR или INPUT_BYTE каждый байт потока поочередно записывается в одну и туже переменную, и не формируется строка или массив данных.
Подскажите в чем проблема.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 5.3.2013, 16:10
Сообщение #10





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Цитата(_Tommy_ @ 5.3.2013, 15:20) *
Всем привет!
У меня такая же проблема. Только связать контроллер М340 и устройство (электронные весы) вроде бы получилось. А вот получить данные в адекватном виде не получается. весы передают информацию в непрерывном режиме по ASCII-протоколу объем данный 22 байта, два последних байта CR и LF. При использовании в контроллере команд INPUT_CHAR или INPUT_BYTE каждый байт потока поочередно записывается в одну и туже переменную, и не формируется строка или массив данных.
Подскажите в чем проблема.
Нужно настроить порт на приём в символьном режиме не по таймауту (stop on silence) а по "CR LF": Stop on reception -> Character1=CR, Character2=LF. Ловить это надо INPUT_CHAR'ом.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 9:51
Сообщение #11





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



Цитата
Нужно настроить порт на приём в символьном режиме не по таймауту (stop on silence) а по "CR LF": Stop on reception -> Character1=CR, Character2=LF. Ловить это надо INPUT_CHAR'ом.

1. Принемаемое сообщение не постоянного размера. Для формирования периодичности приемки использовал %S6. Может чем другим можно синхронизировать прием?
2. В %MW101 периодически появляется значение 16#0009. Помоему означает что недостаточно места в буфере, хотя по документации написано, что переменная типа STRING формируется размером до 1024 байт. blink.gif
3. В окошке настроек порта возле галочек CR LF какой-то номер, пытаюсь его изменить галочки с CR LF пропадают. Сначала думал что номер байта остановки, теперь не знаю
4. Что дает галочка Character included?


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 10:10
Сообщение #12





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Цитата(_Tommy_ @ 6.3.2013, 9:51) *
1. Принемаемое сообщение не постоянного размера. Для формирования периодичности приемки использовал %S6. Может чем другим можно синхронизировать прием?

Вам не нужна периодичность. Размер принимаемого сообщения определяется последними символами "CR" "LF". Для этого нужно активировать Character1=CR Character2=LF и ничего не трогать рядом в кокошках, так как это код ДРУГОГО символа, ОТЛИЧНОГО от CR и LF.
Цитата(_Tommy_ @ 6.3.2013, 9:51) *
2. В %MW101 периодически появляется значение 16#0009. Помоему означает что недостаточно места в буфере, хотя по документации написано, что переменная типа STRING формируется размером до 1024 байт.

Вы постоянно конвертируете строку в набор байт, а это надо делать только после получения сообщения. Факт получения сообщения можно определить по скидыванию 0-го бита в слове коммуникационных параметров.
Цитата(_Tommy_ @ 6.3.2013, 9:51) *
3. В окошке настроек порта возле галочек CR LF какой-то номер, пытаюсь его изменить галочки с CR LF пропадают. Сначала думал что номер байта остановки, теперь не знаю

Это ASCII код символа конца кадра, если он отличен от CR и LF
Цитата(_Tommy_ @ 6.3.2013, 9:51) *
4. Что дает галочка Character included?

Судя по хелпу, если галочка стоит, то конечные символы (в Вашем случае CR LF) будут в списке принимаемых, иначе туда попадёт только то, что до этих символов (данные кадра)
Вам надо правильно пользоваться коммуникационными функциями. Таблица коммуникационных параметров (4 инта) содержит информацию о:
0-й бит 0-го слова: активность функции, в 1-ке когда функция ждёт окончания обратки, 0 когда функция обработана
- для отправки сообщения, 0 говорит о том, что последовательность байт отправлена
- для приёма, 0 говорит о том, что что-то пришло или сработал тайм-аут
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 10:49
Сообщение #13





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



Цитата
Вам не нужна периодичность. Размер принимаемого сообщения определяется последними символами "CR" "LF". Для этого нужно активировать Character1=CR Character2=LF и ничего не трогать рядом в кокошках, так как это код ДРУГОГО символа, ОТЛИЧНОГО от CR и LF.

К сожалению без периодичности принемаемое сообщение формируется один раз и больше не меняется. И 0-й бит 0-го слова постоянно весит в 1.

Сообщение отредактировал _Tommy_ - 6.3.2013, 10:57
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 11:12
Сообщение #14





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Цитата(_Tommy_ @ 6.3.2013, 10:49) *
К сожалению без периодичности принемаемое сообщение формируется один раз и больше не меняется. И 0-й бит 0-го слова постоянно весит в 1.
Это означает что неправильно настроен приём кадра или ...ничего не приходит.
Сделайте следующую последовательность (важно не лениться!).
1) Подключите к ПК (через COM port) Ваши весы. Попробуйте пообщаться с ними с использованием какой-то программы работы с СОМ-портом, я пользуюсь Compt.exe (дело привычки); думаю Вы многое узнаете о протоколе общения;
2) Подключите к ПК (через COM port) М340. Попробуйте выступить в роли весов: задавайте ту же последовательность, что и весы и смотрите на реакцию ПЛК. Так и отлаживайте программу ПЛК.
3) После этого пробуйте налидить дружбу между М340 и весами.

Ещё пару моментов.
1м) Вы уверены что весы общаются не по протоколу Modbus ASCII;
2м) Если там (в весах) свой протокол, то одного приёма может быть не достаточно, возможно придётся организовывать полноценный клиент-серверный протокол.
По этому приведите описание протокола весов. Будет время - гляну.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 11:44
Сообщение #15





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



В компе нету COM порта. позже возьму дома переходник USB-COM попробую связать весы с компом.
Насчет протокола, в документации сказано : "данные, передаются в ASCII-коде, и формируются в сообщения длиной 22 байта"

Прикрепленные файлы
Прикрепленный файл  CI_2001A.pdf ( 633,38 килобайт ) Кол-во скачиваний: 12
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 14:17
Сообщение #16





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



Вот посылка принимаемая COM портом:
ST,GS,`,[.][.][.][.][.]0.2[.]kg[.][.]

или с HEX кодировкой

S(53)T(54),(2C)G(47)S(53),(2C)`(60)(7F),(2C)[.](20)[.](20)[.](20)[.](20)[.](20)0(30).(2E)2(32)[.](20)k(6B)
g(67)[.](0D)[.](0A)

Незнаю, похоже это на Mudbus ASCII протокол, или он "самопальный" ?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 14:48
Сообщение #17





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Самопальный. Пробуйте отправлять с ПК на М340. Только программу свою переделайте согласно моим рекомендациям.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 15:13
Сообщение #18





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



При передачи с компа на контроллер, программный модуль INPUT_CHAR нормально принемает только сообщение длинной в 16 символов + CR + LF
Если хотябы на один символ больше то сообщение на принемается.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 15:37
Сообщение #19





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Так наверное Вы сделали по 2-му моему примеру.
Выходную переменную опишите как String без описания длины и без привязки к локализованной памяти.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 15:50
Сообщение #20





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



У меня выходная переменная так и описана: String, и без привязки к памяти. И все таже проблема.
Если задаю длину принемаемых сообщений в String_Length то при превышении 16 символов показывает превышение буфера, код 16#0009.
Можно его как-нибудь увеличить?

Нашел размер переменной STRING в General Atributes, стоит 16. Не могу поменять.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 16:13
Сообщение #21





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Цитата("Help UNITY PRO")
The size of the character string can be optimized during the definition of the type using the STRING[<size>] command, <size> being an unsigned integer UINT capable of defining a string of between 1 and 65535 ASCII characters.

Таки больше 16-ти надо определять руцями.

Да, NB при этом=0
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 16:18
Сообщение #22





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



Проканало пока с INPUT_BYTE и массивом byte из 22. Co string-ом пока касяк.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
san
сообщение 6.3.2013, 16:20
Сообщение #23





Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316



Определить переменную как STRING [255] да и по делом ему.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
_Tommy_
сообщение 6.3.2013, 16:30
Сообщение #24





Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083



ЗАРАБОТАЛО!!!!!!!!!!))))))))))
Огромное спасибо за помощь!!!!

Сообщение отредактировал _Tommy_ - 6.3.2013, 16:31
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
vadym_0s
сообщение 24.11.2014, 21:17
Сообщение #25





Группа: New
Сообщений: 1
Регистрация: 14.11.2014
Пользователь №: 250915



У меня вопрос по этой теме. Есть система с 5 устройств и M340 P2020. На устройстве есть RS-485. На ПЛК тоже есть RS-485. В мануале к прибору написано что нужно делать подключение по 4-проводной схеме. Посылка описана как ASCII. Я добавляю описание протокола.
Прикрепленные файлы
Прикрепленный файл  Watchdog_Elite_NTC_Serial_communications_protocol_R5.pdf ( 163,94 килобайт ) Кол-во скачиваний: 6
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Дмитрий_alt
сообщение 10.12.2015, 2:30
Сообщение #26





Группа: Участники форума
Сообщений: 49
Регистрация: 19.12.2008
Пользователь №: 26930



Добрый день коллеги.
У меня вот какой вопрос - стоит задача опросить расходомер US800 (Modbus Rtu).
Связь настроил через блоки READ_Var. На выходе блока массив из 7 переменных. Все получаемые значения во-первых в виде 16#, во-вторых нужно "склеить" переменные определенным образом для получения адекватного результата (поменять местами мл. ст. байты), получить некую структуру, а ее затем перевести в читаемое значение.
Например я считываю с прибора следующие данные:
[1]=3659
[2]=-13633
[3]=-15361
[4]=-1
[5]=20
[6]=-32252
[7]=0
Если перевести в 16#, получим:
[1]=16#0E 4B
[2]=16#CA BF
[3]=16#C3 FF
[4]=16#FF FF
[5]=16#00 14
[6]=16#82 04
[7]=16#00 00
А дальше судя по методичке производителя нужно провернуть следующие преобразования - поменять местами байты и из полученной структуры получить требуемые значения (с учетом коэффициентов)
0e 4b ca bf = -1.580415 (пример мгновенного расхода)
c3 ff ff ff = -61 (накопленные расход)

Я подразумеваю, что нужно воспользоваться блоками ASCII_to_String, затем String перевести уже в числа. Но раньше со строками работать не приходилось, поэтому пока они принимают вид '‚$04' . Подскажите, может уже решали подобную задачу и все делается намного проще? Расходомеры вроде бы распространенные.
Прикладываю инструкцию по работе в сети modbus от производителя

Прикрепленный файл  US800_protokol_rs485.pdf ( 184,32 килобайт ) Кол-во скачиваний: 5
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Дмитрий_alt
сообщение 10.12.2015, 7:45
Сообщение #27





Группа: Участники форума
Сообщений: 49
Регистрация: 19.12.2008
Пользователь №: 26930



Сам себе ответил вот здесь
http://forum.abok.ru/index.php?showtopic=108296
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274



ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi

Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc

Последние сообщения Форума






RSS Текстовая версия Сейчас: 23.7.2025, 20:29
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных