Вход | Регистрация


1С:Предприятие :: Математика и алгоритмы

Туплю: нужно в некое устройство послать целое (4 байта) из 1С

Туплю: нужно в некое устройство послать целое (4 байта) из 1С
Я
   Михаил Козлов
 
02.07.18 - 09:54
Метод (устройства): Послать(строка).
Как сформировать строку для посыла по известному числу?
 
 
   H A D G E H O G s
 
1 - 02.07.18 - 09:56
Вот здесь можно заявку составить

https://www.pochta.ru/parcels
   spectre1978
 
2 - 02.07.18 - 09:58
возьмите дельфю и не мучьтесь :) Ну а если серьезно - 1С вроде как с недавних пор научилась с бинарями работать...
   Михаил Козлов
 
3 - 02.07.18 - 10:04
(2) Как эти бинарные данные в 1С сформировать?
   Михаил Козлов
 
4 - 02.07.18 - 10:14
Если число "разложить" на "байты" (младший - остаток от деления на 256 и далее по степеням 2-ки: 8,16,24,32) и взять Символ(...) может получиться?
   ptiz
 
5 - 02.07.18 - 10:18
(3) Может так?
Стр = Символ(1) + Символ(2) + Символ(140)  + Символ(200) + Символ(255)
   lodger
 
6 - 02.07.18 - 10:22
Функция Из_Число_В_XСчисл(Знач Значение, Шаблон)
    Результат="";
    Основание = СтрДлина(Шаблон);
    Пока Значение>0 цикл
        Остат = Значение%Основание;
        Результат1=Сред(Шаблон,Остат+1,1);
        Значение = (Значение-Остат)/Основание;
        Результат = Результат1 + Результат;
    КонецЦикла;
    Возврат Результат;
КонецФункции
© http://catalog.mista.ru/public/70053/
   spectre1978
 
7 - 02.07.18 - 10:39
(6) это все хорошо, но в результате мы получим строку, где биты представляются в виде символов "0" и "1", например. А устройству-то биты нужны, а не символы "0" и "1".
   Михаил Козлов
 
8 - 02.07.18 - 10:41
(6) Переводить в 256-ричную систему, а в качестве шаблона взять символы Unicode?
А уже попробовал так: не уверен, что правильно.
   lodger
 
9 - 02.07.18 - 10:44
(7) со слов (0) Метод (устройства): Послать(строка).
   bolobol
 
10 - 02.07.18 - 10:46
(9) Так строка должна быть 4 байта, а в (6) я не вижу... ничего.
 
 Рекламное место пустует
   Вафель
 
11 - 02.07.18 - 10:46
А если просто число слать?
   ptiz
 
12 - 02.07.18 - 10:47
(8) Чего переводить? Куда переводить?
Символ(0...255) - это и есть нужный байт
   bolobol
 
13 - 02.07.18 - 10:48
(12) Какой символ у числа 256893 ?
   ptiz
 
14 - 02.07.18 - 10:53
(13) Байт принимает значения от 0 до 255. Автору надо передать 4 байта. Вот пусть и передает.
   Михаил Козлов
 
15 - 02.07.18 - 11:06
(12) 8 относилось к предложению (6)
(14) Послать нужно строку 4 байта, т.е. 4 символа. Если я Вас правильно понял, формировать эту строку можно через Символ(...), подставляя в качестве параметра "нужное" число.
В (8) я написал, что так и делал, но не уверен.
Например, для числа 11023 "побайтное" разложение = (0,0,43,15). Для 256893 - (0,3,235,125), строка = " ë}".
   Михаил Козлов
 
16 - 02.07.18 - 11:08
(11) Попробовать можно: не уверен, что будет 4 байта.
   Вафель
 
17 - 02.07.18 - 11:20
(16) с устройством от 1с по ком объекту связь?
   bolobol
 
18 - 02.07.18 - 11:22
(15) Точно порядок байтиков верный?
   Вафель
 
19 - 02.07.18 - 11:23
(15) в 1с юникод - символ - 2 байта
   lodger
 
20 - 02.07.18 - 11:25
(16) вы путаетесь между матчастью и практическим применением методов драйвера.
матчасть можно подтянуть здесь: https://www.commfront.com/pages/3-easy-steps-to-understand-and-control-your-rs232-devices

пример: надо подять строку "ATI1", и как это выглядит в разных счислениях, которые вообще могут быть доступны при работе по COM.
ASCII command example: ATI1 to query Modem manufacturer's information. (Note: are the control codes of Carriage Return and Line Feed).

Convert the command string above to Hexadecimal and it becomes: 41 54 49 31 0D 0A

Convert the command string above to Decimal and it becomes: 065 084 073 049 013 010

Convert the command string above to Octal and it becomes: 101 124 111 061 015 012

Convert the command string above to Binary and it becomes: 01000001 01010100 01001001 00110001 00001101 00001010
   lodger
 
21 - 02.07.18 - 11:25
при этом, математикой обычно занимается драйвер.
   polosov
 
22 - 02.07.18 - 11:26
(0)

ТекстДок = Новый ТекстовыйДокумент;
    ТекстДок.УстановитьТекст("моя строка");
    ТекстДок.Записать("C:\1.tmp", "windows-1251");
    Байтики = Новый ДвоичныеДанные ("C:\1.tmp");
    СтрокаСБайтиками = Строка(Байтики);
   bolobol
 
23 - 02.07.18 - 11:31
(22) Так то же самое и получится, не?
   Михаил Козлов
 
24 - 02.07.18 - 11:39
(17) Да.
(19) Я знаю, но СтрДлина(Символ(кодСимвола)) возвращает 1, даже если кодСимвола>255.
(18) Младший байт - остаток от деления числа на 256, далее аналогично. Предполагаю, что правильно.
(20) Здесь плаваю: скачали (не помню откуда) TCPClient и пытаемся достучаться до сервера лабораторных весов. Вроде как нужно побайтно посылать.
   ptiz
 
25 - 02.07.18 - 11:45
(22) Криво, и излишне.
Если надо байты записать в файл, то правильный ответ тут
v8: v8: Побайтовая запись в файл
   bolobol
 
26 - 02.07.18 - 12:37
(24) Я про порядок байт обратил внимание. А не про вычисление младшего байта спрашивал. И младший байт - должен быть в начале, для архитектуры х86
   Вафель
 
27 - 02.07.18 - 12:44
(24) тебе нужно массив байт послать? ибо числа передаются по ком-объектам как обычные числа
   Михаил Козлов
 
28 - 02.07.18 - 13:00
(27) В "инструкции" к серверу весов написано, что перед передачей "команды" (текст) нужно передать длину этого текста в виде целого числа (4 байта). Не знаю, сработает ли в 1С Послать(число в 1С).
(25) Младший в начале? Т.е. число 255 нужно передавать как (255,0,0,0) а не (0,0,0,255)?
   bolobol
 
29 - 02.07.18 - 13:25
(28) Так оно хранится, младшим в начале, а вот как передавать - этот вопрос меня насторожил. Просто - помнить об этом, и, если что, попробовать и так и так.
   Михаил Козлов
 
30 - 02.07.18 - 13:35
(29) В "инструкции" порядок BigEndian.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует