Использую внешний DDE сервер для передачи данных с ком порта в канал. В тестовом проекте при незначительном количестве каналов связь работает, данные передаются. Вставил это решение в рабочий проект и получил следующее: Во входное значение канала связанного с источником DDE- данные приходят а в выходном значении канала стоит ноль . Канал попросту рвется. Никакой трансляции нет . Прокоментируйте поведение системы.
Posted by Nico (Участник № / Member № 5342) on :
эмуляция работы техподдержки ) какой релиз? RTM или профайлер ? канал точно output не в IDE? во входе и в реальном нужное значение? режим != ADVICE ? расширенная обработка не задана(kx,cглаживание и прочее) если канал FLOAT ? канал включен и подключен ? откуда посылатся значение ? в файлах tm6_log.txt и файле профайлера при вкл отладке 0x4000000 записей нет ? 126 атрибут соответствует DDE ? атрибуты 90-92 не работающего канала совпадают с тестовым ? и какой канал рвется ?
Posted by Helic (Участник № / Member № 3274) on :
релиз 6.07.7 ,работаю под профайлером (RТМ куплен) данные с ком порта получаю логгером (http://www.aggsoft.ru/serial-data-logger.htm) В написании драйвера к железяке (http://www.shs-office.ru/products/skud/readers/emm/128/) мне вежливо отказали. В файле прфайлера есть такая запись "(15:32:10) WRN_DDE:Не удается связать службу диспетчера общих баз данных (DSDM) " 126 атрибут соответствует DDE ? -вот это я не пойму . Спасибо за содействие ....
Posted by Helic (Участник № / Member № 3274) on :
В тестовом проекте также имеется запись " WRN_DDE:Не удается связать службу диспетчера общих баз данных (DSDM)" Но данные в каналах связанных с DDE источником передаются.
Posted by Nico (Участник № / Member № 5342) on :
1) WRM_DDE - ошибка инициализации службы NetDDE 2) 126 атрибут это тип-подтип для DDE(13.xx) 3) смотрим в окне компонентов,где хх=режим обмена(8-advice) 4) большинство считывателей можно настроить в режим запрос-ответ и имеют примитивный ASCII протокол в 80 прцентах пишется через канал типа вектор 5) в cp-01 это возможно 6) посылайте команду "к" 7) саму посылку задайта в параметре дополнительно(47 атрибут)через "ASCII;SENDCMD=<строка>;" 8) добавьте CR; или CRLF; что нужно в строку дополнительно 9) подберите типы аргументов куда распихаются принятые символы 10) также для этого прибора можно работать с 16 представлением посылаемой строки 11) основная проблема разобраться с каналом вектор
Posted by Helic (Участник № / Member № 3274) on :
Спасибо за помощь!!!
Posted by Helic (Участник № / Member № 3274) on :
Уважаемый Nico, вся надежда только на Вас...
- создал UniversalPLC_type3_1 - Порт 0х3 - Адрес 0х1 - В строке "Дополнительно" ASCII;SENDCMD=6B;BYTESREAD=10;NREAD=0; - сосдал Call.Vector Параметр= 2 (два байта на запрос) - Создал 12 аргументов USINT ( 10 байтов на ответ и 2 на запрос) - Создал Ком порт №4 Host Variant - 4 и 5 порты виртуальные На 5 висит терминал
После запуска проекта на 5 порту появились команды kkkkkkkkkkkkkkkkkkkkkkk6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B
Насколько я понял логику работы - в аргументах дожны присутствовать байты ответа
Попытался передать в терминале ответ - В аргументах канала Call.Vector нули .
Вопрос: почему в запросе выходят "6B" вместо "k" ?Как получить ответ от считывателя ? И еще не понятно как из аргументов сложить код карты .
Posted by Nico (Участник № / Member № 5342) on :
1) 6.077 2) Call.Vector Параметр=2 не задает 2байта на запрос. Откуда такое? 3) чем смотриться COM порт ? 4) что задано в SENDCMD то и посылается ="6B" 5) насколько помню команда в cp01 должна завершаться CRLF; 6) ASCII - значит строка в ASCII коде SENDCMD=k; 7) BYTESREAD=10 -> cчитать 10 байт 8) Описание протокола есть ? 9) 10 байт в терминале передать это круто, про таймаут порта не забыли? 10) ASCII;CRLF;BYTESREAD=12;SENDCMD=k; 11) аргументов 12 все байтовые
Posted by Helic (Участник № / Member № 3274) on :
Добрый день Nico Вставил Вашу строку . Команды пошли правильно:k k k Протокол считавателя :k - читать данные из буфера, В ответ на эту команду считыватель выдает из буфера код карты 8 байт, два раза код «пробел», код символов OK и код «возврат каретки». Поставил в канал 12 аргументов типа USINT ответа пока не получил.
Posted by Helic (Участник № / Member № 3274) on :
Формат аргументов канала Call.Vector имеют вид :A000[2] :0(0) и не меняются при поднесении карты к считывателю В терменале на команду "к" выдается сообщение 0055E185 OK Пробовал другие типы данных аргументов - результата нет.
Posted by Helic (Участник № / Member № 3274) on :
При Debug=200 в файле профайлера есть строка (11:19:2) ERR_RS:COM:4 err=9 ch=vector[2] Работаю через COM3 . в UniversalPLC_type3_1 порт = 0х2 Прокоментируйте пожалуйста данную ошибку
Posted by Helic (Участник № / Member № 3274) on :
Если это "9, ERR_RT_TIMEOUT – превышен таймаут;" то как от него избавиться
Posted by Helic (Участник № / Member № 3274) on :
Поставил в настройках Com3 Таймаут =5000 все равно выходит (11:33:16) ERR_RS:COM:4 err=9 ch=vector[2]
Posted by Helic (Участник № / Member № 3274) on :
При Debug=200 в файле профайлера есть строка (11:59:5) ERR_RS:COM:3 err=7 ch=vector[2] Если это " ошибка формата" то с чем она связана.
Posted by Nico (Участник № / Member № 5342) on :
1) После отсылки в порт в течении 5 сек должен прийти ответ 2) почему то COM3 то COM4 3) поставили CRLF -> в ответе CRLF иначе err=7 поставили CR -> в ответе CR иначе err=7 4) err=9 не просто таймоут а принято 0 байт 5) не пытайтесь вводить ответ через терминал НЕ получится
Posted by Helic (Участник № / Member № 3274) on :
Nico, черкните на адрес helic_nn@mail.ru пару строк Сейчас в протоколе профайлера ошибок нет . но данных так-же нет
Posted by Nico (Участник № / Member № 5342) on :
.а обмен есть ? .надо смотреть запросы-ответы перехватчиком COM порта .если нет ошибок обмена то какие значения находятся в аргументах канала.call.vector? .измените их через окно компонентов после запроса-ответа изменились ли значения? .перейдите на HEX вариант( убрать ASCII; CRLF; ) SENDCMD= посылка каждый байт в hex(2 символа) 6B0A0D
Posted by Helic (Участник № / Member № 3274) on :
Как подключить перехватсик ком порта. Программный не открывается т.к ком порт занят . в аргументах канала.call.vector ---A000[2]:0(0) сейчас стоит ---ASCII;CRLF;BYTESREAD=13;SENDCMD=k; буду пробовать HEX вариант.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Закройте приложение, которое "сидит" на этом COM-порте, а затем запустите перехватчик.
Перехват вышлите на hotline3@adastra.ru.
Posted by Helic (Участник № / Member № 3274) on :
Уважаемый Nico! Посоветуйте что предпринять в значениях аргументов нули . После ручного изменения значения они сохраняются и не меняются при поднесении карты
k [len=1] OK< [len=12] k [len=1] 00D9FFE2 OK< [len=12] k [len=1] OK< [len=12] k [len=1] 00607217 OK< [len=12] k [len=1] OK< [len=12]
Posted by Helic (Участник № / Member № 3274) on :
Документация: k - читать данные из буфера, В ответ на эту команду считыватель выдает из буфера код карты 8 байт, два раза код «пробел», код символов OK и код «возврат каретки». Получается 14 байт: на ответ на запрос 6 байт( два на команду и 4 OK и код «возврат каретки». Значит создавать надо 20 аргументов типа IN USINT
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Нет. В аргументы сохраняются принимаемые значения. То есть в канале Call.Vector нужно создать 14 однобайтовых аргументов.
Вышлите перехват обмена в HEX-формате.
Posted by Helic (Участник № / Member № 3274) on :
Подскажите пожалуйста строку в поле "Дополнительно" для работы в HEX-формате, а то у меня ерунда какая-то сыпется. Спасибо.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Что значит “ерунда сыплется”? В аргументы значения поступают?
Предположительно команда в строке “Дополнительно” для запроса в HEX-формате должна выглядеть следующим образом : “BYTESREAD=14;SENDCMD=6B0D0A;”. При этом в канале CALL.Vector, к которому привязывается источник нужно создать 14 однобайтовых аргументов.
Без перехвата обмена в HEX-виде, которого мы еще от Вас не получили, сказать более точно затруднительно.
Posted by Helic (Участник № / Member № 3274) on :
Протокол в формате HEX лежит на http://zalil.ru/31572179 Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Отредактируйте строку "Дополнительно" следующим образом “BYTESREAD=14;SENDCMD=6B0D0A;CRCNO;”, чтобы отключить добавление контрольной суммы.
Новый перехват опять вышлите нам.
Posted by Helic (Участник № / Member № 3274) on :
g - читать код карты находящейся в поле считывателя. В ответ на эту команду считыватель выдает из буфера код карты 8 байт, два раза код «пробел», код символов OK и код «возврат каретки»
Posted by Helic (Участник № / Member № 3274) on :
Ранее писалось что обноление значения аргументов идет сзадержкой 5 сек поэтому предлагаю изменить команду с "к" на "g" она не дает пробелов в ответе “BYTESREAD=14;SENDCMD=670D0A;CRCNO” Протокол см. выше Но эагументы все равно равны нулю
Posted by Helic (Участник № / Member № 3274) on :
Все работает. Проект лежит : http://zalil.ru/31573801 Спасибо Nico за идею, стасибо тех. поддержке за участие.
Posted by Nico (Участник № / Member № 5342) on :
Пожалуйста!
[ 22.08.2011, 11:22: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Posted by Helic (Участник № / Member № 3274) on :
Данный механизм обмена в настоящий момент работает только на тестовом проекте .На рабочем проекте где 120 каналов и 3 порта для опроса, обмен в канале "вектор" включается только при посылке 1 в 39 аргумент. Может посоветуете пути решения ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Ситуация не воспроизвелась. При запуске проекта на нашем ПК запросы отправляются в соответствии с заданным циклом пересчета канала CALL.Vector.
Сделайте перехват обмена по COM-портам и вышлите его на hotline3@adastra.ru.
Posted by Helic (Участник № / Member № 3274) on :
Перехват в реальном проекте выполнить невозможно .МРВ зависает .
Posted by Nico (Участник № / Member № 5342) on :
если не делать перехват зависает ? число каналов call.vector на порт (3 порта = 3 канала)? если карточки не было в устройстве то какой ответ от него ? у call.vector не работаюших атрибуты FA,SC,WC чему равны ? смотрим файл tm6_log может есть записи
Posted by Helic (Участник № / Member № 3274) on :
Уважаемый Nico спасибо за поддержку , в настоящий момент получаю код карты через оборудование компании Болид , используя релейную логику . Криво конечно, - но работает стабильно.Проводить дальнейшие эксперименты с каналом вектор планирую позже. В реальном проекте бало два порта с каналом вектор на каждом и один порт -корзина i87р8 .В аргументах каналов было значение - "отсутствие карты" При поднесении карты аргументы значения не меняли , После 1 в 39 аргумент - значения обнавлялись
Posted by Nico (Участник № / Member № 5342) on :
Большая просьба сообщить результаты продолжения эксперемента с вектором и оборудованием доступа сообщить.
[ 30.08.2011, 10:19: Сообщение отредактировал / Message edited by AdAstra Technical Support ]