цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino

Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino

Автор: Mike(admin) от 7-05-2019, 05:55

С помощью Arduino можно управлять довольно большим количеством (до 14) устройств с портом RS-232, и в данном примере будет показано, как это сделать.


Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino

Для управления 14-ю устройствами с RS-232 нам понадобятся 14 плат PES-2606. PES-2606 - это простая в использовании плата расширения RS-232 для Arduino Uno и Mega, которая позволяет Arduino обмениваться данными с последовательным устройством через RS-232.


Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino

В частности, Arduino не использует контакты UART для связи с платой расширения RS-232. Поэтому пользователи могут использовать выводы Arduino UART для других целей. Кроме того, один Arduino Uno / Mega может связываться с несколькими платами расширения RS-232 (до 14) без использования выводов Arduino UART. Плата PES-2606 адресуется по идентификатору (ID), который можно установить вручную, установив DIP-переключатель.


В данном проекте мы сложим в стек 14 штук плат PES-2606 и подключим их к Arduino. Платы PES-2606 адресуются от 1 до 14.


Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino

Код программы Arduino предполагает следующее. Мы считываем данные с каждой платы RS-232 а затем распечатываем эти данные в последовательном мониторе с идентификатором платы (адресом платы). Также мы отправляем фрейм данных из последовательного монитора Arduino. Формат фрейма: ID_платы + ":" + данные + разделитель кадров.


Управляем 14-ю устройствами с RS-232 с помощью одной платы Arduino


#include <Phpoc.h>
#include <PhpocExpansion.h>

ExpansionSerial rs232_01(1);
ExpansionSerial rs232_02(2);
ExpansionSerial rs232_03(3);
ExpansionSerial rs232_04(4);
ExpansionSerial rs232_05(5);
ExpansionSerial rs232_06(6);
ExpansionSerial rs232_07(7);
ExpansionSerial rs232_08(8);
ExpansionSerial rs232_09(9);
ExpansionSerial rs232_10(10);
ExpansionSerial rs232_11(11);
ExpansionSerial rs232_12(12);
ExpansionSerial rs232_13(13);
ExpansionSerial rs232_14(14);

#define BUFFER_SIZE 100

byte serial_buf[BUFFER_SIZE];  // считывание буфера
int buf_len = 0;

void setup() {
    Serial.begin(115200);
    while(!Serial)
        ;
    
    Sppc.begin(PF_LOG_SPI | PF_LOG_NET);
    Expansion.begin();

	rs232_01.begin(F("115200N81N"));
	rs232_02.begin(F("115200N81N"));
	rs232_03.begin(F("115200N81N"));
	rs232_04.begin(F("115200N81N"));
	rs232_05.begin(F("115200N81N"));
	rs232_06.begin(F("115200N81N"));
	rs232_07.begin(F("115200N81N"));
	rs232_08.begin(F("115200N81N"));
	rs232_09.begin(F("115200N81N"));
	rs232_10.begin(F("115200N81N"));
	rs232_11.begin(F("115200N81N"));
	rs232_12.begin(F("115200N81N"));
	rs232_13.begin(F("115200N81N"));
	rs232_14.begin(F("115200N81N"));

}

void loop() {
	char byte;
	String expansionIdString = "";

	// Считать данные с RS-232 и распечатать на последовательном мониторе
	if(rs232_01.available()) {
		byte = rs232_01.read();
		expansionIdString = "01";
	} else if(rs232_02.available()) {
		byte = rs232_02.read();
		expansionIdString = "02";
	} else if(rs232_03.available()) {
		byte = rs232_03.read();
		expansionIdString = "03";
	} else if(rs232_04.available()) {
		byte = rs232_04.read();
		expansionIdString = "04";
	} else if(rs232_05.available()) {
		byte = rs232_05.read();
		expansionIdString = "05";
	} else if(rs232_06.available()) {
		byte = rs232_06.read();
		expansionIdString = "06";
	} else if(rs232_07.available()) {
		byte = rs232_07.read();
		expansionIdString = "07";
	} else if(rs232_08.available()) {
		byte = rs232_08.read();
		expansionIdString = "08";
	} else if(rs232_09.available()) {
		byte = rs232_09.read();
		expansionIdString = "09";
	} else if(rs232_10.available()) {
		byte = rs232_10.read();
		expansionIdString = "10";
	} else if(rs232_11.available()) {
		byte = rs232_11.read();
		expansionIdString = "11";
	} else if(rs232_12.available()) {
		byte = rs232_12.read();
		expansionIdString = "12";
	} else if(rs232_13.available()) {
		byte = rs232_13.read();
		expansionIdString = "13";
	} else if(rs232_14.available()) {
		byte = rs232_14.read();
		expansionIdString = "14";
	}

	if(expansionIdString != "")
	{
		Serial.print(expansionIdString.c_str());
		Serial.print(':');
		Serial.println(byte);
	}

	// Считаем фрейм данных с последовательного монитора и отправим на RS-232. Разделитель кадров - символ новой строки
	if(Serial.available()) {
		byte = Serial.read();
		serial_buf[buf_len] = byte;
		buf_len++;

		if(byte == 10) {
			char digit_st = serial_buf[0];
			char digit_nd = serial_buf[1];
			
			expansionIdString = String(digit_st) + String(digit_nd);
			int expansion_id = expansionIdString.toInt();

			for(int i = 0; i < buf_len; i++) {
				char buf_byte = serial_buf[i];
				if(expansion_id == 1)
					rs232_01.print(buf_byte);
				else if(expansion_id == 2)
					rs232_02.print(buf_byte);
				else if(expansion_id == 3)
					rs232_03.print(buf_byte);
				else if(expansion_id == 4)
					rs232_04.print(buf_byte);
				else if(expansion_id == 5)
					rs232_05.print(buf_byte);
				else if(expansion_id == 6)
					rs232_06.print(buf_byte);
				else if(expansion_id == 7)
					rs232_07.print(buf_byte);
				else if(expansion_id == 8)
					rs232_08.print(buf_byte);
				else if(expansion_id == 9)
					rs232_09.print(buf_byte);
				else if(expansion_id == 10)
					rs232_10.print(buf_byte);
				else if(expansion_id == 11)
					rs232_11.print(buf_byte);
				else if(expansion_id == 12)
					rs232_12.print(buf_byte);
				else if(expansion_id == 13)
					rs232_13.print(buf_byte);
				else if(expansion_id == 14)
					rs232_14.print(buf_byte);
			}

			buf_len = 0;
		}
	}
}



© digitrode.ru


Теги: Arduino, RS232



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий