Документация UART API для SSVC0059_V2 Данный документ описывает формат обмена данными по UART с контроллером SSVC0059_V2, включая управляющие команды (запросы) и телеметрию (сообщения).
Документация к формату запросов и ответов.
\n или \r.\n.ATNEXTPAUSERESUMESTOPSTARTSTATUSVERSIONGET_SETTINGSSETСообщение с ответом на запрос содержит следующие поля:
type: "response" — тип сообщения.request: полученная команда в кавычках.result: "OK" — при успешном выполнении команды, "unknown" — неизвестная команда.Пример (обобщенный):
{
"type": "response",
"request": "AT",
"result": "OK"
}
ATNEXTPAUSERESUMESTOPSTARTSTATUSПример:
STATUS 192.168.100.200
VERSIONПример ответа:
{
"type": "response",
"request": "VERSION",
"result": "OK",
"manufacturer": "SmartModule",
"model": "SSVC0059_V2",
"version": "2.2.37",
"api": "1.7"
}
SETДокументация по синтаксису команды SET.
Команда SET используется для задания различных настроек. Команда работает во всех режимах, когда контроллер принимает запросы по UART.
Максимальная длина строки — 300 символов, включая завершающие строку \n и нулевой символ.
SET <параметр1>=<значение1>,<параметр2>=<значение2>,...,<параметрN>=<значениеN>
Поддерживается всеми версиями прошивок 2.2.* и 2.3.* (если не указано иное):
heads=[<время_включения>,<период>] — скорость отбора голов.hearts=[<время_включения>,<период>] — скорость отбора тела.hyst=<значение> — гистерезис.decrement=<значение> — декремент.formula=[0|1] — формула.tank_mmhg=<значение> — давление в кубе относительно атмосферного (параметр в настройках), мм рт. ст.tank_mmhg_act=<значение> — актуальное давление в кубе относительно атмосферного (измеряется датчиком), мм рт. ст.heads_timer=<время> — время отбора голов.hearts_timer=<время> — таймер фиксации температуры отбора тела.start_delay=<время> — отложенный пуск.hearts_finish_temp=<температура> — температура завершения отбора тела.formula_start_temp=<температура> — начальная температура для формулы.valve_bw=[<скорость1>,<скорость2>,<скорость3>] — пропускные способности клапанов в мл/ч.tails=[<значение1>,<значение2>] — скорость отбора хвостов (актуально для firmware 2.2.*).tails_temp=<температура> — температура завершения отбора хвостов (актуально для firmware 2.2.*).late_heads=[<время_включения>,<период>] — скорость отбора подголовников (актуально для firmware 2.3.*).late_heads_timer=<значение> — время отбора подголовников, с (кратно 300 с; актуально для firmware 2.3.*).parallel=[<время_включения>,<период>] — параллельный отбор клапаном 3 (актуально для firmware 2.3.*).parallel_v1=[<время_включения>,<период>] — параллельный отбор клапаном 1 (актуально для firmware 2.2.*).parallel_v3=[[<температура>,<время_включения>,<период>], …] — параллельный отбор клапаном 3 (актуально для firmware 2.2.*).release_speed=<значение> — скорость сброса (время открытого клапана); актуально с опцией «Сброс и снижение».release_timer=<время> — время сброса, с; актуально с опцией «Сброс и снижение».heads_final=<значение> — скорость отбора к окончанию голов; актуально с опцией «Сброс и снижение».Дополнительно есть оперативные параметры текущего этапа:
s_temp=<температура> — температура, °C (1 знак после запятой, максимум 110.0).s_hyst=<гистерезис> — гистерезис, °C (2 знака после запятой, от 0.06 до 50.06).s_speed=[<время_включения>,<период>] — скорость отбора (аналогична heads).s_decrement=<декремент> — декремент, %, целое число до 100.s_timer=<время> — таймер, с; целое число до 86400.heads, late_heads, hearts, tails, s_speed, parallel_v1, parallelНастройки скорости отбора (время открытого клапана и период цикла).
heads — головы;hearts — тело;late_heads — подголовники;tails — хвосты;s_speed — оперативные параметры;parallel_v1 — параллельный отбор клапаном 1 (firmware 2.2.*);parallel — параллельный отбор клапаном 3 (firmware 2.3.*).Синтаксис:
heads=[<время_включения>,<период>]
<время_включения> — вещественное число с одной десятичной цифрой (например, 99.0).<период> — целое число.время_включения ≤ 99.9период ≤ 999время_включения ≤ периодПример:
heads=[99.0,100]
hystСинтаксис:
hyst=<значение>
<значение> — число с двумя знаками после запятой (например, 0.25).50.0.Пример:
hyst=0.25
decrementСинтаксис:
decrement=<значение>
<значение> — целое число (например, 20).0 до 100 включительно.Пример:
decrement=20
formulaСинтаксис:
formula=[0|1]
0 — не использовать формулу;1 — использовать.Пример:
formula=1
tank_mmhgСинтаксис:
tank_mmhg=<значение>
<значение> — целое число (например, 30).0 до 50.Пример:
tank_mmhg=50
tank_mmhg_actНазначение: передача актуальных (динамических) показаний датчика давления в систему расчетов.
Если датчик в кубе отсутствует и данные не передаются, контроллер использует статическое значение из tank_mmhg.
Описание: устанавливает давление в кубе в мм рт. ст. относительно атмосферного. Имеет приоритет над tank_mmhg.
Если контроллер получил tank_mmhg_act хотя бы раз, он будет использовать это значение (и игнорировать последующие изменения tank_mmhg) до момента выключения питания.
Синтаксис:
tank_mmhg_act=<значение>
<значение> — вещественное число с одной десятичной цифрой (например, 30.0).0.0 до 50.0.Пример:
tank_mmhg_act=45.5
heads_timerСинтаксис:
heads_timer=<время>
<время> — целое число (например, 36000).86400, кратное 300 (5 минут).Пример:
heads_timer=36000
late_heads_timerСинтаксис:
late_heads_timer=<время>
<время> — целое число (например, 36000).86400, кратное 300.Пример:
late_heads_timer=36000
hearts_timerСинтаксис:
hearts_timer=<время>
<время> — целое число (например, 10).30.Пример:
hearts_timer=30
tails_tempСинтаксис:
tails_temp=<температура>
<температура> — число с плавающей точкой (например, 109.9).110.0.Пример:
tails_temp=109.9
start_delayСинтаксис:
start_delay=<время>
<время> — целое число (например, 6000).18000.Пример:
start_delay=18000
hearts_finish_tempСинтаксис:
hearts_finish_temp=<температура>
<температура> — число с плавающей точкой (например, 93.0).110.0.Пример:
hearts_finish_temp=93.0
formula_start_tempСинтаксис:
formula_start_temp=<температура>
<температура> — число с плавающей точкой (например, 84.0).84.0 до 100.0 включительно.Пример:
formula_start_temp=84.0
valve_bwСинтаксис:
valve_bw=[<скорость1>,<скорость2>,<скорость3>]
<скоростьN> — целое число.≤ 20000.Пример:
valve_bw=[10000,20000,15000]
parallel_v3Описание: устанавливает параметры параллельного отбора клапаном 3 на этапе отбора тела (актуально для прошивок 2.2.*).
Задается 4 диапазона, в каждом диапазоне передаются три значения.
Синтаксис:
parallel_v3=[[<температура>,<время_включения>,<период>],
[<температура>,<время_включения>,<период>],
[<температура>,<время_включения>,<период>],
[<температура>,<время_включения>,<период>]]
<температура> — начало диапазона, вещественное число с одной десятичной цифрой (например, 84.0).0.0; полученное значение температуры в первом диапазоне игнорируется.)<время_включения> — вещественное число с одной десятичной цифрой (например, 99.0).<период> — целое число.время_включения < периодтемпература ≤ 99.9время_включения ≤ 99.9период ≤ 999Пример:
SET parallel_v3=[[0.0,0.4,10],[81.1,0.5,50],[86.2,0.6,50],[96.3,1.1,100]]
release_speedСинтаксис:
release_speed=<время_включения>
<время_включения> — вещественное число с одной десятичной цифрой (например, 99.0).время_включения ≤ 99.9.Примечание: значение должно быть меньше периода этапа отбора голов (контроль возлагается на передающую сторону).
Пример:
release_speed=99.0
release_timer0.Синтаксис:
release_timer=<время>
<время> — целое число (например, 600).1200 (20 минут).Пример:
release_timer=600
heads_finalСинтаксис:
heads_final=<время_включения>
<время_включения> — вещественное число с одной десятичной цифрой (например, 10.5).время_включения ≤ 99.9.Примечание: значение должно быть меньше периода этапа отбора голов (контроль возлагается на передающую сторону).
Пример:
heads_final=10.5
При неверном формате или несоответствии ограничениям возвращается сообщение об ошибке.
Пример:
{"type": "response","request": "SET heads=[1,2]","result": "error: heads=[1,2]"}
Для неизвестных параметров возвращается сообщение об ошибке.
Пример:
{"type": "response","request": "ABCD","result": "unknown"}
SET heads=[30.0,180],hearts=[2.5,5],formula=1
SET heads=[60.0,360],hearts=[2.0,4],hyst=0.19,formula=0
SET heads=[20.5,245],hearts=[1.5,3],hyst=0.25,decrement=20,formula=1,tank_mmhg=50,heads_timer=36000,hearts_timer=30,start_delay=18000,hearts_finish_temp=93.0,formula_start_temp=84.0,valve_bw=[10000,11000,12000]
SET formula=1
SET formula=0
SET tank_mmhg=50
SET heads_timer=36000
SET heads_timer=86400
SET hearts_timer=30
SET start_delay=18000
SET hearts_finish_temp=110.0
SET formula_start_temp=84.0
SET formula_start_temp=100.0
SET valve_bw=[10000,11000,12000]
SET heads=[60.0,360],hearts=[2.0,4],hyst=0.19,decrement=30,formula=2
SET heads=[100.0,180],hearts=[2.5,5],formula=1
SET heads=[99.9,1000],hearts=[2.5,5]
SET heads=[99.1,99],hearts=[2.5,5],formula=1
SET hyst=50.01
SET decrement=101
SET tank_mmhg=51
SET heads_timer=86401
SET hearts_timer=31
SET start_delay=18001
SET hearts_finish_temp=110.1
SET formula_start_temp=83.9
SET formula_start_temp=100.1
SET valve_bw=[10000,11000,21000]
GET_SETTINGSsettings — объект с набором параметров.GET_SETTINGS{
"type": "response",
"request": "GET_SETTINGS",
"result": "OK",
"settings": {
"heads": [24.5, 100],
"heads_final": 15.0,
"release_timer": 300,
"release_speed": 99.9,
"late_heads": [23.4, 123],
"hearts": [2.5, 5],
"hyst": 0.25,
"decrement": 100,
"tails": [2.1, 4],
"sound": 0,
"pressure": 1,
"relay_inverted": 0,
"relay_autostart": 0,
"auto_mode": 1,
"heads_timer": 900,
"late_heads_timer": 1800,
"hearts_timer": 0,
"tails_temp": 95.9,
"start_delay": 5,
"hearts_finish_temp": 90.0,
"parallel_v3": [
[0.0, 0.4, 10],
[81.0, 0.5, 11],
[86.0, 0.6, 12],
[96.0, 0.7, 13]
],
"parallel_v1": [0.3, 10],
"parallel": [0.2, 10],
"hearts_temp_shift": 1,
"hearts_pause": 1,
"formula": 1,
"formula_start_temp": 84.0,
"tank_mmhg": 10,
"tp2_shift": 0.0,
"tp_filter": 0,
"signal_tp1_control": 1,
"signal_inverted": 0,
"tp1_control_temp": 60,
"tp1_control_start": 1,
"stab_limit_time": 60,
"stab_limit_finish": 1,
"backlight": "active",
"valve_bw": [1100, 1200, 1300]
}
}
Поля объекта settings
headsСкорость отбора голов.
heads_finalСкорость отбора к окончанию отбора голов, с. Актуально при опции «Сброс и снижение».
release_timerВремя сброса на этапе голов, с. Актуально при опции «Сброс и снижение».
release_speedВремя открытого клапана для сброса, с; задает скорость отбора во время сброса.
heartsСкорость отбора тела.
[время открытого клапана, период]hystГистерезис при отборе тела, °C.
decrementДекремент при отборе тела, %.
late_headsСкорость отбора подголовников. Актуально в firmware 2.3.*.
[время открытого клапана, период]tailsСкорость отбора хвостов. Актуально в firmware 2.2.*.
[время открытого клапана, период]soundЗвук:
1 — включено;0 — выключено.pressureБарометр:
1 — включено;0 — выключено.relay_invertedИнвертировать реле:
1 — включено;0 — выключено.relay_autostartРеле включить сразу:
1 — включено;0 — выключено.auto_modeАвтоматический переход между этапами:
1 — включено;0 — выключено.heads_timerВремя отбора голов, с.
late_heads_timerВремя отбора подголовников, с. Актуально в firmware 2.3.*
hearts_timerТаймер фиксации температуры отбора тела, с.
tails_tempТемпература завершения отбора хвостов, °C. Актуально в firmware 2.2.*
start_delayОтложенный пуск, с.
hearts_finish_tempТемпература ТД2 завершения отбора тела, °C.
parallel_v3Скорость параллельного отбора клапаном №3 для 4 диапазонов. Актуально в firmware 2.2.*.
[[температура диапазона, время открытого клапана, период], ...]parallel_v1Скорость параллельного отбора клапаном №1. Актуально в firmware 2.2.*.
[время открытого клапана, период]parallelСкорость параллельного отбора клапаном №3 (актуально в firmware 2.3.*).
[время открытого клапана, период]hearts_temp_shiftСдвиг температуры отбора тела на 0.07 °C:
1 — включено;0 — выключено.hearts_pauseПауза «на себя»:
1 — включено;0 — выключено.formulaФормула:
1 — включено;0 — выключено.formula_start_tempТемпература начала формулы, °C.
tank_mmhgДавление в кубе, мм рт. ст.
tp2_shiftПоправка ТД2, °C.
tp_filterФильтр ТД:
1 — включено;0 — выключено.signal_tp1_controlКонтроль ТД1 для выхода SIGNAL:
1 — включено;0 — выключено.signal_invertedИнвертировать SIGNAL:
1 — включено;0 — выключено.tp1_control_tempЦелевая температура на ТД1 при контроле ТД1 для выхода SIGNAL, °C.
tp1_control_startСтарт по ТД1 при контроле ТД1 для выхода SIGNAL:
1 — включено;0 — выключено.stab_limit_timeЛимит стабилизации, с (0 — отключен).
stab_limit_finishЗавершить этап при превышении лимита стабилизации:
1 — включено;0 — выключено.backlightПодсветка дисплея.
"active" — включено;"always" — всегда включено;"off" — выключено.valve_bwПропускная способность клапанов.
[клапан 1, клапан 2, клапан 3]Формат сообщения телеметрии
\n.type, определяющее тип сообщения.type.type: "waiting"Сообщение состоит из общей для всех сообщений части common.
commonСообщение содержит следующие поля:
mmhg: float — давление в мм рт. ст.tp1: float — температура ТД1.tp2: float — температура ТД2.relay: int — состояние реле (0 или 1).signal: int — состояние сигнала (0 или 1).cfg_chgd: boolean — флаг для запроса настроек GET_SETTINGS. Присутствует только если true.GET_SETTINGS.tts: int — время до сохранения настроек в энергонезависимую память, с. При отсутствии поля tts — несохраненных данных нет.waiting{
"type": "waiting",
"common": {
"mmhg": 750.5,
"tp1": 30.31,
"tp2": 30.81,
"relay": 1,
"signal": 0,
"cfg_chgd": true
}
}
type: "settings"Сообщение также состоит из общей части common (структура аналогична описанной выше).
Дополнительные поля зависят от конкретной реализации экранов и не детализированы в данном документе.
type: "tp1_waiting"Дополнительные поля к общей части:
pid: int — уникальный идентификатор ректификации.tp1_target: float — целевая температура ТД1.tp1_waiting{
"pid": 99,
"type": "tp1_waiting",
"common": {
"mmhg": 750.5,
"tp1": 30.31,
"tp2": 30.81,
"relay": 1,
"signal": 0
},
"tp1_target": 60
}
type: "delayed_start"Дополнительные поля к общей части:
pid: int — уникальный идентификатор ректификации.countdown: string — обратный отсчет времени в формате "ч:мм:сс".delayed_start{
"pid": 99,
"type": "delayed_start",
"common": {
"mmhg": 750.5,
"tp1": 30.75,
"tp2": 31.44,
"relay": 1,
"signal": 0
},
"countdown": "0:09:59"
}
type: "heads", type: "late_heads"type: "heads" — головы.type: "late_heads" — подголовники (актуально в firmware 2.3.*).Дополнительные поля к общей части:
pid: int — уникальный идентификатор ректификации.countdown: string — обратный отсчет времени в формате "ч:мм:сс".release: string — обратный отсчет времени сброса в формате "ч:мм:сс" (актуально на отборе голов при наличии опции «Сброс»).time: string — время в формате "ч:мм:сс".open: float — открытие клапана в секундах.period: int — период работы клапана в секундах.tank_mmhg: float — давление в кубе.tp1_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД1.tp2_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД2.v1: int — суммарное время открытия клапана 1 в секундах.v2: int — суммарное время открытия клапана 2 в секундах.v3: int — суммарное время открытия клапана 3 в секундах.alc: float — спиртуозность.heads{
"pid": 99,
"type": "heads",
"common": {
"mmhg": 750.5,
"tp1": 31.19,
"tp2": 32.06,
"relay": 1,
"signal": 1
},
"countdown": "0:14:58",
"time": "0:00:02",
"open": 30.10,
"period": 359,
"tank_mmhg": 756.5,
"tp1_sap": 31.53,
"tp2_sap": 33.10,
"v1": 0,
"v2": 0,
"v3": 0,
"alc": 0.0
}
type: "hearts"Дополнительные поля к общей части:
pid: int — уникальный идентификатор ректификации.countdown: string — обратный отсчет времени до фиксации температуры отбора, формат "ч:мм:сс".time: string — время в формате "ч:мм:сс".tp1_target: float — температура отбора.open: float — открытие клапана в секундах.period: int — период работы клапана в секундах.hysteresis: float — гистерезис.decrement: int — декремент в %, целое число.tank_mmhg: float — давление в кубе.tp1_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД1.tp2_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД2.v1: int — суммарное время открытия клапана 1 в секундах.v2: int — суммарное время открытия клапана 2 в секундах.v3: int — суммарное время открытия клапана 3 в секундах.alc: float — спиртуозность.stop: int — признак остановки (0 или 1).stops: int — количество остановок.hearts{
"pid": 99,
"type": "hearts",
"common": {
"mmhg": 750.5,
"tp1": 31.38,
"tp2": 32.25,
"relay": 1,
"signal": 1
},
"countdown": "0:06:58",
"time": "0:01:04",
"tp1_target": 100.0,
"open": 2.10,
"period": 4,
"hysteresis": 0.25,
"decrement": 10,
"tank_mmhg": 756.5,
"tp1_sap": 31.72,
"tp2_sap": 33.29,
"v1": 0,
"v2": 0,
"v3": 0,
"alc": 0.0,
"stop": 0,
"stops": 0
}
type: "tails" (firmware 2.2.*)Дополнительные поля к общей части:
pid: int — уникальный идентификатор ректификации.time: string — время в формате "ч:мм:сс".tp2_target: float — целевая температура ТД2.open: float — открытие клапана в секундах.period: int — период работы клапана в секундах.tank_mmhg: float — давление в кубе.tp1_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД1.tp2_sap: float — пересчитанная к нормальному атмосферному давлению температура ТД2.v1: int — суммарное время открытия клапана 1 в секундах.v2: int — суммарное время открытия клапана 2 в секундах.v3: int — суммарное время открытия клапана 3 в секундах.alc: float — спиртуозность.tails{
"pid": 99,
"type": "tails",
"common": {
"mmhg": 748.3,
"tp1": 33.81,
"tp2": 35.75,
"relay": 1,
"signal": 1
},
"time": "0:01:20",
"tp2_target": 95.0,
"open": 2.0,
"period": 4,
"tank_mmhg": 748.3,
"tp1_sap": 34.22,
"tp2_sap": 36.16,
"v1": 0,
"v2": 8,
"v3": 0,
"alc": 0.0
}
Сообщения могут содержать поле event, оповещающее о событиях.
event присутствует в телеметрии при отсутствии нажатий на кнопки контроллера.heads_finished — завершен этап Головы.hearts_finished — завершен этап Тело (ректификация завершена для firmware 2.3.*).tails_finished — завершен этап Хвосты (ректификация завершена для firmware 2.2.*).ds_error — ошибка датчика температуры.ds_error_stop — выключение оборудования (реле) из-за ошибки датчика; срабатывает через 180 с, если ошибка текущего датчика не исчезнет.stabilization_limit — превышен лимит времени стабилизации.manually_closed — включено ручное управление клапаном текущего этапа, клапан закрыт.manually_opened — включено ручное управление клапаном текущего этапа, клапан открыт.\n.tp1, tp2, tp1_sap, tp2_sap, tp1_target, tp2_target) указываются в градусах Цельсия и могут содержать десятичную часть.time, countdown) указывается в формате "ч:мм:сс".relay) и сигнала (signal) могут быть либо 0 (выключено), либо 1 (включено).mmhg, tank_mmhg) указывается в мм рт. ст.