FreeLSD Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Возникла такая вот потребность. Работаю с устройством, протокол которого описан в двоичном виде. Телнет же и все компоненты, которые я знаю, возвращают символьную строку. Если её просто перевести в двоичную форму (через коды символов), результат получается, мягко говоря, не совсем соответствующий описанию. При этом видно, что частично всё же получается то, что ожидал, частично же - какая-то пурга. Хочу увидеть, что же говорит система сразу в двоичном виде, потому что подозреваю "испорченный телефон" при преобразованиях туда-обратно. Вот только не могу найти, каким способом это сделать. Задача - подключиться на нужный адрес/порт, отправить туда определённое значение и получить двоичный ответ. Гугление дает массу вопросов на эту тему и что-то совсем не даёт ответов :unsure: То ли я не так спрашиваю, то ли действительно проблема... Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Может все таки шеснадцатиричный? Надо написать программу работающую с сокетами. Простейший вариант на php. Или возможноhttp://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter3.html#using-rawprot Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Не, там именно двоичный и протокол описан на уровне битов. Приходят, естессно, байты. Причем и телнет, и компонента, которой я пользуют, эти байты показывает в виде строки. Вот последний пример: компонента говорит, что пришло 5 байт. И показывает мне строку из 10 символов! То есть, видимо, значение этих байтов не позволяет нормально преобразовать их в символьную строку. Само собой, если я начинаю перегонять их обратно в двоичный код, получаю фигню. Мне бы увидеть один в один что пришло.P.S. использую mswinsck.ocx. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Или возможноhttp://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter3.html#using-rawprot Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Проблема в том что байты преобразовываются в символы с помощью таблицы соответствия Win-1251, koi-8 типа того. Байты они не читаемы. Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 (изменено) А, нет, погорячился. Со строкой все правильно, только от этого не легче.Описание протокола: приходит 5 байт. Компонента говорит, что приходит 5 байт.Показывает строку "Ђ› "Получаю коды символов: 1026 4 8250 0 0Перевожу их в двоичный вид: 10000000010 00000100 10000000111010 00000000 00000000Ну и какие же это байты? Длина должна быть 40 бит.Кстати, в строке не все символы отобразились как есть, браузер, похоже, не умеет. Изменено 21 ноября, 2016 пользователем FreeLSD Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Проблема в том что байты преобразовываются в символы с помощью таблицы соответствияЯ понимаю, что проблема именно в этом. Но я не могу заставить 1С читать коды символов в чем-то кроме юникода. И вообще не представляю, как их выдает компонента. Поэтому мне бы избежать всяких преобразований вообще. Понятно, что можно взять и наваять что-то самому. Но зачем изобретать велосипед, наверняка же такая задача возникала уже в истории человечества :) Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Дюже древняя утилита. Использовaние клиента Telnet в качестве транспорта для бинарных файлов невозможно из-за спeцифики протокола (более подробно в RFC854 про ). Поэтому без потерь мoжно передавать файлы, содержащие стандартный набор ASCII-символов.https://xakep.ru/2013/11/25/61645/ Т.е. устройство сетевое и у нее есть какой-то открытый порт ? Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Можно расписать максимально подробно, что куда передаётся чем принимается и как обрабатывается. Хорошо заданный вопрос уже 50% ответа Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Ну вот то, что я знаю/понимаю:1. Устройство (весы). Имеет IP-адрес, слушает на определенном порту. Принимает запрос и возвращает 5 байт. 2. В этих байтах имеют значение отдельные биты (так организован протокол), к тому же часть данных передается в обратном порядке (сначала второй байт, потом первый). 3. Компонента mswinsck.ocx, получив эти 5 байт, выдает их в виде строки (т.е. байты уже преобразованы в символы). Попытка преобразовать и обратно хотя бы в 16ричный код дает иногда нормальный, иногда странный результат. Putty видит все как надо, хоть и в 16ричном, а не двоичном виде. Так что проблема все-таки в преобразовании значения в символ. Вывод: с используемой компонентой вряд ли можно добиться нормального результата, хотя бы потому, что принципы "озвучивания" ею байтов не ясны. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Можно послушать этот аппарат с помощью Wireshark. Вот пример - видим в телнет 4 символа, а в реальности их 7. Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Собственно, послушать уже получилось. Видно, что даже в шестнадцатиричном виде там все норм. Проблема начинается в том месте, когда компонента пытается сделать из этого строку. Поэтому теперь вопрос стоит так: а неужели вообще никому никогда не нужно было видеть "приход" как есть, без дурацкого перевода? Потому что найти такую компоненту пока не удалось, хоть сам садись пиши. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Rumlin Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 FreeLSD, а как он управляющие символы в строку слепит? https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B Цитата Я детей вообще то боюсь, милостивый мой государь, - шумливы, жестоки и себялюбивы, а коли дети правят державой? ©Юлиан Семёнов Ничего не делается к лучшему © Борис РаушенбахЛюди, люди — это самое главное. Люди дороже даже денег. © Ф.М. Достоевский Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Там мне строка и не нужна. Мне нужен сам байт, как есть, пусть как Putty делает, в шестнадцатиричном виде хотя бы. Вот компонента для COM порта, популярная у 1сников, это умеет. А для TCP - ничего пока не нашел. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Пытаюсь понять логику, по которой образуется строка.Пример: Putty показывает байт A8. mswinsck передает в 1С его в виде буквы "Ё". 1С определяет, что код этого символа - 1025 (десятичный). Но это не соответствует шестнадцатиричному! Вот и возникает проблема. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 А как компонента работает? Это activex библиотека? Она подключается к 1с? И какие есть варианты её заменить? Как выглядит запрос? Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
Пэтро Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Какие способы приёма данных поддерживает 1с? Http? Цитата Подключаем Оптический гигабитный интернет в Симферополе и районе.+79787647406http://lugovoe.su Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Как работает компонента, понятия не имею )Это ActiveX бибилиотека, часть Visual Studio, насколько я знаю. Файл mswinsck.ocx. 1Сники часто его используют, посколльсу стандартный, легкодоступный и легкоприменяемый.К 1С подключается как обычный ActiveX компонент.До сих пор проблем с ней не было, это первый случай. Да и то не факт, что именно с ней проблема, возможно, проблема в разных таблицах символов.На что заменить, не знаю, вот и ищу.1С поддерживает кучу способов обмена, вот только TCP/IP среди них почему-то и нет. Почему и приходится рассчитывать на внешние компоненты. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 hex A8 = dec 168Набираю ALT+168, получаю "¨". Почему-то компонента передает "Ё" Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Возник вопрос: а если там действительно разные таблицы кодирования?В Юникоде символ с кодом A8 - это http://www.fileformat.info/info/unicode/char/a8/index.htm.Можно ли как-то быстро определить, в какой существующей таблице этот код соответствует символу http://www.fileformat.info/info/unicode/char/0401/index.htm? Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Всё правильно Вы написали - ALT + 0168в английской раскладке - "¨". в русской - "Ё"То есть один и тот же код можно представить по-разному,а способ представления (в данном случае) зависит от свойств шрифта компонента отображения. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
FreeLSD Опубликовано 21 ноября, 2016 Автор Жалоба Поделиться Опубликовано 21 ноября, 2016 Ну тут речь-то не о визуальном представлении. Компонента передает строку, сформированную символами, полученными из определенных кодов. 1С получает эту строку и вот тут начинается интересное. Насколько я понимаю, строка передается в виде кодов символов. Символ с кодом 168, который в английской раскладке = "¨", отображается в 1С как "Ё". Но меня-то интересуют именно коды. И вот код этого символа, когда я его получаю, равен уже 1025. Более того, если я прямо в отладчике 1С пишу ALT + 0168, вижу "¨", если ALT + 1025 - "Ё". Получается, компонента виновата? Но она не знает ничего о раскладках, а 1С использует ту же системную. Цитата Или что-то случилось, или одно из двух. Ссылка на комментарий Поделиться на другие сайты Поделиться
Gennadyi Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Не надо переводить полученный байт в символ, надо использовать кодовое представление этого байта. В 7-ми битной таблице ASCII первые два столбца - неотображаемые управляющие коды ! Таблица ASCII создавалась для обмена информацией по телетайпу. В набор были включены непечатаемые символы, используемые как команды для управления устройством телетайп Цитата Не любо - не слушай, а врать не мешай !"Величайшей ошибкой было бы думать, " © В. И. ЛЕНИН ПСС том 34, стр. 244.", было бы величайшей ошибкой думать," © В. И. ЛЕНИН ПСС том 42, стр. 74."поругаешь власть — попадаешь под закон об оскорблении, похвалишь власть — попадаешь под закон о фейковых новостях" © В. Матвиенко Ссылка на комментарий Поделиться на другие сайты Поделиться
CIBAS Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Напишите немножко отладочного кода:не берите от компоненты строку из N байт, а примите N однобайтных переменных, которые объявите некак строковые, а как числовые и посмотрите что получили. Не будучи знакомым с языком, на котором Вы всё это пишете,не могу выразиться более точно ..... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
urix Опубликовано 21 ноября, 2016 Жалоба Поделиться Опубликовано 21 ноября, 2016 Ну тут речь-то не о визуальном представлении. Компонента передает строку, сформированную символами, полученными из определенных кодов. 1С получает эту строку и вот тут начинается интересное. Насколько я понимаю, строка передается в виде кодов символов. Символ с кодом 168, который в английской раскладке = "¨", отображается в 1С как "Ё". Но меня-то интересуют именно коды. И вот код этого символа, когда я его получаю, равен уже 1025. Более того, если я прямо в отладчике 1С пишу ALT + 0168, вижу "¨", если ALT + 1025 - "Ё". Получается, компонента виновата? Но она не знает ничего о раскладках, а 1С использует ту же системную.168 - Кодировка Windows ANSI (cyr) однобайтовая - Ё. 0х401 = 1025(дес) Юникод двухбайтовый - Ё. Нужна таблица преобразования ANSI -> Unicode? вернее, наоборот, из Unicode -> ANSI -> (byte-code)? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.