matlab_23550/Inu/Src2/551/main/message_terminals_can.c
Razvalyaev 7e0063eee0 #3 Скомпилилось, но пока ничего не вызывается
Все основные файлы подтянуты без изменений

Изменены (только папка main_matlab):
- заглушки для ненужных функций (main_matlab.c)
- iq библиотека (IQmathLib_matlab.c)
- библиотеки DSP281x
2025-01-13 11:09:58 +03:00

129 lines
4.0 KiB
C

/*
* message_terminals_can.c
*
* Created on: 15 ìàÿ 2020 ã.
* Author: yura
*/
#include <edrk_main.h>
#include <message_modbus.h>
#include <message2.h>
#include <vector.h>
#include "CAN_Setup.h"
#include "global_time.h"
#include "modbus_table_v2.h"
#include "oscil_can.h"
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "CRC_Functions.h"
#include "RS_Function_terminal.h"
#include "TuneUpPlane.h"
#include "control_station.h"
#define TERMINALS_CAN_TIME_WAIT 500 // ïåðèîä ïåðåäà÷è äàííûõ â òåðìèíàëêó
#pragma DATA_SECTION(buf_message_can_cmd,".slow_vars")
int buf_message_can_cmd[sizeof(CMD_TO_TMS_STRUCT)+10];
#pragma DATA_SECTION(buf_message_can_data,".slow_vars")
int buf_message_can_data[sizeof(TMS_TO_TERMINAL_STRUCT)+10];
#pragma DATA_SECTION(buf_message_can_data2,".slow_vars")
int buf_message_can_data2[sizeof(TMS_TO_TERMINAL_STRUCT)+10];
int *p_buf_message_can_data3;
void write_all_data_to_terminals_can(int run_force, unsigned int pause)
{
static unsigned int old_time = 0;
static unsigned int send_time = 0;
static int prev_send_to_can = 0;
static int count_sends = 0;
unsigned long old_t;
unsigned int i;
int real_mbox;
CMD_TO_TMS_STRUCT* pcommand = (CMD_TO_TMS_STRUCT *)(buf_message_can_cmd);
real_mbox = get_real_out_mbox(TERMINAL_TYPE_BOX, edrk.number_can_box_terminal_cmd);
// áûëà êîìàíäà íà îòïðàâêó ïîñûëêè è îíà åùå íå óøëà, òîãäà ñðáàñûâàåì ñ÷åò÷èê âðåìåíè ïàóçû ìåæäó ïîñûëêàìè,
// ò.å. TERMINALS_CAN_TIME_WAIT ìåæäó êîíöîì îòïðàâêè ïîñûëêè è íîâîé ïîñûëêè.
if (prev_send_to_can && CAN_cycle_full_free(real_mbox,CAN_BOX_STAT_OFF)==0)
{
old_time = (unsigned int)global_time.miliseconds;
return;
}
prev_send_to_can = 0;
if (!detect_pause_milisec(pause,&old_time))
return;
//func_fill_answer_to_TMS(&reply, pcommand);
func_pack_answer_to_TMS(&reply);
*(TMS_TO_TERMINAL_STRUCT*)buf_message_can_data2 = reply; // Íåîáõîäèìû ëåãêèå ïðèâåäåíèß
// reply.digit_data.byte01.byte_data = send_time;
/* reply.digit_data.byte02.byte_data = 0x66;
reply.analog_data.analog60_hi = 0x33;
reply.analog_data.analog60_lo = 0x44;
*/
reply.analog_data.analog58_hi = HIBYTE((unsigned int)control_station.raw_array_data[CONTROL_STATION_TERMINAL_CAN][0].all);
reply.analog_data.analog58_lo = LOBYTE((unsigned int)control_station.raw_array_data[CONTROL_STATION_TERMINAL_CAN][0].all);
// control_station.raw_array_data[CONTROL_STATION_TERMINAL_CAN][0].all
reply.analog_data.analog59_hi = HIBYTE((unsigned int)global_time.miliseconds);
reply.analog_data.analog59_lo = LOBYTE((unsigned int)global_time.miliseconds);
reply.analog_data.analog60_hi = HIBYTE(count_sends);
reply.analog_data.analog60_lo = LOBYTE(count_sends);
count_sends++;
if (count_sends>32768) count_sends=0;
// reply.analog_data.analog1_hi = HIBYTE(send_time);
// reply.analog_data.analog1_lo = LOBYTE(send_time);
// reply.analog_data.analog2_hi = HIBYTE(oscil_can.timer_send);
// reply.analog_data.analog2_lo = LOBYTE(oscil_can.timer_send);
p_buf_message_can_data3 = (int *)&reply.digit_data;
for (i=0;i<sizeof(TMS_TO_TERMINAL_STRUCT)-5;i++)
{
if (i%2)
{
buf_message_can_data[i>>1] |= ( (*p_buf_message_can_data3++) << 8) & 0xff00;
}
else
buf_message_can_data[i>>1] = ( (*p_buf_message_can_data3++) ) & 0x00ff;
}
if (CAN_cycle_full_free(real_mbox,CAN_BOX_STAT_ON))
{
old_t = global_time.microseconds;
CAN_cycle_send(
TERMINAL_TYPE_BOX,
edrk.number_can_box_terminal_cmd,
0,
&buf_message_can_data[0], ((sizeof(TMS_TO_TERMINAL_STRUCT)-5)>>1), CAN_BOX_STANDART_ADR, CAN_BOX_PRIORITY_NORMAL);
prev_send_to_can = 1;
send_time = (global_time.microseconds - old_t)/100;
}
}