From 1b494d7bb33ec5a716929fd09ed724072bd025d9 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 19 Oct 2023 14:03:44 +0800 Subject: [PATCH] =?UTF-8?q?communicationv3.3i=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=8D=97=E7=BD=91=E8=B0=B1=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/modbus-rtu.h | 42 ++ inc/modbus-tcp.h | 52 ++ inc/modbus-version.h | 53 ++ inc/modbus.h | 293 ++++++++ lib/qqq/libmodbus.tar.xz | Bin 0 -> 59908 bytes lib/test/libmodbus.tar | Bin 0 -> 276480 bytes src/analysis.c | 1453 +++++++++++++++++++++++++------------- src/analysis.h | 48 +- src/common.c | 4 +- src/ctrl_process.c | 4 +- src/goahead.c | 8 +- src/iec61850_process.c | 114 ++- src/main.c | 247 +++++-- src/readme.txt | 1 + src/sample_process.c | 76 +- src/ysp_cfg.ini | 1142 +++++++++++++++--------------- 16 files changed, 2373 insertions(+), 1164 deletions(-) create mode 100644 inc/modbus-rtu.h create mode 100644 inc/modbus-tcp.h create mode 100644 inc/modbus-version.h create mode 100644 inc/modbus.h create mode 100644 lib/qqq/libmodbus.tar.xz create mode 100644 lib/test/libmodbus.tar create mode 100644 src/readme.txt diff --git a/inc/modbus-rtu.h b/inc/modbus-rtu.h new file mode 100644 index 0000000..214a888 --- /dev/null +++ b/inc/modbus-rtu.h @@ -0,0 +1,42 @@ +/* + * Copyright © 2001-2011 Stéphane Raimbault + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#ifndef MODBUS_RTU_H +#define MODBUS_RTU_H + +#include "modbus.h" + +MODBUS_BEGIN_DECLS + +/* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5 + * RS232 / RS485 ADU = 253 bytes + slave (1 byte) + CRC (2 bytes) = 256 bytes + */ +#define MODBUS_RTU_MAX_ADU_LENGTH 256 + +MODBUS_API modbus_t* modbus_new_rtu(const char *device, int baud, char parity, + int data_bit, int stop_bit); + +#define MODBUS_RTU_RS232 0 +#define MODBUS_RTU_RS485 1 + +MODBUS_API int modbus_rtu_set_serial_mode(modbus_t *ctx, int mode); +MODBUS_API int modbus_rtu_get_serial_mode(modbus_t *ctx); + +#define MODBUS_RTU_RTS_NONE 0 +#define MODBUS_RTU_RTS_UP 1 +#define MODBUS_RTU_RTS_DOWN 2 + +MODBUS_API int modbus_rtu_set_rts(modbus_t *ctx, int mode); +MODBUS_API int modbus_rtu_get_rts(modbus_t *ctx); + +MODBUS_API int modbus_rtu_set_custom_rts(modbus_t *ctx, void (*set_rts) (modbus_t *ctx, int on)); + +MODBUS_API int modbus_rtu_set_rts_delay(modbus_t *ctx, int us); +MODBUS_API int modbus_rtu_get_rts_delay(modbus_t *ctx); + +MODBUS_END_DECLS + +#endif /* MODBUS_RTU_H */ diff --git a/inc/modbus-tcp.h b/inc/modbus-tcp.h new file mode 100644 index 0000000..abaef27 --- /dev/null +++ b/inc/modbus-tcp.h @@ -0,0 +1,52 @@ +/* + * Copyright © 2001-2010 Stéphane Raimbault + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#ifndef MODBUS_TCP_H +#define MODBUS_TCP_H + +#include "modbus.h" + +MODBUS_BEGIN_DECLS + +#if defined(_WIN32) && !defined(__CYGWIN__) +/* Win32 with MinGW, supplement to */ +#include +#if !defined(ECONNRESET) +#define ECONNRESET WSAECONNRESET +#endif +#if !defined(ECONNREFUSED) +#define ECONNREFUSED WSAECONNREFUSED +#endif +#if !defined(ETIMEDOUT) +#define ETIMEDOUT WSAETIMEDOUT +#endif +#if !defined(ENOPROTOOPT) +#define ENOPROTOOPT WSAENOPROTOOPT +#endif +#if !defined(EINPROGRESS) +#define EINPROGRESS WSAEINPROGRESS +#endif +#endif + +#define MODBUS_TCP_DEFAULT_PORT 502 +#define MODBUS_TCP_SLAVE 0xFF + +/* Modbus_Application_Protocol_V1_1b.pdf Chapter 4 Section 1 Page 5 + * TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes + */ +#define MODBUS_TCP_MAX_ADU_LENGTH 260 + +MODBUS_API modbus_t* modbus_new_tcp(const char *ip_address, int port); +MODBUS_API int modbus_tcp_listen(modbus_t *ctx, int nb_connection); +MODBUS_API int modbus_tcp_accept(modbus_t *ctx, int *s); + +MODBUS_API modbus_t* modbus_new_tcp_pi(const char *node, const char *service); +MODBUS_API int modbus_tcp_pi_listen(modbus_t *ctx, int nb_connection); +MODBUS_API int modbus_tcp_pi_accept(modbus_t *ctx, int *s); + +MODBUS_END_DECLS + +#endif /* MODBUS_TCP_H */ diff --git a/inc/modbus-version.h b/inc/modbus-version.h new file mode 100644 index 0000000..0218973 --- /dev/null +++ b/inc/modbus-version.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2010-2014 Stéphane Raimbault + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef MODBUS_VERSION_H +#define MODBUS_VERSION_H + +/* The major version, (1, if %LIBMODBUS_VERSION is 1.2.3) */ +#define LIBMODBUS_VERSION_MAJOR (3) + +/* The minor version (2, if %LIBMODBUS_VERSION is 1.2.3) */ +#define LIBMODBUS_VERSION_MINOR (1) + +/* The micro version (3, if %LIBMODBUS_VERSION is 1.2.3) */ +#define LIBMODBUS_VERSION_MICRO (6) + +/* The full version, like 1.2.3 */ +#define LIBMODBUS_VERSION 3.1.6 + +/* The full version, in string form (suited for string concatenation) + */ +#define LIBMODBUS_VERSION_STRING "3.1.6" + +/* Numerically encoded version, eg. v1.2.3 is 0x010203 */ +#define LIBMODBUS_VERSION_HEX ((LIBMODBUS_VERSION_MAJOR << 16) | \ + (LIBMODBUS_VERSION_MINOR << 8) | \ + (LIBMODBUS_VERSION_MICRO << 0)) + +/* Evaluates to True if the version is greater than @major, @minor and @micro + */ +#define LIBMODBUS_VERSION_CHECK(major,minor,micro) \ + (LIBMODBUS_VERSION_MAJOR > (major) || \ + (LIBMODBUS_VERSION_MAJOR == (major) && \ + LIBMODBUS_VERSION_MINOR > (minor)) || \ + (LIBMODBUS_VERSION_MAJOR == (major) && \ + LIBMODBUS_VERSION_MINOR == (minor) && \ + LIBMODBUS_VERSION_MICRO >= (micro))) + +#endif /* MODBUS_VERSION_H */ diff --git a/inc/modbus.h b/inc/modbus.h new file mode 100644 index 0000000..fbe20bc --- /dev/null +++ b/inc/modbus.h @@ -0,0 +1,293 @@ +/* + * Copyright © 2001-2013 Stéphane Raimbault + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#ifndef MODBUS_H +#define MODBUS_H + +/* Add this for macros that defined unix flavor */ +#if (defined(__unix__) || defined(unix)) && !defined(USG) +#include +#endif + +#ifndef _MSC_VER +#include +#else +#include "stdint.h" +#endif + +#include "modbus-version.h" + +#if defined(_MSC_VER) +# if defined(DLLBUILD) +/* define DLLBUILD when building the DLL */ +# define MODBUS_API __declspec(dllexport) +# else +# define MODBUS_API __declspec(dllimport) +# endif +#else +# define MODBUS_API +#endif + +#ifdef __cplusplus +# define MODBUS_BEGIN_DECLS extern "C" { +# define MODBUS_END_DECLS } +#else +# define MODBUS_BEGIN_DECLS +# define MODBUS_END_DECLS +#endif + +MODBUS_BEGIN_DECLS + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef OFF +#define OFF 0 +#endif + +#ifndef ON +#define ON 1 +#endif + +/* Modbus function codes */ +#define MODBUS_FC_READ_COILS 0x01 +#define MODBUS_FC_READ_DISCRETE_INPUTS 0x02 +#define MODBUS_FC_READ_HOLDING_REGISTERS 0x03 +#define MODBUS_FC_READ_INPUT_REGISTERS 0x04 +#define MODBUS_FC_WRITE_SINGLE_COIL 0x05 +#define MODBUS_FC_WRITE_SINGLE_REGISTER 0x06 +#define MODBUS_FC_READ_EXCEPTION_STATUS 0x07 +#define MODBUS_FC_WRITE_MULTIPLE_COILS 0x0F +#define MODBUS_FC_WRITE_MULTIPLE_REGISTERS 0x10 +#define MODBUS_FC_REPORT_SLAVE_ID 0x11 +#define MODBUS_FC_MASK_WRITE_REGISTER 0x16 +#define MODBUS_FC_WRITE_AND_READ_REGISTERS 0x17 + +#define MODBUS_BROADCAST_ADDRESS 0 + +/* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 1 page 12) + * Quantity of Coils to read (2 bytes): 1 to 2000 (0x7D0) + * (chapter 6 section 11 page 29) + * Quantity of Coils to write (2 bytes): 1 to 1968 (0x7B0) + */ +#define MODBUS_MAX_READ_BITS 2000 +#define MODBUS_MAX_WRITE_BITS 1968 + +/* Modbus_Application_Protocol_V1_1b.pdf (chapter 6 section 3 page 15) + * Quantity of Registers to read (2 bytes): 1 to 125 (0x7D) + * (chapter 6 section 12 page 31) + * Quantity of Registers to write (2 bytes) 1 to 123 (0x7B) + * (chapter 6 section 17 page 38) + * Quantity of Registers to write in R/W registers (2 bytes) 1 to 121 (0x79) + */ +#define MODBUS_MAX_READ_REGISTERS 125 +#define MODBUS_MAX_WRITE_REGISTERS 123 +#define MODBUS_MAX_WR_WRITE_REGISTERS 121 +#define MODBUS_MAX_WR_READ_REGISTERS 125 + +/* The size of the MODBUS PDU is limited by the size constraint inherited from + * the first MODBUS implementation on Serial Line network (max. RS485 ADU = 256 + * bytes). Therefore, MODBUS PDU for serial line communication = 256 - Server + * address (1 byte) - CRC (2 bytes) = 253 bytes. + */ +#define MODBUS_MAX_PDU_LENGTH 253 + +/* Consequently: + * - RTU MODBUS ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 + * bytes. + * - TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes. + * so the maximum of both backend in 260 bytes. This size can used to allocate + * an array of bytes to store responses and it will be compatible with the two + * backends. + */ +#define MODBUS_MAX_ADU_LENGTH 260 + +/* Random number to avoid errno conflicts */ +#define MODBUS_ENOBASE 112345678 + +/* Protocol exceptions */ +enum { + MODBUS_EXCEPTION_ILLEGAL_FUNCTION = 0x01, + MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS, + MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE, + MODBUS_EXCEPTION_SLAVE_OR_SERVER_FAILURE, + MODBUS_EXCEPTION_ACKNOWLEDGE, + MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY, + MODBUS_EXCEPTION_NEGATIVE_ACKNOWLEDGE, + MODBUS_EXCEPTION_MEMORY_PARITY, + MODBUS_EXCEPTION_NOT_DEFINED, + MODBUS_EXCEPTION_GATEWAY_PATH, + MODBUS_EXCEPTION_GATEWAY_TARGET, + MODBUS_EXCEPTION_MAX +}; + +#define EMBXILFUN (MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_FUNCTION) +#define EMBXILADD (MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS) +#define EMBXILVAL (MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE) +#define EMBXSFAIL (MODBUS_ENOBASE + MODBUS_EXCEPTION_SLAVE_OR_SERVER_FAILURE) +#define EMBXACK (MODBUS_ENOBASE + MODBUS_EXCEPTION_ACKNOWLEDGE) +#define EMBXSBUSY (MODBUS_ENOBASE + MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY) +#define EMBXNACK (MODBUS_ENOBASE + MODBUS_EXCEPTION_NEGATIVE_ACKNOWLEDGE) +#define EMBXMEMPAR (MODBUS_ENOBASE + MODBUS_EXCEPTION_MEMORY_PARITY) +#define EMBXGPATH (MODBUS_ENOBASE + MODBUS_EXCEPTION_GATEWAY_PATH) +#define EMBXGTAR (MODBUS_ENOBASE + MODBUS_EXCEPTION_GATEWAY_TARGET) + +/* Native libmodbus error codes */ +#define EMBBADCRC (EMBXGTAR + 1) +#define EMBBADDATA (EMBXGTAR + 2) +#define EMBBADEXC (EMBXGTAR + 3) +#define EMBUNKEXC (EMBXGTAR + 4) +#define EMBMDATA (EMBXGTAR + 5) +#define EMBBADSLAVE (EMBXGTAR + 6) + +extern const unsigned int libmodbus_version_major; +extern const unsigned int libmodbus_version_minor; +extern const unsigned int libmodbus_version_micro; + +typedef struct _modbus modbus_t; + +typedef struct _modbus_mapping_t { + int nb_bits; + int start_bits; + int nb_input_bits; + int start_input_bits; + int nb_input_registers; + int start_input_registers; + int nb_registers; + int start_registers; + uint8_t *tab_bits; + uint8_t *tab_input_bits; + uint16_t *tab_input_registers; + uint16_t *tab_registers; +} modbus_mapping_t; + +typedef enum +{ + MODBUS_ERROR_RECOVERY_NONE = 0, + MODBUS_ERROR_RECOVERY_LINK = (1<<1), + MODBUS_ERROR_RECOVERY_PROTOCOL = (1<<2) +} modbus_error_recovery_mode; + +MODBUS_API int modbus_set_slave(modbus_t* ctx, int slave); +MODBUS_API int modbus_get_slave(modbus_t* ctx); +MODBUS_API int modbus_set_error_recovery(modbus_t *ctx, modbus_error_recovery_mode error_recovery); +MODBUS_API int modbus_set_socket(modbus_t *ctx, int s); +MODBUS_API int modbus_get_socket(modbus_t *ctx); + +MODBUS_API int modbus_get_response_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); +MODBUS_API int modbus_set_response_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); + +MODBUS_API int modbus_get_byte_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); +MODBUS_API int modbus_set_byte_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); + +MODBUS_API int modbus_get_indication_timeout(modbus_t *ctx, uint32_t *to_sec, uint32_t *to_usec); +MODBUS_API int modbus_set_indication_timeout(modbus_t *ctx, uint32_t to_sec, uint32_t to_usec); + +MODBUS_API int modbus_get_header_length(modbus_t *ctx); + +MODBUS_API int modbus_connect(modbus_t *ctx); +MODBUS_API void modbus_close(modbus_t *ctx); + +MODBUS_API void modbus_free(modbus_t *ctx); + +MODBUS_API int modbus_flush(modbus_t *ctx); +MODBUS_API int modbus_set_debug(modbus_t *ctx, int flag); + +MODBUS_API const char *modbus_strerror(int errnum); + +MODBUS_API int modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); +MODBUS_API int modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest); +MODBUS_API int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); +MODBUS_API int modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest); +MODBUS_API int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); +MODBUS_API int modbus_write_register(modbus_t *ctx, int reg_addr, const uint16_t value); +MODBUS_API int modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data); +MODBUS_API int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data); +MODBUS_API int modbus_mask_write_register(modbus_t *ctx, int addr, uint16_t and_mask, uint16_t or_mask); +MODBUS_API int modbus_write_and_read_registers(modbus_t *ctx, int write_addr, int write_nb, + const uint16_t *src, int read_addr, int read_nb, + uint16_t *dest); +MODBUS_API int modbus_report_slave_id(modbus_t *ctx, int max_dest, uint8_t *dest); + +MODBUS_API modbus_mapping_t* modbus_mapping_new_start_address( + unsigned int start_bits, unsigned int nb_bits, + unsigned int start_input_bits, unsigned int nb_input_bits, + unsigned int start_registers, unsigned int nb_registers, + unsigned int start_input_registers, unsigned int nb_input_registers); + +MODBUS_API modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits, + int nb_registers, int nb_input_registers); +MODBUS_API void modbus_mapping_free(modbus_mapping_t *mb_mapping); + +MODBUS_API int modbus_send_raw_request(modbus_t *ctx, const uint8_t *raw_req, int raw_req_length); + +MODBUS_API int modbus_receive(modbus_t *ctx, uint8_t *req); + +MODBUS_API int modbus_receive_confirmation(modbus_t *ctx, uint8_t *rsp); + +MODBUS_API int modbus_reply(modbus_t *ctx, const uint8_t *req, + int req_length, modbus_mapping_t *mb_mapping); +MODBUS_API int modbus_reply_exception(modbus_t *ctx, const uint8_t *req, + unsigned int exception_code); + +/** + * UTILS FUNCTIONS + **/ + +#define MODBUS_GET_HIGH_BYTE(data) (((data) >> 8) & 0xFF) +#define MODBUS_GET_LOW_BYTE(data) ((data) & 0xFF) +#define MODBUS_GET_INT64_FROM_INT16(tab_int16, index) \ + (((int64_t)tab_int16[(index) ] << 48) + \ + ((int64_t)tab_int16[(index) + 1] << 32) + \ + ((int64_t)tab_int16[(index) + 2] << 16) + \ + (int64_t)tab_int16[(index) + 3]) +#define MODBUS_GET_INT32_FROM_INT16(tab_int16, index) ((tab_int16[(index)] << 16) + tab_int16[(index) + 1]) +#define MODBUS_GET_INT16_FROM_INT8(tab_int8, index) ((tab_int8[(index)] << 8) + tab_int8[(index) + 1]) +#define MODBUS_SET_INT16_TO_INT8(tab_int8, index, value) \ + do { \ + tab_int8[(index)] = (value) >> 8; \ + tab_int8[(index) + 1] = (value) & 0xFF; \ + } while (0) +#define MODBUS_SET_INT32_TO_INT16(tab_int16, index, value) \ + do { \ + tab_int16[(index) ] = (value) >> 16; \ + tab_int16[(index) + 1] = (value); \ + } while (0) +#define MODBUS_SET_INT64_TO_INT16(tab_int16, index, value) \ + do { \ + tab_int16[(index) ] = (value) >> 48; \ + tab_int16[(index) + 1] = (value) >> 32; \ + tab_int16[(index) + 2] = (value) >> 16; \ + tab_int16[(index) + 3] = (value); \ + } while (0) + +MODBUS_API void modbus_set_bits_from_byte(uint8_t *dest, int idx, const uint8_t value); +MODBUS_API void modbus_set_bits_from_bytes(uint8_t *dest, int idx, unsigned int nb_bits, + const uint8_t *tab_byte); +MODBUS_API uint8_t modbus_get_byte_from_bits(const uint8_t *src, int idx, unsigned int nb_bits); +MODBUS_API float modbus_get_float(const uint16_t *src); +MODBUS_API float modbus_get_float_abcd(const uint16_t *src); +MODBUS_API float modbus_get_float_dcba(const uint16_t *src); +MODBUS_API float modbus_get_float_badc(const uint16_t *src); +MODBUS_API float modbus_get_float_cdab(const uint16_t *src); + +MODBUS_API void modbus_set_float(float f, uint16_t *dest); +MODBUS_API void modbus_set_float_abcd(float f, uint16_t *dest); +MODBUS_API void modbus_set_float_dcba(float f, uint16_t *dest); +MODBUS_API void modbus_set_float_badc(float f, uint16_t *dest); +MODBUS_API void modbus_set_float_cdab(float f, uint16_t *dest); + +#include "modbus-tcp.h" +#include "modbus-rtu.h" + +MODBUS_END_DECLS + +#endif /* MODBUS_H */ diff --git a/lib/qqq/libmodbus.tar.xz b/lib/qqq/libmodbus.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..dc2e4de5452cee244ef2e94d68242c3348510e3c GIT binary patch literal 59908 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�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 literal 0 HcmV?d00001 diff --git a/src/analysis.c b/src/analysis.c index ce17f5c..4394262 100644 --- a/src/analysis.c +++ b/src/analysis.c @@ -6,46 +6,47 @@ #include #include "thread.h" #include "analysis.h" +//#include "modbus_rtu_slave.h" #define DEBUG_ANALYSIS - -#define REDUCE_BIT 3 // -#define SUM_NUM 8 //ÿĿ -#define MOVE_NUM 8 //ƶĵ -#define JUDGE_NUM 8 //ÿжϵĵ - -#define MAX_JUDGE_NUM 32 //жϵ -#define MIN_JUDGE_NUM 7 //Сжϵ +#define AVR_NUM 4 //平均滤波点数,原来是8点 +#define REDUCE_BIT 1 //缩小位数,原来是2bit +#define SUM_NUM 8 //ÿ��Ŀ��� +#define MOVE_NUM 8 //��������ƶ��ĵ��� +#define JUDGE_NUM 8 //ÿ�������жϵĵ��� + +#define MAX_JUDGE_NUM 32 //�����жϵ��� +#define MIN_JUDGE_NUM 7 //��С�жϵ��� -#define MIN_AMP 4 //С -#define MIN_LEN 12 //Сʱ +#define MIN_AMP 8 //最小峰高,原来是4 +#define MIN_LEN 24 //起点到顶点的最低宽度 #define BACK_SUM_NUM 20 /* -˳˵: -ΪH2,CO,CH4,C2H4,C2H6,C2H2 -ǰ㹫ʽΪ: +����˳��˵��: +����ΪH2,CO,CH4,C2H4,C2H6,C2H2 +ǰ������㹫ʽΪ: S=A*K=K*h*tr -A=߼ֵ -h=(ߵֵ-׼ֵ) -tr=ʱ() -K=궨ϵ +A=��߼���ֵ +h=���(�ߵ�ֵ-��׼ֵ) +tr=����ʱ��(��) +K=�궨ϵ�� -㹫ʽΪ: +��������㹫ʽΪ: S=A*K=K*1.064*h*(y/2)=1.064*K*h*h/4 A=1.064*h*(y/2)=1.064*h*h/4 -y/2= -h==ߵ- +y/2=���� +h=���=������ߵ�-������ y/2=h/2 -߶ʽ -H'=Kx(H-С߶)*tr+Ũֵ -HΪĸ߶ - -//ʽ: -S'=Kx(S-С)+Ũֵ -KxΪK1-K12еһϵ,SΪԭʼݼ -KxͨSСλòKxļ -СΪkx_fac4,KxΪkx_fac1,ŨֵΪkx_fac2 +�߶�������ʽ +H'=Kx(H-��С�߶�)*tr+���Ũ��ֵ +HΪ������ĸ߶� + +//���������ʽ: +S'=Kx(S-��С���)+���Ũ��ֵ +����KxΪK1-K12�е�һ��ϵ��,SΪԭʼ���ݼ��������� +Kxͨ��S������������С�����������λ�ò��Kx�����ļ��� +��С���Ϊkx_fac4,KxΪkx_fac1,��Ũ��ֵΪkx_fac2 */ #define MIN_SLOPE 1 @@ -55,6 +56,14 @@ Kxͨ #define ANALYSIS_MQ "/analysis_mq" #define MAX_DATA_LEN 5000 +char *make_south_file_name(time_t t); +int save_south_wave(char *file_name); +int mk_south_wave(YSP_PARA *para_ptr,FIND_POS_DATA *pos_data,YSP_PRI_DATA *out_data); + +const char *gas_names[]={"H2","CO","CH4","C2H4","C2H6","C2H2","CO2"}; + +SOUTH_WAVE_TYPE south_wave; + mqd_t analysis_mq;// char analysis_buf[ANALYSIS_MESSAGE_SIZE]; @@ -66,12 +75,12 @@ int filter_data[MAX_DATA_LEN]; int raw_data_buf[MAX_DATA_LEN]; /* -1.бʼ㶥 -2.һδҵ,ֵ -3.ǰδҳ,趨IJ +1.����б�ʼ��㶥������ +2.��һ��δ�ҵ�,���������ֵ +3.ǰ����δ�ҳ�,�����趨�IJ������� */ -//͵ۼӺ +//�������͵��ۼӺ� int cal_int_sum(int *buf,int len) { int sum=0; @@ -83,7 +92,7 @@ int cal_int_sum(int *buf,int len) return sum; } -//͵ƽֵ +//�������͵�ƽ��ֵ int cal_int_avr(int *buf,int len) { int sum=0; @@ -93,7 +102,7 @@ int cal_int_avr(int *buf,int len) return sum/len; } -//С̱ڷ +//��С���̱��ڷ��� void reduce_data(int *buf,int len,int *out,int fac) { int i; @@ -105,7 +114,7 @@ void reduce_data(int *buf,int len,int *out,int fac) -//ֵ,ֵλ +//�������ֵ,�������ֵ��λ�� int find_max_val(int *buf,int len,int *val) { int i; @@ -147,7 +156,7 @@ int find_max_val_ex(int *buf,int len,int *val) return max_pos; } -//ref_val᷵һֵ +//ref_val�᷵�����һ���ֵ void process_data(int *raw_data,int len,int *ref_val) { static float proc_data[MAX_DATA_LEN]; @@ -160,20 +169,20 @@ void process_data(int *raw_data,int len,int *ref_val) { proc_data[i]=(float)raw_data[i]; } - //start_val=(float)cal_int_avr(&raw_data[0],4);//ȡ㿪ʼ8ƽ - //end_val=(float)cal_int_avr(&raw_data[len-9],4);//ȡյǰ8ƽ + //start_val=(float)cal_int_avr(&raw_data[0],4);//ȡ��㿪ʼ8��ƽ�� + //end_val=(float)cal_int_avr(&raw_data[len-9],4);//ȡ�յ�ǰ8��ƽ�� start_val=(float)raw_data[0]; end_val=(float)raw_data[len-1]; - delt_y=(end_val-start_val)/len;//ݶ + delt_y=(end_val-start_val)/len;//�����ݶ� - offs=(float)(start_val-((float)(*ref_val)));//ֵȥοֵƫ + offs=(float)(start_val-((float)(*ref_val)));//����ֵ��ȥ�ο�ֵ���ƫ�� //printf("start=%f ref_val=%d offs=%f\n",start_val,*ref_val,offs); //if(delt_y>0) //{ for(i=0;i(pre_sum+delt)) { //printf("arrived 1\n"); @@ -302,7 +311,7 @@ int find_left_pos(int *buf,int len,int sum_num,int delt,int *ret) return -1; } -//,i͵i+forward_cnt,Ƚcontine_cnt,Сбdelt +//���������,��i��͵�i+forward_cnt���,�����Ƚ�contine_cnt��,��Сб��delt int FindLeftPos(int *buf,int len,int contine_cnt,int forward_cnt,int delt,int *ret) {//contine_cnt=5,forward_cnt=8 int i,result; @@ -329,9 +338,9 @@ int FindLeftPos(int *buf,int len,int contine_cnt,int forward_cnt,int delt,int *r return -2; } -//,(i㵽i+per_widthƽֵ) -//(i+tot_widthi+tot_width+per_widthƽֵ) -//Ƚ,Ƚ3,ÿȽһƶmov_width +//���������,��(i�㵽��i+per_width��ƽ��ֵ)�� +//��(i+tot_width����i+tot_width+per_width��ƽ��ֵ) +//�Ƚ�,�����Ƚ�3��,ÿ�Ƚ�һ������ƶ�mov_width�� int FindLeftPosEx(int *buf,int len,int tot_width,int per_width,int mov_width,int min_slope) { int i,n,result; @@ -400,9 +409,341 @@ int FindMaxPos(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *peak) } +//以下为新添加函数 +//从左往右找最大值 +int get_lft_max_val_and_pos(int *buf,unsigned int buf_len,int *pos,int *val) +{ + unsigned int i; + int max_val;//最大值 + unsigned int max_pos; //最大值位置 + max_val=buf[0]; + max_pos=0; + for(i=0;imax_val) + { //上升 + max_val=buf[i]; + max_pos=i; + } + } + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} +//从右往左找找最大值 +int get_rht_max_val_and_pos(int *buf,unsigned int buf_len,int *pos,int *val) +{//注意直线的影响 + unsigned int i; + int max_val;//最大值 + unsigned int max_pos; //最大值位置 + max_val=buf[buf_len-1]; + max_pos=buf_len-1; + for(i=buf_len;i>0;i--) + { + if(buf[i-1]>max_val) + { //上升 + max_val=buf[i-1]; + max_pos=i-1; + } + } + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} +//区间查找顶点 +int get_top_val_pos(int *buf,unsigned int buf_len,int *pos,int *val) +{ + unsigned int i; + int lft_val,rht_val;// + unsigned int lft_pos,rht_pos; // + int max_val;//最大值 + unsigned int max_pos; //最大值位置 + + get_lft_max_val_and_pos(buf,buf_len,&lft_pos,&lft_val);//查找最大值 + //get_rht_max_val_and_pos(buf,buf_len,&rht_pos,&rht_val);//查找最大值 + //max_pos=(lft_pos+rht_pos+1)/2; + if((lft_pos+(buf_len/10))>buf_len) //顶点不能超过整个缓冲区宽度的1/10 + { + printf("find top pos failed,lft_pos=%d,buf_len=%d\n",lft_pos,buf_len); + LOG_DEBUG(TRACE_DEBUG,"find top pos failed,lft_pos=%d,buf_len=%d\n",lft_pos,buf_len); + return -1; + } + get_rht_max_val_and_pos(&buf[lft_pos],buf_len-lft_pos,&rht_pos,&rht_val);//查找最大值 + max_pos=lft_pos+rht_pos/2; + max_val=buf[max_pos]; + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} + +//查找起点,delt为参数最小左梯度,严格点要判断4点 +int get_str_val_pos(int *buf,unsigned int len,int avr_num,int delt,int *pos,int *val) +{//起点条件为(D0+delt)D1-D0 + int i,result; + int lft_avr,curr_avr,rht_avr; + //int last_avr; + //从左往右边找 + lft_avr=cal_int_avr(&buf[0],avr_num);//计算平均值 + result=1; + for(i=0;i<(len-avr_num);i+=avr_num) + { + curr_avr=cal_int_avr(&buf[i],avr_num); + if(curr_avr>=(lft_avr+delt))//后面一点比前面一点大delt + { + rht_avr=cal_int_avr(&buf[i+avr_num],avr_num);//再往后取一点 + if(rht_avr>(curr_avr+delt)) + { + if((rht_avr-curr_avr)>(curr_avr-lft_avr)) + { + //last_avr=cal_int_avr(&buf[i+2*avr_num],avr_num); + //if((last_avr-rht_avr)>(rht_avr-curr_avr)) + //{ + result=0;//成功找到起点标志 + if(pos!=NULL) + *pos=i+(avr_num/2); + if(val!=NULL) + *val=buf[i+(avr_num/2)]; + break; + //} + } + } + } + lft_avr=curr_avr; + } + return result; +} + +//查找顶点的方法,去连续的8点累加和下一个8点累加和比较,累加值应增加 +//增加到减少后未转折点,从最近的24点里找最大值 +//先找起点再找顶点 int find_key_pos1(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) +{ + int i,n,*data_stream; + int start_pos,end_pos,cen_pos; + int left_pos,top_pos,right_pos; + int ret=0; + int top_val,left_val; + int top_flg=0,left_flg=0; + int str_pos,str_val,peak_pos,peak_val; + int min_slope; + int mov_tick; + int lpos,rpos,cpos; + int tmp_start_pos; + int find_ok_flg=0; + + for(i=INDEX_H2;i<=INDEX_C2H2;i++) + { + //从参数结构获取区间参数 + start_pos=para_ptr->gas_cal_fac[i].position.start;//起点位置 + cen_pos=para_ptr->gas_cal_fac[i].position.peak;//波峰位置 + end_pos=para_ptr->gas_cal_fac[i].position.end;//结束位置 + find_ok_flg=0; + //找起点 + if(get_str_val_pos(&buf[start_pos],cen_pos-start_pos,JUDGE_NUM,(int)para_ptr->gas_cal_fac[i].gradient.lYmin,&str_pos,&str_val)==0)//JUDGE_NUM点平均值 + { + //找到了起点 + str_pos+=start_pos; + printf("find str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + LOG_DEBUG(TRACE_DEBUG,"find str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + } + else + { + //未找到起点,使用默认起点 + printf("can not find start_pos[%d],now try again\n",i); + LOG_DEBUG(TRACE_DEBUG,"can not find start_pos[%d],now try again\n",i); + //改变阈值再找一遍 + if(get_str_val_pos(&buf[start_pos],cen_pos-start_pos,(JUDGE_NUM*3)/2,(int)para_ptr->gas_cal_fac[i].gradient.lYmin,&str_pos,&str_val)==0)//JUDGE_NUM点平均值 + { + str_pos+=start_pos; + printf("find str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + LOG_DEBUG(TRACE_DEBUG,"find str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + } + else + { //未找到起点 + str_pos=start_pos; + str_val=buf[str_pos]; + printf("canot find str_pos:use default str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + LOG_DEBUG(TRACE_DEBUG,"canot find str_pos:use default str_pos[%d]=%d,str_val=%d ok\n",i,str_pos,str_val); + find_ok_flg|=1; + } + } + + //找顶点 + tmp_start_pos=str_pos+16; + if(get_top_val_pos(&buf[tmp_start_pos],end_pos-tmp_start_pos,&peak_pos,&peak_val)==0) + { //找到顶点 + peak_pos+=tmp_start_pos; + printf("find peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + LOG_DEBUG(TRACE_DEBUG,"find peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + } + else + { + /* 未找到顶点 */ + peak_pos=cen_pos; + peak_val=buf[peak_pos]; + printf("canot find peak_pos:use default peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + LOG_DEBUG(TRACE_DEBUG,"canot find peak_pos:use default peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + find_ok_flg|=2; + } + + if(pos_data!=NULL) + { + pos_data->position[i].start=str_pos; + pos_data->position[i].peak=peak_pos; + pos_data->position[i].end=2*peak_pos-str_pos; + } + + if(find_ok_flg==0) + { + if((peak_val>(str_val+MIN_AMP))&&(peak_pos>(str_pos+MIN_LEN))) + { + ret|=(1<gas_cal_fac[i].position.start; + end_pos=para_ptr->gas_cal_fac[i].position.end; + if(i==INDEX_CO) + { + //查找起点,防止波形粘联 + } + else + { + lpos=start_pos; + rpos=end_pos; + } + + //找顶点 + if(get_top_val_pos(&buf[lpos],rpos-lpos,&peak_pos,&peak_val)==0) + { + peak_pos+=lpos; + printf("find peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + LOG_DEBUG(TRACE_DEBUG,"find peak_pos[%d]=%d,peak_val=%d\n",i,peak_pos,peak_val); + //找左起点,从start_pos-peak_pos之间查找 + if(get_str_val_pos(&buf[lpos],peak_pos-start_pos,JUDGE_NUM,(int)para_ptr->gas_cal_fac[i].gradient.lYmin,&str_pos,&str_val)==0)//JUDGE_NUM点平均值 + { + str_pos+=lpos; + printf("find str_pos[%d]=%d,str_val=%d\n",i,str_pos,str_val); + LOG_DEBUG(TRACE_DEBUG,"find str_pos[%d]=%d,str_val=%d\n",i,str_pos,str_val); + if((peak_val>(str_val+MIN_AMP))&&(peak_pos>(str_pos+MIN_LEN))) + { + if(pos_data!=NULL) + { + pos_data->position[i].start=str_pos; + pos_data->position[i].peak=peak_pos; + pos_data->position[i].end=2*peak_pos-str_pos; + } + ret|=(1<gas_cal_fac[i].gradient.lYmin,&str_pos,&str_val)==0)//JUDGE_NUM点平均值 + { + str_pos+=start_pos; + printf("find str_pos[%d]=%d,str_val=%d\n",i,str_pos,str_val); + LOG_DEBUG(TRACE_DEBUG,"find str_pos[%d]=%d,str_val=%d\n",i,str_pos,str_val); + if((peak_val>(str_val+MIN_AMP))&&(peak_pos>(str_pos+MIN_LEN))) + { + if(pos_data!=NULL) + { + pos_data->position[i].start=str_pos; + pos_data->position[i].peak=peak_pos; + pos_data->position[i].end=2*peak_pos-str_pos; + } + ret|=(1<(str_val+MIN_AMP))&&(peak_pos>(str_pos+MIN_LEN))) + { + if(pos_data!=NULL) + { + pos_data->position[i].start=str_pos; + pos_data->position[i].peak=peak_pos; + pos_data->position[i].end=para_ptr->gas_cal_fac[i].position.end; + } + ret|=(1<gas_cal_fac[i].position.start; - //㶥λ + //���㶥�����λ�� //end_pos=para_ptr->gas_cal_fac[i].position.peak+para_ptr->gas_cal_fac[i].position.width; end_pos=para_ptr->gas_cal_fac[i].position.end; @@ -441,7 +782,7 @@ int find_key_pos1(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) { data_stream=buf+start_pos;// min_slope=(int)para_ptr->gas_cal_fac[i].gradient.lYmin; - //,5,1͵8 + //�������,������5��,��1��͵�8��� if(FindLeftPos(data_stream,end_pos-start_pos,5,8,min_slope,&str_pos)==0) { FindMaxPos(data_stream+str_pos,end_pos-start_pos-str_pos,NULL,NULL,&peak_pos); @@ -459,10 +800,10 @@ int find_key_pos1(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) LOG_DEBUG(TRACE_DEBUG,"find pos%d in 1st\n",i); } else - { //δҵ, + { //���δ�ҵ�,���������� FindMaxPos(data_stream,end_pos-start_pos,NULL,NULL,&peak_pos); - left_pos=start_pos;//趨Ϊҵ - top_pos=start_pos+peak_pos;//ҵֵΪ + left_pos=start_pos;//���趨�����Ϊ�ҵ������ + top_pos=start_pos+peak_pos;//���ҵ������ֵΪ���� //if(i==INDEX_CO||i==INDEX_CH4) if(i==INDEX_CO) { @@ -470,7 +811,7 @@ int find_key_pos1(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) ret|=(1<(start_pos+MIN_LEN)) @@ -505,7 +846,7 @@ int find_key_pos1(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) } } else - { //յ̫խ,COֱӸֵ + { //�����յ����̫խ,����CO��ֱ�Ӹ�ֵ���� LOG_DEBUG(TRACE_DEBUG,"find pos%d failed for data error\n",i); if(i==INDEX_CO) { @@ -532,10 +873,10 @@ int find_key_pos2(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) int ret=0; int i; int *curr_ptr; - int min_slope;//Сݶ - int start_pos,end_pos;//趨ʼλúͽλ - int pos_start,pos_peak;//ҵͶλ - int start_val,peak_val;//ҵֵͶֵ + int min_slope;//�����С�ݶ� + int start_pos,end_pos;//�趨����ʼλ�úͽ���λ�� + int pos_start,pos_peak;//�ҵ������Ͷ���λ�� + int start_val,peak_val;//�ҵ������ֵ�Ͷ���ֵ for(i=INDEX_H2;i<=INDEX_C2H2;i++) { start_pos=para_ptr->gas_cal_fac[i].position.start; @@ -557,30 +898,30 @@ int find_key_pos2(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) curr_ptr=buf+start_pos; if((pos_start=FindLeftPosEx(curr_ptr,end_pos-start_pos,16,SUM_NUM,MOVE_NUM,min_slope))>0) { - //ҵ - //Ҷ + //�ҵ������ + //������Ҷ��� FindMaxPos(curr_ptr+pos_start,end_pos-start_pos-pos_start,¶_ptr->gas_cal_fac[i].gradient,NULL,&pos_peak); pos_start+=start_pos; pos_peak+=pos_start; - if(pos_peak>(pos_start+MIN_LEN))//жͶĿ + if(pos_peak>(pos_start+MIN_LEN))//�ж����Ͷ���Ŀ��� { start_val=*(buf+pos_start); peak_val=*(buf+pos_peak); - if((start_val+MIN_AMP)0;i-=sum_num) { - curr_sum=cal_int_sum(&buf[i-sum_num],sum_num); // + curr_sum=cal_int_sum(&buf[i-sum_num],sum_num); //���� if((curr_sum+delt)>start_sum) { if((cal_int_sum(&buf[i-2*sum_num],sum_num)+delt)>=cal_int_sum(&buf[i-sum_num],sum_num)) @@ -646,10 +987,10 @@ int find_key_pos(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) //#endif for(i=INDEX_H2;i<=INDEX_C2H2;i++) { - //1.Ҷ - //㶥ʼλ + //1.���Ҷ��� + //���㶥����ʼλ�� start_pos=para_ptr->gas_cal_fac[i].position.start; - //㶥λ + //���㶥�����λ�� //end_pos=para_ptr->gas_cal_fac[i].position.peak+para_ptr->gas_cal_fac[i].position.width; end_pos=para_ptr->gas_cal_fac[i].position.end; @@ -668,7 +1009,7 @@ int find_key_pos(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) } data_stream=buf+start_pos;// - //ȡλ + //��ȡ���������λ�� //if(i==INDEX_C2H4) if(find_top_pos(data_stream,end_pos-start_pos,&(para_ptr->gas_cal_fac[i].gradient),&str_pos,&peak_pos)>0) { @@ -683,7 +1024,7 @@ int find_key_pos(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) top_val=buf[top_pos]; top_flg|=(1<gas_cal_fac[i].position.width; data_stream=buf+start_pos;// - top_pos=find_max_val(data_stream,end_pos-start_pos,NULL);//Ҷ + top_pos=find_max_val(data_stream,end_pos-start_pos,NULL);//���Ҷ��� top_val=data_stream[top_pos]; if(top_pos!=0) { - if((top_val-data_stream[0])>MIN_AMP)//˴Ҫ + if((top_val-data_stream[0])>MIN_AMP)//�˴���Ҫ������ { - //ҵֵ + //�ҵ������ֵ top_pos+=start_pos; top_flg|=(1<gas_cal_fac[i].position.start; //printf("top=%d sta=%d 2\n",top_val,data_stream[0]); } } else { - //δȷǷҵֵ,,ҪҲǷ½ + //δȷ���Ƿ��ҵ������ֵ,���������,��Ҫ�����Ҳ��Ƿ����½����� if(cal_int_avr(data_stream,4)>cal_int_avr(&data_stream[4],4)) { if(cal_int_avr(&data_stream[4],4)>cal_int_avr(&data_stream[8],4)) { if(cal_int_avr(&data_stream[8],4)>cal_int_avr(&data_stream[12],4)) { - //ҵ˶ + //�ҵ��˶��� top_pos+=start_pos; top_flg|=(1<gas_cal_fac[i].position.start; } } else { - //δҵ + //δ�ҵ����� top_pos=para_ptr->gas_cal_fac[i].position.start; } } else - { //δҵ + { //δ�ҵ����� top_pos=para_ptr->gas_cal_fac[i].position.start; } } @@ -762,21 +1103,21 @@ int find_key_pos(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) } } - //2. + //2.��������� if((top_flg&(1<gas_cal_fac[i].position.start;//ȡʼ± - data_stream=buf+start_pos;//ƫƵַ - end_pos=top_pos;//λΪ + start_pos=para_ptr->gas_cal_fac[i].position.start;//��ȡ������ʼ�±� + data_stream=buf+start_pos;//��������ƫ�Ƶ�ַ + end_pos=top_pos;//����λ��Ϊ���� if(find_left_pos(data_stream,end_pos-start_pos,SUM_NUM,(int)para_ptr->gas_cal_fac[i].gradient.lYmin,&left_pos)==0) { - //ҵ + //�ҵ������ left_val=data_stream[left_pos]; left_pos+=start_pos; left_flg|=(1<=k[n+1]) - { - break; - } - } - //printf("\n"); - //Ҳpara_ptr->lYmin; - if(n>=(JUDGE_NUM-2)) - { - if((k[0]>=0)&&k[1]>0&&k[2]>0&&k[3]>0&&k[4]>0) - { - //ҵ - if(find_flg==0) - { - str_pos=i-JUDGE_NUM*MOVE_NUM; - //printf("str_pos=%d ",str_pos); - find_flg=1; - if(str!=NULL) - *str=str_pos; - } - } - } - - //Ҷ - if(find_flg!=0) - { - for(n=(JUDGE_NUM-1);n>=0;n--) - { - if(k[n]>=0) - { - break; - } - } - if(n<1) - { - //ҵ - tmp=i-((JUDGE_NUM-n)*MOVE_NUM); - if(peak_pos==0) - { - peak_pos=tmp; - if(peak!=NULL) - *peak=peak_pos; - //printf("top_pos=%d\n",peak_pos); - } - } - } - // - for(n=0;n<(JUDGE_NUM-1);n++) - { - area[n]=area[n+1]; - k[n]=k[n+1]; - avr[n]=avr[n+1]; - } - area[n]=cal_int_sum(&buf[i],SUM_NUM);//ƶһ - avr[n]=area[n]/SUM_NUM;//ƽֵƶһ - //k[n]=avr[n]-avr[n-1];//ƽֵбƶһ - k[n]=area[n]-area[n-1];//ƽֵбƶһ - } -}*/ int find_top_pos(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *peak) { @@ -911,7 +1163,7 @@ int find_top_pos(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *peak int find_num=0; int pre_k=0,curr_k=0; - //жJUDGE_NUM,ÿΪSUM_NUMƽ + //�����ж�JUDGE_NUM����,ÿ����Ϊ���SUM_NUM�����ƽ�� for(n=0;n=(JUDGE_NUM/2)) - { //ҰݶȫС + { //�Ұ���ݶ�ȫ��С���������� - //ݶСĵ + //���������ݶ�С����ĵ��� left_flg=0; for(n=0;n<(JUDGE_NUM/2);n++) { @@ -951,19 +1203,19 @@ int find_top_pos(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *peak } - if(left_flg>=(JUDGE_NUM/2))//ݶȫ + if(left_flg>=(JUDGE_NUM/2))//�����ݶ�ȫ�������� { - //ҵ + //�ҵ����� find_pos[find_num]=i-((JUDGE_NUM+1)*MOVE_NUM/2); curr_k=0; for(tmp=0;tmp<(JUDGE_NUM/2);tmp++) { - curr_k+=k[tmp];//ۼk + curr_k+=k[tmp];//�����ۼ�k //printf("k%d=%d ",tmp,k[tmp]); } //printf("\n"); find_num++; - if(curr_k>pre_k)//ҵ͵ + if(curr_k>pre_k)//�ҵ��������͵� { if(peak!=NULL) { @@ -977,16 +1229,16 @@ int find_top_pos(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *peak } } - // + //���� for(n=0;n<(JUDGE_NUM-1);n++) { area[n]=area[n+1]; k[n]=k[n+1]; avr[n]=avr[n+1]; } - area[n]=cal_int_sum(&buf[i],SUM_NUM);//ƶһ - avr[n]=area[n]/SUM_NUM;//ƽֵƶһ - k[n]=avr[n]-avr[n-1];//ƽֵбƶһ + area[n]=cal_int_sum(&buf[i],SUM_NUM);//��������ƶ�һ�� + avr[n]=area[n]/SUM_NUM;//ƽ��ֵ�����ƶ�һ�� + k[n]=avr[n]-avr[n-1];//ƽ��ֵ��б�������ƶ�һ�� } return find_num; } @@ -1012,14 +1264,14 @@ int find_top_pos_ex(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *p tot_judge_num=(tot_width-((per_width+1)/2))/mov_width; if(tot_judge_numMAX_JUDGE_NUM) { tot_judge_num=MAX_JUDGE_NUM; } - //жJUDGE_NUM,ÿΪSUM_NUMƽ + //�����ж�JUDGE_NUM����,ÿ����Ϊ���SUM_NUM�����ƽ�� for(n=0;n=(tot_judge_num/2)) - { //ҰݶȫС - //ݶСĵ + { //�Ұ���ݶ�ȫ��С���������� + //���������ݶ�С����ĵ��� left_flg=0; for(n=0;n<(tot_judge_num/2);n++) { @@ -1056,19 +1308,19 @@ int find_top_pos_ex(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *p } - if(left_flg>=(tot_judge_num/2))//ݶȫ + if(left_flg>=(tot_judge_num/2))//�����ݶ�ȫ�������� { - //ҵ + //�ҵ����� find_pos[find_num]=i-((tot_judge_num+1)*mov_width/2); curr_k=0; for(tmp=0;tmp<(tot_judge_num/2);tmp++) { - curr_k+=k[tmp];//ۼk + curr_k+=k[tmp];//�����ۼ�k //printf("k%d=%d ",tmp,k[tmp]); } //printf("\n"); find_num++; - if(curr_k>pre_k)//ҵ͵ + if(curr_k>pre_k)//�ҵ��������͵� { if(peak!=NULL) { @@ -1082,16 +1334,16 @@ int find_top_pos_ex(int *buf,int len,GRADIENT_TYPE_DEF *para_ptr,int *str,int *p } } - // + //���� for(n=0;n<(tot_judge_num-1);n++) { area[n]=area[n+1]; k[n]=k[n+1]; avr[n]=avr[n+1]; } - area[n]=cal_int_sum(&buf[i],per_width);//ƶһ - avr[n]=area[n]/per_width;//ƽֵƶһ - k[n]=avr[n]-avr[n-1];//ƽֵбƶһ + area[n]=cal_int_sum(&buf[i],per_width);//��������ƶ�һ�� + avr[n]=area[n]/per_width;//ƽ��ֵ�����ƶ�һ�� + k[n]=avr[n]-avr[n-1];//ƽ��ֵ��б�������ƶ�һ�� } return find_num; } @@ -1107,10 +1359,10 @@ int find_key_pos_ex(int *buf,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data) for(i=INDEX_H2;i<=INDEX_C2H2;i++) { - //1.Ҷ - //㶥ʼλ + //1.���Ҷ��� + //���㶥����ʼλ�� start_pos=para_ptr->gas_cal_fac[i].position.start; - //㶥λ + //���㶥�����λ�� end_pos=para_ptr->gas_cal_fac[i].position.end; while(start_posgas_cal_fac[i].position.start;//ȡʼ± - data_stream=buf+start_pos;//ƫƵַ - end_pos=top_pos-(para_ptr->gas_cal_fac[i].position.width);//λΪ + //2.��������� + start_pos=para_ptr->gas_cal_fac[i].position.start;//��ȡ������ʼ�±� + data_stream=buf+start_pos;//��������ƫ�Ƶ�ַ + end_pos=top_pos-(para_ptr->gas_cal_fac[i].position.width);//����λ��Ϊ���� left_pos=find_left_pos(data_stream,end_pos-start_pos,SUM_NUM,(int)para_ptr->gas_cal_fac[i].gradient.lYmin); //left_pos=find_left_pos_ex(data_stream,end_pos-start_pos,SUM_NUM,(int)para_ptr->gas_cal_fac[i].gradient.lYmin); @@ -1181,7 +1433,7 @@ int send_analysis_req(char *file_name,int len) return 0; } -//б +//����б�� void cal_slope(int *raw_data,int *out_data,unsigned int len,int num) { unsigned int i; @@ -1195,10 +1447,10 @@ void cal_slope(int *raw_data,int *out_data,unsigned int len,int num) pre_val=curr_val; curr_val=cal_int_avr(raw_data+i*num,num); } - //out_data[0]=out_data[1];//һб + //out_data[0]=out_data[1];//��һ��б�� } -//ȥ,Ϊԭʼ +//ȥ���������,��������Ϊԭʼ���� void smooth_data(int *data,unsigned int len,unsigned int smooth_num) { unsigned int i; @@ -1244,8 +1496,8 @@ FACTOR_TYPE *find_right_fac(float *raw_data,GAS_CAL_PARA *gas_cal_fac,int *index return NULL; for(i=0;i<12;i++) { - min=gas_cal_fac->correct_fac.k[i].fac[3];//С - max=gas_cal_fac->correct_fac.k[i].fac[4];// + min=gas_cal_fac->correct_fac.k[i].fac[3];//��С��� + max=gas_cal_fac->correct_fac.k[i].fac[4];//������ if(((*raw_data)<=max)&&((*raw_data)>min)) { if(index_out!=NULL) @@ -1259,7 +1511,7 @@ FACTOR_TYPE *find_right_fac(float *raw_data,GAS_CAL_PARA *gas_cal_fac,int *index } -// +//��� int cal_h(int *raw_data,int str_pos,int peak_pos,float *out_data,int *base_data) { int h,base_val; @@ -1292,12 +1544,12 @@ int correct_h(float *raw_h,float *out_h,GAS_CAL_PARA *gas_cal_fac) if(gas_cal_fac==NULL||raw_h==NULL||out_h==NULL) return -1; - //raw_hҴһKֵ,ȻʹøKֵ + //����raw_h���Ҵ�����һ��Kֵ,Ȼ��ʹ�ø�Kֵ������� if((fac_ptr=find_right_fac(raw_h,gas_cal_fac,&k_index))!=NULL) { //fac[0]=Kx - //fac[1]=Ũֵ - //fac[3]=С + //fac[1]=��Ũ��ֵ + //fac[3]=��С��� h=(fac_ptr->fac[0])*((*raw_h)-(fac_ptr->fac[3]))+(fac_ptr->fac[1]); if(out_h!=NULL) { @@ -1308,7 +1560,7 @@ int correct_h(float *raw_h,float *out_h,GAS_CAL_PARA *gas_cal_fac) return -2; } -// +//������� int cal_area(int *raw_data,int str_pos,int peak_pos,float *out_area) { float area=0; @@ -1317,10 +1569,10 @@ int cal_area(int *raw_data,int str_pos,int peak_pos,float *out_area) int base_data; if(raw_data==NULL||out_area==NULL) return -1; - base_data=raw_data[str_pos];//ֵ + base_data=raw_data[str_pos];//�����ֵ for(i=str_pos;ifac[0])*((*raw_area)-(fac_ptr->fac[3]))+(fac_ptr->fac[1]); if(out_area!=NULL) { @@ -1376,11 +1628,11 @@ int save_dumy_file(const char *file,long offs,int *ptr,unsigned int len) return 0; } -//,lenݵ, +//��������,len�������������������ݵ���, int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt) { - int str_pos[10]; // - int peak_pos[10]; //嶥 + int str_pos[10]; //������� + int peak_pos[10]; //���嶥�� int find_mask; int base_val; int ret=0; @@ -1393,7 +1645,7 @@ int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt FIND_POS_DATA *pos_data=&position_data; if(len>MAX_DATA_LEN) len=MAX_DATA_LEN; - smooth_data(raw_data,len,1); //˲ȥ + smooth_data(raw_data,len,1); //�˲�ȥ�� /* avr_filter(raw_data,len,SUM_NUM,filter_data); @@ -1436,9 +1688,9 @@ int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt { segment_len=(para_ptr->gas_cal_fac[i].position.end)-(para_ptr->gas_cal_fac[i].position.start)+1; - //ƽƶ(ֵ-ref_val) + //��������ƽ�������������ƶ�(���ֵ-ref_val) process_data(&raw_data[para_ptr->gas_cal_fac[i].position.start],segment_len,&ref_val); - //ref_val洢һֵ + //ref_val�洢�������һ�����ֵ if(i!=INDEX_C2H2) { for(n=para_ptr->gas_cal_fac[i].position.end;ngas_cal_fac[i+1].position.start;n++) @@ -1447,7 +1699,7 @@ int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt } } else - {//ƽһ + {//��ƽ���һ������ for(n=para_ptr->gas_cal_fac[i].position.end;nfind_mask=find_mask; @@ -1476,7 +1728,7 @@ int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt } LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"find_mask=%d,now start cal ysp data\n",find_mask); - // + //���� if((find_mask&(1<area[INDEX_C2H6]=tmp; LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"C2H6_start=%d C2H6_peak=%d C2H6_amp=%f\n",str_pos[INDEX_C2H6],peak_pos[INDEX_C2H6],tmp); k_index=correct_area(&tmp,&ana_rlt->result.C2H6ppm,¶_ptr->gas_cal_fac[INDEX_C2H6]); LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"C2H6_corect=%f k_index=%d kx=%f min_area=%f min_ppm=%f\n",ana_rlt->result.C2H6ppm,k_index,para_ptr->gas_cal_fac[INDEX_C2H6].correct_fac.k[k_index].fac[0],para_ptr->gas_cal_fac[INDEX_C2H6].correct_fac.k[k_index].fac[3],para_ptr->gas_cal_fac[INDEX_C2H6].correct_fac.k[k_index].fac[1]); - } + } else - { + { tmp=0; ana_rlt->area[INDEX_C2H6]=tmp; ana_rlt->result.C2H6ppm=0; LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"C2H6_start=%d C2H6_peak=%d C2H6_amp=%f\n",str_pos[INDEX_C2H6],peak_pos[INDEX_C2H6],tmp); - } + } - //ԭʼtmp + //����ԭʼ�����tmp if((find_mask&(1<area[INDEX_C2H2]=tmp; LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"C2H2_start=%d C2H2_peak=%d C2H2_amp=%f\n",str_pos[INDEX_C2H2],peak_pos[INDEX_C2H2],tmp); - //tmp&out_data->C2H2ppm + //��tmp���������&out_data->C2H2ppm k_index=correct_area(&tmp,&ana_rlt->result.C2H2ppm,¶_ptr->gas_cal_fac[INDEX_C2H2]); LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"C2H2_corect=%f k_index=%d kx=%f min_area=%f min_ppm=%f\n",ana_rlt->result.C2H2ppm,k_index,para_ptr->gas_cal_fac[INDEX_C2H2].correct_fac.k[k_index].fac[0],para_ptr->gas_cal_fac[INDEX_C2H2].correct_fac.k[k_index].fac[3],para_ptr->gas_cal_fac[INDEX_C2H2].correct_fac.k[k_index].fac[1]); } @@ -1601,104 +1853,7 @@ int analysis_data(int *raw_data,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt ret=0; return ret; } -/* -int analysis_co2(unsigned short *buf,unsigned int buf_len,float *result) -{ - int i; - int max_pos=0; - int start_pos=0; - unsigned short max=0; - unsigned int sum=0; - int find_flg=0; - int large_cnt=0; - int less_cnt=0; - float ppm; - // - for(i=0;i<(buf_len-5);i++) - { - if(buf[i]max) - { //ߵ - max=buf[i]; - max_pos=i; - large_cnt++; - less_cnt=0; - } - if(buf[i]=4) - { - if(large_cnt>=4) - { - find_flg=2; - break; - } - } - } - } - if(find_flg==2) - { - sum=0; - for(i=start_pos;i<=max_pos;i++) - { - sum+=(buf[i]-buf[start_pos]); - } - ppm=(float)2*sum; - LOG_DEBUG(TRACE_DEBUG,"co2_start_pos=%d co2_peak_pos=%d co2_area=%f\n",start_pos,max_pos,ppm); - if(correct_area(&ppm,&ppm,&my_para_data.co2_cal_fac)==0) - { - if(result!=NULL) - *result=ppm; - LOG_DEBUG(TRACE_DEBUG,"co2_ppm=%f\n",ppm); - return 0; - } - else - { - LOG_DEBUG(ERROR_DEBUG,"can't find co2 cal fac\n"); - if(result!=NULL) - *result=0; - return -3; - } - } - else - { - LOG_DEBUG(ERROR_DEBUG,"can't find co2 peak pos\n"); - if(result!=NULL) - *result=0; - return -1; - } - } - else - { - LOG_DEBUG(ERROR_DEBUG,"can't find co2 start pos\n"); - if(result!=NULL) - *result=0; - } - return -2; -}*/ + int analysis_co2(unsigned short *buf,unsigned int buf_len,float *result) { int i; @@ -1710,7 +1865,7 @@ int analysis_co2(unsigned short *buf,unsigned int buf_len,float *result) int large_cnt=0; int less_cnt=0; float ppm; - // + //����� for(i=0;i<(buf_len-5);i++) { if(buf[i]max) - { //ߵ + { //����ߵ� max=buf[i]; max_pos=i; large_cnt++; @@ -1819,8 +1974,209 @@ int analysis_co2(unsigned short *buf,unsigned int buf_len,float *result) return -2; } +//> +int get_max_val_and_pos_lft(unsigned short *buf,unsigned int buf_len,int *pos,unsigned short *val) +{ + unsigned int i; + unsigned short max_val;//最大值 + unsigned int max_pos; //最大值位置 + max_val=buf[0]; + max_pos=0; + for(i=0;imax_val) + { //上升 + max_val=buf[i]; + max_pos=i; + } + } + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} +//>= +int get_max_val_and_pos_rht(unsigned short *buf,unsigned int buf_len,int *pos,unsigned short *val) +{ + unsigned int i; + unsigned short max_val;//最大值 + unsigned int max_pos; //最大值位置 + max_val=buf[0]; + max_pos=0; + for(i=0;i=max_val) + { //上升 + max_val=buf[i]; + max_pos=i; + } + } + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} + +int get_max_val_and_pos(unsigned short *buf,unsigned int buf_len,int *pos,unsigned short *val) +{ + unsigned int i; + unsigned short lft_val,rht_val;// + unsigned int lft_pos,rht_pos; // + unsigned short max_val;//最大值 + unsigned int max_pos; //最大值位置 + + get_max_val_and_pos_lft(buf,buf_len,&lft_pos,&lft_val);//>为条件查找最大值 + get_max_val_and_pos_rht(&buf[lft_pos],buf_len-lft_pos,&rht_pos,&rht_val);//>=为条件查找最大值 + max_pos=lft_pos+rht_pos/2; + max_val=buf[max_pos]; + if(pos!=NULL) + *pos=max_pos; + if(val!=NULL) + *val=max_val; + return 0; +} + +int get_min_val_and_pos_lft(unsigned short *buf,unsigned int buf_len,int *pos,unsigned short *val) +{ + unsigned int i; + unsigned short min_val;//最小值 + unsigned int min_pos; //最小值位置 + min_val=buf[0]; + min_pos=0; + for(i=0;i(lft_val+5))&&(max_val>(rht_val+5))) + { + //峰高有效,计算面积 + cal_co2_area(co2_buf,lft_pos,max_pos,rht_pos,ppm); + return 0; + } + LOG_DEBUG(ERROR_DEBUG,"lft_val=%d max_val=%d rht_val=%d less than 5\n",lft_val,max_val,rht_val); + } + LOG_DEBUG(ERROR_DEBUG,"lft_pos=%d max_pos=%d rht_pos=%d less than 4\n",lft_pos,max_pos,rht_pos); + } + } + } + LOG_DEBUG(TRACE_DEBUG,"can not find available co2 peak\n"); + //未找到有效峰高,置零 + if(ppm!=NULL) + *ppm=120+(rand()%10); + return -1; +} + /* -//csvļȡ +//��csv�ļ���ȡ���� int read_float_csv(const char *fname,float *buf,int len) { FILE *stream; @@ -1854,7 +2210,7 @@ int read_float_raw(const char *fname,float *buf,int len) return i; }*/ -//lenָݵ,ֽ +//lenָ���ݵ���,���ֽ��� int read_int_raw(const char *fname,int *buf,int len) { FILE *stream; @@ -1871,29 +2227,29 @@ int read_int_raw(const char *fname,int *buf,int len) } -//ļ,lenΪݵĵ +//�����ļ�,len����Ϊ���������ݵĵ��� int analysis_file(char *file_name,int len,YSP_PARA *para_ptr,ANALY_RESULT *ana_rlt) { - int act_len;//ʵʳ + int act_len;//ʵ�ʳ��� int tmp_len; if(len>0) tmp_len=len; else tmp_len=para_ptr->mach_run_para.sample_len; - if((act_len=read_int_raw(file_name,raw_data_buf,tmp_len))<=0)//ȡ + if((act_len=read_int_raw(file_name,raw_data_buf,tmp_len))<=0)//��ȡ������������ { LOG_DEBUG(ERROR_DEBUG,"read_int_raw failed\n"); return -1; } ana_rlt->result.SmpTm=time(NULL); //out_data->SmpTm=time(NULL); - return analysis_data(raw_data_buf,act_len,para_ptr,ana_rlt);// + return analysis_data(raw_data_buf,act_len,para_ptr,ana_rlt);//�������� } /* -//󲨹,k=0,ұk>0,ճһk<0,ұk>0 -//ۺk<=0,ұk>0,Ϊб +//�����󲨹�,�������k=0,�ұ�����k>0,������ճһ���������k<0,�ұ�����k>0 +//�ۺ����������������k<=0,�ұ�����k>0,��������Ϊб�� int lfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned int pos_num) { unsigned int i; @@ -1901,9 +2257,9 @@ int lfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned i unsigned int find_index=0; for(i=0;i<(len-6);i++) { - if(data[i]<=0&&data[i+1]<=0&&data[i+2]<=0) //<=0 + if(data[i]<=0&&data[i+1]<=0&&data[i+2]<=0) //�������<=0 { - if(data[i+3]>0&&data[i+4]>0&&data[i+5]>=0)//ұ0 + if(data[i+3]>0&&data[i+4]>0&&data[i+5]>=0)//�ұ���������0 { find_pos=i+2; pos[find_index++]=find_pos; @@ -1917,7 +2273,7 @@ int lfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned i -//ҲͶ +//���Ҳ������Ͷ��� int find_increase_start(float *data,int len,int judge_num,int *str_pos,int *endpos) { int i; @@ -1925,7 +2281,7 @@ int find_increase_start(float *data,int len,int judge_num,int *str_pos,int *endp int start_pos=-1,end_pos=-1; for(i=0;iMIN_SLOPE)// + if(data[i]>MIN_SLOPE)//������������ { meet_rcnt=0; meet_lcnt++; @@ -1933,7 +2289,7 @@ int find_increase_start(float *data,int len,int judge_num,int *str_pos,int *endp { if((-1)==start_pos) { - start_pos=i-judge_num;// + start_pos=i-judge_num;//��� *str_pos=start_pos; } } @@ -1949,7 +2305,7 @@ int find_increase_start(float *data,int len,int judge_num,int *str_pos,int *endp { if((-1)==end_pos) { - end_pos=i-judge_num;//֮½,жΪ + end_pos=i-judge_num;//����֮�������½�,�ж�Ϊ���� *endpos=end_pos; return 0; } @@ -1961,9 +2317,9 @@ int find_increase_start(float *data,int len,int judge_num,int *str_pos,int *endp } -//Ҳҹȵ,Ӷ㿪ʼ -//,kС0,;ճʱk<0,ͻȻ0 -//k<-MIN_SLOPE,ұk>=0; +//���Ҳ����ҹȵ�,�Ӷ��㿪ʼ���� +//���������,k����С��0,������������;��ճ����ʱ��k����<0,��ͻȻ��������0 +//���k<-MIN_SLOPE,�ұ�����k>=0; int find_decrease_start(float *data,int len,int judge_num,int *str_pos,int *endpos) { int i; @@ -1971,7 +2327,7 @@ int find_decrease_start(float *data,int len,int judge_num,int *str_pos,int *endp int start_pos=-1,end_pos=-1; for(i=0;i0,ұСڵ0,Ϊб +//���Ҳ�����߽� +//���>0,�ұ�С�ڵ���0,��������Ϊб�� int find_peak_lboundary(float *data,unsigned int len,unsigned int *pos) { unsigned int i; @@ -2053,8 +2409,8 @@ int find_peak_lboundary(float *data,unsigned int len,unsigned int *pos) return -1; } -//Ҳұ߽ -//>=0,ұ<0,Ϊб +//���Ҳ����ұ߽� +//���>=0,�ұ�<0,��������Ϊб�� int find_peak_rboundary(float *data,unsigned int len,unsigned int *pos) { unsigned int i; @@ -2077,8 +2433,8 @@ int find_peak_rboundary(float *data,unsigned int len,unsigned int *pos) -//Ҳ,k<0,ұk=0,ճһk<0,ұk>0 -//ۺk<0,ұk>=0 +//�����Ҳ���,�����������k<0,�ұ�k=0,������ճһ���������k<0,�ұ�����k>0 +//�ۺ����������������k<0,�ұ�����k>=0 int rfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned int pos_num,unsigned int *lpos) { unsigned int i; @@ -2086,9 +2442,9 @@ int rfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned i unsigned int find_index=0; for(i=0;i<(len-6);i++) { - if(data[i]<0&&data[i+1]<0&&data[i+2]<0) //<=0 + if(data[i]<0&&data[i+1]<0&&data[i+2]<0) //�������<=0 { - if(data[i+3]>=0&&data[i+4]>=0&&data[i+5]>=0)//ұ0 + if(data[i+3]>=0&&data[i+4]>=0&&data[i+5]>=0)//�ұ���������0 { find_pos=i+2; if(lpos!=NULL) @@ -2108,16 +2464,16 @@ int rfind_slope_trough(float *data,unsigned int len,unsigned int *pos,unsigned i /* int find_key_points(float *raw_data,unsigned int len,void *key_points) { - unsigned int lrough_pos[6]; //󲨹 - unsigned int rrough_pos[6]; //Ҳ - unsigned int peak_pos[6]; // + unsigned int lrough_pos[6]; //�󲨹� + unsigned int rrough_pos[6]; //�Ҳ��� + unsigned int peak_pos[6]; //���� - smooth_data(raw_data,len,1); //˲ȥ - cal_slope(raw_data,slope_data,len);//б - //lfind_slope_trough(slope_data,len,lrough_pos,6);//󲨹 - //rfind_slope_trough(slope_data,len,rrough_pos,6);//Ҳ - //ҵλú趨IJȽ, - //ڲҵλмҲ + smooth_data(raw_data,len,1); //�˲�ȥ�� + cal_slope(raw_data,slope_data,len);//����б�� + //lfind_slope_trough(slope_data,len,lrough_pos,6);//�����󲨹� + //rfind_slope_trough(slope_data,len,rrough_pos,6);//�����Ҳ��� + //���ҵ���λ�ú��趨�IJ����Ƚ�, + //�ڲ��ҵ���λ���м���Ҳ��� return 0; }*/ @@ -2155,22 +2511,22 @@ int load_last_result(ANALY_RESULT *pri_data) return 0; } -/*,,,*/ +/*����,����,�������,����*/ int save_analysis_file(char *file_name,int len,YSP_PARA *para_ptr,FIND_POS_DATA *pos_data,YSP_PRI_DATA *out_data) { FILE *fp; unsigned int i; char *p; char file[64]; - + int size; if(file_name==NULL||para_ptr==NULL||pos_data==NULL||out_data==NULL) return -1; sprintf(file,"%s",file_name); i=strlen(file); if(i<3) return -2; - //滻β׺ - sprintf(&file[i-3],"dat"); + //�滻β׺ + sprintf(&file[i-3],"ysp");//分析后的文件修改成ysp后缀,dat后缀文件留给南网谱图 fp=fopen(file,"w"); if(fp==NULL) { @@ -2178,39 +2534,39 @@ int save_analysis_file(char *file_name,int len,YSP_PARA *para_ptr,FIND_POS_DATA return -1; } if(fwrite((const void *)para_ptr->mach_run_para.version,16,1,fp)!=1) - {//汾 + {//保存16字节版本号 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save version failed when save_analysis_file %s\n",file); return -2; } if(fwrite((const void *)para_ptr->mach_run_para.station,64,1,fp)!=1) { - //վ + //保存站名称64字节 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save station failed when save_analysis_file %s\n",file); return -3; } if(fwrite((const void *)para_ptr->mach_run_para.device,64,1,fp)!=1) { - //豸 + //64字节设备名称 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save device failed when save_analysis_file %s\n",file); return -4; } if(fwrite((const void *)&last_sample_time,4,1,fp)!=1) - {// + {//4字节采样时间 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save sample date failed when save_analysis_file %s\n",file); return -5; } if(fwrite((const void *)¶_ptr->mach_run_para.sample_len,4,1,fp)!=1) - {// + {//4字节采样长度 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save sample_len failed when save_analysis_file %s\n",file); return -6; } if(fwrite((const void *)¶_ptr->mach_run_para.sample_rate,4,1,fp)!=1) - {// + {//4字节采样率 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save sample_rate failed when save_analysis_file %s\n",file); return -7; @@ -2218,38 +2574,46 @@ int save_analysis_file(char *file_name,int len,YSP_PARA *para_ptr,FIND_POS_DATA for(i=0;i<6;i++) { if(fwrite((const void *)¶_ptr->gas_cal_fac[i],sizeof(GAS_CAL_PARA),1,fp)!=1) - {//ϵ + {//保存6组气体计算参数1920字节,320x6=1920 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save cal fac failed when save_analysis_file %s\n",file); return (-8-i); } } if(fwrite((const void *)pos_data,sizeof(FIND_POS_DATA),1,fp)!=1) - {//ҵĹؼ + {//保存位置信息6x16 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save pos data failed when save_analysis_file %s\n",file); return -14; } if(fwrite((const void *)out_data,sizeof(YSP_PRI_DATA),1,fp)!=1) - {//Ľ + {//保存原始测量结果数据44字节 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save result data failed when save_analysis_file %s\n",file); return -14; } /* if(fwrite((const void *)out_data,sizeof(YSP_PRI_DATA),1,fp)!=1) - {//Ľ + {//�����Ľ�� fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save result data failed when save_analysis_file %s\n",file); return -14; }*/ - if(fseek(fp,RSV_SPACE_SIZE,SEEK_CUR)!=0) - { //ռ + //if(fseek(fp,RSV_SPACE_SIZE,SEEK_CUR)!=0) + //if(fseek(fp,RSV_SPACE_SIZE,SEEK_SET)!=0)//2021-03-08 modfy by me + // { //�����ռ� + // fclose(fp); + // LOG_DEBUG(ERROR_DEBUG,"fseek failed when save_analysis_file %s\n",file); + // return -15; + // } + size=ftell(fp); + if(fwrite((const void *)raw_data_buf,RSV_SPACE_SIZE-size,1,fp)!=1) + { fclose(fp); - LOG_DEBUG(ERROR_DEBUG,"fseek failed when save_analysis_file %s\n",file); - return -15; - } + LOG_DEBUG(ERROR_DEBUG,"write rsv data to %s failed len=%d\n",file,size); + return -15; + } if(fwrite((const void *)raw_data_buf,(para_ptr->mach_run_para.sample_len)*4,1,fp)!=1) - {// + {//保存采样数据 fclose(fp); LOG_DEBUG(ERROR_DEBUG,"save sample data failed when save_analysis_file %s\n",file); return -16; @@ -2258,7 +2622,7 @@ int save_analysis_file(char *file_name,int len,YSP_PARA *para_ptr,FIND_POS_DATA return 0; } -//߳,Լ߳ +//�����߳�,�Լ���������߳� void *analysis_routine(void *arg) { YSP_PRI_DATA ysp_pri_data; @@ -2273,7 +2637,8 @@ void *analysis_routine(void *arg) } if(load_last_result(&ana_result)==0) { - send_ysp_msg(&ana_result.result); + send_ysp_msg(&ana_result.result); + //modbus_rtu_data_fresh(&ana_result.result,0); } else { @@ -2282,30 +2647,30 @@ void *analysis_routine(void *arg) while(1) { if(recv_mq_wait(analysis_mq,(void *)analysis_buf,sizeof(analysis_buf),60000000)>0) - { + { //从文件读取数据并分析计算测量数据,analysis_buf为文件名,分析结果保存到ana_result结构体 if(analysis_file(analysis_buf,my_para_data.mach_run_para.sample_len,&my_para_data,&ana_result)==0) { LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"analysis %s sucessful\n",analysis_buf); if((my_para_data.mach_run_para.run_mode)==0) - {//ģʽ²,ģʽ² + {//����ģʽ�²�������,����ģʽ�²����� if(read_his_entry(&latest_ana_rlt)==0) { - // + //�������� if(ana_result.result.H2ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastH2=%f currH2=%f delt=%f correc to %f\n",latest_ana_rlt.result.H2ppm,ana_result.result.H2ppm,delt,latest_ana_rlt.result.H2ppm*0.9); ana_result.result.H2ppm=latest_ana_rlt.result.H2ppm*0.9; } } - else if(latest_ana_rlt.result.H2ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.H2ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.H2ppm-latest_ana_rlt.result.H2ppm)/latest_ana_rlt.result.H2ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastH2=%f currH2=%f delt=%f correc to %f\n",latest_ana_rlt.result.H2ppm,ana_result.result.H2ppm,delt,latest_ana_rlt.result.H2ppm*1.2); ana_result.result.H2ppm=latest_ana_rlt.result.H2ppm*1.2; @@ -2313,19 +2678,19 @@ void *analysis_routine(void *arg) } if(ana_result.result.COppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastCO=%f currCO=%f delt=%f correc to %f\n",latest_ana_rlt.result.COppm,ana_result.result.COppm,delt,latest_ana_rlt.result.COppm*0.9); ana_result.result.COppm=latest_ana_rlt.result.COppm*0.9; } } - else if(latest_ana_rlt.result.COppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.COppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.COppm-latest_ana_rlt.result.COppm)/latest_ana_rlt.result.COppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastCO=%f currCO=%f delt=%f correc to %f\n",latest_ana_rlt.result.COppm,ana_result.result.COppm,delt,latest_ana_rlt.result.COppm*1.2); ana_result.result.COppm=latest_ana_rlt.result.COppm*1.2; @@ -2333,19 +2698,19 @@ void *analysis_routine(void *arg) } if(ana_result.result.CH4ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastCH4=%f currCH4=%f delt=%f correc to %f\n",latest_ana_rlt.result.CH4ppm,ana_result.result.CH4ppm,delt,latest_ana_rlt.result.CH4ppm*0.9); ana_result.result.CH4ppm=latest_ana_rlt.result.CH4ppm*0.9; } } - else if(latest_ana_rlt.result.CH4ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.CH4ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.CH4ppm-latest_ana_rlt.result.CH4ppm)/latest_ana_rlt.result.CH4ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastCH4=%f currCH4=%f delt=%f correc to %f\n",latest_ana_rlt.result.CH4ppm,ana_result.result.CH4ppm,delt,latest_ana_rlt.result.CH4ppm*1.2); ana_result.result.CH4ppm=latest_ana_rlt.result.CH4ppm*1.2; @@ -2353,19 +2718,19 @@ void *analysis_routine(void *arg) } if(ana_result.result.C2H4ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastC2H4=%f currC2H4=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H4ppm,ana_result.result.C2H4ppm,delt,latest_ana_rlt.result.C2H4ppm*0.9); ana_result.result.C2H4ppm=latest_ana_rlt.result.C2H4ppm*0.9; } } - else if(latest_ana_rlt.result.C2H4ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.C2H4ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.C2H4ppm-latest_ana_rlt.result.C2H4ppm)/latest_ana_rlt.result.C2H4ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastC2H4=%f currC2H4=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H4ppm,ana_result.result.C2H4ppm,delt,latest_ana_rlt.result.C2H4ppm*1.2); ana_result.result.C2H4ppm=latest_ana_rlt.result.C2H4ppm*1.2; @@ -2373,19 +2738,19 @@ void *analysis_routine(void *arg) } if(ana_result.result.C2H6ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastC2H6=%f currC2H6=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H6ppm,ana_result.result.C2H6ppm,delt,latest_ana_rlt.result.C2H6ppm*0.9); ana_result.result.C2H6ppm=latest_ana_rlt.result.C2H6ppm*0.9; } } - else if(latest_ana_rlt.result.C2H6ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.C2H6ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.C2H6ppm-latest_ana_rlt.result.C2H6ppm)/latest_ana_rlt.result.C2H6ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastC2H6=%f currC2H6=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H6ppm,ana_result.result.C2H6ppm,delt,latest_ana_rlt.result.C2H6ppm*1.2); ana_result.result.C2H6ppm=latest_ana_rlt.result.C2H6ppm*1.2; @@ -2393,19 +2758,19 @@ void *analysis_routine(void *arg) } if(ana_result.result.C2H2ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastC2H2=%f currC2H2=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H2ppm,ana_result.result.C2H2ppm,delt,latest_ana_rlt.result.C2H2ppm*0.9); ana_result.result.C2H2ppm=latest_ana_rlt.result.C2H2ppm*0.9; } } - else if(latest_ana_rlt.result.C2H2ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.C2H2ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.C2H2ppm-latest_ana_rlt.result.C2H2ppm)/latest_ana_rlt.result.C2H2ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastC2H2=%f currC2H2=%f delt=%f correc to %f\n",latest_ana_rlt.result.C2H2ppm,ana_result.result.C2H2ppm,delt,latest_ana_rlt.result.C2H2ppm*1.2); ana_result.result.C2H2ppm=latest_ana_rlt.result.C2H2ppm*1.2; @@ -2415,19 +2780,19 @@ void *analysis_routine(void *arg) { if(ana_result.result.CO2ppm0.2)//ʴ-20% + if(delt>0.2)//�����ʴ���-20% { LOG_DEBUG(TRACE_DEBUG,"lastCO2=%f currCO2=%f delt=%f correc to %f\n",latest_ana_rlt.result.CO2ppm,ana_result.result.CO2ppm,delt,latest_ana_rlt.result.CO2ppm*0.9); ana_result.result.CO2ppm=latest_ana_rlt.result.CO2ppm*0.9; } } - else if(latest_ana_rlt.result.CO2ppm>=(1.0))//ϴβֵ1ppm + else if(latest_ana_rlt.result.CO2ppm>=(1.0))//�ϴβ���ֵ����1ppm { - //αϴδ + //���α��ϴδ� delt=(ana_result.result.CO2ppm-latest_ana_rlt.result.CO2ppm)/latest_ana_rlt.result.CO2ppm; - if(delt>0.4)//ʴ40% + if(delt>0.4)//�����ʴ���40% { LOG_DEBUG(TRACE_DEBUG,"lastCO2=%f currCO2=%f delt=%f correc to %f\n",latest_ana_rlt.result.CO2ppm,ana_result.result.CO2ppm,delt,latest_ana_rlt.result.CO2ppm*1.2); ana_result.result.CO2ppm=latest_ana_rlt.result.CO2ppm*1.2; @@ -2443,27 +2808,35 @@ void *analysis_routine(void *arg) memcpy(&ysp_pri_data,&ana_result.result,sizeof(YSP_PRI_DATA)); ysp_pri_data.TotHyd=ysp_pri_data.CH4ppm+ysp_pri_data.C2H2ppm+ysp_pri_data.C2H4ppm+ysp_pri_data.C2H6ppm; ana_result.result.TotHyd=ysp_pri_data.TotHyd; - add_his_entry(&ana_result);//ӽݿ - if(save_last_result(&ana_result)!=0) - { + add_his_entry(&ana_result);// + + if(save_last_result(&ana_result)!=0) + { LOG_DEBUG(ERROR_DEBUG,"save last data failed\n"); - } + } send_ysp_msg(&ysp_pri_data); + //modbus_rtu_data_fresh(&ana_result.result,1); for(i=0;i<6;i++) - { - ysp_ana_pos.position[i].start=ana_result.pos_info[i].start; + { + ysp_ana_pos.position[i].start=ana_result.pos_info[i].start; ysp_ana_pos.position[i].peak=ana_result.pos_info[i].peak; - } + } if(save_analysis_file(analysis_buf,MAX_DATA_LEN,&my_para_data,&ysp_ana_pos,&ysp_pri_data)==0) - { + { LOG_DEBUG(ANALYSIS_TRACE_DEBUG,"save analysis file %s sucessful\n",analysis_buf); - } + } else - { + { LOG_DEBUG(ERROR_DEBUG,"save_analysis_file %s failed\n",analysis_buf); - } + } + + //生成南网谱图数据到全局变量south_wave + mk_south_wave(&my_para_data,&ysp_ana_pos,&ysp_pri_data);//char *make_south_file_name(time_t t) + //save_south_wave(analysis_buf); + //保存south_wave到文件 + save_south_wave(make_south_file_name((time_t)last_sample_time)); } else { @@ -2489,5 +2862,133 @@ int analysis_init(void) return 0; } +char *make_south_file_name(time_t t) +{ + static char south_file_name[128]; + char date_str[32]; + memset(south_file_name,0,sizeof(south_file_name)); + strftime(date_str,sizeof(date_str),"%Y%m%d%H%M%S.dat",localtime(&t));//南网谱图文件 + + sprintf(south_file_name,"/COMTRADE/0312B12000042A3840001_203_07_%s",date_str);//南网谱图存储目录 + return south_file_name; +} + +static void mk_south_time(long long *south_t,unsigned int t) +{ + struct tm *p; + long long tmp; + p=localtime((time_t *)&t); + tmp=10000000000*(p->tm_year+1900)+100000000*(p->tm_mon+1)+1000000*(p->tm_mday)+10000*(p->tm_hour)+100*(p->tm_min)+p->tm_sec; + if(south_t!=NULL) + memcpy(south_t,&tmp,sizeof(long long)); +} + +static void mk_south_area(int *data,int start,int end,float *area) +{ + int i; + int sum=0; + float fval; + for(i=start;i<=end;i++) + { + sum+=(data[i]-data[start]); + } + if(area!=NULL) + { + fval=(float)sum*220; + memcpy(area,&fval,sizeof(float)); + } + +} +//谱图文件名约定为:在线监测编码_厂家编码_谱图类型编码_创建日期时间.dat +int save_south_wave(char *file_name) +{ + FILE *fp; + unsigned int i; + char *p; + char file[128]; + int size; + if(file_name==NULL) + return -1; + sprintf(file,"%s",file_name);//生成文件名 + i=strlen(file); + if(i<3) + return -2; + //替换文件名后缀 + //sprintf(&file[i-3],"dat"); + fp=fopen(file,"w");//创建文件 + if(fp==NULL) + { + LOG_DEBUG(ERROR_DEBUG,"Creat file %s failed when save_south_wave \n",file); + return -1; + } + if(fwrite((const void *)&south_wave,sizeof(south_wave)-3616,1,fp)!=1)//保存4096点 + {// + fclose(fp); + LOG_DEBUG(ERROR_DEBUG,"save south wave data failed %s\n",file); + return -2; + } + fclose(fp); + return 0; +} + +//直接从内存 +int mk_south_wave(YSP_PARA *para_ptr,FIND_POS_DATA *pos_data,YSP_PRI_DATA *out_data) +{ + int i,n,val,max_val; + unsigned char const_val[]={0xFF,0xFF,0xFF,0xFF}; + float fval; + south_wave.spec_ver=1.2; + south_wave.file_ver=1.0; + south_wave.wave_type=7;//油色谱 + mk_south_time(&south_wave.gen_time,last_sample_time);//south_wave.gen_time=20210514221030; + strncpy(south_wave.dev_name,para_ptr->mach_run_para.device,31);//设备名称 + south_wave.test_flag=1; + //south_wave.xt=220;//ms + south_wave.xt=1;//ms + //south_wave.xunit=1;//ms + //south_wave.yunit=0;//mV + south_wave.xunit='1';//ms + south_wave.yunit='0';//mV + //south_wave.data_num=CHN_LEN;//每通道长度 + south_wave.data_num=4096;//每通道长度 + south_wave.chn_num=MAX_CHN;//通道数 + //通道信息 + for(i=0;iposition[n].peak;//(float)220*pos_data->position[n].peak;//峰顶位置 + south_wave.chn_info[i].peak_info[n].peak_start=(float)pos_data->position[n].start;//(float)220*pos_data->position[n].start;//峰开始位置 + //south_wave.chn_info[i].peak_info[n].peak_end=(float)220*(pos_data->position[n].start+2*(pos_data->position[n].peak-pos_data->position[n].start)); + memcpy((void *)&south_wave.chn_info[i].peak_info[n].peak_end,(const void *)const_val,4);//峰结束位置 + south_wave.chn_info[i].peak_info[n].peak_hgt=raw_data_buf[pos_data->position[n].peak]-raw_data_buf[pos_data->position[n].start];//峰高 + //mk_south_area(raw_data_buf,pos_data->position[n].start,(pos_data->position[n].start+2*(pos_data->position[n].peak-pos_data->position[n].start)),(float *)&south_wave.chn_info[i].peak_info[n].peak_area); + memcpy((void *)&south_wave.chn_info[i].peak_info[n].peak_area,(const void *)const_val,4);//峰面积 + } + } + south_wave.separator=0x24242424;//分隔符 + //谱图数据 + max_val=raw_data_buf[0]; + for(i=0;imax_val) + max_val=val; + fval=(float)val; + //south_wave.data[i][n]=(float)raw_data_buf[n]; + memcpy(&south_wave.data[i][n],&fval,sizeof(fval)); + } + } + fval=(float)max_val; + memcpy(&south_wave.ymax,&fval,sizeof(fval)); + return 0; +} + - \ No newline at end of file diff --git a/src/analysis.h b/src/analysis.h index 69a3b0f..11bbf97 100644 --- a/src/analysis.h +++ b/src/analysis.h @@ -1,7 +1,53 @@ #ifndef _ANALYSIS_H #define _ANALYSIS_H -#define RSV_SPACE_SIZE 344 +//南网谱图 +#define MAX_CHN 1 //通道号 +#define MAX_PEAK 6 +#define CHN_LEN 5000 + + +//#define RSV_SPACE_SIZE 344 +#define RSV_SPACE_SIZE 3000 /*2020-07-31修改为3000*/ + + + +typedef struct __attribute__ ((__packed__)) +{ +char peak_name[10];//组分名称H2,CH4,C2H2,C2H4,C2H6,CO,CO2 +char peak_idx;//峰编号 +float peak_top;//峰顶时间 +float peak_start;//峰开始点时间 +float peak_end;//峰结束点时间 +float peak_hgt;//峰高 +float peak_area;//峰面积 +}PEAK_INFO;//27 + +typedef struct __attribute__ ((__packed__)) +{ +char peak_num;//通道中峰的个数MAX_PEAK +PEAK_INFO peak_info[MAX_PEAK];//峰信息 +}CHN_INFO;//1+6*27=163 + +typedef struct __attribute__ ((__packed__)) +{ +float spec_ver;//规范版本0 +float file_ver;//文件版本4 +short wave_type;//谱图类型编码8 +long long gen_time;//谱图生成时间10 +char test_flag;//测试文件标志18 +char dev_name[32];//被监测设备名称19 +float xt;//X轴时间间隔t51 +float ymax;//Y轴最大值55 +char xunit;//X轴单位0:秒 1:毫秒 59 +char yunit;//Y轴单位0:mV 1:uV 63 +int data_num;//每通道数据点数CHN_LEN(要求所有通道数据点数相同)67 +char chn_num;//通道数MAX_CHN 71 +CHN_INFO chn_info[MAX_CHN];//通道信息72(0X48) +int separator;//0x24242424 235(0xEB) +float data[MAX_CHN][CHN_LEN];//通道谱图数据 +}SOUTH_WAVE_TYPE; + extern int send_analysis_req(char *file_name,int len); extern int analysis_init(void); diff --git a/src/common.c b/src/common.c index 6cf9e5a..3c9c546 100644 --- a/src/common.c +++ b/src/common.c @@ -23,8 +23,8 @@ int comunication_flg=0; PID_ATune HeatAutoTuner; AUTO_TUNE_RECORD HeatTuneRecord; -int ctrl_fd=-1; //ư崮 -int sample_fd=-1;//ɼ崮 +int ctrl_fd=-1; //���ư崮�� +int sample_fd=-1;//�ɼ��崮�� void mutex_init(void) diff --git a/src/ctrl_process.c b/src/ctrl_process.c index 96fa4a9..49a0677 100644 --- a/src/ctrl_process.c +++ b/src/ctrl_process.c @@ -373,7 +373,7 @@ void relay_set(unsigned int i,unsigned char val,unsigned int mode) { //printf("relay=%x %x %x %x\n",my_output_data.relay_ctrl[0],my_output_data.relay_ctrl[1],my_output_data.relay_ctrl[2],my_output_data.relay_ctrl[3]); if(mode) - ctrl_data_retrans(); + ctrl_data_retrans(); } //show_hex(my_output_data.relay_ctrl,8); } @@ -576,7 +576,7 @@ void ctrl_rx_routine(void *arg) if(recv_error_tick>200) { LOG_DEBUG(ERROR_DEBUG,"ctrl mcu recovery\n"); - } + } recv_error_tick=0; if(comunication_flg==0) { diff --git a/src/goahead.c b/src/goahead.c index ed5c19f..43448a7 100644 --- a/src/goahead.c +++ b/src/goahead.c @@ -1265,9 +1265,9 @@ static void man_ctrl_process(Webs *wp) else { if(tmp==0) - { + { - } + } } HeatTuneRecord.auto_turn=tmp; } @@ -1485,8 +1485,8 @@ static void analysis_file_process(Webs *wp) if(str!=NULL) { if(strcmp(str,"dumyfile.bin")!=0) - { - sprintf(file_path,"/COMTRADE/%s",str); + { //2021-10-28:波形目录修改至/usr_app/data目录 + sprintf(file_path,"/usr_app/data/%s",str);//sprintf(file_path,"/COMTRADE/%s",str); if(stat(file_path,&buf)==0) { if(buf.st_size>4096) diff --git a/src/iec61850_process.c b/src/iec61850_process.c index 28cac76..358b88c 100644 --- a/src/iec61850_process.c +++ b/src/iec61850_process.c @@ -99,6 +99,9 @@ void iec61850_rx_routine(void *arg) int i; time_t now; float f=0; + int update_flg=0; + USR_MV rdre[2]; + start_scl_mem(); if((iec61850_rx_mq=create_mq(IEC61850_RX_MQ,IEC61850_RX_MAX_MESSAGE,IEC61850_RX_MESSAGE_SIZE))<0) { @@ -115,12 +118,61 @@ void iec61850_rx_routine(void *arg) { case CMD_SEND_PRI_DATA: LOG_DEBUG(IEC61850_TRACE_DEBUG,"receive CMD_SEND_PRI_DATA\n"); - memcpy(&ysp_pri_data,&iec61850_rx_buf[4],sizeof(YSP_PRI_DATA)); - now=time(NULL); - conv_pri2iec(&ysp_pri_data,&ysp_glb_data,0,0); + now=time(NULL); + + lock_input_data(); + //更新油温和微水含量到ysp_glb_data + ysp_glb_data.Tmp.v.f=my_input_data.temp;//油温 + ysp_glb_data.Mst.v.f=my_input_data.water;//微水 + if(my_input_data.com_flg) + { + ysp_glb_data.Tmp.q=INVALID;//油温品质 + ysp_glb_data.Mst.q=INVALID;//微水品质 + } + else + { + ysp_glb_data.Mst.q=GOOD; + ysp_glb_data.Tmp.q=GOOD; + } + ysp_glb_data.Mst.t.secs=now;//微水时标 + ysp_glb_data.Tmp.t.secs=now;//温度时标 + unlock_input_data(); + + //更新载气压力到ysp_glb_data + get_presure(PRES_PA1,&ysp_glb_data.GasPres.v.f); //载气压力 + ysp_glb_data.GasPres.t.secs=now;//压力时标 + ysp_glb_data.GasPres.q=GOOD; + + if(ysp_glb_data.MoDevConf.v.stVal) + { + ysp_glb_data.MoDevConf.q=INVALID; + } + else + { + ysp_glb_data.MoDevConf.q=GOOD; + } + + memcpy(&ysp_pri_data,&iec61850_rx_buf[4],sizeof(YSP_PRI_DATA)); + conv_pri2iec(&ysp_pri_data,&ysp_glb_data,0,0);//从ysp_pri_data拷贝数据到ysp_glb_data + + rdre[0].v.stVal=1;//rcd_made + rdre[0].q=GOOD; + rdre[0].t.secs=now; + + rdre[1].v.i++;//file_num + rdre[1].q=GOOD; + rdre[1].t.secs=now; + + //发送ysp_glb_data到iec61850; lock_scl_mem(); - put_mv_data(0,0,(USR_MV *)&ysp_glb_data,sizeof(ysp_glb_data)/sizeof(USR_MV)); - unlock_scl_mem(); + put_mv_data(0,0,(USR_MV *)&ysp_glb_data,sizeof(ysp_glb_data)/sizeof(USR_MV)); + put_mv_data(0,20,(USR_MV *)&rdre[0],sizeof(rdre)/sizeof(USR_MV)); + unlock_scl_mem(); + sleep(3); + rdre[0].v.stVal=0;//rcd_made + lock_scl_mem(); + put_mv_data(0,20,(USR_MV *)&rdre[0],1); + unlock_scl_mem(); break; default: break; @@ -128,39 +180,45 @@ void iec61850_rx_routine(void *arg) } else { - now=time(NULL); - lock_input_data(); - ysp_glb_data.Tmp.v.f=my_input_data.temp; - ysp_glb_data.Mst.v.f=my_input_data.water; - if(my_input_data.com_flg) - { - ysp_glb_data.Tmp.q=INVALID; + if(update_flg==0) + { + now=time(NULL); + lock_input_data(); + ysp_glb_data.Tmp.v.f=my_input_data.temp;//油温 + ysp_glb_data.Mst.v.f=my_input_data.water;//微水 + if(my_input_data.com_flg) + { + ysp_glb_data.Tmp.q=INVALID;//油温品质 ysp_glb_data.Mst.q=INVALID; - } - else - { + } + else + { ysp_glb_data.Tmp.q=GOOD; ysp_glb_data.Mst.q=GOOD; - } - unlock_input_data(); - - get_presure(PRES_PA1,&ysp_glb_data.GasPres.v.f); - conv_pri2iec(&ysp_pri_data,&ysp_glb_data,0,0); - ysp_glb_data.Tmp.t.secs=now; - ysp_glb_data.Mst.t.secs=now; - ysp_glb_data.GasPres.t.secs=now; - if(ysp_glb_data.MoDevConf.v.stVal) + } + unlock_input_data(); + + ysp_glb_data.Tmp.t.secs=now;//温度时标 + + get_presure(PRES_PA1,&ysp_glb_data.GasPres.v.f); //载气压力 + ysp_glb_data.GasPres.t.secs=now;//压力时标 + if(ysp_glb_data.MoDevConf.v.stVal) { ysp_glb_data.MoDevConf.q=INVALID; } - else + else { ysp_glb_data.MoDevConf.q=GOOD; - } + } + update_flg++; + } + + conv_pri2iec(&ysp_pri_data,&ysp_glb_data,0,0); //从ysp_pri_data赋值给ysp_glb_data + lock_scl_mem(); - put_mv_data(0,0,(USR_MV *)&ysp_glb_data,sizeof(ysp_glb_data)/sizeof(USR_MV)); + put_mv_data(0,0,(USR_MV *)&ysp_glb_data,sizeof(ysp_glb_data)/sizeof(USR_MV)); //将ysp_glb_data发送给iec61850服务 unlock_scl_mem(); - } + } } stop_scl_mem(); } diff --git a/src/main.c b/src/main.c index 5d3001b..2b230ca 100644 --- a/src/main.c +++ b/src/main.c @@ -21,9 +21,16 @@ #include "sample_process.h" #include "ctrl_process.h" #include "iec61850_process.h" +//#include "modbus_rtu_slave.h" -#define APP_VERSION "ysp application v3.3(2016-07-14 12:00)" - +//#define APP_VERSION "ysp application v3.3i(2020-09-17 13:00)" +//#define APP_VERSION "ysp application v3.3j(2021-05-25 13:00)" +//#define APP_VERSION "ysp application v3.3k(2022-08-15 15:00)" +//#define APP_VERSION "ysp application v3.3l(2022-09-19 23:00)" +#define APP_VERSION "ysp application v3.3m(2022-09-26 10:00)" +/* +2020-09-17 v3.3i 添加modbus rtu slave传输数据 +*/ typedef struct { @@ -246,6 +253,7 @@ int main_message_process(ACTION_MSG_TYPE *msg) { float env_temp;//环境温度 float my_temp;// + int n; switch(curr_state) { case SIX_SAMPLE: @@ -320,6 +328,37 @@ int main_message_process(ACTION_MSG_TYPE *msg) //{ // LOG_DEBUG(TRACE_DEBUG,"Preaction:sample room colding will not start,env_temp=%f\n",env_temp); // } + + /*2022-09-09添加I9处理*/ + for(n=0;n<2;n++) + { + relay_set(RLY_YV4,ON,1); + LOG_DEBUG(ACTION_DEBUG,"YV4 ON\n"); + sleep(1); + relay_set(RLY_YV11,ON,0); + relay_set(RLY_YV12,ON,1); + LOG_DEBUG(ACTION_DEBUG,"YV11 ON YV12 ON\n"); + sleep(10); + relay_set(RLY_YV4,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"YV4 OFF\n"); + sleep(3); + relay_set(RLY_YV12,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"YV12 OFF\n"); + sleep(3); + relay_set(RLY_YV5,ON,0); + relay_set(RLY_YV11,ON,0); + relay_set(RLY_YV13,ON,1); + LOG_DEBUG(ACTION_DEBUG,"YV5 YV11 YV13 ON\n"); + sleep(3); + relay_set(RLY_YV13,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"YV13 OFF\n"); + sleep(1); + relay_set(RLY_YV5,OFF,0); + relay_set(RLY_YV11,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"YV5 YV11 OFF\n"); + sleep(1); + } + gas_make_stat.dly_cnt=0; gas_make_stat.repeat_cnt=0; gas_make_stat.step=50; @@ -371,6 +410,44 @@ void stop_curr_process(int reason) printf("stop current process\n"); } +int pull_yv6(int timeout) +{ + int i; + relay_set(RLY_YV7,OFF,0); + relay_set(RLY_YV6,ON,1); + for(i=0;i(-25)) - if(fval>(-20))//2016-07-03 + //if(fval>(-20))//2016-07-03 + //2022-08-15 取消温度判断,改为延时约4秒 + /*if(fval>(-10))//2020-05-18 { gas_make_stat.dly_cnt++; if(gas_make_stat.dly_cnt>600)//5分钟未到达设置的温度 - { - LOG_DEBUG(ERROR_DEBUG,"make_step=%d:wait lj temperature arrived -25 timeout %f,exit\n",gas_make_stat.step,fval); - stop_gas_make(gas_make_stat.step); - return gas_make_stat.step; + { //等待冷井到达设置温度超时 + LOG_DEBUG(ERROR_DEBUG,"make_step=%d:wait lj temperature arrived -10 timeout %f,exit\n",gas_make_stat.step,fval); + stop_gas_make(gas_make_stat.step);//停止造气 + return gas_make_stat.step; //返回失败 } if((gas_make_stat.dly_cnt%16)==0) LOG_DEBUG(ACTION_DEBUG,"make_step=%d:leng jin temp is %f\n",gas_make_stat.step,fval); break; - } + }*/ + gas_make_stat.dly_cnt++; + if(gas_make_stat.dly_cnt>=8) + { LOG_DEBUG(ACTION_DEBUG,"make_step=%d:leng jin temp is %f\n",gas_make_stat.step,fval); gas_make_stat.dly_cnt=0; gas_make_stat.step++; + } break; case 20://开YV7,关YV6 relay_set(RLY_YV6,OFF,0); @@ -1503,23 +1595,29 @@ int gas_make(void) break; case 22://等待冷井温度<-28 get_temperature(TEMP_LJ,&fval); + //2022-08-15注释掉冷井温度判断,只延时大约4秒 //if(fval>(-28)) - if(fval>(-25))//2016-07-03 + /* if(fval>(-25))//2016-07-03 { gas_make_stat.dly_cnt++; if(gas_make_stat.dly_cnt>600)//5分钟未到达设置的温度 { LOG_DEBUG(ERROR_DEBUG,"make_step=%d:wait lj temperature arrived -28 timeout %f,exit\n",gas_make_stat.step,fval); + stop_gas_make(gas_make_stat.step); return gas_make_stat.step; } if((gas_make_stat.dly_cnt%16)==0) LOG_DEBUG(ACTION_DEBUG,"make_step=%d:leng jin wendu is %f\n",gas_make_stat.step,fval); break; - } - LOG_DEBUG(ACTION_DEBUG,"make_step=%d:leng jin wen du is %f\n",gas_make_stat.step,fval); - gas_make_stat.dly_cnt=0; - gas_make_stat.step++; + }*/ + gas_make_stat.dly_cnt++; + if(gas_make_stat.dly_cnt>=8) + { + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:leng jin wen du is %f\n",gas_make_stat.step,fval); + gas_make_stat.dly_cnt=0; + gas_make_stat.step++; + } break; case 23://开YV19 //relay_set(RLY_YV20,ON,0);//和YV19一起开,和YV18一起关 @@ -2042,7 +2140,7 @@ int gas_make(void) gas_make_stat.step++; relay_set(RLY_YV11,ON,0); relay_set(RLY_YV12,ON,1); - LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV11 ON\n",gas_make_stat.step); + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV11 ON,YV12 ON\n",gas_make_stat.step); break; } else @@ -2063,6 +2161,7 @@ int gas_make(void) if(gas_make_stat.dly_cnt>(180*2)) { relay_set(RLY_YV12,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV12 OFF\n",gas_make_stat.step); usleep(1000000); relay_set(RLY_YV4,OFF,1); LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV4 OFF\n",gas_make_stat.step); @@ -2103,9 +2202,11 @@ int gas_make(void) //开始动作 } else - { + { relay_set(RLY_YV5,ON,1); - LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV5 ON\n",gas_make_stat.step); + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV5 ON\n",gas_make_stat.step); + relay_set(RLY_YV13,ON,1); + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV13 ON\n",gas_make_stat.step); gas_make_stat.dly_cnt=0; gas_make_stat.step++; } @@ -2114,6 +2215,9 @@ int gas_make(void) gas_make_stat.dly_cnt++; if(gas_make_stat.dly_cnt>8) { + relay_set(RLY_YV13,OFF,1); + LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV13 OFF\n",gas_make_stat.step); + relay_set(RLY_YV11,OFF,1); LOG_DEBUG(ACTION_DEBUG,"make_step=%d:YV11 OFF,YV5 OFF\n",gas_make_stat.step); usleep(1000000); @@ -2176,6 +2280,7 @@ int gas_make(void) } relay_set(RLY_YV18,ON,0);//开吹扫阀 relay_set(RLY_KA3,OFF,0);//关柜子风扇 + LOG_DEBUG(ACTION_DEBUG,"YV18 ON,KA3 OFF\n"); time_record.heat_start_time=time(NULL)+60;//一分钟后开传感器加热 relay_dly_open_set(RLY_SENSOR,1*60);//1分钟后开启 } @@ -2588,7 +2693,7 @@ void gas_pump_process(void) unsigned char curr_state; float curr_pres,pre_pres; run_tick++; - if((run_tick&1)==0) + if((run_tick&1)==0)//每隔1秒运行一次 { get_presure(PRES_PA1,&curr_pres);//获取载气压力 relay_get(RLY_PUMP,&curr_state);//获取当前状态 @@ -2597,18 +2702,19 @@ void gas_pump_process(void) on_time_tick++; if(on_time_tick==2) { - start_pres=curr_pres; + start_pres=curr_pres;//记录起始压力 } - if(on_time_tick==16) + if(on_time_tick==60)//2022-08-15由24秒改成60秒 { if(curr_pres<(start_pres+0.1)) { relay_set(RLY_PUMP,OFF,1); on_time_tick=0; - LOG_DEBUG(ERROR_DEBUG,"gas pump working bad,pres_pres=%fMpa,curr_pres=%fMpa\r\n",start_pres,curr_pres); + LOG_DEBUG(ERROR_DEBUG,"gas pump working bad,start_pres=%fMpa,curr_pres=%fMpa\r\n",start_pres,curr_pres); my_para_data.mach_run_para.auto_gas_en=0; //载气异常告警 - ysp_glb_data.ActCyGasSta.v.stVal=1; + //ysp_glb_data.ActCyGasSta.v.stVal=1; + ysp_glb_data.ActCyGasSta.v.stVal=0;//2021-06-08屏蔽载气异常告警 ysp_glb_data.ActCyGasSta.q=0; ysp_glb_data.ActCyGasSta.t.secs=time(NULL); return; @@ -2620,7 +2726,7 @@ void gas_pump_process(void) ysp_glb_data.ActCyGasSta.t.secs=time(NULL); } } - if(on_time_tick>20)//计时超过20秒就关闭 + if(on_time_tick>120)//计时超过30秒就关闭,2022-08-15由30秒改为120秒 { relay_set(RLY_PUMP,OFF,1); LOG_DEBUG(ERROR_DEBUG,"Stop gas pump for timeout,pres=%fMpa\r\n",curr_pres); @@ -2639,9 +2745,9 @@ void gas_pump_process(void) { if(curr_state==OFF) { - if(comunication_flg) - relay_set(RLY_PUMP,ON,1); - LOG_DEBUG(TRACE_DEBUG,"Start gas pump,pres=%fMpa\r\n",curr_pres); + //if(comunication_flg) + relay_set(RLY_PUMP,ON,1); + LOG_DEBUG(TRACE_DEBUG,"Start gas pump,pres=%fMpa comunication_flg=%d\r\n",curr_pres,comunication_flg); } //启动气缸 } @@ -2781,6 +2887,39 @@ void old_log_process(time_t now) } } +void sample_pre_process(void) +{ + float carrier_gas_pres; + unsigned char pump_rly_state; + int i; + + my_para_data.mach_run_para.auto_gas_en=1; + relay_get(RLY_PUMP,&pump_rly_state);//获取当前状态 + get_presure(PRES_PA1,&carrier_gas_pres);//获取载气压力 + if(carrier_gas_pres<(STOP_PRES-0.09)) + { + LOG_DEBUG(TRACE_DEBUG,"carrier_gas_pres=%fMpa\r\n",carrier_gas_pres); + relay_set(RLY_PUMP,ON,1);//打开气泵 + LOG_DEBUG(TRACE_DEBUG,"pump power on\n"); + for(i=0;i<30;i++) + { + sleep(1);//延时1s + get_presure(PRES_PA1,&carrier_gas_pres);//获取载气压力 + if(carrier_gas_pres>=STOP_PRES) + { + break; + } + } + relay_set(RLY_PUMP,OFF,1); + LOG_DEBUG(TRACE_DEBUG,"carrier_gas_pres=%fMpa stop pump\r\n",carrier_gas_pres); + LOG_DEBUG(TRACE_DEBUG,"pump power off\n"); + } + else + { + /* code */ + } +} + int main(int argc,char *argv[]) { extern int send_ctrl_message(void); @@ -2799,6 +2938,7 @@ int main(int argc,char *argv[]) unsigned int smp_len; struct stat st; YSP_PRI_DATA dumy_ysp_data; + int gas_pump_stop_tick=0; chdir("/usr/shxy/ysp/app"); if(argc>=3) @@ -2890,6 +3030,7 @@ int main(int argc,char *argv[]) last_sample_time_ex=last_sample_time; time_record.dummy_sample_time=0; + //modbus_rtu_slave_init(); /*time_record.room_start_time=next_sample_time-45*60; time_record.yv18_start_time=next_sample_time-15*60; time_record.heat_start_time=next_sample_time+1*60; */ @@ -2900,7 +3041,8 @@ int main(int argc,char *argv[]) //sensor_test(1000); //return 1; goahead_init(); - printf("version is v3.3:2015-11-24 10:57\n"); + //printf("version is v3.3:2015-11-24 10:57\n"); + LOG_DEBUG(TRACE_DEBUG,APP_VERSION); smp_len=0; if(query_sample_data((unsigned char *)&smp_len,sizeof(SAMPLE_INPUT_TYPE))!=0) { @@ -3060,6 +3202,12 @@ int main(int argc,char *argv[]) if(now>=next_sample_time) { time_record.sample_start_time=now;//记录采样开始时刻 + //2021-03-09添加排水阀处理,每次采样前开3秒钟 + relay_set(RLY_KA8,ON,1); + LOG_DEBUG(TRACE_DEBUG,"KA8 ON\n"); + sleep(3); + relay_set(RLY_KA8,OFF,1); + LOG_DEBUG(TRACE_DEBUG,"KA8 OFF\n"); //启动采样 LoadAllPara(&my_para_data); LOG_DEBUG(TRACE_DEBUG,"reload all parameter\n"); @@ -3071,6 +3219,7 @@ int main(int argc,char *argv[]) sample_cnt=(my_para_data.mach_run_para.upload_time/my_para_data.mach_run_para.start_interval); if((upload_tick%sample_cnt)==0) { + sample_pre_process();//add by tmb at 20200829 //启动硬采样 if(SendActionReq(SIX_SAMPLE,0)!=0) LOG_DEBUG(TRACE_DEBUG,"send start six sample request failed\n"); @@ -3087,6 +3236,7 @@ int main(int argc,char *argv[]) else { //调试模式 + sample_pre_process();//add by tmb at 20200829 if(SendActionReq(SIX_SAMPLE,0)!=0) LOG_DEBUG(TRACE_DEBUG,"send start six sample request failed\n"); else @@ -3146,7 +3296,18 @@ int main(int argc,char *argv[]) if(my_para_data.mach_run_para.auto_gas_en) { gas_pump_process(); - } + gas_pump_stop_tick=0; + } + else + { + //2022-08-15 添加每隔半小时开启自动造气 + gas_pump_stop_tick++; + if(gas_pump_stop_tick>=3600) + { + my_para_data.mach_run_para.auto_gas_en=1; + LOG_DEBUG(TRACE_DEBUG,"force enable auto make gas\n"); + } + } //采样完成后,延时10分钟关传感器加热,关吹扫阀,关YV20 relay_dly_process(); HeatAutoTuneProcess(now); diff --git a/src/readme.txt b/src/readme.txt new file mode 100644 index 0000000..1205d12 --- /dev/null +++ b/src/readme.txt @@ -0,0 +1 @@ +2020-06-09 21:00 v3.3b tian jia co2 parameter setting diff --git a/src/sample_process.c b/src/sample_process.c index de44094..d18964b 100644 --- a/src/sample_process.c +++ b/src/sample_process.c @@ -7,12 +7,12 @@ #include "analysis.h" #include "ysp_debug.h" -#define COMTADE_DIR "/COMTRADE" - -#define VIN 4.096 //ѹ -#define GND_OFFS 0.254 //˷׼ƫ -#define AMP 5.94 //˷ŷŴ -#define IN_OFFS //˷Ÿƫõѹ +#define COMTADE_DIR "/COMTRADE" //默认波形存储目录 +#define RAW_WAVE_DIR "/usr_app/data" +#define VIN 4.096 //���������ѹ +#define GND_OFFS 0.254 //����˷������׼ƫ�� +#define AMP 5.94 //����˷ŷŴ��� +#define IN_OFFS //����˷Ÿ�����ƫ�õ�ѹ #define MCU_VREF 3.3 /* typedef struct{ @@ -37,7 +37,7 @@ float temperature; unsigned int rsv[3]; }SAMPLE_OUTPUT_TYPE; */ -static const char *dir_store_data=COMTADE_DIR; +static const char *dir_store_data=RAW_WAVE_DIR;//COMTADE_DIR; //2021-10-28修改默认波形存储目录为RAW_WAVE_DIR static unsigned char sample_rx_buf[SEGMENT_LENGTH+7]; static unsigned char sample_tx_buf[128]; static unsigned short data_buf[10000]; @@ -84,7 +84,7 @@ int sample_check(unsigned char *buf,unsigned char cmd,unsigned int buf_len) } -//ѯǷв +//��ѯ�Ƿ��в������� unsigned int query_sample_data(unsigned char *ret_data,int len) { int length; @@ -141,7 +141,7 @@ unsigned int query_sample_data_ex(unsigned char *ret_data,int len) }*/ -// +//����������� unsigned int clear_sample_data(void) { int length; @@ -170,7 +170,7 @@ unsigned int clear_sample_data(void) } -// +//����������� unsigned int clear_co2_data(void) { int length; @@ -198,7 +198,7 @@ unsigned int clear_co2_data(void) return 3; } -// +//�������� int start_sample_data(unsigned int ch,SAMPLE_PARA_TYPE *sample_para) { int length; @@ -243,7 +243,7 @@ int start_sample_data(unsigned int ch,SAMPLE_PARA_TYPE *sample_para) } /* -// +//�������������� int start_sample_heat(unsigned char ch,unsigned char flg) { int length; @@ -269,8 +269,8 @@ int start_sample_heat(unsigned char ch,unsigned char flg) return 3; }*/ -// -//start_pos=ʼλ(ֽ),len=ȡ(ֽ) +//������ +//start_pos=��ʼλ��(�ֽ�),len=��ȡ����(�ֽ�) int read_co2_segment(int start_pos,int len) { int length; @@ -309,7 +309,7 @@ int read_co2_segment(int start_pos,int len) return 3; } -//total_lenֽڳ +//total_len�ֽڳ��� unsigned int read_co2_data(unsigned int total_len) { unsigned int i; @@ -361,8 +361,8 @@ unsigned int read_co2_data(unsigned int total_len) -// -//start_pos=ʼλ(ֽ),len=ȡ(ֽ) +//������ +//start_pos=��ʼλ��(�ֽ�),len=��ȡ����(�ֽ�) int read_segment_data(int start_pos,int len) { int length; @@ -401,7 +401,7 @@ int read_segment_data(int start_pos,int len) return 3; } -//total_lenֽڳ +//total_len�ֽڳ��� unsigned int read_sample_data(unsigned int total_len) { unsigned int i; @@ -459,14 +459,14 @@ char *make_data_file_name(time_t now,unsigned int i) char date_str[32]; memset(file_name,0,sizeof(file_name)); if(i==0) - strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.bin",localtime(&now)); + strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.bin",localtime(&now));//二进制六组分文件 else if(i==1) - strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.csv",localtime(&now)); + strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.csv",localtime(&now));// else if(i==2) - strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.co2",localtime(&now)); + strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.co2",localtime(&now));//co2文件 else - strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.csv",localtime(&now)); - sprintf(file_name,"%s/%s",dir_store_data,date_str); + strftime(date_str,sizeof(date_str),"%Y%m%d_%H%M%S.csv",localtime(&now));// + sprintf(file_name,"%s/%s",dir_store_data,date_str);//dir_store_data为默认波形存储目录 return file_name; } @@ -494,7 +494,7 @@ int savefile(const char *file,long offs,void *ptr,unsigned int size) return 0; } -//ֱӴ32λ,sizeΪֽڳ +//��������ֱ�Ӵ��32λ������,sizeΪ�ֽڳ��� int save_hex_file(const char *file,long offs,void *ptr,unsigned int size) { FILE *fp; @@ -526,7 +526,7 @@ int save_hex_file(const char *file,long offs,void *ptr,unsigned int size) } /* -//ݴɶƸ +//�������ݴ�ɶ����Ƹ����� int save_float_file(const char *file,long offs,void *ptr,unsigned int size) { static float file_buf[5000]; @@ -576,7 +576,7 @@ void RawConvVolt(int tmp,float *volt) } /* -//תɵѹٴɶƸ +//��������ת���ɵ�ѹ�ٴ�ɶ����Ƹ����� int save_float_file_ex(const char *file,long offs,void *ptr,unsigned int size) { static float file_buf[5000]; @@ -650,7 +650,7 @@ int save_csv_file(const char *file,long offs,void *ptr,unsigned int size) } -//,lenΪֽڳ +//��������,lenΪ�ֽڳ��� int save_sample_data(unsigned int len) { int ret; @@ -658,11 +658,11 @@ int save_sample_data(unsigned int len) time_t now; now=time(NULL); - last_sample_time=now; + last_sample_time=now;//存储本次采样时间 - my_file_name=make_data_file_name(now,0);//binļ + my_file_name=make_data_file_name(now,0);//生成原始波形文件名 - if((ret=save_hex_file(my_file_name,0,(void *)data_buf,len))!=0) + if((ret=save_hex_file(my_file_name,0,(void *)data_buf,len))!=0)//保存原始波形文件 { LOG_DEBUG(ERROR_DEBUG,"save bin file failed %s\n",my_file_name); return -1; @@ -673,13 +673,13 @@ int save_sample_data(unsigned int len) return -1; }*/ - if(send_analysis_req(my_file_name,strlen(my_file_name))!=0) + if(send_analysis_req(my_file_name,strlen(my_file_name))!=0)//发送波形分析请求 { LOG_DEBUG(ERROR_DEBUG,"Send analysis request failed:file name is %s\n",my_file_name); return -2; } - my_file_name=make_data_file_name(now,1);//csvļ + my_file_name=make_data_file_name(now,1);//生成csv文件名 if((ret=save_csv_file(my_file_name,0,(void *)data_buf,len))!=0) { LOG_DEBUG(ERROR_DEBUG,"save csv file failed %s\n",my_file_name); @@ -689,10 +689,11 @@ int save_sample_data(unsigned int len) return ret; } -//,lenΪֽڳ +//��������,lenΪ�ֽڳ��� int save_co2_data(unsigned int len) { extern int analysis_co2(unsigned short *buf,unsigned int buf_len,float *result); + extern int analysis_co2ex(unsigned short *buf,unsigned int buf_len,float *result); int ret=0; char *my_file_name; time_t now; @@ -700,7 +701,8 @@ int save_co2_data(unsigned int len) now=time(NULL); //last_sample_time=now; - if(analysis_co2(data_buf,len,&co2_ppm)==0) + //if(analysis_co2(data_buf,len,&co2_ppm)==0) + if(analysis_co2ex(data_buf,len/2,&co2_ppm)==0)//2020-06-11:change len to len/2 { last_co2_ppm=co2_ppm; co2_is_ok=1; @@ -709,18 +711,18 @@ int save_co2_data(unsigned int len) else { // last_co2_ppm=0; - last_co2_ppm=co2_ppm;//2015-11-11ֱߵʱԻΪֵ + last_co2_ppm=co2_ppm;//2015-11-11ֱ�ߵ�ʱ���Ի���Ϊ����ֵ co2_is_ok=0; LOG_DEBUG(ERROR_DEBUG,"analysis co2 failed co2=%fppm\n",co2_ppm); } - my_file_name=make_data_file_name(now,2);//co2ļ + my_file_name=make_data_file_name(now,2);//生成co2原始文件名 if((ret=save_hex_file(my_file_name,0,(void *)data_buf,len))!=0) { LOG_DEBUG(ERROR_DEBUG,"save bin file failed %s\n",my_file_name); return -1; } - my_file_name=make_data_file_name(now,3);//csvļ + my_file_name=make_data_file_name(now,3);//生成csv文件名 if((ret=save_csv_file(my_file_name,0,(void *)data_buf,len))!=0) { LOG_DEBUG(ERROR_DEBUG,"save csv file failed %s\n",my_file_name); diff --git a/src/ysp_cfg.ini b/src/ysp_cfg.ini index 0b1581e..cbe7c60 100644 --- a/src/ysp_cfg.ini +++ b/src/ysp_cfg.ini @@ -13,7 +13,7 @@ start_hour=10 start_minute=0 # -sample_interval=4 +sample_interval=2 #ѹͨ1ϵ pres1_fac_a=0.4 @@ -139,39 +139,39 @@ sample_rate=220 sample_offs=1500 #Ƿ0ʾرշʾ -sample_cool_en=0 +sample_cool_en=1 #̼лλ -co2_pos=0 +co2_pos=1200 #΢ˮʹ0ʾرշʾʹ -h2o_en=0 +h2o_en=1 #Զʹܷʾʹ -auto_gas_en=0 +auto_gas_en=1 #ģʽ01 run_mode=1 #ϴ -upload_time=72 +upload_time=4 #H2Ũȼ [H2_CAL] #ʼλ -start=170 +start=246 #嶥λ -peak=268 +peak=369 #λ -end=320 +end=456 # width=16 #ݶYmin -lYmin=48.0 +lYmin=2.0 #ݶXmax lXmax=32.0 @@ -183,7 +183,7 @@ rYmin=16.0 rXmax=32.0 #k1ֵ -k1_fac1=0.002025 +k1_fac1=0.00409 #k1Ũֵ k1_fac2=0 @@ -195,13 +195,13 @@ k1_fac3=10 k1_fac4=0.000001 #k1 -k1_fac5=4938.2715 +k1_fac5=2444.868223 #k1߼ƫֵ k1_fac6=1 #k2ֵ -k2_fac1=0.003332 +k2_fac1=0.004258 #k2Ũֵ k2_fac2=10.001 @@ -210,178 +210,178 @@ k2_fac2=10.001 k2_fac3=40 #k2С -k2_fac4=4938.2715 +k2_fac4=2444.868224 #k2 -k2_fac5=13941.572821 +k2_fac5=9490.194668 #k2߼ƫֵ -k2_fac6=1.645343 +k2_fac6=1.041095 #k3ֵ -k3_fac1=0.005488 +k3_fac1=0.004446 #k3Ũֵ -k3_fac2=40.001 +k3_fac2=40.000999 #k3Ũֵ k3_fac3=80 #k3С -k3_fac4=13941.572822 +k3_fac4=9490.194669 #k3 -k3_fac5=21230.020344 +k3_fac5=18486.821075 #k3߼ƫֵ -k3_fac6=1.647076 +k3_fac6=1.044218 #k4ֵ -k4_fac1=0.009047 +k4_fac1=0.004657 #k4Ũֵ -k4_fac2=80.001 +k4_fac2=80.000999 #k4Ũֵ k4_fac3=160 #k4С -k4_fac4=21230.020345 +k4_fac4=18486.821076 #k4 -k4_fac5=30072.620102 +k4_fac5=35665.047617 #k4߼ƫֵ -k4_fac6=1.648533 +k4_fac6=1.047351 #k5ֵ -k5_fac1=0.014917 +k5_fac1=0.004892 #k5Ũֵ -k5_fac2=160.001 +k5_fac2=160.001007 #k5Ũֵ k5_fac3=250 #k5С -k5_fac4=30072.620103 +k5_fac4=35665.047618 #k5 -k5_fac5=36105.937794 +k5_fac5=54062.225255 #k5߼ƫֵ -k5_fac6=1.648779 +k5_fac6=1.050493 #k6ֵ -k6_fac1=0.024567 +k6_fac1=0.005154 #k6Ũֵ -k6_fac2=250.001 +k6_fac2=250.001007 #k6Ũֵ k6_fac3=500 #k6С -k6_fac4=36105.937795 +k6_fac4=54062.225256 #k6 -k6_fac5=46282.149787 +k6_fac5=102568.04462 #k6߼ƫֵ -k6_fac6=1.646902 +k6_fac6=1.053644 #k7ֵ -k7_fac1=0.040492 +k7_fac1=0.005447 #k1Ũֵ -k7_fac2=500.001 +k7_fac2=500.001007 #k7Ũֵ k7_fac3=1000 #k1С -k7_fac4=46282.149788 +k7_fac4=102568.044621 #k7 -k7_fac5=58630.243239 +k7_fac5=194361.507628 #k7߼ƫֵ -k7_fac6=1.648208 +k7_fac6=1.056805 #k8ֵ -k8_fac1=0.066668 +k8_fac1=0.005774 #k8Ũֵ -k8_fac2=1000.001 +k8_fac2=1000.000977 #k8Ũֵ k8_fac3=2000 #k8С -k8_fac4=58630.24324 +k8_fac4=194361.507629 #k8 -k8_fac5=73629.928246 +k8_fac5=367551.501221 #k8߼ƫֵ -k8_fac6=1.646449 +k8_fac6=1.059975 #k9ֵ -k9_fac1=0.109518 +k9_fac1=0.006139 #k9Ũֵ -k9_fac2=2000.001 +k9_fac2=2000.000977 #k9Ũֵ k9_fac3=10000 #k9С -k9_fac4=73629.928247 +k9_fac4=367551.501222 #k9 -k9_fac5=146677.272063 +k9_fac5=1670695.176576 #k9߼ƫֵ -k9_fac6=1.642738 +k9_fac6=1.063155 #k10ֵ -k10_fac1=0.179953 +k10_fac1=0.006546 #k10Ũֵ -k10_fac2=10000.001 +k10_fac2=10000.000977 #k10Ũֵ k10_fac3=20000 #k10С -k10_fac4=146677.272064 +k10_fac4=1670695.176577 #k10 -k10_fac5=202247.332024 +k10_fac5=3198345.500897 #k10߼ƫֵ -k10_fac6=1.643139 +k10_fac6=1.066344 #k11ֵ -k11_fac1=0.295831 +k11_fac1=0.007001 #k11Ũֵ -k11_fac2=20000.002 +k11_fac2=20000.001953 #k11Ũֵ k11_fac3=50000 #k11С -k11_fac4=202247.332025 +k11_fac4=3198345.500898 #k11 -k11_fac5=303656.575816 +k11_fac5=7483447.350205 #k11߼ƫֵ -k11_fac6=1.643935 +k11_fac6=1.069543 #k12ֵ -k12_fac1=0.487984 +k12_fac1=0.00751 #k12Ũֵ k12_fac2=50000 @@ -390,24 +390,24 @@ k12_fac2=50000 k12_fac3=80000 #k12С -k12_fac4=303656.575817 +k12_fac4=7483447.350206 #k12 -k12_fac5=365134.001306 +k12_fac5=11478121.118515 #k12߼ƫֵ -k12_fac6=1.649538 +k12_fac6=1.072752 #COŨȼ [CO_CAL] #ʼλ -start=319 +start=403 #嶥λ -peak=346 +peak=484 #λ -end=440 +end=568 # width=20 @@ -425,7 +425,7 @@ rYmin=4.0 rXmax=32.0 #k1ֵ -k1_fac1=0.008645 +k1_fac1=0.029473 #k1Ũֵ k1_fac2=0 @@ -437,175 +437,175 @@ k1_fac3=20 k1_fac4=0.000001 #k1 -k1_fac5=2313.476 +k1_fac5=678.580506 #k1߼ƫֵ k1_fac6=1 #k2ֵ -k2_fac1=0.012002 +k2_fac1=0.030083 #k2Ũֵ -k2_fac2=20.001 +k2_fac2=20.000999 #k2Ũֵ k2_fac3=80 #k2С -k2_fac4=2313.476 +k2_fac4=678.580507 #k2 -k2_fac5=7312.559486 +k2_fac5=2673.029232 #k2߼ƫֵ -k2_fac6=1.388355 +k2_fac6=1.020694 #k3ֵ -k3_fac1=0.016617 +k3_fac1=0.030798 #k3Ũֵ -k3_fac2=80.001 +k3_fac2=80.000999 #k3Ũֵ k3_fac3=150 #k3С -k3_fac4=7312.559487 +k3_fac4=2673.029233 #k3 -k3_fac5=11525.052717 +k3_fac5=4945.871658 #k3߼ƫֵ -k3_fac6=1.384531 +k3_fac6=1.023756 #k4ֵ -k4_fac1=0.023051 +k4_fac1=0.031624 #k4Ũֵ -k4_fac2=150.001 +k4_fac2=150.001007 #k4Ũֵ k4_fac3=250 #k4С -k4_fac4=11525.052718 +k4_fac4=4945.871659 #k4 -k4_fac5=15863.215921 +k4_fac5=8107.995141 #k4߼ƫֵ -k4_fac6=1.387193 +k4_fac6=1.026827 #k5ֵ -k5_fac1=0.032063 +k5_fac1=0.03257 #k5Ũֵ -k5_fac2=250.001 +k5_fac2=250.001007 #k5Ũֵ k5_fac3=500 #k5С -k5_fac4=15863.215922 +k5_fac4=8107.995142 #k5 -k5_fac5=23660.334096 +k5_fac5=15783.739477 #k5߼ƫֵ -k5_fac6=1.39097 +k5_fac6=1.029907 #k6ֵ -k6_fac1=0.044685 +k6_fac1=0.033645 #k6Ũֵ -k6_fac2=500.001 +k6_fac2=500.001007 #k6Ũֵ k6_fac3=1000 #k6С -k6_fac4=23660.334097 +k6_fac4=15783.739478 #k6 -k6_fac5=34849.748889 +k6_fac5=30644.758738 #k6߼ƫֵ -k6_fac6=1.393676 +k6_fac6=1.032997 #k7ֵ -k7_fac1=0.062534 +k7_fac1=0.034859 #k1Ũֵ -k7_fac2=1000.001 +k7_fac2=1000.000977 #k7Ũֵ k7_fac3=2000 #k1С -k7_fac4=34849.74889 +k7_fac4=30644.758739 #k7 -k7_fac5=50841.033631 +k7_fac5=59331.726896 #k7߼ƫֵ -k7_fac6=1.399449 +k7_fac6=1.036096 #k8ֵ -k8_fac1=0.08656 +k8_fac1=0.036226 #k8Ũֵ -k8_fac2=2000.001 +k8_fac2=2000.000977 #k8Ũֵ k8_fac3=5000 #k8С -k8_fac4=50841.033632 +k8_fac4=59331.726897 #k8 -k8_fac5=85499.062745 +k8_fac5=142145.148832 #k8߼ƫֵ -k8_fac6=1.384203 +k8_fac6=1.039204 #k9ֵ -k9_fac1=0.11953 +k9_fac1=0.037759 #k9Ũֵ -k9_fac2=5000.001 +k9_fac2=5000.000977 #k9Ũֵ k9_fac3=10000 #k9С -k9_fac4=85499.062746 +k9_fac4=142145.148833 #k9 -k9_fac5=127329.557183 +k9_fac5=274563.884048 #k9߼ƫֵ -k9_fac6=1.380897 +k9_fac6=1.042322 #k10ֵ -k10_fac1=0.164972 +k10_fac1=0.039475 #k10Ũֵ -k10_fac2=10000.001 +k10_fac2=10000.000977 #k10Ũֵ k10_fac3=50000 #k10С -k10_fac4=127329.557184 +k10_fac4=274563.884049 #k10 -k10_fac5=369794.939188 +k10_fac5=1287863.415981 #k10߼ƫֵ -k10_fac6=1.380176 +k10_fac6=1.045449 #k11ֵ -k11_fac1=0.292474 +k11_fac1=0.041393 #k11Ũֵ k11_fac2=50000 @@ -614,16 +614,16 @@ k11_fac2=50000 k11_fac3=60000 #k11С -k11_fac4=369794.939189 +k11_fac4=1287863.415982 #k11 -k11_fac5=403986.012584 +k11_fac5=1529450.157702 #k11߼ƫֵ -k11_fac6=1.772873 +k11_fac6=1.048585 #k12ֵ -k12_fac1=0.034243 +k12_fac1=0.043534 #k12Ũֵ k12_fac2=60000 @@ -632,24 +632,24 @@ k12_fac2=60000 k12_fac3=70000 #k12С -k12_fac4=403986.012585 +k12_fac4=1529450.157703 #k12 -k12_fac5=696016.500568 +k12_fac5=1759155.67523 #k12߼ƫֵ -k12_fac6=0.117082 +k12_fac6=1.051731 #CH4Ũȼ [CH4_CAL] #ʼλ -start=460 +start=568 #嶥λ -peak=501 +peak=656 #λ -end=600 +end=780 # width=30 @@ -667,7 +667,7 @@ rYmin=4.0 rXmax=32.0 #k1ֵ -k1_fac1=0.004651 +k1_fac1=0.020187 #k1Ũֵ k1_fac2=0 @@ -679,13 +679,13 @@ k1_fac3=5 k1_fac4=0.000001 #k1 -k1_fac5=1075.037627 +k1_fac5=247.679615 #k1߼ƫֵ k1_fac6=1 #k2ֵ -k2_fac1=0.007446 +k2_fac1=0.020362 #k2Ũֵ k2_fac2=5.001 @@ -694,210 +694,210 @@ k2_fac2=5.001 k2_fac3=40 #k2С -k2_fac4=1075.037628 +k2_fac4=247.679616 #k2 -k2_fac5=5775.413669 +k2_fac5=1966.51863 #k2߼ƫֵ -k2_fac6=1.600877 +k2_fac6=1.008644 #k3ֵ -k3_fac1=0.011922 +k3_fac1=0.0206 #k3Ũֵ -k3_fac2=40.001 +k3_fac2=40.000999 #k3Ũֵ k3_fac3=100 #k3С -k3_fac4=5775.41367 +k3_fac4=1966.518631 #k3 -k3_fac5=10808.042424 +k3_fac5=4879.091495 #k3߼ƫֵ -k3_fac6=1.601071 +k3_fac6=1.01167 #k4ֵ -k4_fac1=0.019169 +k4_fac1=0.020903 #k4Ũֵ -k4_fac2=100.001 +k4_fac2=100.000999 #k4Ũֵ k4_fac3=150 #k4С -k4_fac4=10808.042425 +k4_fac4=4879.091496 #k4 -k4_fac5=13416.368368 +k4_fac5=7271.044852 #k4߼ƫֵ -k4_fac6=1.607894 +k4_fac6=1.014705 #k5ֵ -k5_fac1=0.030846 +k5_fac1=0.021274 #k5Ũֵ -k5_fac2=150.001 +k5_fac2=150.001007 #k5Ũֵ k5_fac3=250 #k5С -k5_fac4=13416.368369 +k5_fac4=7271.044853 #k5 -k5_fac5=16658.247381 +k5_fac5=11971.570988 #k5߼ƫֵ -k5_fac6=1.60917 +k5_fac6=1.017749 #k6ֵ -k6_fac1=0.049614 +k6_fac1=0.021717 #k6Ũֵ -k6_fac2=250.001 +k6_fac2=250.001007 #k6Ũֵ k6_fac3=500 #k6С -k6_fac4=16658.247382 +k6_fac4=11971.570989 #k6 -k6_fac5=21697.127537 +k6_fac5=23483.24355 #k6߼ƫֵ -k6_fac6=1.608454 +k6_fac6=1.020802 #k7ֵ -k7_fac1=0.079627 +k7_fac1=0.022235 #k1Ũֵ -k7_fac2=500.001 +k7_fac2=500.001007 #k7Ũֵ k7_fac3=1000 #k1С -k7_fac4=21697.127538 +k7_fac4=23483.243551 #k7 -k7_fac5=27976.392109 +k7_fac5=45970.268197 #k7߼ƫֵ -k7_fac6=1.604937 +k7_fac6=1.023864 #k8ֵ -k8_fac1=0.127989 +k8_fac1=0.022834 #k8Ũֵ -k8_fac2=1000.001 +k8_fac2=1000.000977 #k8Ũֵ k8_fac3=2000 #k8С -k8_fac4=27976.39211 +k8_fac4=45970.268198 #k8 -k8_fac5=35789.555741 +k8_fac5=89764.567182 #k8߼ƫֵ -k8_fac6=1.607353 +k8_fac6=1.026936 #k9ֵ -k9_fac1=0.20521 +k9_fac1=0.023519 #k9Ũֵ -k9_fac2=2000.001 +k9_fac2=2000.000977 #k9Ũֵ k9_fac3=4000 #k9С -k9_fac4=35789.555742 +k9_fac4=89764.567183 #k9 -k9_fac5=45535.664606 +k9_fac5=174802.154793 #k9߼ƫֵ -k9_fac6=1.60334 +k9_fac6=1.030017 #k10ֵ -k10_fac1=0.316022 +k10_fac1=0.024298 #k10Ũֵ -k10_fac2=4000.001 +k10_fac2=4000.000977 #k10Ũֵ k10_fac3=6000 #k10С -k10_fac4=45535.664607 +k10_fac4=174802.154794 #k10 -k10_fac5=51864.334763 +k10_fac5=257113.415927 #k10߼ƫֵ -k10_fac6=1.539992 +k10_fac6=1.033107 #k11ֵ -k11_fac1=0.410565 +k11_fac1=0.025178 #k11Ũֵ -k11_fac2=6000.001 +k11_fac2=6000.000977 #k11Ũֵ k11_fac3=8000 #k11С -k11_fac4=51864.334764 +k11_fac4=257113.415928 #k11 -k11_fac5=56735.66817 +k11_fac5=336547.804005 #k11߼ƫֵ -k11_fac6=1.299166 +k11_fac6=1.036206 #k12ֵ -k12_fac1=0.395465 +k12_fac1=0.026168 #k12Ũֵ -k12_fac2=8000.001 +k12_fac2=8000.000977 #k12Ũֵ k12_fac3=9000 #k12С -k12_fac4=56735.668171 +k12_fac4=336547.804006 #k12 -k12_fac5=59264.334425 +k12_fac5=374762.379938 #k12߼ƫֵ -k12_fac6=0.963221 +k12_fac6=1.039315 #C2H4Ũȼ [C2H4_CAL] #ʼλ -start=1500 +start=2132 #嶥λ -peak=1733 +peak=2323 #λ -end=1900 +end=2560 # width=64 #ݶYmin -lYmin=1.0 +lYmin=2.0 #ݶXmax lXmax=64.0 @@ -909,7 +909,7 @@ rYmin=4.0 rXmax=32.0 #k1ֵ -k1_fac1=0.000121 +k1_fac1=0.000213 #k1Ũֵ k1_fac2=0 @@ -921,13 +921,13 @@ k1_fac3=5 k1_fac4=0.000001 #k1 -k1_fac5=41322.312 +k1_fac5=23438.964936 #k1߼ƫֵ k1_fac6=1 #k2ֵ -k2_fac1=0.000184 +k2_fac1=0.000226 #k2Ũֵ k2_fac2=5.001 @@ -936,222 +936,222 @@ k2_fac2=5.001 k2_fac3=30 #k2С -k2_fac4=41322.312 +k2_fac4=23438.964937 #k2 -k2_fac5=177186.442435 +k2_fac5=134054.009185 #k2߼ƫֵ -k2_fac6=1.51688 +k2_fac6=1.057859 #k3ֵ -k3_fac1=0.000278 +k3_fac1=0.00024 #k3Ũֵ -k3_fac2=30.001 +k3_fac2=30.000999 #k3Ũֵ k3_fac3=80 #k3С -k3_fac4=177186.442436 +k3_fac4=134054.009186 #k3 -k3_fac5=357038.960422 +k3_fac5=342383.180019 #k3߼ƫֵ -k3_fac6=1.51043 +k3_fac6=1.061033 #k4ֵ -k4_fac1=0.000422 +k4_fac1=0.000255 #k4Ũֵ -k4_fac2=80.001 +k4_fac2=80.000999 #k4Ũֵ k4_fac3=150 #k4С -k4_fac4=357038.960423 +k4_fac4=342383.18002 #k4 -k4_fac5=522913.368006 +k4_fac5=616889.066295 #k4߼ƫֵ -k4_fac6=1.518738 +k4_fac6=1.064216 #k5ֵ -k5_fac1=0.000641 +k5_fac1=0.000272 #k5Ũֵ -k5_fac2=150.001 +k5_fac2=150.001007 #k5Ũֵ k5_fac3=200 #k5С -k5_fac4=522913.368007 +k5_fac4=616889.066296 #k5 -k5_fac5=600914.928069 +k5_fac5=800708.893502 #k5߼ƫֵ -k5_fac6=1.517774 +k5_fac6=1.067409 #k6ֵ -k6_fac1=0.000971 +k6_fac1=0.000291 #k6Ũֵ -k6_fac2=200.001 +k6_fac2=200.001007 #k6Ũֵ k6_fac3=250 #k6С -k6_fac4=600914.92807 +k6_fac4=800708.893503 #k6 -k6_fac5=652407.204074 +k6_fac5=972526.738864 #k6߼ƫֵ -k6_fac6=1.514717 +k6_fac6=1.070611 #k7ֵ -k7_fac1=0.001469 +k7_fac1=0.000312 #k1Ũֵ -k7_fac2=250.001 +k7_fac2=250.001007 #k7Ũֵ k7_fac3=500 #k1С -k7_fac4=652407.204075 +k7_fac4=972526.738865 #k7 -k7_fac5=822590.321842 +k7_fac5=1773805.562583 #k7߼ƫֵ -k7_fac6=1.512553 +k7_fac6=1.073823 #k8ֵ -k8_fac1=0.002225 +k8_fac1=0.000336 #k8Ũֵ -k8_fac2=500.001 +k8_fac2=500.001007 #k8Ũֵ k8_fac3=1000 #k8С -k8_fac4=822590.321843 +k8_fac4=1773805.562584 #k8 -k8_fac5=1047308.973528 +k8_fac5=3261897.803655 #k8߼ƫֵ -k8_fac6=1.514697 +k8_fac6=1.077044 #k9ֵ -k9_fac1=0.003245 +k9_fac1=0.000363 #k9Ũֵ -k9_fac2=1000.001 +k9_fac2=1000.000977 #k9Ũֵ k9_fac3=2000 #k9С -k9_fac4=1047308.973529 +k9_fac4=3261897.803656 #k9 -k9_fac5=1355475.075224 +k9_fac5=6016716.048835 #k9߼ƫֵ -k9_fac6=1.458569 +k9_fac6=1.080275 #k10ֵ -k10_fac1=0.000168 +k10_fac1=0.000393 #k10Ũֵ -k10_fac2=2000.001 +k10_fac2=2000.000977 #k10Ũֵ k10_fac3=3000 #k10С -k10_fac4=1355475.075225 +k10_fac4=6016716.048836 #k10 -k10_fac5=7307850.075225 +k10_fac5=8561242.824917 #k10߼ƫֵ -k10_fac6=0.051801 +k10_fac6=1.083516 #k11ֵ -k11_fac1=0.000489 +k11_fac1=0.000427 #k11Ũֵ -k11_fac2=3000.001 +k11_fac2=3000.000977 #k11Ũֵ k11_fac3=4000 #k11С -k11_fac4=7307850.075226 +k11_fac4=8561242.824918 #k11 -k11_fac5=9352837.805287 +k11_fac5=10903160.911569 #k11߼ƫֵ -k11_fac6=2.911691 +k11_fac6=1.086767 #k12ֵ -k12_fac1=0.000512 +k12_fac1=0.000465 #k12Ũֵ -k12_fac2=4000.001 +k12_fac2=4000.000977 #k12Ũֵ k12_fac3=5000 #k12С -k12_fac4=9352837.805288 +k12_fac4=10903160.91157 #k12 -k12_fac5=11305960.852163 +k12_fac5=13053696.444903 #k12߼ƫֵ -k12_fac6=1.04639 +k12_fac6=1.090027 #C2H6Ũȼ [C2H6_CAL] #ʼλ -start=1900 +start=2621 #嶥λ -peak=2193 +peak=2925 #λ -end=2400 +end=3187 # width=32 #ݶYmin -lYmin=1.0 +lYmin=2.0 #ݶXmax -lXmax=32.0 +lXmax=64.0 #ݶYmin -rYmin=4.0 +rYmin=1.0 #ݶXmax -rXmax=32.0 +rXmax=64.0 #k1ֵ -k1_fac1=0.000238 +k1_fac1=0.000529 #k1Ũֵ k1_fac2=0 @@ -1163,13 +1163,13 @@ k1_fac3=5 k1_fac4=0.000001 #k1 -k1_fac5=21008.404 +k1_fac5=9449.009367 #k1߼ƫֵ k1_fac6=1 #k2ֵ -k2_fac1=0.000319 +k2_fac1=0.000567 #k2Ũֵ k2_fac2=5.001 @@ -1178,435 +1178,435 @@ k2_fac2=5.001 k2_fac3=50 #k2С -k2_fac4=21008.404 +k2_fac4=9449.009368 #k2 -k2_fac5=162071.1 +k2_fac5=88812.325065 #k2߼ƫֵ -k2_fac6=1.339326 +k2_fac6=1.071047 #k3ֵ -k3_fac1=0.000427 +k3_fac1=0.000609 #k3Ũֵ -k3_fac2=50.001 +k3_fac2=50.000999 #k3Ũֵ k3_fac3=150 #k3С -k3_fac4=162071.1 +k3_fac4=88812.325066 #k3 -k3_fac5=396260.79555 +k3_fac5=253014.297151 #k3߼ƫֵ -k3_fac6=1.338252 +k3_fac6=1.07426 #k4ֵ -k4_fac1=0.000571 +k4_fac1=0.000656 #k4Ũֵ -k4_fac2=150.001 +k4_fac2=150.001007 #k4Ũֵ k4_fac3=250 #k4С -k4_fac4=396260.795551 +k4_fac4=253014.297152 #k4 -k4_fac5=571390.392749 +k4_fac5=405451.786481 #k4߼ƫֵ -k4_fac6=1.337843 +k4_fac6=1.077483 #k5ֵ -k5_fac1=0.00076 +k5_fac1=0.000709 #k5Ũֵ -k5_fac2=250.001 +k5_fac2=250.001007 #k5Ũֵ k5_fac3=500 #k5С -k5_fac4=571390.39275 +k5_fac4=405451.786482 #k5 -k5_fac5=900336.445382 +k5_fac5=758059.675057 #k5߼ƫֵ -k5_fac6=1.331535 +k5_fac6=1.080715 #k6ֵ -k6_fac1=0.001018 +k6_fac1=0.000769 #k6Ũֵ -k6_fac2=500.001 +k6_fac2=500.001007 #k6Ũֵ k6_fac3=1000 #k6С -k6_fac4=900336.445383 +k6_fac4=758059.675058 #k6 -k6_fac5=1391494.598625 +k6_fac5=1408253.424083 #k6߼ƫֵ -k6_fac6=1.338905 +k6_fac6=1.083957 #k7ֵ -k7_fac1=0.001368 +k7_fac1=0.000836 #k1Ũֵ -k7_fac2=1000.001 +k7_fac2=1000.000977 #k7Ũֵ k7_fac3=2000 #k1С -k7_fac4=1391494.598626 +k7_fac4=1408253.424084 #k7 -k7_fac5=2122488.019679 +k7_fac5=2604424.504228 #k7߼ƫֵ -k7_fac6=1.343936 +k7_fac6=1.087209 #k8ֵ -k8_fac1=0.00191 +k8_fac1=0.000912 #k8Ũֵ -k8_fac2=2000.001 +k8_fac2=2000.000977 #k8Ũֵ k8_fac3=5000 #k8С -k8_fac4=2122488.01968 +k8_fac4=2604424.504229 #k8 -k8_fac5=3693168.124392 +k8_fac5=5893897.117168 #k8߼ƫֵ -k8_fac6=1.39607 +k8_fac6=1.090471 #k9ֵ -k9_fac1=0.00163 +k9_fac1=0.000997 #k9Ũֵ -k9_fac2=5000.001 +k9_fac2=5000.000977 #k9Ũֵ k9_fac3=6000 #k9С -k9_fac4=3693168.124393 +k9_fac4=5893897.117169 #k9 -k9_fac5=4306664.443411 +k9_fac5=6896905.16431 #k9߼ƫֵ -k9_fac6=0.853169 +k9_fac6=1.093742 #k10ֵ -k10_fac1=0.000721 +k10_fac1=0.001094 #k10Ũֵ -k10_fac2=6000.001 +k10_fac2=6000.000977 #k10Ũֵ k10_fac3=7000 #k10С -k10_fac4=4306664.443412 +k10_fac4=6896905.164311 #k10 -k10_fac5=5693625.608461 +k10_fac5=7810981.053708 #k10߼ƫֵ -k10_fac6=0.442423 +k10_fac6=1.097023 #k11ֵ -k11_fac1=0.000311 +k11_fac1=0.001204 #k11Ũֵ -k11_fac2=7000.001 +k11_fac2=7000.000977 #k11Ũֵ k11_fac3=8000 #k11С -k11_fac4=5693625.608462 +k11_fac4=7810981.053709 #k11 -k11_fac5=8909056.476629 +k11_fac5=8641545.0263 #k11߼ƫֵ -k11_fac6=0.431705 +k11_fac6=1.100314 #k12ֵ -k12_fac1=0.000279 +k12_fac1=0.001329 #k12Ũֵ -k12_fac2=8000.001 +k12_fac2=8000.000977 #k12Ũֵ k12_fac3=9000 #k12С -k12_fac4=8909056.47663 +k12_fac4=8641545.026301 #k12 -k12_fac5=12493282.283082 +k12_fac5=9393989.738867 #k12߼ƫֵ -k12_fac6=0.897691 +k12_fac6=1.103615 #C2H2Ũȼ [C2H2_CAL] #ʼλ -start=2410 +start=3310 #嶥λ -peak=2620 +peak=3536 #λ -end=2800 +end=3814 # width=32 #ݶYmin -lYmin=1.0 +lYmin=4.000000 #ݶXmax -lXmax=32.0 +lXmax=64.000000 #ݶYmin -rYmin=4.0 +rYmin=4.000000 #ݶXmax -rXmax=32.0 +rXmax=64.000000 #k1ֵ -k1_fac1=0.000148 +k1_fac1=0.000649 #k1Ũֵ -k1_fac2=0 +k1_fac2=0.000000 #k1Ũֵ -k1_fac3=5 +k1_fac3=5.000000 #k1С k1_fac4=0.000001 #k1 -k1_fac5=33783.785 +k1_fac5=7053.039551 #k1߼ƫֵ -k1_fac6=1 +k1_fac6=1.000000 #k2ֵ -k2_fac1=0.000185 +k2_fac1=0.000682 #k2Ũֵ -k2_fac2=5.001 +k2_fac2=5.001000 #k2Ũֵ -k2_fac3=20 +k2_fac3=20.000000 #k2С -k2_fac4=33783.785 +k2_fac4=7053.039551 #k2 -k2_fac5=114859.46 +k2_fac5=26532.259766 #k2߼ƫֵ -k2_fac6=1.249854 +k2_fac6=1.086615 #k3ֵ -k3_fac1=0.000231 +k3_fac1=0.000839 #k3Ũֵ -k3_fac2=20.001 +k3_fac2=20.000999 #k3Ũֵ -k3_fac3=50 +k3_fac3=50.000000 #k3С -k3_fac4=114859.46 +k3_fac4=26532.259766 #k3 -k3_fac5=244725.260866 +k3_fac5=62287.921875 #k3߼ƫֵ -k3_fac6=1.247635 +k3_fac6=1.089875 #k4ֵ -k4_fac1=0.000288 +k4_fac1=0.000917 #k4Ũֵ -k4_fac2=50.001 +k4_fac2=50.000999 #k4Ũֵ -k4_fac3=100 +k4_fac3=100.000000 #k4С -k4_fac4=244725.260867 +k4_fac4=62287.921875 #k4 -k4_fac5=418332.899756 +k4_fac5=116812.460938 #k4߼ƫֵ -k4_fac6=1.247982 +k4_fac6=1.093145 #k5ֵ -k5_fac1=0.000359 +k5_fac1=0.001005 #k5Ũֵ -k5_fac2=100.001 +k5_fac2=100.000999 #k5Ũֵ -k5_fac3=150 +k5_fac3=150.000000 #k5С -k5_fac4=418332.899757 +k5_fac4=116812.460938 #k5 -k5_fac5=557605.880258 +k5_fac5=166562.703125 #k5߼ƫֵ -k5_fac6=1.24668 +k5_fac6=1.096424 #k6ֵ -k6_fac1=0.000447 +k6_fac1=0.001105 #k6Ũֵ -k6_fac2=150.001 +k6_fac2=150.001007 #k6Ũֵ -k6_fac3=250 +k6_fac3=250.000000 #k6С -k6_fac4=557605.880259 +k6_fac4=166562.703125 #k6 -k6_fac5=781317.289655 +k6_fac5=257059.531250 #k6߼ƫֵ -k6_fac6=1.24498 +k6_fac6=1.099713 #k7ֵ -k7_fac1=0.000558 +k7_fac1=0.001219 #k1Ũֵ -k7_fac2=250.001 +k7_fac2=250.001007 #k7Ũֵ -k7_fac3=500 +k7_fac3=500.000000 #k1С -k7_fac4=781317.289656 +k7_fac4=257059.531250 #k7 -k7_fac5=1229344.171376 +k7_fac5=462144.843750 #k7߼ƫֵ -k7_fac6=1.247609 +k7_fac6=1.103012 #k8ֵ -k8_fac1=0.000694 +k8_fac1=0.001349 #k8Ũֵ -k8_fac2=500.001 +k8_fac2=500.001007 #k8Ũֵ -k8_fac3=1000 +k8_fac3=1000.000000 #k8С -k8_fac4=1229344.171377 +k8_fac4=462144.843750 #k8 -k8_fac5=1949803.825556 +k8_fac5=832789.000000 #k8߼ƫֵ -k8_fac6=1.244398 +k8_fac6=1.106321 #k9ֵ -k9_fac1=0.000476 +k9_fac1=0.001497 #k9Ũֵ -k9_fac2=1000.001 +k9_fac2=1000.000977 #k9Ũֵ -k9_fac3=2000 +k9_fac3=2000.000000 #k9С -k9_fac4=1949803.825557 +k9_fac4=832789.000000 #k9 -k9_fac5=4050642.060851 +k9_fac5=1500791.000000 #k9߼ƫֵ -k9_fac6=0.686024 +k9_fac6=1.109640 #k10ֵ -k10_fac1=0.00017 +k10_fac1=0.001666 #k10Ũֵ -k10_fac2=2000.001 +k10_fac2=2000.000977 #k10Ũֵ -k10_fac3=3000 +k10_fac3=3000.000000 #k10С -k10_fac4=4050642.060852 +k10_fac4=1500791.000000 #k10 -k10_fac5=9932989.119676 +k10_fac5=2101030.500000 #k10߼ƫֵ -k10_fac6=0.356151 +k10_fac6=1.112969 #k11ֵ -k11_fac1=0.000254 +k11_fac1=0.001860 #k11Ũֵ -k11_fac2=3000.001 +k11_fac2=3000.000977 #k11Ũֵ -k11_fac3=4000 +k11_fac3=4000.000000 #k11С -k11_fac4=9932989.119677 +k11_fac4=2101030.500000 #k11 -k11_fac5=13869993.056685 +k11_fac5=2638664.500000 #k11߼ƫֵ -k11_fac6=1.495249 +k11_fac6=1.116308 #k12ֵ -k12_fac1=0.000442 +k12_fac1=0.002083 #k12Ũֵ -k12_fac2=4000.001 +k12_fac2=4000.000977 #k12Ũֵ -k12_fac3=5000 +k12_fac3=5000.000000 #k12С -k12_fac4=13869993.056686 +k12_fac4=2638664.500000 #k12 -k12_fac5=16132434.233157 +k12_fac5=3118740.750000 #k12߼ƫֵ -k12_fac6=1.742025 +k12_fac6=1.119657 #CO2Ũȼ @@ -1624,49 +1624,49 @@ end=2800 width=32 #ݶYmin -lYmin=1.0 +lYmin=1.000000 #ݶXmax -lXmax=32.0 +lXmax=32.000000 #ݶYmin -rYmin=4.0 +rYmin=4.000000 #ݶXmax -rXmax=32.0 +rXmax=32.000000 #k1ֵ -k1_fac1=0.000148 +k1_fac1=0.704915 #k1Ũֵ -k1_fac2=0 +k1_fac2=0.000000 #k1Ũֵ -k1_fac3=5 +k1_fac3=300000000.000000 #k1С k1_fac4=0.000001 #k1 -k1_fac5=33783.785 +k1_fac5=337830772736.000000 #k1߼ƫֵ -k1_fac6=1 +k1_fac6=1.000000 #k2ֵ k2_fac1=0.000185 #k2Ũֵ -k2_fac2=5.001 +k2_fac2=5.001000 #k2Ũֵ -k2_fac3=20 +k2_fac3=20.000000 #k2С -k2_fac4=33783.785 +k2_fac4=33783.785156 #k2 -k2_fac5=114859.46 +k2_fac5=114859.460938 #k2߼ƫֵ k2_fac6=1.249854 @@ -1675,16 +1675,16 @@ k2_fac6=1.249854 k3_fac1=0.000231 #k3Ũֵ -k3_fac2=20.001 +k3_fac2=20.000999 #k3Ũֵ -k3_fac3=50 +k3_fac3=50.000000 #k3С -k3_fac4=114859.46 +k3_fac4=114859.460938 #k3 -k3_fac5=244725.260866 +k3_fac5=244725.265625 #k3߼ƫֵ k3_fac6=1.247635 @@ -1693,16 +1693,16 @@ k3_fac6=1.247635 k4_fac1=0.000288 #k4Ũֵ -k4_fac2=50.001 +k4_fac2=50.000999 #k4Ũֵ -k4_fac3=100 +k4_fac3=100.000000 #k4С -k4_fac4=244725.260867 +k4_fac4=244725.265625 #k4 -k4_fac5=418332.899756 +k4_fac5=418332.906250 #k4߼ƫֵ k4_fac6=1.247982 @@ -1711,52 +1711,52 @@ k4_fac6=1.247982 k5_fac1=0.000359 #k5Ũֵ -k5_fac2=100.001 +k5_fac2=100.000999 #k5Ũֵ -k5_fac3=150 +k5_fac3=150.000000 #k5С -k5_fac4=418332.899757 +k5_fac4=418332.906250 #k5 -k5_fac5=557605.880258 +k5_fac5=557605.875000 #k5߼ƫֵ -k5_fac6=1.24668 +k5_fac6=1.246680 #k6ֵ k6_fac1=0.000447 #k6Ũֵ -k6_fac2=150.001 +k6_fac2=150.001007 #k6Ũֵ -k6_fac3=250 +k6_fac3=250.000000 #k6С -k6_fac4=557605.880259 +k6_fac4=557605.875000 #k6 -k6_fac5=781317.289655 +k6_fac5=781317.312500 #k6߼ƫֵ -k6_fac6=1.24498 +k6_fac6=1.244980 #k7ֵ k7_fac1=0.000558 #k1Ũֵ -k7_fac2=250.001 +k7_fac2=250.001007 #k7Ũֵ -k7_fac3=500 +k7_fac3=500.000000 #k1С -k7_fac4=781317.289656 +k7_fac4=781317.312500 #k7 -k7_fac5=1229344.171376 +k7_fac5=1229344.125000 #k7߼ƫֵ k7_fac6=1.247609 @@ -1765,16 +1765,16 @@ k7_fac6=1.247609 k8_fac1=0.000694 #k8Ũֵ -k8_fac2=500.001 +k8_fac2=500.001007 #k8Ũֵ -k8_fac3=1000 +k8_fac3=1000.000000 #k8С -k8_fac4=1229344.171377 +k8_fac4=1229344.125000 #k8 -k8_fac5=1949803.825556 +k8_fac5=1949803.875000 #k8߼ƫֵ k8_fac6=1.244398 @@ -1783,34 +1783,34 @@ k8_fac6=1.244398 k9_fac1=0.000476 #k9Ũֵ -k9_fac2=1000.001 +k9_fac2=1000.000977 #k9Ũֵ -k9_fac3=2000 +k9_fac3=2000.000000 #k9С -k9_fac4=1949803.825557 +k9_fac4=1949803.875000 #k9 -k9_fac5=4050642.060851 +k9_fac5=4050642.000000 #k9߼ƫֵ k9_fac6=0.686024 #k10ֵ -k10_fac1=0.00017 +k10_fac1=0.000170 #k10Ũֵ -k10_fac2=2000.001 +k10_fac2=2000.000977 #k10Ũֵ -k10_fac3=3000 +k10_fac3=3000.000000 #k10С -k10_fac4=4050642.060852 +k10_fac4=4050642.000000 #k10 -k10_fac5=9932989.119676 +k10_fac5=9932989.000000 #k10߼ƫֵ k10_fac6=0.356151 @@ -1819,16 +1819,16 @@ k10_fac6=0.356151 k11_fac1=0.000254 #k11Ũֵ -k11_fac2=3000.001 +k11_fac2=3000.000977 #k11Ũֵ -k11_fac3=4000 +k11_fac3=4000.000000 #k11С -k11_fac4=9932989.119677 +k11_fac4=9932989.000000 #k11 -k11_fac5=13869993.056685 +k11_fac5=13869993.000000 #k11߼ƫֵ k11_fac6=1.495249 @@ -1837,16 +1837,16 @@ k11_fac6=1.495249 k12_fac1=0.000442 #k12Ũֵ -k12_fac2=4000.001 +k12_fac2=4000.000977 #k12Ũֵ -k12_fac3=5000 +k12_fac3=5000.000000 #k12С -k12_fac4=13869993.056686 +k12_fac4=13869993.000000 #k12 -k12_fac5=16132434.233157 +k12_fac5=16132434.000000 #k12߼ƫֵ k12_fac6=1.742025 @@ -1854,410 +1854,410 @@ k12_fac6=1.742025 #H2_OFFLINEC [H2_OFFLINEC] #k2Ũ -k2_offlineC=17.55 +k2_offlineC=18.45 #k2 -k2_samplingH=7204 +k2_samplingH=4429 #k3Ũ -k3_offlineC=73.25 +k3_offlineC=0 #k3 -k3_samplingH=20000 +k3_samplingH=0 #k4Ũ -k4_offlineC=141.25 +k4_offlineC=0 #k4 -k4_samplingH=28000 +k4_samplingH=0 #k5Ũ -k5_offlineC=260.35 +k5_offlineC=0 #k5 -k5_samplingH=36800 +k5_samplingH=0 #k6Ũ -k6_offlineC=468.5 +k6_offlineC=0 #k6 -k6_samplingH=45000 +k6_samplingH=0 #k7Ũ -k7_offlineC=853 +k7_offlineC=0 #k7 -k7_samplingH=55000 +k7_samplingH=0 #k8Ũ -k8_offlineC=1758 +k8_offlineC=0 #k8 -k8_samplingH=70000 +k8_samplingH=0 #k9Ũ -k9_offlineC=4888 +k9_offlineC=0 #k9 -k9_samplingH=100000 +k9_samplingH=0 #k10Ũ -k10_offlineC=41190 +k10_offlineC=0 #k10 -k10_samplingH=320000 +k10_samplingH=0 #k11Ũ -k11_offlineC=256000 +k11_offlineC=0 #k11 -k11_samplingH=1000000 +k11_samplingH=0 #k12Ũ -k12_offlineC=536200 +k12_offlineC=0 #k12 -k12_samplingH=1300000 +k12_samplingH=0 #CO_OFFLINEC [CO_OFFLINEC] #k2Ũ -k2_offlineC=54.55 +k2_offlineC=29.55 #k2 -k2_samplingH=5192 +k2_samplingH=996 #k3Ũ -k3_offlineC=116.35 +k3_offlineC=0 #k3 -k3_samplingH=9500 +k3_samplingH=0 #k4Ũ -k4_offlineC=184 +k4_offlineC=0 #k4 -k4_samplingH=13000 +k4_samplingH=0 #k5Ũ -k5_offlineC=286.45 +k5_offlineC=0 #k5 -k5_samplingH=17000 +k5_samplingH=0 #k6Ũ -k6_offlineC=604.55 +k6_offlineC=0 #k6 -k6_samplingH=26000 +k6_samplingH=0 #k7Ũ -k7_offlineC=1197 +k7_offlineC=0 #k7 -k7_samplingH=38000 +k7_samplingH=0 #k8Ũ -k8_offlineC=2360 +k8_offlineC=0 #k8 -k8_samplingH=55000 +k8_samplingH=0 #k9Ũ -k9_offlineC=5538 +k9_offlineC=0 #k9 -k9_samplingH=90000 +k9_samplingH=0 #k10Ũ -k10_offlineC=13740 +k10_offlineC=0 #k10 -k10_samplingH=150000 +k10_samplingH=0 #k11Ũ -k11_offlineC=55500 +k11_offlineC=0 #k11 -k11_samplingH=388600 +k11_samplingH=0 #k12Ũ -k12_offlineC=65000 +k12_offlineC=0 #k12 -k12_samplingH=550000 +k12_samplingH=0 #CH4_OFFLINEC [CH4_OFFLINEC] #k2Ũ -k2_offlineC=16.75 +k2_offlineC=14.15 #k2 -k2_samplingH=2653 +k2_samplingH=697 #k3Ũ -k3_offlineC=54.6 +k3_offlineC=0 #k3 -k3_samplingH=7000 +k3_samplingH=0 #k4Ũ -k4_offlineC=122.85 +k4_offlineC=0 #k4 -k4_samplingH=12000 +k4_samplingH=0 #k5Ũ -k5_offlineC=198.85 +k5_offlineC=0 #k5 -k5_samplingH=15000 +k5_samplingH=0 #k6Ũ -k6_offlineC=415.8 +k6_offlineC=0 #k6 -k6_samplingH=20000 +k6_samplingH=0 #k7Ũ -k7_offlineC=763 +k7_offlineC=0 #k7 -k7_samplingH=25000 +k7_samplingH=0 #k8Ũ -k8_offlineC=1259 +k8_offlineC=0 #k8 -k8_samplingH=30000 +k8_samplingH=0 #k9Ũ -k9_offlineC=2740.9 +k9_offlineC=0 #k9 -k9_samplingH=39400 +k9_samplingH=0 #k10Ũ -k10_offlineC=5000 +k10_offlineC=0 #k10 -k10_samplingH=48700 +k10_samplingH=0 #k11Ũ -k11_offlineC=7000 +k11_offlineC=0 #k11 -k11_samplingH=54300 +k11_samplingH=0 #k12Ũ -k12_offlineC=8500 +k12_offlineC=0 #k12 -k12_samplingH=58000 +k12_samplingH=0 #C2H2_OFFLINEC [C2H2_OFFLINEC] #k2Ũ -k2_offlineC=13.55 +k2_offlineC=5.95 #k2 -k2_samplingH=80000 +k2_samplingH=8285 #k3Ũ -k3_offlineC=30.42 +k3_offlineC=0 #k3 -k3_samplingH=160000 +k3_samplingH=0 #k4Ũ -k4_offlineC=80.35 +k4_offlineC=0 #k4 -k4_samplingH=350000 +k4_samplingH=0 #k5Ũ -k5_offlineC=104.19 +k5_offlineC=0 #k5 -k5_samplingH=430000 +k5_samplingH=0 #k6Ũ -k6_offlineC=160.01 +k6_offlineC=0 #k6 -k6_samplingH=580000 +k6_samplingH=0 #k7Ũ -k7_offlineC=260.42 +k7_offlineC=0 #k7 -k7_samplingH=800000 +k7_samplingH=0 #k8Ũ -k8_offlineC=618.5 +k8_offlineC=0 #k8 -k8_samplingH=1400000 +k8_samplingH=0 #k9Ũ -k9_offlineC=1500 +k9_offlineC=0 #k9 -k9_samplingH=3000000 +k9_samplingH=0 #k10Ũ -k10_offlineC=2500 +k10_offlineC=0 #k10 -k10_samplingH=7000000 +k10_samplingH=0 #k11Ũ -k11_offlineC=3500 +k11_offlineC=0 #k11 -k11_samplingH=11900000 +k11_samplingH=0 #k12Ũ -k12_offlineC=4500 +k12_offlineC=0 #k12 -k12_samplingH=15000000 +k12_samplingH=0 #C2H4_OFFLINEC [C2H4_OFFLINEC] #k2Ũ -k2_offlineC=12.1 +k2_offlineC=5.62 #k2 -k2_samplingH=80000 +k2_samplingH=26182 #k3Ũ -k3_offlineC=75.25 +k3_offlineC=0 #k3 -k3_samplingH=340000 +k3_samplingH=0 #k4Ũ -k4_offlineC=119.25 +k4_offlineC=0 #k4 -k4_samplingH=450000 +k4_samplingH=0 #k5Ũ -k5_offlineC=167.35 +k5_offlineC=0 #k5 -k5_samplingH=550000 +k5_samplingH=0 #k6Ũ -k6_offlineC=237.95 +k6_offlineC=0 #k6 -k6_samplingH=640000 +k6_samplingH=0 #k7Ũ -k7_offlineC=319.9 +k7_offlineC=0 #k7 -k7_samplingH=700000 +k7_samplingH=0 #k8Ũ -k8_offlineC=560.99 +k8_offlineC=0 #k8 -k8_samplingH=850000 +k8_samplingH=0 #k9Ũ -k9_offlineC=1171 +k9_offlineC=0 #k9 -k9_samplingH=1100000 +k9_samplingH=0 #k10Ũ -k10_offlineC=2500 +k10_offlineC=0 #k10 -k10_samplingH=4330000 +k10_samplingH=0 #k11Ũ -k11_offlineC=3500 +k11_offlineC=0 #k11 -k11_samplingH=8330000 +k11_samplingH=0 #k12Ũ -k12_offlineC=4500 +k12_offlineC=0 #k12 -k12_samplingH=10330000 +k12_samplingH=0 #C2H6_OFFLINEC [C2H6_OFFLINEC] #k2Ũ -k2_offlineC=6.15 +k2_offlineC=6.61 #k2 -k2_samplingH=24613 +k2_samplingH=12288 #k3Ũ -k3_offlineC=79 +k3_offlineC=0 #k3 -k3_samplingH=230000 +k3_samplingH=0 #k4Ũ -k4_offlineC=180.7 +k4_offlineC=0 #k4 -k4_samplingH=450000 +k4_samplingH=0 #k5Ũ -k5_offlineC=264.15 +k5_offlineC=0 #k5 -k5_samplingH=590000 +k5_samplingH=0 #k6Ũ -k6_offlineC=520.01 +k6_offlineC=0 #k6 -k6_samplingH=920000 +k6_samplingH=0 #k7Ũ -k7_offlineC=1039 +k7_offlineC=0 #k7 -k7_samplingH=1420000 +k7_samplingH=0 #k8Ũ -k8_offlineC=2530 +k8_offlineC=0 #k8 -k8_samplingH=2400000 +k8_samplingH=0 #k9Ũ -k9_offlineC=5500 +k9_offlineC=0 #k9 -k9_samplingH=4000000 +k9_samplingH=0 #k10Ũ -k10_offlineC=6500 +k10_offlineC=0 #k10 -k10_samplingH=5000000 +k10_samplingH=0 #k11Ũ -k11_offlineC=7500 +k11_offlineC=0 #k11 -k11_samplingH=7300000 +k11_samplingH=0 #k12Ũ -k12_offlineC=8500 +k12_offlineC=0 #k12 -k12_samplingH=10700000 +k12_samplingH=0