![]() |
|
Туплю: нужно в некое устройство послать целое (4 байта) из 1С | ☑ | ||
---|---|---|---|---|
0
Михаил Козлов
02.07.18
✎
09:54
|
Метод (устройства): Послать(строка).
Как сформировать строку для посыла по известному числу? |
|||
1
H A D G E H O G s
02.07.18
✎
09:56
|
||||
2
spectre1978
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) и взять Символ(...) может получиться?
|
|||
5
ptiz
02.07.18
✎
10:18
|
(3) Может так?
Стр = Символ(1) + Символ(2) + Символ(140) + Символ(200) + Символ(255) |
|||
6
lodger
02.07.18
✎
10:22
|
Функция Из_Число_В_XСчисл(Знач Значение, Шаблон)
Результат=""; Основание = СтрДлина(Шаблон); Пока Значение>0 цикл Остат = Значение%Основание; Результат1=Сред(Шаблон,Остат+1,1); Значение = (Значение-Остат)/Основание; Результат = Результат1 + Результат; КонецЦикла; Возврат Результат; КонецФункции © http://catalog.mista.ru/public/70053/ |
|||
7
spectre1978
02.07.18
✎
10:39
|
(6) это все хорошо, но в результате мы получим строку, где биты представляются в виде символов "0" и "1", например. А устройству-то биты нужны, а не символы "0" и "1".
|
|||
8
Михаил Козлов
02.07.18
✎
10:41
|
(6) Переводить в 256-ричную систему, а в качестве шаблона взять символы Unicode?
А уже попробовал так: не уверен, что правильно. |
|||
9
lodger
02.07.18
✎
10:44
|
(7) со слов (0) Метод (устройства): Послать(строка).
|
|||
10
bolobol
02.07.18
✎
10:46
|
(9) Так строка должна быть 4 байта, а в (6) я не вижу... ничего.
|
|||
11
Вафель
02.07.18
✎
10:46
|
А если просто число слать?
|
|||
12
ptiz
02.07.18
✎
10:47
|
(8) Чего переводить? Куда переводить?
Символ(0...255) - это и есть нужный байт |
|||
13
bolobol
02.07.18
✎
10:48
|
(12) Какой символ у числа 256893 ?
|
|||
14
ptiz
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с по ком объекту связь?
|
|||
18
bolobol
02.07.18
✎
11:22
|
(15) Точно порядок байтиков верный?
|
|||
19
Вафель
02.07.18
✎
11:23
|
(15) в 1с юникод - символ - 2 байта
|
|||
20
lodger
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 |
|||
21
lodger
02.07.18
✎
11:25
|
при этом, математикой обычно занимается драйвер.
|
|||
22
polosov
02.07.18
✎
11:26
|
(0)
ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст("моя строка"); ТекстДок.Записать("C:\1.tmp", "windows-1251"); Байтики = Новый ДвоичныеДанные ("C:\1.tmp"); СтрокаСБайтиками = Строка(Байтики); |
|||
23
bolobol
02.07.18
✎
11:31
|
(22) Так то же самое и получится, не?
|
|||
24
Михаил Козлов
02.07.18
✎
11:39
|
(17) Да.
(19) Я знаю, но СтрДлина(Символ(кодСимвола)) возвращает 1, даже если кодСимвола>255. (18) Младший байт - остаток от деления числа на 256, далее аналогично. Предполагаю, что правильно. (20) Здесь плаваю: скачали (не помню откуда) TCPClient и пытаемся достучаться до сервера лабораторных весов. Вроде как нужно побайтно посылать. |
|||
25
ptiz
02.07.18
✎
11:45
|
(22) Криво, и излишне.
Если надо байты записать в файл, то правильный ответ тут v8: v8: Побайтовая запись в файл |
|||
26
bolobol
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)? |
|||
29
bolobol
02.07.18
✎
13:25
|
(28) Так оно хранится, младшим в начале, а вот как передавать - этот вопрос меня насторожил. Просто - помнить об этом, и, если что, попробовать и так и так.
|
|||
30
Михаил Козлов
02.07.18
✎
13:35
|
(29) В "инструкции" порядок BigEndian.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |