Лабораторная работа №2
Основы моделирования в SimInTech элементов
измерительно-управляющих комплексов
UВых.
UВых.
Трубка
Д Д2
1
Компрессор
Клапан Клапан
3 22
Реле
Манометр
Резервуар
Клапан
1
-Напряжение коммутации 60 В.
-Ток коммутации 350 мА.
-Выходное сопротивление 2.5 Ом.
-Входной рабочий ток 5 мА.
Разрешение (Бит) 24
дифференциальный, с общей
Тип входа
землей
Корпус 28-SSOP
Фотография и распиновка ADS1256 представлена на рисунке 9.
Испытание №1.
Данный график получен с учетом того, что выход давления из клапанов шел
из двух клапанов, и сигнал сначала не проходил на установку из-за плохого
контакта. Изображение окна представлено на рисунке 46.
Испытание №2.
ПРИЛОЖЕНИЕ
uint8_t i;
int32_t iTemp;
uint8_t buf[3];
ARGUMENT
нет
OUTPUT:
нет
RETURN VALUE:
нет
******************************************************************
*************/
void my_init(void)
{
// Имена сигналов измерений
char *name_mes[] = {"mes_v0","mes_v1"};
// Имена сигналов оценок
char *name_ctrl[] = {"ctrl_u0","ctrl_u1","ctrl_u2","ctrl_u3"};
// Группа сигналов измерений
make_group(&mes,name_mes,ch_num);
// Группа сигналов оценок
make_group(&ctrl,name_ctrl,ctrl_num);
//while(1);
bcm2835_spi_begin();
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_LSBFIRST ); // The
default
bcm2835_spi_setDataMode(BCM2835_SPI_MODE1); // The default
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_1024); //
The default
bcm2835_gpio_fsel(SPICS, BCM2835_GPIO_FSEL_OUTP);//
bcm2835_gpio_write(SPICS, HIGH);
bcm2835_gpio_fsel(DRDY, BCM2835_GPIO_FSEL_INPT);
bcm2835_gpio_set_pud(DRDY, BCM2835_GPIO_PUD_UP);
//ADS1256_WriteReg(REG_MUX,0x01);
//ADS1256_WriteReg(REG_ADCON,0x20);
//ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS);
id = ADS1256_ReadChipID();
printf("\r\n");
printf("ID=\r\n");
if (id != 3)
{
printf("Error, ASD1256 Chip ID = 0x%d\r\n", (int)id);
}
else
{
printf("Ok, ASD1256 Chip ID = 0x%d\r\n", (int)id);
}
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_30000SPS);
ADS1256_StartScan(0);
// /*********Пример**************************/
// char *name[] = {"z1_xy01", "z1_xy02", "z1_xy03", "z1_xy04",
"z1_xy05"};
// /*Создаем группу из 5 сигналов*/
// make_group(&gr1, name, 5);
// /*********Конец Примера******************/
/******************************************************************
************
FUNCTION read_io()
Процедура вызывается исполняемой средой перед началом работы расчетных
модулей
Формируется пользователем. Предполагается считывание сигналов с
устройств ввода
вывода и запись их в бд сигналов для последующей обработки расчетными
модулями
ARGUMENT
нет
OUTPUT:
нет
RETURN VALUE:
нет
******************************************************************
*************/
void read_io(void)
{
// Чтение с АЦП
/*
for (i = 0; i < ch_num; i++)
{
adc[i] = ADS1256_GetAdc(i);
volt[i] = (adc[i] * 100) / 167;
fvolt[i] = adc[i]/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД
сигналов (СИмИнТек)
}
*/
while((ADS1256_Scan() == 0));
adc_0 = ADS1256_GetAdc(0);
fvolt_0 = adc_0/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД сигналов
(СИмИнТек)
adc_1 = ADS1256_GetAdc(1);
fvolt_1 = adc_1/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД сигналов
(СИмИнТек)
printf("\n%f\t%f\n\n", fvolt_0,fvolt_1);
// /*********Пример**************************/
// static unsigned char count = 0;
// static double count_d = 0;
// /*Запишем в группу*/
// /* второй фактический параметр 0 - соответствует первому сигналу в
группе
// * z1_xy01
// */
// set_value_in_group(&gr1, 0, &count);
// /* второй фактический параметр 3 - соответствует четвертому сигналу
в группе
// * z1_xy04
// */
// set_value_in_group(&gr1, 3, &count_d);
// /*Записываем значения сигналов в группе в бд*/
// write_group(&gr1);
// count++;
// count_d++;
// /*********Конец Примера******************/
/******************************************************************
************
FUNCTION write_io()
Процедура вызывается исполняемой средой после работы исполняемых
модулей.
Предполагается запись сигналов из бд в устройства вывода
ARGUMENT
нет
OUTPUT:
нет
RETURN VALUE:
нет
******************************************************************
*************/
void write_io(void)
{
// Считать сигналы управления из БД
// Данные логического типа из одного числа
unsigned char MyDataType = 0;
int MyLen = 0;
read_group(&ctrl);
get_value_from_group(&ctrl, 0, &ctrl_0, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 1, &ctrl_1, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 2, &ctrl_2, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 3, &ctrl_3, &MyDataType, &MyLen);
printf("%f\n",ctrl_0);
printf("%f\n",ctrl_1);
printf("%f\n",ctrl_2);
printf("%f\n",ctrl_3);
// Цифровой вывод
// bcm2835_gpio_write(PIN,HIGH/LOW)
/*
if (ctrl_0 < 0.5) bcm2835_gpio_write(RPI_GPIO_P1_11,LOW); else
bcm2835_gpio_write(RPI_GPIO_P1_11,HIGH);
if (ctrl_1 < 0.5) bcm2835_gpio_write(RPI_GPIO_P1_11,LOW); else
bcm2835_gpio_write(RPI_GPIO_P1_11,HIGH);*/
if (ctrl_0 < 0.5) bcm2835_gpio_write(19,0); else bcm2835_gpio_write(19,1);
if (ctrl_1 < 0.5) bcm2835_gpio_write(16,0); else bcm2835_gpio_write(16,1);
if (ctrl_2 < 0.5) bcm2835_gpio_write(26,0); else bcm2835_gpio_write(26,1);
if (ctrl_3 < 0.5) bcm2835_gpio_write(20,0); else bcm2835_gpio_write(20,1);
/*bcm2835_gpio_write(21,1);
bcm2835_delay(50);
bcm2835_gpio_write(21,0);
bcm2835_delay(50);*/
printf("\n");
/*
for (i = 0; i < ctrl_num; i++)
{
get_value_from_group(&mes, i, &ctrl[i], &MyDataType, &MyLen);
printf("%b\n",ctrl[i]);
}
*/
// /*********Пример**************************/
// unsigned char data_type1 = 0;
// unsigned char data_type2 = 0;
// int len1 = 0;
// int len2 = 0;
// unsigned char x = 0;
// double y = 0;
// /*Читаем группу из бд*/
// read_group(&gr1);
// /*Получим из группы значение сигнала*/
// /* второй фактический параметр 1 - соответствует второму сигналу в
группе
// * z1_xy02
// */
// get_value_from_group(&gr1, 1, &x, &data_type1, &len1);
// printf("x: %d len: %d type: %d \n", (int)x, len1, data_type1);
// /* второй фактический параметр 3 - соответствует четвертому сигналу
в группе
// * z1_xy04
// */
// get_value_from_group(&gr1, 3, &y, &data_type2, &len2);
// printf("y: %f len: %d type: %d \n", y, len2, data_type2);
// /*********Конец Примера******************/