Пишу программу на С# которая снимает показания с терморегуляторов "Поликон", рисует график зависимости температуры от времени и записывает данные в файл.
Терморегуляторы по rs-485 объединены в сеть и через интерфейсный преобразователь usb t--> rs-485 подкльченый к компютеру.
Компьютер видит все это дело как обычный Com порт, правда в данном случае он виртуальный. Что бы получить данные с прибора нужно просто послать на com порт сообщение определенного вида и затем считать с com порта поступившее сообщение.прибора
И ввиду того что у меня дома нет ни сети из терморегуляторов , ни даже хотя бы одного терморегулятора. А необходимость в отладки программы при ее написании имеется. Я запрограммировал arduino как эмулятор работы всех терморегуляторов объединненых в сеть. С Arduino тоже можно общаться просто посылая сообщения на сom порт и поэтому в программе ни чего менять ненадо.
Вот код программы Arduino:
#include stdio.h
int incomingByte = 0,
incomingByte1= 0,
newrandom = 0;
char ascii[9];
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() == 5) {
// read the incoming byte:
incomingByte = Serial.read();
if (incomingByte == '&'){
incomingByte = Serial.read();
incomingByte1 = Serial.read();
newrandom = random(100,999);
sprintf(ascii,">%c%c+%i\n", incomingByte, incomingByte1, newrandom) ;
Serial.print(ascii);
}
}
}
Ничего тут сложного нет. Arduino просто читает данные с com порта обрабатывет и посылает на com порт ответ необходимого вида.
И в результате что получается. С компьютера мы посылаем сообщение вида:
Терморегуляторы по rs-485 объединены в сеть и через интерфейсный преобразователь usb t--> rs-485 подкльченый к компютеру.
Компьютер видит все это дело как обычный Com порт, правда в данном случае он виртуальный. Что бы получить данные с прибора нужно просто послать на com порт сообщение определенного вида и затем считать с com порта поступившее сообщение.прибора
И ввиду того что у меня дома нет ни сети из терморегуляторов , ни даже хотя бы одного терморегулятора. А необходимость в отладки программы при ее написании имеется. Я запрограммировал arduino как эмулятор работы всех терморегуляторов объединненых в сеть. С Arduino тоже можно общаться просто посылая сообщения на сom порт и поэтому в программе ни чего менять ненадо.
Вот код программы Arduino:
#include stdio.h
int incomingByte = 0,
incomingByte1= 0,
newrandom = 0;
char ascii[9];
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() == 5) {
// read the incoming byte:
incomingByte = Serial.read();
if (incomingByte == '&'){
incomingByte = Serial.read();
incomingByte1 = Serial.read();
newrandom = random(100,999);
sprintf(ascii,">%c%c+%i\n", incomingByte, incomingByte1, newrandom) ;
Serial.print(ascii);
}
}
}
Ничего тут сложного нет. Arduino просто читает данные с com порта обрабатывет и посылает на com порт ответ необходимого вида.
И в результате что получается. С компьютера мы посылаем сообщение вида:
&051\n
где & - код начала сообщения
05 - это адрес терморегулятора,
1 - код комманды
\n - код конца сообщения, возврат каретки.
А в ответ компьютер ждет сообщение вида:

Вот график из моей программы, как пример ее работы с ардуино :
Тут так сказать эмулируется опрос программой двух терморегуляторов.
05 - это адрес терморегулятора,
1 - код комманды
\n - код конца сообщения, возврат каретки.
А в ответ компьютер ждет сообщение вида:
>05+-36,2\n
где > - код начала сообщения
05 - адрес терморегулятора
+ - код начала строки с данными,
-36,2 - данны по температуре.
\n - код окончания, возврат каретки.
Че делает arduino. Проверяет первый символ в сообщении, если все ОК читает два следуущих символа адреса и посылает ответ нужного вида. Содержащем в себе адрес, который был в полученном сообщении, и произвольное значение температуры в диапозоне от 100 до 999 градусов. Сразу скажу что получить большое разнообразие чисел с помощью функции random(100,999) мне неудалось, но для отладки программы её было достаточно.
Вот пример посылки команды через консоль.
05 - адрес терморегулятора
+ - код начала строки с данными,
-36,2 - данны по температуре.
\n - код окончания, возврат каретки.
Че делает arduino. Проверяет первый символ в сообщении, если все ОК читает два следуущих символа адреса и посылает ответ нужного вида. Содержащем в себе адрес, который был в полученном сообщении, и произвольное значение температуры в диапозоне от 100 до 999 градусов. Сразу скажу что получить большое разнообразие чисел с помощью функции random(100,999) мне неудалось, но для отладки программы её было достаточно.
Вот пример посылки команды через консоль.

Вот график из моей программы, как пример ее работы с ардуино :