roboforum.ru

Технический форум по робототехнике.

Прием/передачи int переменных через USART???

Re: Прием/передачи int переменных через USART???

D'Ark Trouyan » 26 фев 2009, 17:36

Виталий писал(а):
Код: Выделить всёРазвернуть
int my_int = 0xF00F;
char my_int_h = (char) (my_int >> 8);
char my_int_l = (char) (my_int);

putchar(my_int_h); //-> F0h
putchar(my_int_l); //-> 0Fh

//И после того ка приняли два байта подряд восстанавливаем int.
int input = my_int_l | (my_int_h << 8);




Всё здорово но последняя строчка не работает ))) (на практике)
с (my_int_h<<8) проблем нету все отлично, проблемы с my_int_l.
При получении на ПК переменную my_int_l она размером у нас один байт (т.к. передача происходит побайтовая), но при выполнении последней операции он преобразует ее в двубайтовый размер и в старшем байте одни еденицы.
Рабочая версия последней строчки:

Код: Выделить всёРазвернуть
   int input=(my_int_l & 255)|( my_int_h <<8);

Re: Прием/передачи int переменных через USART???

boez » 26 фев 2009, 18:04

Используй беззнаковые типы (unsigned char и unsigned int).

Re: Прием/передачи int переменных через USART???

executer » 26 фев 2009, 18:20

По ПО на стороне компа лучше посмотерть формы по пром.автоматике. там много про OPC технологию сказано.

Re: Прием/передачи int переменных через USART???

realsystem » 26 фев 2009, 20:10

Хмм, а S7-200 прекрасно понимает modbus и прочее :) Работал с ними. Что мешает поюзать стандартные вещи?

Re: Прием/передачи int переменных через USART???

boez » 26 фев 2009, 23:15

Кстати да. Modbus-RTU, да и Modbus-ASCII, замечательно реализуется на атмеге, он простой, чисто команду 03 реализуй - и тебе с головой хватит. Как раз под 16-битные числа заточена. На прошлой работе ваяли шлюз-контроллеры к нашим девайсам на AT90S8515 (потом перешли на атмегу8515) с Modbus. Вязали с какой-то скадой, щас не помню с какой, тоже вполне успешно. Причем как раз через OPC-сервер Modbus.

Re: Прием/передачи int переменных через USART???

realsystem » 27 фев 2009, 02:58

Я подключал СКАДА TraceMode и S7-200 по модбасу к плате управления насосом-дозатором на PIC'е, там большие числа гуляли - хорошее пром решение. Исходники модбаса(как слэйв так и мастер) для Сименса есть в сети, ну скелет во всяком случае точно.


Rambler\'s Top100 Mail.ru counter