Здравствуйте!
НЕ кидайте тапки сразу, по своей проблеме не смог найти решение на форуме.
История:
На базе ESP8266 разрабатываю устройство.
Его задача по протоколу modbus по serial получить значения от другого промышленного устройства. С подключением и протоколами разобрался. Но стоит задача эти данные и ряд других отправить через mqtt по GSM на сервер, где обработчик все разложит по нужным полкам. И для этого надо значения регистров преобразовать из uint16_t в CHAR и между ними добавить какой либо разделитель. Создана функция, которая получает пять значений регистров с типом uint_16t, каждое значение поочередно добавляет в массив этого же типа и должна его возвращать. Но при вызове функции и обращении к элементам массива в них нет значений. Все меняется, если в функции перед строкой "return <массив>", отправить его значение в терминал по serial.
Я конечно могу все засунуть в одну функцию, сразу полученное значение одного элемента преобразовать в char и сложить в массив. Но почему так?
НЕ кидайте тапки сразу, по своей проблеме не смог найти решение на форуме.
История:
На базе ESP8266 разрабатываю устройство.
Его задача по протоколу modbus по serial получить значения от другого промышленного устройства. С подключением и протоколами разобрался. Но стоит задача эти данные и ряд других отправить через mqtt по GSM на сервер, где обработчик все разложит по нужным полкам. И для этого надо значения регистров преобразовать из uint16_t в CHAR и между ними добавить какой либо разделитель. Создана функция, которая получает пять значений регистров с типом uint_16t, каждое значение поочередно добавляет в массив этого же типа и должна его возвращать. Но при вызове функции и обращении к элементам массива в них нет значений. Все меняется, если в функции перед строкой "return <массив>", отправить его значение в терминал по serial.
C++:
uint16_t * readCoils (int registers, int Quanty){
int j, result;
uint16_t data[5];
node.clearResponseBuffer();
result = node.readCoils(registers, Quanty);
if (result == node.ku8MBSuccess) {
for (int i = 0; i < 5; ++i){
data[i] = (uint16_t)node.getResponseBuffer(i);
}
}
Debug.println(*data); // без этой строки функция возвращает нули
return data;
}
char * get_char_data_coil(uint16_t *data, int count_data){
char data_all[80] = "";
char data_1[16] = "";
uint16_t T;
if (node.readCoils(0,1) == node.ku8MBSuccess){
for (int i = 0; i < count_data; ++i){
T = (uint16_t)data[i];
itoa(T, data_1, HEX);
strcat(data_all, data_1);
strcat(data_all, "@");
data_1[0] = 0;
}
}
else{
strcat(data_all, "NO_COILS");
}
Debug.print("coils = "); Debug.println(data_all);
return data_all;
}