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