|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.11.2013, 18:51 | #1 |
Регистрация: 16.11.2013
Сообщений: 7
|
Запрос и ответ из COM порта
Здравструйте Уважаемые! Помогите советом.
Есть у меня задача получать данные через GSM модем в SCADA систему по протоколу MODBUS RTU. По сути задача состоит в отправке запросов в COM порт и считывание ответов. Непонятная мне штука происходит при работе с COM портом в SCADA. Выполняю следующие действия 1) PORT OPEN 2)COM_WRITE 3) COM_REED Собственно проблема: в программе PortMon видно что после запроса ответ встает впереди запроса.На екране это отражается так:Считываю данные сейчас а отображение идет за прошлое считывание. Объясните в чем тут тайна. При этом имеется родная программа (Она не подходит) в которой все по человечески, запрос потом ответ. В чем может быть причина? Вот логи COM порта при работе со скодой и с родной программой "терминал" Последний раз редактировалось Desperadoes; 16.11.2013 в 18:56. Причина: дополнение |
16.11.2013, 23:22 | #2 | |||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
в родной: Цитата:
Цитата:
p.s.: и набор номера ATD должен оканчиваться ";"
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|||
17.11.2013, 00:09 | #3 |
Регистрация: 16.11.2013
Сообщений: 7
|
Спасибо за ответ. Команда "АТ" должна заканчиваться ";" в режиме голосового дозвона в режиме "CSD"соеденения без ";". Пробовал одним пакетов тоже самое. Даже без команда Com_Reed. Смущает то что в конце после записи в COM порт, устанавливается "IRP_MJ_READ"?
|
17.11.2013, 12:21 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
В том, что вы приложили 'запрос одим пакетом.TXT' нет вашей пробы, там просто настройка порта, ни запроса, ни ответа. Показывайте как формируете пакет. Впрочем, по предыдущим логам видно что неправильно формируете.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
17.11.2013, 23:40 | #5 |
Регистрация: 16.11.2013
Сообщений: 7
|
Спасибо raxp Вам за помощь! посмотрите пожалуйста новый лог. Мне удалось сформировать запрос одним пакетом. но считывание порта после запроса не происходит. почему то.
|
18.11.2013, 08:34 | #6 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Так может воссоздадите одинаковые условия с терминалом? В последнем логе у вас запрос модбас-пакетом сразу после настройки порта:
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
19.11.2013, 19:36 | #7 |
Регистрация: 16.11.2013
Сообщений: 7
|
После долгих испытаний и проверок проведенных мной. Я пришел к выводу что управление портом происходит автоматически. При отключенном оборудовании, комнда СomReed устанавливает SET_DTR. А при включенном оборудовании, после любой посілки в порт автоматически устанавливвается IRP_MJ_READ, и порт переходит на чтение. и при последующей посылке в порт, данные автоматом передаются в буфер чтения. Поэтому я в буфере и вижу на одну строку позже. Но к сожалению я пока не разобрался, возможно как управлять сигналами DTR. чтобы устанавливать сигнал к приему данных после записи в порт. Пока выход такой: я двараза делаю СomReed чтобы буфер затерся новой инфой. Далее буду разбираться. Спасибо raxp за помощь!
|
19.11.2013, 21:13 | #8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Если надо управлять сигналом DTR, то им элементарно рулить через EscapeCommFunction() / см. MSDN. Если у вас обертка какая для работы с COM-портом (скажем BComPort или COMM32), то наверняка там есть такое, а нет, сами добавьте одну WinAPI функу после открытия порта.
Наглядный пример руления COM-портом (DTR/RTS) из скрипта VBS, можно даже прямо из батника (я мог бы написать и сразу в Delphi: Код:
Описание API вызова RunGetKeyboardSetcom.VBS: Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
19.11.2013, 21:13 | #9 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Описание (не влезло):
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 19.11.2013 в 21:23. |
||
20.11.2013, 20:26 | #10 |
Регистрация: 16.11.2013
Сообщений: 7
|
Имеется SCADA Citect 7.10 и GSM модем Cinterion MC52i Terminal подключенный к COM порту компютера по RS232. Необходимо считывать данные с удаленного расходомера UVR-011. Обмен данными происходит по протоколу MODBUS RTU. После того как модем дозвонился, и установилась связь модем переходит в режим передачи данных и я ему даю запросы в формате MODBUS RTU.
В самой скаде я конфигурирую порт рис1. В самой скаде есть свой язык програмирования Cicode (Паскалеподобный) там я и пишу свой код используя ихние функции ComOpen, ComWrite, ComReed. Когда к COM порту ничего не подключено, команда ComReed устанавливает (IOCTL_SERIAL_SET_DTR это вижу в PortMon),команда ComWrite отправляет в порт данные и устанавливает IOCTL_SERIAL_GET_COMMSTATUS и ничего не происходит.Но когда к порту подключен модем, команда ComWrite отправляет в порт данные и устанавливает IRP_MJ_READ. не зависимо послал я команду ComReed или нет. А уже если я пошлю команду ComReed, то она мне вычитает данные которые уже есть в буфере. Вот я думаю что после посылки в порт он сам переключает сигналы DTR и переходит в режим приема данных. А в родной программе там в ручную сначала отправляют команду потом принимают данные. Вот я и пытаюсь отделить мух от котлет. Последний раз редактировалось Desperadoes; 20.11.2013 в 20:32. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В ответ на DDE запрос приходит идентификатор данных | Sauber | Общие вопросы Delphi | 1 | 13.11.2013 12:12 |
Посылаем запрос на программу и получаем ответ | vlastelin | PHP | 3 | 22.03.2012 19:48 |
Idhttp ответ на post запрос | andrejjka | Работа с сетью в Delphi | 1 | 30.01.2011 13:41 |
POST Запрос/Ответ | IvanBegin | Работа с сетью в Delphi | 3 | 02.11.2010 16:50 |
скрипт для смс запрос-ответ | elias_p | PHP | 1 | 16.06.2010 16:22 |