Увеличить период передачи кнопок пульта по CAN до 200 мс
This commit is contained in:
+36
-36
@@ -1,8 +1,8 @@
|
|||||||
/* Параметры и обработчики Modbus после проверки CRC. Массив modbus
|
/* Параметры и обработчики Modbus после проверки CRC. Массив modbus
|
||||||
* содержит обычные адреса 0..127, область 0x1000 обслуживает логгер.
|
* содержит обычные адреса 0..127, область 0x1000 обслуживает логгер.
|
||||||
* EEPROM хранит параметры, но не является источником START/STOP:
|
* EEPROM хранит параметры, но не является источником START/STOP:
|
||||||
* при загрузке сохраняется последняя живая команда нагрузки.
|
* при загрузке сохраняется последняя живая команда нагрузки.
|
||||||
* Функции вызываются из main; EEPROM блокирует этот контекст.
|
* Функции вызываются из main; EEPROM блокирует этот контекст.
|
||||||
*/
|
*/
|
||||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||||
#include "package.h"
|
#include "package.h"
|
||||||
@@ -47,7 +47,7 @@ void Default_params()
|
|||||||
|
|
||||||
for(i=0;i<ANSWER_LEN;i++)
|
for(i=0;i<ANSWER_LEN;i++)
|
||||||
{
|
{
|
||||||
/* Команда нагрузки не является параметром по умолчанию. */
|
/* Команда нагрузки не является параметром по умолчанию. */
|
||||||
if (Desk != dsk_LOAD || i != 127) Modbus[i].all = 0;
|
if (Desk != dsk_LOAD || i != 127) Modbus[i].all = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,17 +56,17 @@ void Default_params()
|
|||||||
|
|
||||||
if(Desk == dsk_EPLT)
|
if(Desk == dsk_EPLT)
|
||||||
{
|
{
|
||||||
Cancount[m_FAST] = 2; // пауза между посылками CAN
|
Cancount[m_FAST] = 10; // Задаёт для пульта быстрый CAN-пакет раз в 10 базовых интервалов CANPOWSE по 20 мс, то есть примерно 200 мс; это значение по умолчанию, которое могут заменить параметры EEPROM.
|
||||||
|
|
||||||
for(i=0;i<6;i++) Bright[i] = bright[i];
|
for(i=0;i<6;i++) Bright[i] = bright[i];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Cancount[m_FAST] = 10; // пауза между посылками CAN
|
Cancount[m_FAST] = 10; // пауза между посылками CAN
|
||||||
Brightness = 8;
|
Brightness = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
Cancount[m_SLOW] = 101; // пауза между посылками CAN
|
Cancount[m_SLOW] = 101; // пауза между посылками CAN
|
||||||
|
|
||||||
if(Kalibro)
|
if(Kalibro)
|
||||||
{
|
{
|
||||||
@@ -126,9 +126,9 @@ void Default_params()
|
|||||||
DAC_20 = Caliber[6];
|
DAC_20 = Caliber[6];
|
||||||
DAC_04 = Caliber[7];
|
DAC_04 = Caliber[7];
|
||||||
|
|
||||||
/* Не врема!
|
/* Не врема!
|
||||||
DAC_go = 6; // начало зарада
|
DAC_go = 6; // начало зарада
|
||||||
DAC_stop= 15; // конец зарада
|
DAC_stop= 15; // конец зарада
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,9 +139,9 @@ void Default_params()
|
|||||||
Init_sensors_more();
|
Init_sensors_more();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CRC и Mode проверяются до применения EEPROM. Слово 127
|
/* CRC и Mode проверяются до применения EEPROM. Слово 127
|
||||||
* нагрузки не копируется даже временно: ISR не должен увидеть
|
* нагрузки не копируется даже временно: ISR не должен увидеть
|
||||||
* старый START из EEPROM либо потерять текущую CAN-команду.
|
* старый START из EEPROM либо потерять текущую CAN-команду.
|
||||||
*/
|
*/
|
||||||
void Load_params()
|
void Load_params()
|
||||||
{
|
{
|
||||||
@@ -153,7 +153,7 @@ void Load_params()
|
|||||||
(crc !=0xFFFF) &&
|
(crc !=0xFFFF) &&
|
||||||
(Mode == param[126]))
|
(Mode == param[126]))
|
||||||
{
|
{
|
||||||
/* Не восстанавливать START/STOP из EEPROM даже на один тик ISR. */
|
/* Не восстанавливать START/STOP из EEPROM даже на один тик ISR. */
|
||||||
for(i=0;i<ANSWER_LEN;i++)
|
for(i=0;i<ANSWER_LEN;i++)
|
||||||
if (Desk != dsk_LOAD || i != 127) modbus[i] = param[i];
|
if (Desk != dsk_LOAD || i != 127) modbus[i] = param[i];
|
||||||
UMP_reset_parameter_commands();
|
UMP_reset_parameter_commands();
|
||||||
@@ -169,9 +169,9 @@ void Load_params()
|
|||||||
Caliber_time = 0xFFFF;
|
Caliber_time = 0xFFFF;
|
||||||
} } }
|
} } }
|
||||||
|
|
||||||
/* ISR продолжает менять измерения во время сбора param. CRC
|
/* ISR продолжает менять измерения во время сбора param. CRC
|
||||||
* относится к собранному массиву, а не атомарному снимку всей платы.
|
* относится к собранному массиву, а не атомарному снимку всей платы.
|
||||||
* Не вызывать сохранение из критического пути дискретов.
|
* Не вызывать сохранение из критического пути дискретов.
|
||||||
*/
|
*/
|
||||||
void Save_params()
|
void Save_params()
|
||||||
{
|
{
|
||||||
@@ -191,8 +191,8 @@ void Save_params()
|
|||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/* Передача данных по протоколу ModBus - команда 3
|
/* Передача данных по протоколу ModBus - команда 3
|
||||||
Чтение ачеек данных */
|
Чтение ачеек данных */
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@@ -212,10 +212,10 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
|||||||
{
|
{
|
||||||
unsigned int crc, Address_MB, Length_MB, i, value, saved = 0;
|
unsigned int crc, Address_MB, Length_MB, i, value, saved = 0;
|
||||||
|
|
||||||
// получили начальный адрес чтениа
|
// получили начальный адрес чтениа
|
||||||
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
|
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
|
||||||
|
|
||||||
// получили количество слов данных
|
// получили количество слов данных
|
||||||
Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
||||||
if (!Length_MB || Length_MB > 125 ||
|
if (!Length_MB || Length_MB > 125 ||
|
||||||
!((Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB) ||
|
!((Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB) ||
|
||||||
@@ -228,15 +228,15 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
// Отсылка
|
// Отсылка
|
||||||
/* Посчитали контрольную сумму перед самой посылкой */
|
/* Посчитали контрольную сумму перед самой посылкой */
|
||||||
|
|
||||||
rs_arr->buffer[0] = CNTRL_ADDR;
|
rs_arr->buffer[0] = CNTRL_ADDR;
|
||||||
rs_arr->buffer[1] = CMD_MODBUS_3;
|
rs_arr->buffer[1] = CMD_MODBUS_3;
|
||||||
rs_arr->buffer[2] = Length_MB*2;
|
rs_arr->buffer[2] = Length_MB*2;
|
||||||
|
|
||||||
/* Защищаем целостность одного снимка/блока; передача UART идёт уже
|
/* Защищаем целостность одного снимка/блока; передача UART идёт уже
|
||||||
* с разрешёнными прерываниями и не задерживает измерение/управление. */
|
* с разрешёнными прерываниями и не задерживает измерение/управление. */
|
||||||
if (Address_MB >= UMP_LOG_BASE) saved = __disable_interrupts();
|
if (Address_MB >= UMP_LOG_BASE) saved = __disable_interrupts();
|
||||||
for (i=0;i<Length_MB;i++)
|
for (i=0;i<Length_MB;i++)
|
||||||
{
|
{
|
||||||
@@ -258,9 +258,9 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
|
|||||||
rs_arr->buffer[Length_MB*2+8] = 0;
|
rs_arr->buffer[Length_MB*2+8] = 0;
|
||||||
|
|
||||||
rs_arr->flag_TIMEOUT_to_Send=true;
|
rs_arr->flag_TIMEOUT_to_Send=true;
|
||||||
/* Расширение логгера отвечает точным кадром Modbus без хвостовых
|
/* Расширение логгера отвечает точным кадром Modbus без хвостовых
|
||||||
* нулей: они иначе попали бы в начало ответа следующего блока GUI.
|
* нулей: они иначе попали бы в начало ответа следующего блока GUI.
|
||||||
* Исторический формат технологических регистров оставлен прежним. */
|
* Исторический формат технологических регистров оставлен прежним. */
|
||||||
RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+(Address_MB >= UMP_LOG_BASE ? 5 : 8));
|
RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+(Address_MB >= UMP_LOG_BASE ? 5 : 8));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -271,17 +271,17 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr)
|
|||||||
unsigned int Address_MB, Data_MB, i;
|
unsigned int Address_MB, Data_MB, i;
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
// Отсылка
|
// Отсылка
|
||||||
/* Отправлаем назад то же самое */
|
/* Отправлаем назад то же самое */
|
||||||
|
|
||||||
for (i=0;i<8;i++)
|
for (i=0;i<8;i++)
|
||||||
rs_arr->buffer[i] = rs_arr->RS_Header[i];
|
rs_arr->buffer[i] = rs_arr->RS_Header[i];
|
||||||
|
|
||||||
|
|
||||||
// получили начальный адрес записи
|
// получили начальный адрес записи
|
||||||
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
|
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
|
||||||
|
|
||||||
// получили слово данных
|
// получили слово данных
|
||||||
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
|
||||||
|
|
||||||
if (Address_MB >= UMP_LOG_BASE) {
|
if (Address_MB >= UMP_LOG_BASE) {
|
||||||
@@ -289,8 +289,8 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr)
|
|||||||
modbus_exception(rs_arr, CMD_MODBUS_6, 3); return;
|
modbus_exception(rs_arr, CMD_MODBUS_6, 3); return;
|
||||||
}
|
}
|
||||||
} else if (Address_MB < ANSWER_LEN) {
|
} else if (Address_MB < ANSWER_LEN) {
|
||||||
/* RS и CAN используют одну историю фронтов. Чередование каналов
|
/* RS и CAN используют одну историю фронтов. Чередование каналов
|
||||||
* не создаёт двух независимых повторных запусков. */
|
* не создаёт двух независимых повторных запусков. */
|
||||||
if (Address_MB == 127) {
|
if (Address_MB == 127) {
|
||||||
UMP_commands_write(Data_MB);
|
UMP_commands_write(Data_MB);
|
||||||
ump_log_rs();
|
ump_log_rs();
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
|
# Показывает пояснения периода CAN и обработки параметров в сохранённой кодировке UTF-8.
|
||||||
|
encoding//Source/Internal/message.c=UTF-8
|
||||||
# Показывает русские пояснения выбора исполнения и порядка индикаторов в кодировке UTF-8.
|
# Показывает русские пояснения выбора исполнения и порядка индикаторов в кодировке UTF-8.
|
||||||
encoding//Source/Internal/Include/package.h=UTF-8
|
encoding//Source/Internal/Include/package.h=UTF-8
|
||||||
encoding//Debug/Libraries/subdir_rules.mk=UTF-8
|
encoding//Debug/Libraries/subdir_rules.mk=UTF-8
|
||||||
|
|||||||
Reference in New Issue
Block a user