Интерфейс работы со сканерами серии RF627 v20.x.x.x¶
Файлы rf62X_sdk.h, rf62X_types.h и rf62Xcore.h предоставляют весь
необходимый интерфейс для работы со сканерами серии RF627 v20.x.x.x
search_scanners¶
- Прототип:
rfUint8 search_scanners(vector_t *list, scanner_types_t type, rfUint32 timeout, protocol_types_t protocol);
- Описание:
Функция поиска устройств RF62X v20.x.x.x в сети
- Параметры:
list- Указатель на список, который будет заполнен найденными сканерами в сети.type- Тип сканера для поиска (kRF627_OLD, kRF627_SMART).timeout- Время поиска на каждом Ethernet интерфейсе (мс).protocol- Тип протокола, по которому будет осуществляться поиск (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief search_scanners - Search for RF62X devices over network
*
* @param[out] list Ptr to list of rf627 objects. If not null list will be
* filled with found devices
* @param[in] type Scanner's type (RF627-old, RF627-smart)
* @param[in] timeout Time to search
* @param[in] protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 search_scanners(
vector_t *list, scanner_types_t type,
rfUint32 timeout, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Initialize sdk library
core_init();
// Create value for scanners vector's type
vector_t* scanners = (vector_t*)calloc(1, sizeof (vector_t));
// Initialization vector
vector_init(&scanners);
// Iterate over all available network adapters in the current operating
// system to send "Hello" requests.
uint32_t count = 0;
for (int i=0; i<GetAdaptersCount(); i++)
{
uint32_t host_ip_addr = ntohl(inet_addr(GetAdapterAddress(i)));
uint32_t host_mask = ntohl(inet_addr(GetAdapterMasks(i)));
// call the function to change adapter settings inside the library.
set_platform_adapter_settings(host_mask, host_ip_addr);
// Search for rf627old devices over network by Service Protocol.
if (host_ip_addr != 0)
{
// Get another IP Addr and set this changes in adapter settings.
printf("Search scanners from:\n "
"* IP Address\t: %s\n "
"* Netmask\t: %s\n",
GetAdapterAddress(i), GetAdapterMasks(i));
search_scanners(scanners, kRF627_OLD, 300, kSERVICE);
// Print count of discovered rf627old in network
printf("Discovered\t: %d RF627\n",(int)vector_count(scanners)-count);
printf("-----------------------------------------\n");
count = (int)vector_count(scanners);
}
}
// Print count of discovered rf627old in network
printf("Was found\t: %d RF627 v20.x.x.x", (int)vector_count(scanners));
// some code...
}
get_info_about_scanner¶
- Прототип:
hello_information get_info_about_scanner(scanner_base_t *device, protocol_types_t protocol);
- Описание:
Функция получения информации о сканере из пакета приветствия (Hello-пакет)
- Параметры:
device- Указатель на сканерprotocol- Тип протокола, по которому был получен пакет приветствия (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
hello_informationв случае успеха, иначе ошибка
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief get_info_about_scanner - Get information about scanner from
* hello packet
*
* @param[in] device Ptr to scanner
* @param[in] protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return hello_information on success
*/
hello_information get_info_about_scanner(
scanner_base_t *device, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
hello_information result =
get_info_about_scanner(vector_get(scanners,i), kSERVICE);
rf627_smart_hello_info_by_service_protocol* info =
result.rf627smart.hello_info_service_protocol;
printf("\n\nID scanner's list: %d\n", i);
printf("-----------------------------------------\n");
printf("Device information: \n");
printf("* Name\t: %s\n", info->user_general_deviceName);
printf("* Serial\t: %d\n", info->fact_general_serial);
printf("* IP Addr\t: %s\n", info->user_network_ip);
printf("* MAC Addr\t: %s\n", info->fact_network_macAddr);
printf("\nWorking ranges: \n");
printf("* Zsmr, mm\t: %d\n", info->fact_general_smr);
printf("* Zmr , mm\t: %d\n", info->fact_general_mr);
printf("* Xsmr, mm\t: %d\n", info->fact_general_xsmr);
printf("* Xemr, mm\t: %d\n", info->fact_general_xemr);
printf("\nVersions: \n");
printf("* Firmware\t: %d.%d.%d\n",
info->fact_general_firmwareVer[0],
info->fact_general_firmwareVer[1],
info->fact_general_firmwareVer[2]);
printf("* Hardware\t: %d\n", info->fact_general_hardwareVer);
printf("-----------------------------------------\n");
}
// some code...
}
free_scanner¶
- Прототип:
void free_scanner(scanner_base_t *device);
- Описание:
Функция очистки памяти, используемой объектом типа
scanner_base_t- Параметры:
device- Указатель на сканер
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief free_scanner - Cleanup resources allocated by device
*
* @param[in] device Prt to scanner
*/
void free_scanner(scanner_base_t *device);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
while (vector_count(scanners) > 0)
{
uint32_t index = vector_count(scanners)-1;
// Get last scanner in vector for delete
scanner_base_t* device = vector_get(scanners, index);
// Cleanup resources allocated by device
free_scanner(device);
// Delete from vector
vector_delete(scanners, index);
}
}
connect_to_scanner¶
- Прототип:
rfUint8 connect_to_scanner(scanner_base_t *device, protocol_types_t protocol);
- Описание:
Функция установки соединения со сканером
- Параметры:
device- Указатель на сканерprotocol- Тип протокола, по которому будет выполнено подключение (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief connect_to_scanner - Establish connection to the RF62X device
*
* @param[in] device Ptr to scanner
* @param[in] protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 connect_to_scanner(
scanner_base_t *device, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection to the RF627 device by Service Protocol.
uint8_t is_connected = connect_to_scanner(scanner, kSERVICE);
if (!isConnected){
printf("Failed to connect to scanner!");
continue;
}
// some actions with scanner...
}
}
disconnect_from_scanner¶
- Прототип:
rfUint8 disconnect_from_scanner(scanner_base_t *device, protocol_types_t protocol);
- Описание:
Функция закрытия ранее установленного соединения со сканером
- Параметры:
device- Указатель на сканерprotocol- Тип протокола, по которому будет выполнено отключение (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief disconnect_from_scanner - Close connection to the device
*
* @param[in] device Prt to scanner
* @param[in] protocol Protocol's type (Service, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 disconnect_from_scanner(
scanner_base_t *device, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection to the RF627 device by Service Protocol.
uint8_t is_connected = connect_to_scanner(scanner, kSERVICE);
if (!isConnected){
printf("Failed to connect to scanner!");
continue;
}
// some actions with scanner...
// Disconnect from scanner.
disconnect_from_scanner(scanner, kSERVICE)
}
}
check_connection_to_scanner¶
- Прототип:
check_connection_to_scanner(scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
- Описание:
Функция проверки доступности сканера в сети (после подключения к нему)
- Параметры:
device- Указатель на сканерtimeout- Время проверки соединения со сканером (мс).protocol- Тип протокола, по которому будет выполнена проверка (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief check_connection_to_scanner - Check connection to the RF62X device
*
* @param[in] device Ptr to scanner
* @param[in] timeout Time to check connection
* @param[in] protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 check_connection_to_scanner(
scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection to the RF627 device by Service Protocol.
uint8_t is_connected = connect_to_scanner(scanner, kSERVICE);
if (!isConnected){
printf("Failed to connect to scanner!");
continue;
}
// Check connection to the RF627 device.
uint8_t is_available =
check_connection_to_scanner(scanner, 300, kSERVICE);
if (!is_available){
printf("Scanner is not available now!");
continue;
}
// some actions with scanner...
}
}
get_profile2D_from_scanner¶
- Прототип:
rf627_profile2D_t* get_profile2D_from_scanner(scanner_base_t *device, rfBool zero_points, rfBool realtime, protocol_types_t protocol);
- Описание:
Функция получения результатов измерений
- Параметры:
device- Указатель на сканерzero_points- Включать нулевые точки в возвращаемом профиле.realtime- Получение профиля в реальном времени (буферизация отключена).protocol- Тип протокола, по которому будет выполнена проверка (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
Указатель на
rf627_profile2D_tпри успехе, иначе -NULL
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief get_profile2D_from_scanner - Get measurement from scanner's
* data stream
*
* @param[in] device - ptr to scanner
* @param[in] zero_points Enable zero points in return profile2D
* @param[in] realtime Enable getting profile in realtime (buffering disabled)
* @param[in] protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return ptr to rf627_profile_t structure
*/
rf627_profile2D_t* get_profile2D_from_scanner(
scanner_base_t *device, rfBool zero_points,
rfBool realtime, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
connect_to_scanner(scanner, kSERVICE);
uint8_t zero_points = TRUE;
uint8_t realtime = TRUE;
// Get profile from scanner's data stream by Service Protocol.
rf627_profile2D_t* result = get_profile2D_from_scanner(
scanner, zero_points, realtime, kSERVICE);
rf627_smart_profile2D_t* profile2D = result->rf627old_profile2D;
if (profile2D != NULL) {
printf("Profile was successfully received!");
// some actions with profile...
free_profile2D(result);
}else
printf("Profile was not received!");
}
}
free_profile2D¶
- Прототип:
void free_profile2D(rf627_profile2D_t* profile);
- Описание:
Функция очистки ресурсов, выделенных для rf627_profile2D_t
- Параметры:
profile- Указатель на профиль
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief free_profile2D - Cleanup resources allocated for profile2D
*
* @param[in] profile Ptr to rf627_profile2D_t
*/
void free_profile2D(rf627_profile2D_t* profile);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
connect_to_scanner(scanner, kSERVICE);
uint8_t zero_points = TRUE;
uint8_t realtime = TRUE;
// Get profile from scanner's data stream by Service Protocol.
rf627_profile2D_t* result = get_profile2D_from_scanner(
scanner, zero_points, realtime, kSERVICE);
rf627_smart_profile2D_t* profile2D = result->rf627old_profile2D;
if (profile2D != NULL) {
printf("Profile was successfully received!");
// some actions with profile...
free_profile2D(result);
}else
printf("Profile was not received!");
}
}
read_params_from_scanner¶
- Прототип:
rfUint8 read_params_from_scanner(scanner_base_t *device, uint32_t timeout, protocol_types_t protocol);
- Описание:
Функция получения текущих параметров сканера. При вызове данной функции SDK вычитывает со сканера все актуальные параметры, сохраняя их ввиде «списка параметров» для дальнейшей работы во внутренней памяти SDK.
- Параметры:
device- Указатель на сканерtimeout- Время получения списка параметров со сканера.protocol- Тип протокола, по которому будет выполнена проверка (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief read_params_from_scanner - Read parameters from device to
* Internal structure.
*
* @param device Ptr to scanner
* @param timeout Time to read parameters
* @param protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 read_params_from_scanner(
scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
connect_to_scanner(scanner, kSERVICE);
uint8_t is_read = read_params_from_scanner(scanner, 300, kSERVICE);
if (is_read) {
printf("Scanner parameters were read successfully!");
// some actions with params...
}else
printf("Scanner parameters were not read!");
}
}
get_parameter¶
- Прототип:
parameter_t* get_parameter(scanner_base_t *device, const rfChar* param_name);
- Описание:
Функция получения конкретного параметра по его имени (ключу). При вызове данной функции SDK осуществляет поиск нужного параметра из последних прочитанных при вызове функции read_params_from_scanner . В случае, если запрашиваемый параметр отсутствует в конкретном сканере, функция вернёт NULL.
- Параметры:
device- Указатель на сканерparam_name- Имя (ключ) параметра.
- Возвращаемое значение:
parameter_t*при успехе, иначе -NULL
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief get_parameter - Search parameters by his name
*
* @param device - ptr to scanner
* @param param_name - name of parameter
*
* @return param on success, else - null
*/
parameter_t* get_parameter(
scanner_base_t *device, const rfChar* param_name);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection.
connect_to_scanner(scanner, kSERVICE);
// Read params.
read_params_from_scanner(scanner, 300, kSERVICE);
// Get parameter of Device Name
parameter_t* name = get_parameter(scanner,"user_general_deviceName");
if (name != NULL) {
char* value = name->val_str->value;
printf("Current Device Name\t: %s\n", value);
}
// Get parameter of Sensor Framerate
parameter_t* framerate = get_parameter(scanner,"user_sensor_framerate");
if (framerate != NULL) {
uint32_t value = framerate->val_uint32->value;
printf("Current FPS\t\t: %d\n", value);
}
// some actions with other parameters...
}
}
Примечание
Для более детального описания каждого параметра и его свойств см. RF62X Firmware Cloud
set_parameter¶
- Прототип:
rfUint8 set_parameter(scanner_base_t *device, parameter_t* param)
- Описание:
Функция установки конкретного параметра. При вызове данной функции происходит установка параметра в списке параметров во внутренней памяти SDK.* Для отправки изменений в сканер необходимо вызвать метод write_params_to_scanner .
- Параметры:
device- Указатель на сканер.param- Указатель на параметр для установки.
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief set_parameter - Set parameter
*
* @param device Ptr to scanner
* @param param Parameter name
*
* @return TRUE on success
*/
rfUint8 set_parameter(
scanner_base_t *device, parameter_t* param);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection.
connect_to_scanner(scanner, kSERVICE);
// Read params.
read_params_from_scanner(scanner, 300, kSERVICE);
//
// Example of working with the parameter type:
// uint32_t
//
// Get parameter of Laser Enabled
parameter_t* laser = get_parameter(scanner, "user_laser_enabled");
if (laser != NULL)
{
uint32_t is_enabled = laser->val_uint32->value;
printf("Current Laser State\t: %s\n", (is_enabled? "ON":"OFF"));
// Change the current state to the opposite
is_enabled = !is_enabled;
laser_enabled->val_uint32->value = is_enabled;
printf("New Laser State\t: %s\n", (is_enabled? "ON":"OFF"));
printf("-------------------------------------\n");
set_parameter(scanner, laser_enabled);
}
// some actions with other parameters before applying changes...
}
}
Примечание
Для более детального описания каждого параметра и его свойств см. RF62X Firmware Cloud
write_params_to_scanner¶
- Прототип:
rfUint8 write_params_to_scanner(scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol)
- Описание:
Функция передачи параметров из внутренней памяти SDK в сканер. При вызове данной функции происходит отправка изменённых параметров в сканер
- Параметры:
device- Указатель на сканер.timeout- Время отправки изменённых параметров в сканер.protocol- Тип протокола, по которому будет выполнена проверка (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief write_params_to_scanner - Send current parameters to device
*
* @param device Ptr to scanner
* @param timeout Time to send parameters
* @param protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 write_params_to_scanner(
scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
// Print count of discovered rf627old in network by Service Protocol
printf("Discovered: %d rf627-old\n", (int)vector_count(scanners));
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection.
connect_to_scanner(scanner, kSERVICE);
// Read params.
read_params_from_scanner(scanner, 300, kSERVICE);
//
// Example of working with the parameter type:
// uint32_t
//
// Get parameter of Laser Enabled
parameter_t* laser = get_parameter(scanner, "user_laser_enabled");
if (laser != NULL)
{
uint32_t is_enabled = laser->val_uint32->value;
printf("Current Laser State\t: %s\n", (is_enabled? "ON":"OFF"));
// Change the current state to the opposite
is_enabled = !is_enabled;
laser_enabled->val_uint32->value = is_enabled;
printf("New Laser State\t: %s\n", (is_enabled? "ON":"OFF"));
printf("-------------------------------------\n");
set_parameter(scanner, laser_enabled);
}
// some actions with other parameters before applying changes...
// Apply changed parameters to the device
uint8_t is_applied = write_params_to_scanner(scanner, 300, kSERVICE);
if (is_applied)
printf("Scanner parameters were applied successfully!");
else
printf("Scanner parameters were not applied!");
}
}
save_params_to_scanner¶
- Прототип:
rfUint8 save_params_to_scanner(scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
- Описание:
Функция сохранения параметров сканера во внутреннюю память устройства. Сохраненные параметры также будут использоваться после перезапуске устройства или после смены(обновления) прошивки.
- Параметры:
device- Указатель на сканер.timeout- Время ожидания результата сохранения параметров в сканере.protocol- Тип протокола, по которому будет выполнена проверка (Service Protocol, ENIP, Modbus-TCP)
- Возвращаемое значение:
TRUEпри успехе, иначе -FALSE
Пример в коде:
/** @file rf62X_sdk.h */
/**
* @brief save_params_to_scanner - Save changes to device's memory
*
* @param device Ptr to scanner
* @param timeout Time to save parameters
* @param protocol Protocol's type (Service Protocol, ENIP, Modbus-TCP)
*
* @return TRUE on success
*/
rfUint8 save_params_to_scanner(
scanner_base_t *device, rfUint32 timeout, protocol_types_t protocol);
------------------------------------------------------------------------------
/** @file main.c */
#include <stdio.h>
#include <stdlib.h>
#include "network.h"
#include "rf62Xcore.h"
#include "rf62X_sdk.h"
#include "rf62X_types.h"
int main()
{
// Actions before search (see example of search_scanners() method)...
// Search for RF627-old devices over network by Service Protocol.
search_scanners(scanners, kRF627_OLD, timeout, kSERVICE);
for (int i = 0; i < (int)vector_count(scanners); i++)
{
scanner_base_t* scanner = vector_get(scanners,i);
// Establish connection.
connect_to_scanner(scanner, kSERVICE);
// Read params.
read_params_from_scanner(scanner, 300, kSERVICE);
// After changing some parameters...
// Apply changed parameters to the device
write_params_to_scanner(scanner, 300, kSERVICE);
// Save current parameters in the device memory
uint8_t is_saved = save_params_to_scanner(scanner, 300, kSERVICE);
if (is_saved)
printf("Scanner parameters saved successfully!");
else
printf("Scanner parameters were not saved!");
}
}