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 0000000..dc2e4de Binary files /dev/null and b/lib/qqq/libmodbus.tar.xz differ diff --git a/lib/test/libmodbus.tar b/lib/test/libmodbus.tar new file mode 100644 index 0000000..d08e6fe Binary files /dev/null and b/lib/test/libmodbus.tar differ 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