![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 16.11.2013
Сообщений: 7
|
![]()
Здравструйте Уважаемые! Помогите советом.
Есть у меня задача получать данные через GSM модем в SCADA систему по протоколу MODBUS RTU. По сути задача состоит в отправке запросов в COM порт и считывание ответов. Непонятная мне штука происходит при работе с COM портом в SCADA. Выполняю следующие действия 1) PORT OPEN 2)COM_WRITE 3) COM_REED Собственно проблема: в программе PortMon видно что после запроса ответ встает впереди запроса.На екране это отражается так:Считываю данные сейчас а отображение идет за прошлое считывание. Объясните в чем тут тайна. При этом имеется родная программа (Она не подходит) в которой все по человечески, запрос потом ответ. В чем может быть причина? Вот логи COM порта при работе со скодой и с родной программой "терминал" Последний раз редактировалось Desperadoes; 16.11.2013 в 18:56. Причина: дополнение |
![]() |
![]() |
![]() |
#2 | |||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
в родной: Цитата:
Цитата:
p.s.: и набор номера ATD должен оканчиваться ";"
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|||
![]() |
![]() |
![]() |
#3 |
Регистрация: 16.11.2013
Сообщений: 7
|
![]()
Спасибо за ответ. Команда "АТ" должна заканчиваться ";" в режиме голосового дозвона в режиме "CSD"соеденения без ";". Пробовал одним пакетов тоже самое. Даже без команда Com_Reed. Смущает то что в конце после записи в COM порт, устанавливается "IRP_MJ_READ"?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
В том, что вы приложили 'запрос одим пакетом.TXT' нет вашей пробы, там просто настройка порта, ни запроса, ни ответа. Показывайте как формируете пакет. Впрочем, по предыдущим логам видно что неправильно формируете.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#5 |
Регистрация: 16.11.2013
Сообщений: 7
|
![]()
Спасибо raxp Вам за помощь! посмотрите пожалуйста новый лог. Мне удалось сформировать запрос одним пакетом. но считывание порта после запроса не происходит. почему то.
|
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Так может воссоздадите одинаковые условия с терминалом? В последнем логе у вас запрос модбас-пакетом сразу после настройки порта:
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
![]() |
![]() |
![]() |
#7 |
Регистрация: 16.11.2013
Сообщений: 7
|
![]()
После долгих испытаний и проверок проведенных мной. Я пришел к выводу что управление портом происходит автоматически. При отключенном оборудовании, комнда СomReed устанавливает SET_DTR. А при включенном оборудовании, после любой посілки в порт автоматически устанавливвается IRP_MJ_READ, и порт переходит на чтение. и при последующей посылке в порт, данные автоматом передаются в буфер чтения. Поэтому я в буфере и вижу на одну строку позже. Но к сожалению я пока не разобрался, возможно как управлять сигналами DTR. чтобы устанавливать сигнал к приему данных после записи в порт. Пока выход такой: я двараза делаю СomReed чтобы буфер затерся новой инфой. Далее буду разбираться. Спасибо raxp за помощь!
|
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#9 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Описание (не влезло):
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 19.11.2013 в 21:23. |
||
![]() |
![]() |
![]() |
#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 |