123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #include "node_data_acquisition.h"
- #include "node_message.h"
- #include <math.h>
- void data_acquisition(void)
- {
- NODE_DEVICE_PARAMS *node;
- node = get_node_receive_params();
- int i = 0;
- while (i != 20)
- {
- if (node->params[i].protcol == MODBUS_READ)
- {
- uint16_t data[node->params[i].modbus_read->registerLength / 2]; // modbus¼Ä´æÆ÷³¤¶È
- mmodbus_set16bitOrder(node->params[i].modbus_read->bigLittleFormat);
- if (node->params[i].modbus_read->functionCode == 0x03)
- {
- bool success = mmodbus_readHoldingRegisters16i(node->params[i].modbus_read->slaveAddress,
- node->params[i].modbus_read->registerAddress,
- node->params[i].modbus_read->registerLength / 2,
- data);
- if (success)
- {
- uint32_t value;
- if (node->params[i].modbus_read->registerLength == 4)
- {
- value = (uint32_t)data[0] | data[1];
- node->params[i].modbus_read->rxLen = 4;
- }
- else if (node->params[i].modbus_read->registerLength == 2)
- {
- value = data[0];
- node->params[i].modbus_read->rxLen = 4;
- }
- if (node->params[i].modbus_read->precision == 0)
- {
- node->params[i].modbus_read->callback[0] = value;
- node->params[i].modbus_read->callback[1] = value << 8;
- node->params[i].modbus_read->callback[2] = value << 16;
- node->params[i].modbus_read->callback[3] = value << 24;
- }
- else
- {
- float convertedValue = (float)value / pow(10, node->params[i].modbus_read->precision);
- memcpy(node->params[i].modbus_read->callback, &convertedValue, 4);
- }
- }
- }
- }
- else if (node->params[i].protcol == MODBUS_WRITE)
- {
-
- }
- else if (node->params[i].protcol == DLT645_07 || node->params[i].protcol == DLT645_97)
- {
- uint8_t read_buf[10];
-
- node->params[i].dlt645_params->rxLen = 0;
- memset(read_buf, 0, 10);
- memset(node->params[i].dlt645_params->value, 0, 10);
- dlt645_set_addr(&dlt645, node->params[i].dlt645_params->deviceType645);
- int8_t rs;
- if (node->params[i].protcol == DLT645_07)
- {
- rs = dlt645_read_data(&dlt645, node->params[i].dlt645_params->dataType645, read_buf, DLT645_2007);
- }
- else if (node->params[i].protcol == DLT645_97)
- {
- rs = dlt645_read_data(&dlt645, node->params[i].dlt645_params->dataType645, read_buf, DLT645_1997);
- }
- if (rs != -1)
- {
- if (rs <= 4)
- {
- memcpy(node->params[i].modbus_read->callback, read_buf, 4);
- node->params[i].dlt645_params->rxLen = rs;
- }
- else if (rs == 5)
- {
- memcpy(node->params[i].modbus_read->callback, read_buf, 5);
- node->params[i].dlt645_params->rxLen = rs;
- }
- else if (rs > 5)
- {
- memcpy(node->params[i].modbus_read->callback, read_buf, 9);
- node->params[i].dlt645_params->rxLen = rs;
- }
- }
- else
- {
- node->params[i].dlt645_params->rxLen =0;
- }
- }
- }
- }
|