powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Тотальные параметры СПТ-941.10
2 сообщений из 2, страница 1 из 1
Тотальные параметры СПТ-941.10
    #38577378
AlexDmit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день(вечер,ночь,утро)!!!
Предлагаю очередную головоломку процесса опроса архивов тепловычислителя СПТ-941.10 ... и, по всей видимости, последнюю, в этой серии разработки прикладного приложения.
Прилагаю подробный расклад на рассмотрение:

Произведен опрос итоговых данных теплосчетчика СПТ-941 ... посредством программы "ПРОЛОГ" (прямое соединение)... получаем готовые итоги

Код: vbnet
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.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
Время     02.03.2014 22:00                       
V1(м3)    86 946,46             
V2(м3)    87 098,90                  
V3(м3)    0,00              
M1(т)     85 035,86             
M2(т)     85 829,08                  
M3(т)     0,00            
Q(Гкал)   1 227,69     
Tи(ч)     25 351,33 

...  посредством прослушки портов(ретранслятор)... получаем (оригинал) байтовые массивы ответов на запросы чтения Flash(ПЗУ) тепловычислителя из расчета 1 страница = 64 байта блока данных = 8 дампов(параметров) х 8 байтов(4-ре двоич.,4-ре float) 

Запрос (ПРОЛОГ => СПТ941) Страница №00 (мл.б...ст.б)
16,255,144,2,0,5,0,69,0,0,1,0,119,103,
===============

Ответ (ПРОЛОГ <= СПТ941) Страница №00
16,255,144,2,0,65,0,69, ... информационные байты вне расчета
123,53,47,135,(4 ст.б. Float) 123,53,47,135,(4 мл.б. двоичное предст.) ... 1-й дамп 8 байт
255,255,255,255,255,255,255,255, ... 2-й дамп 8 байт
255,255,255,255,255,255,255,255, ... 3-й дамп 8 байт
255,255,255,255,255,255,255,255, ... 4-й дамп 8 байт
255,255,255,255,255,255,255,255, ... 5-й дамп 8 байт
0,188,0,67,0,0,0,255, ... 6-й дамп 8 байт
48,255,255,255,134,130,153,164, ... 7-й дамп 8 байт
71,198,230,72,191,233,194,135, ... 8-й дамп 8 байт
158,35, ... контрольная сумма, байты вне расчета

... и т.д.

16,255,144,3,0,5,0,69,1,0,1,0,234,240,
==========
16,255,144,3,0,65,0,69,
67,195,220,172,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
85,223,


16,255,144,4,0,5,0,69,17,0,1,0,64,252,
===============
16,255,144,4,0,65,0,69,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,49,32,32,32,
32,32,32,32,1,0,0,0,
0,255,255,255,48,48,45,48,
48,32,32,32,0,0,0,0,
0,255,255,255,48,48,45,48,
48,32,32,32,0,0,0,0,
255,117,


16,255,144,7,0,5,0,69,9,0,1,0,243,220,
============
16,255,144,7,0,65,0,69,
0,255,255,255,48,49,32,32,
32,32,32,32,1,0,0,0,
0,255,255,255,48,48,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
179,131,


16,255,144,8,0,5,0,69,16,0,1,0,131,88,
==============
16,255,144,8,0,65,0,69,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,49,32,32,32,
32,32,32,32,1,0,0,0,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
63,57,

//////////////////////////////////////////////
Данный запрос ... дата на момент сохранения данных
16,255,144,9,0,5,0,82,243,0,3,0,114,161,
==============
... ответ 14-год, 3-март, 2-дата
16,255,144,9,0,4,0,82,14,3,2,40,163,

Данный запрос ... время на момент сохранения данных
16,255,144,10,0,5,0,82,246,0,3,0,227,160,
==================
... ответ 22-час, 53-минуты, 10-секунды
16,255,144,10,0,4,0,82,22,53,10,36,47,

... с этим все ясно(двоичное представление)
//////////////////////////////////////////////

Запрос сразу двух страниц...

16,255,144,11,0,5,0,69,9,1,2,0,36,175,
=================
16,255,144,11,0,129,0,69,
0,0,0,0,0,0,0,0,
0,0,162,83,1,0,31,133,
107,125,58,84,1,0,102,102,
102,126,0,0,0,0,0,0,
0,0,43,76,1,0,239,85,
91,126,69,79,1,0,244,55,
33,123,0,0,0,0,0,0,
0,0,203,4,0,0,186,107,

49,126,7,99,0,0,59,170,
42,125,0,0,0,0,0,0,
0,0,1,0,0,0,14,3,
2,0,70,1,207,1,231,1,
14,3,1,0,35,0,41,1,
69,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
51,197,

16,255,144,12,0,5,0,69,8,0,1,0,129,211,
================
16,255,144,12,0,65,0,69,
0,255,255,255,48,32,32,32,
32,32,32,32,0,0,0,0,
0,255,255,255,51,32,32,32,
32,32,32,32,3,0,0,0,
0,255,255,255,49,53,45,51,
55,45,48,48,0,37,15,0,
0,255,255,255,49,49,45,48,
52,45,49,49,11,4,11,0,
17,238,

Условие для расчета тотальных(итоговых) данных:

Основная часть тотального счетчика хранится во FLASH-памяти в виде 8-байтовой области. Четыре младших байта этой области представляют собой целую часть счетчика в двоичном представлении; четыре старших байта – его дробная часть во FLOAT представлении. Текущее приращение – четырехбайтовое FLOAT число, хранящееся в ОЗУ. Обновление основной части тотального счетчика во FLASH-памяти происходит в момент
наступления каждого нового часа – к нему прибавляется текущее приращение, накопленное в ОЗУ. После обновления FLASH-памяти текущее приращение тотального счетчика зануляется.
Организация тотальных параметров тепловычислителя показана в таблице 1.

Таблица 1 – Тотальные параметры
Параметр              Адрес ОЗУ    Адрес FLASH
Объем, V1                0x0520       0x424A
Объем, V2                0x0524       0x4252
Объем, V3                0x0528       0x425A
Масса, M1                0x052c       0x4262
Масса, M2                0x0530       0x426A
Масса, M3                0x0534       0x4272
Тепловая энергия,Q       0x0538       0x427A
Время интегрирования, Ти 0x053c       0x4282




Все полученные массивы относятся к одному запросу пполучения итоговых значений.
Помогите выйти на готовые(полученные) значения, подкиньте мысль последовательности расчета, алгоритм вычисления и т.п.
Приращение (т.е. Float) можно не учитывать ... хотя бы на целое число попасть.
...
Рейтинг: 0 / 0
Тотальные параметры СПТ-941.10
    #38579531
AlexDmit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена...
Для тех, кому интересно....
Следуя инструкциям протокола обмена для СПТ 941.10(11), сталкиваемся с некоторыми недоработками и не соответствием написанному с фактом опроса.
В итоге методом проб и ошибок определился алгоритм чтения тотальных данных из Flash-памяти тепловычислителя.
прилагаю подробный листинг на VB...(возможно пригодится)

Код: vbnet
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.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
''=============================================================
''Стандартный запрос на чтение 2-х страниц  с тотальными данными Flash
Dim in_buff() As Byte={16,255,144,11,0,5,0,69,9,1,2,0,36,175}  ''готовый не изменяемый шаблон расширенного запроса
''запись в буфер com-порта
comport.Write(in_buff, 0, in_buff.Count)
'' далее процедура чтения буфера ...
....
Dim out_buff() As Byte ''массив данных из буфера
        Dim v1 As Decimal ''
        Dim v2 As Decimal ''
        Dim v3 As Decimal ''
        Dim m1 As Decimal ''
        Dim m2 As Decimal ''                
        Dim m3 As Decimal ''
        Dim q As Decimal ''
        Dim t As Decimal ''
        Dim fDate As String
        Dim fTime As String

        ReadTotalFlash(out_buff, v1, v2, v3, m1, m2, m3, q, t, fDate, fTime)

        TextBox1.Text = v1
        TextBox2.Text = v2
        TextBox3.Text = v3
        TextBox4.Text = m1
        TextBox5.Text = m2
        TextBox6.Text = m3
        TextBox7.Text = q
        TextBox8.Text = t
        TextBox9.Text = fDate
        TextBox10.Text = fTime

''=============================================================
''процедура чтения необходимых параметров из полученного массива
Private Sub ReadTotalFlash(ByVal bit_s() As Byte, ByRef V1 As Decimal, ByRef V2 As Decimal, ByRef V3 As Decimal, _
                               ByRef M1 As Decimal, ByRef M2 As Decimal, ByRef M3 As Decimal, ByRef Q As Decimal, _
                               ByRef T As Decimal, ByRef tek_date As String, ByRef tek_time As String)
        Dim bit_tot() As Byte
        Dim bit_D() As Byte
        Dim bit_T() As Byte
        For n = 0 To UBound(bit_s) - 74
            ReDim Preserve bit_tot(n)
            bit_tot(n) = bit_s(n + 18)
        Next
        For n = 0 To 2 ''
            ReDim Preserve bit_D(n)
            bit_D(n) = bit_s(n + 94)
        Next
        For n = 0 To 2 ''
            ReDim Preserve bit_T(n)
            bit_T(n) = bit_s(n + 100)
        Next

        Dim V1_int() As Byte
        Dim V1_fl() As Byte
        Dim V2_int() As Byte
        Dim V2_fl() As Byte
        Dim V3_int() As Byte
        Dim V3_fl() As Byte
        Dim M1_int() As Byte
        Dim M1_fl() As Byte
        Dim M2_int() As Byte
        Dim M2_fl() As Byte
        Dim M3_int() As Byte
        Dim M3_fl() As Byte
        Dim Q_int() As Byte
        Dim Q_fl() As Byte
        Dim T_int() As Byte
        Dim T_fl() As Byte

        For n = 0 To 3
            ReDim Preserve V1_int(n)
            ReDim Preserve V1_fl(n)
            V1_int(n) = bit_tot(n)
            V1_fl(n) = bit_tot(n + 4)
            ReDim Preserve V2_int(n)
            ReDim Preserve V2_fl(n)
            V2_int(n) = bit_tot(n + 8)
            V2_fl(n) = bit_tot(n + 12)
            ReDim Preserve V3_int(n)
            ReDim Preserve V3_fl(n)
            V3_int(n) = bit_tot(n + 16)
            V3_fl(n) = bit_tot(n + 20)
            ReDim Preserve M1_int(n)
            ReDim Preserve M1_fl(n)
            M1_int(n) = bit_tot(n + 24)
            M1_fl(n) = bit_tot(n + 28)
            ReDim Preserve M2_int(n)
            ReDim Preserve M2_fl(n)
            M2_int(n) = bit_tot(n + 32)
            M2_fl(n) = bit_tot(n + 36)
            ReDim Preserve M3_int(n)
            ReDim Preserve M3_fl(n)
            M3_int(n) = bit_tot(n + 40)
            M3_fl(n) = bit_tot(n + 44)
            ReDim Preserve Q_int(n)
            ReDim Preserve Q_fl(n)
            Q_int(n) = bit_tot(n + 48)
            Q_fl(n) = bit_tot(n + 52)
            ReDim Preserve T_int(n)
            ReDim Preserve T_fl(n)
            T_int(n) = bit_tot(n + 56)
            T_fl(n) = bit_tot(n + 60)
        Next
        V1 = CDec(BitConverter.ToInt32(V1_int, 0)) + Math.Round(Float(V1_fl), 2)
        V2 = CDec(BitConverter.ToInt32(V2_int, 0)) + Math.Round(Float(V2_fl), 2)
        V3 = CDec(BitConverter.ToInt32(V3_int, 0)) + Math.Round(Float(V3_fl), 2)
        M1 = CDec(BitConverter.ToInt32(M1_int, 0)) + Math.Round(Float(M1_fl), 2)
        M2 = CDec(BitConverter.ToInt32(M2_int, 0)) + Math.Round(Float(M2_fl), 2)
        M3 = CDec(BitConverter.ToInt32(M3_int, 0)) + Math.Round(Float(M3_fl), 2)
        Q = CDec(BitConverter.ToInt32(Q_int, 0)) + Math.Round(Float(Q_fl), 2)
        T = CDec(BitConverter.ToInt32(T_int, 0)) + Math.Round(Float(T_fl), 2)

        Array.Reverse(bit_D)
        Dim dd As String = bit_D(0)
        Dim mm As String = bit_D(1)
        Dim yy As String = 2000 + bit_D(2)
        Dim chas As String = bit_T(0)
        Dim min As String = bit_T(1)
        Dim sec As String = bit_T(2)
        Dim pr As String = ""
        If dd.Length < 2 Then dd = "0" & dd
        If mm.Length < 2 Then mm = "0" & mm
        If chas.Length < 2 Then chas = "0" & chas
        If min.Length < 2 Then min = "0" & min
        If sec.Length < 2 Then sec = "0" & sec
        tek_date = dd & "." & mm & "." & yy
        tek_time = chas & ":" & min & ":" & sec
    End Sub

''Функция преобразования 4-х байт во Float-число
Private Function Float(ByVal f_mass() As Byte) As Decimal
        Dim rez As Decimal
        Dim e As Integer = f_mass(3)
        Dim f0 As String = DecToBin(f_mass(2))
        Dim f1 As String = DecToBin(f_mass(1))
        Dim f2 As String = DecToBin(f_mass(0))
        Dim bit() As Integer
        Dim ii As Decimal
        Dim i As Integer
        Dim n As Integer
        For n = 1 To f0.Length
            i = n - 1
            ReDim Preserve bit(i)
            bit(i) = Int(Mid(f0, n, 1))
        Next
        ii = Nothing
        n = 0
        For Each b As Integer In bit
            If b <> 0 Then ii += 2 ^ (-n)
            n += 1
        Next
        rez = ((-1) ^ 0) * (2 ^ 0 + ii) * 2 ^ (e - 127)
        Return rez
    End Function
''... 
Public Function DecToBin(ByVal DeciValue As Long, Optional ByVal NoOfBits As Integer = 8) As String
        Dim i As Integer
        Do While DeciValue > (2 ^ NoOfBits) - 1
            NoOfBits = NoOfBits + 8
        Loop
        DecToBin = vbNullString
        For i = 0 To (NoOfBits - 1)
            DecToBin = CStr((DeciValue And 2 ^ i) / 2 ^ i) & DecToBin
        Next i
    End Function


...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Тотальные параметры СПТ-941.10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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