powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Протокол обмена
5 сообщений из 5, страница 1 из 1
Протокол обмена
    #35467206
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые старейшины, не могли вы мне помочь разобраться с "протоколом обмена" с прибором...
Вот документация:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
Текущие параметры.
Дата и время: 5байт в двоично-десятичном виде (1байт – год, 2байт – месяц, 3байт – день, 4байт – часы, 5байт - минуты) ОЗУ по адресу 036A.
Наработка в часах: 2байта в HEX виде. ОЗУ по адресу 020А
Рабочий объем газа: 4байта в float виде. ОЗУ по адресу  0210 
Приведенный объем газа: 4байта в float виде. ОЗУ по адресу  0214 
Давление газа: 4байта в float виде. ОЗУ по адресу  0250 
Температура газа: 4байта в float виде. ОЗУ по адресу 024С
Фактор сжимаемости газа: 4байта в float виде. ОЗУ по адресу 025С
Рабочий расход газа: 4байта в float виде. ОЗУ по адресу  0298 
Приведенный расход газа: 4байта в float виде. ОЗУ по адресу 029С
Регистр нештатных ситуаций:
По адресу  0222  в ОЗУ  2  байта (слово)
По битам:
 1  бит – Er  0300 		 11  бит – Er  0001 
 2  бит – Er  0100 		 13  бит – Er  0010 
 4  бит – Er  0200 		 14  бит – Er  0030 
 5  бит – Er  2000 		 15  бит – Er  0020 
 6  бит – Er  1000 		 16  бит – Er  0003 
 7  бит – Er  3000 
 8  бит – Er  4000 
 9  бит – Er  0002 
По адресу  0207  в ОЗУ  1  байта 
По битам:
3бит:    0  – принтера нет в системе
	 1  – принтер есть
4бит:    0  – принтер не готов
	 1  – принтер готов


Формат команд
Команда  0  – Вызов – формат #N0(CR)
Где -   # - идентификатор (признак) команды (=23h =35d)
	N – ASCII – код сетевого адреса ( 0 , 1 , 2 ,…, 9 ,A,B,C,D,E,F)
	 0  - =30h =48d – код команды ВЫЗОВ
	(СR) - =13d (символ окончания строки)
В ответ на прием команды ( 0 ) БК присылает - %N0OKEY(CR)
Если команда не идентифицирована (не понята или не принята) ответа не будет!

Команда  1    - Вход в основное меню  – формат #N1(CR)
В ответ на прием команды ( 1 ) БК присылает - %N1OKEY(CR)

Команда  2    - Открытие текущего режима основного меню – формат #N2(CR)
В ответ на прием команды ( 2 ) БК присылает - %N2OKEY(CR)

Команда  3    - Холодный рестарт – формат #N3(CR)
В ответ на прием команды ( 3 ) БК присылает - %N3OKEY(CR)

Команда  4    - Теплый рестарт – формат #N4(CR)
В ответ на прием команды ( 4 ) БК присылает - %N4OKEY(CR)

Команда ### - Полный рестарт – формат ###(CR)
В ответ на прием команды (###) БК присылает - %N#OKEY(CR)

Длина последующих команд  18  байт, включая байт (CR).

Команда  5  - Чтение ОЗУ (от BBBB до CCCC)
Формат   #N5BBBBCCCC0000KC(CR)
Где	ВВВВ – адрес откуда будем читать (двоично-шеснадцетиричный вид)
	СССС – адрес докуда будем читать (исключительно)
	 0000  – пустые (обязательные)  4  –ре байта (« 0 »=30h, =48d)
	КС – байт контрольной суммы передаваемой команды ( 2  байта ASCII – вида)
% XOR N XOR  5  XOR B XOR …XOR C …XOR  0  XOR  0 
В ОТВЕТ НА ПРИЕМ КОМАНДЫ ( 5 ) БК ПРИСЫЛАЕТ - %N5OKEY(CR), В ПОДТВЕРЖДЕНИИ ПРИЕМА КОМАНДЫ, А ЗАТЕМ НАЧИНАЕТ ТРАНСЛИРОВАТЬ СОДЕРЖИМОЕ ОЗУ ПАКЕТАМИ В ВИДЕ 
%N5Б1Б2……Б15,Б16,КС,(CR) – длина  22  байта.
Где - % - идентификатор (признак) данных
Б1Б2 – ASCII – коды содержимого  1 -го байта читаемого ОЗУ в формате –
	Б1 – ASCII – код старшей тетрады байта
	Б2 – ASCII – код младшей тетрады байта
Б15Б16 – ASCII – коды содержимого последнего байта в пакете читаемого в ОЗУ.
КС – байт контрольной суммы передаваемого пакета байтов ОЗУ ( 2  байта ASCII - вида)

% XOR N XOR  5  XOR Б1 XOR Б2 XOR …… XOR Б16

В ответ на команду чтение всегда присылается минимум  1  пакет ( 8  байт).


Расположение числа в памяти

Старший байт мантиссы
 Характеристика
Младший байт мантиссы
Средний байт мантиссы
 X(s)
X(s+ 1 )
X(s+ 2 )
X(s+ 3 )


Преобразование во float вид.

if X(s) >  127  then znak =  1 
X(s)=X(s) or  128 
Flt= 2 ^(X(s+ 1 )- 127 )*(X(s)* 2 ^ 16 +X(s+ 3 )* 2 ^ 8 +X(s+ 2 ))/ 2 ^ 24 
If znak= 1  then flt= - flt




С помошью родной проги прибора -
При отправке команды: #150248024F000089.,
получаю ответ: %15498CE5AE7E8D8EA021.
так вот я не понимаю
1) откуда такой адрес памяти (0248 - 024F)??? Может это из-за "двоично-шеснадцетиричный вид" см. команду 5
2) как перевести 498CE5AE7E8D8EA021 в нормальные десятичные данные???
...
Рейтинг: 0 / 0
Протокол обмена
    #35467308
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilhom_uz
1) откуда такой адрес памяти (0248 - 024F)??? Может это из-за "двоично-шеснадцетиричный вид" см. команду 5
Команда #150248024F000089 запрашивает 7 байт из ОЗУ:
1-й байт с адресом 0248 Hex (584 decimal)
2-й байт с адресом 0249 Hex (585 decimal)
3-й байт с адресом 024A Hex (586 decimal)
4-й байт с адресом 024B Hex (587 decimal)
5-й байт с адресом 024C Hex (588 decimal)
6-й байт с адресом 024D Hex (589 decimal)
7-й байт с адресом 024E Hex (590 decimal)

Содержимое первых 4-х байт в представленной документации не описано.
Байты 5-7 содержат часть информации о температуре газа, но не хватает еще одного байта.
Потому что
СССС – адрес докуда будем читать ( исключительно )
...
Рейтинг: 0 / 0
Протокол обмена
    #35467316
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ ответ на команду чтение всегда присылается минимум 1 пакет (8 байт).
Все таки, независимо от конечного адреса возвращается 8 байт. Т.е. в байтах 5-8 содержится температура.
...
Рейтинг: 0 / 0
Протокол обмена
    #35467318
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2) как перевести 498CE5AE7E8D8EA021 в нормальные десятичные данные???
498CE5AE – первые 4 байта данных
7E8D8EA0 – температура
21 – контрольная сумма
CR, видимо, просто не отображается.
...
Рейтинг: 0 / 0
Протокол обмена
    #35467325
fox_vik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБ1Б2 – ASCII – коды содержимого 1-го байта читаемого ОЗУ в формате –
Б1 – ASCII – код старшей тетрады байта
Б2 – ASCII – код младшей тетрады байта

Видимо, имеется в виду ASCII представление шеснадцетиричного вида.
Тогда для температуры:
7E = 126 (дес)
8D = 141 (дес)
8E = 142 (дес)
A0 = 160 (дес)

Т.е. для примера преобразования во float:
авторПреобразование во float вид.

if X(s) > 127 then znak = 1
X(s)=X(s) or 128
Flt=2^(X(s+1)-127)*(X(s)*2^16+X(s+3)*2^8+X(s+2))/2^24
If znak=1 then flt= - flt

X(s) = 126
X(s+1) = 141
X(s+2) = 142
X(s+3) = 160
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Протокол обмена
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]