|
  |
Modicon M340: Character Mode, Протокол символьного режима передачи данных |
|
|
|
11.2.2013, 17:54
|
Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103

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

|
Пробовал когда-то на Премиуме. С какими-то комм. функциями вобще работали в UNITY PRO? Там особенность с формированием таблицы коммуникационных параметров, надо указать количестов байт для передачи, тайм-ауты. По памяти помню что были проблемы также с формированием правильного адреса (порта ПЛК) и настройкой служебных символов. Но пока нужно добиться, я так понимаю, только мигание лампочки?
|
|
|
|
|
12.2.2013, 19:18
|
Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103

|
Unity pro только начал осваивать, прошёл краткий курс в Шнайдере, но этой темы как раз не касались совсем. А надо связать: устройство с интерфейсом TTY --> преобразователь TTY-RS232 --> Modicon Насчёт настроек таймаутов и прочего - это следующий шаг. Сейчас я хочу видеть, как алгоблоки "read" и "print" сами по себе работают. То есть увидеть байт ошибки чтения-записи, байт включения чтения-записи. То есть главное сейчас - понять, что он вообще что-то пытается отослать, или принять )
|
|
|
|
|
12.2.2013, 21:08
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
Сразу предупреждаю, что симулятор UNITY PRO даже не попытается выполнить эту функцию. Так, на всяк случай сказал. А вобще Вам может быть ещё полезен молодой неофициальный форум ШЕ: http://forum.se-automation.in.ua/index.php
|
|
|
|
|
13.2.2013, 14:53
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
поробовал на демо-стенде, с интерфейсом RS232. Есдинтсвенное, что в символьном режиме 0 принимается как конец строки.
|
|
|
|
|
14.2.2013, 20:41
|
Группа: New
Сообщений: 16
Регистрация: 11.2.2013
Пользователь №: 181103

|
Спасибо! А правильно ли я понимаю, что если мне нужно посылать команды устройству в шестнадцатеричном коде, то тут ничего не выйдет? И тем более, что там есть нули в запросе (см. прикреплённую картинку). Или я неправильно понял?
______.jpg ( 147,49 килобайт )
Кол-во скачиваний: 32
|
|
|
|
|
14.2.2013, 21:18
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
Цитата(x-nikolas @ 14.2.2013, 20:41)  Спасибо! А правильно ли я понимаю, что если мне нужно посылать команды устройству в шестнадцатеричном коде, то тут ничего не выйдет? И тем более, что там есть нули в запросе (см. прикреплённую картинку). Или я неправильно понял? Думаю, что да. Можно ещё у тех. поддержки спросить, может они что-то посоветуют.
|
|
|
|
|
15.2.2013, 17:07
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

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

|
Всем привет! У меня такая же проблема. Только связать контроллер М340 и устройство (электронные весы) вроде бы получилось. А вот получить данные в адекватном виде не получается. весы передают информацию в непрерывном режиме по ASCII-протоколу объем данный 22 байта, два последних байта CR и LF. При использовании в контроллере команд INPUT_CHAR или INPUT_BYTE каждый байт потока поочередно записывается в одну и туже переменную, и не формируется строка или массив данных. Подскажите в чем проблема.
|
|
|
|
|
5.3.2013, 16: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'ом.
|
|
|
|
|
6.3.2013, 9:51
|
Группа: Участники форума
Сообщений: 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 байт. 3. В окошке настроек порта возле галочек CR LF какой-то номер, пытаюсь его изменить галочки с CR LF пропадают. Сначала думал что номер байта остановки, теперь не знаю 4. Что дает галочка Character included?  
|
|
|
|
|
6.3.2013, 10:10
|
Группа: Участники форума
Сообщений: 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 говорит о том, что что-то пришло или сработал тайм-аут
|
|
|
|
|
6.3.2013, 10:49
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
Цитата Вам не нужна периодичность. Размер принимаемого сообщения определяется последними символами "CR" "LF". Для этого нужно активировать Character1=CR Character2=LF и ничего не трогать рядом в кокошках, так как это код ДРУГОГО символа, ОТЛИЧНОГО от CR и LF. К сожалению без периодичности принемаемое сообщение формируется один раз и больше не меняется. И 0-й бит 0-го слова постоянно весит в 1.
Сообщение отредактировал _Tommy_ - 6.3.2013, 10:57
|
|
|
|
|
6.3.2013, 11:12
|
Группа: Участники форума
Сообщений: 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м) Если там (в весах) свой протокол, то одного приёма может быть не достаточно, возможно придётся организовывать полноценный клиент-серверный протокол. По этому приведите описание протокола весов. Будет время - гляну.
|
|
|
|
|
6.3.2013, 11:44
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
В компе нету COM порта. позже возьму дома переходник USB-COM попробую связать весы с компом. Насчет протокола, в документации сказано : "данные, передаются в ASCII-коде, и формируются в сообщения длиной 22 байта"
|
|
|
|
|
6.3.2013, 14:17
|
Группа: Участники форума
Сообщений: 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 протокол, или он "самопальный" ?
|
|
|
|
|
6.3.2013, 14:48
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
Самопальный. Пробуйте отправлять с ПК на М340. Только программу свою переделайте согласно моим рекомендациям.
|
|
|
|
|
6.3.2013, 15:13
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
При передачи с компа на контроллер, программный модуль INPUT_CHAR нормально принемает только сообщение длинной в 16 символов + CR + LF Если хотябы на один символ больше то сообщение на принемается.
|
|
|
|
|
6.3.2013, 15:37
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
Так наверное Вы сделали по 2-му моему примеру. Выходную переменную опишите как String без описания длины и без привязки к локализованной памяти.
|
|
|
|
|
6.3.2013, 15:50
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
У меня выходная переменная так и описана: String, и без привязки к памяти. И все таже проблема. Если задаю длину принемаемых сообщений в String_Length то при превышении 16 символов показывает превышение буфера, код 16#0009. Можно его как-нибудь увеличить?
Нашел размер переменной STRING в General Atributes, стоит 16. Не могу поменять.
|
|
|
|
|
6.3.2013, 16:13
|
Группа: Участники форума
Сообщений: 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
|
|
|
|
|
6.3.2013, 16:18
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
Проканало пока с INPUT_BYTE и массивом byte из 22. Co string-ом пока касяк.
|
|
|
|
|
6.3.2013, 16:20
|
Группа: Участники форума
Сообщений: 531
Регистрация: 10.1.2008
Из: Киев
Пользователь №: 14316

|
Определить переменную как STRING [255] да и по делом ему.
|
|
|
|
|
6.3.2013, 16:30
|
Группа: Участники форума
Сообщений: 23
Регистрация: 5.3.2013
Пользователь №: 184083

|
ЗАРАБОТАЛО!!!!!!!!!!)))))))))) Огромное спасибо за помощь!!!!
Сообщение отредактировал _Tommy_ - 6.3.2013, 16:31
|
|
|
|
|
24.11.2014, 21:17
|
Группа: New
Сообщений: 1
Регистрация: 14.11.2014
Пользователь №: 250915

|
У меня вопрос по этой теме. Есть система с 5 устройств и M340 P2020. На устройстве есть RS-485. На ПЛК тоже есть RS-485. В мануале к прибору написано что нужно делать подключение по 4-проводной схеме. Посылка описана как ASCII. Я добавляю описание протокола.
|
|
|
|
|
10.12.2015, 2:30
|
Группа: Участники форума
Сообщений: 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
|
|
|
|
|
10.12.2015, 7:45
|
Группа: Участники форума
Сообщений: 49
Регистрация: 19.12.2008
Пользователь №: 26930

|
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Последние сообщения Форума
|