找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3445|回复: 0
打印 上一主题 下一主题
收起左侧

GPRS RTU采集数据传输

[复制链接]
跳转到指定楼层
楼主
ID:258034 发表于 2017-12-6 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2C采集压力数据,24c02存储参数,RTC实时时间,将数据信息通过GPRS方式上传到数据平台,232通讯修改采集时间和上传时间等参数信息

#include <msp430x16x.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CPU_F ((double)8000000)  
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

/*当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数*/
#define baud           9600                                //设置波特率的大小
#define baud_setting   (uint)((ulong)CPU_F/((ulong)baud))  //波特率计算公式
#define baud_h         (uchar)(baud_setting>>8)            //提取高位
#define baud_l         (uchar)(baud_setting)               //低位

int err = 0;
char *p = NULL;
#define MAX_ERROR_COUNT 50
uchar receive_enable;
union
{
    char    mcInt8[4];
    uchar   mucByte[4];
    int     miWord[2];
    uint    muWord[2];
    long    mlDWord;
    ulong   mulDWord;
}guinDWord1;                      //共用体临时变量
union
{
    uchar  a[4];
    float b;
}temp1;

union
{
    uchar   a[4];
    int     b[2];
}temp2;

//uart1
typedef struct _CONFIG_FLAG
{
    unsigned char config_analysis;     //配置数据 数据分析中
    unsigned char config_receiver;     //接收中
    unsigned char config_stop;         //接收完毕
}CONFIG_FLAG;
CONFIG_FLAG g_config_flag;

#define BUFLEN 60
typedef struct _UART_BUF
{
    char buf[BUFLEN+1];                // 多申请一个字符保证最后一个字符永远是'0'
    int index ;
}UART_BUF;
UART_BUF buf_uart1;

//I2C 压力传感器
#define ReadPM100   0x7F
#define SDA_PM100_BIT BIT2
#define SCL_PM100_BIT BIT0
#define SDA_PM100_BIT_DATA (P2IN&BIT2)
#define SDA_PM100_OUT (P2DIR |= BIT2)
#define SDA_PM100_IN  (P2DIR &= ~BIT2)
#define SDA_PM100_H   (P2OUT |= BIT2)
#define SDA_PM100_L   (P2OUT &= ~BIT2)
#define SCL_PM100_OUT (P2DIR |= BIT0)
#define SCL_PM100_IN  (P2DIR &= ~BIT0)
#define SCL_PM100_H   (P2OUT |= BIT0)
#define SCL_PM100_L   (P2OUT &= ~BIT0)

//I2C 24C32/DS1307
#define Write24c02  0xA0 //24C02器件地址+写操作使能
#define Read24c02   0xA1 //24C02器件地址+读操作使能
#define Write1307   0xD0
#define Read1307    0xD1
#define SDA_BIT BIT5
#define SCL_BIT BIT7
#define IIC_PORT_DIR P6DIR
#define IIC_PORT_DATA P6OUT
#define SDA_BIT_DATA (P6IN&BIT5)>>5
#define SDA_OUT (P6DIR |= BIT5)
#define SDA_IN  (P6DIR &= ~BIT5)
#define SDA_H   (P6OUT |= BIT5)
#define SDA_L   (P6OUT &= ~BIT5)
#define SCL_OUT (P6DIR |= BIT7)
#define SCL_IN  (P6DIR &= ~BIT7)
#define SCL_H   (P6OUT |= BIT7)
#define SCL_L   (P6OUT &= ~BIT7)
unsigned char DS1307_second;
unsigned char DS1307_minute;
unsigned char DS1307_hour;
unsigned char DS1307_week;
unsigned char DS1307_date;
unsigned char DS1307_month;
unsigned char DS1307_year;
//eeprom
#define USE_EEPROM_DATA_LENGTH 100         //长度
unsigned char I2c_Buf[USE_EEPROM_DATA_LENGTH];
#define MAX_COMMA USE_EEPROM_DATA_LENGTH-2
#define EEPROM_FILED_LENGTH 20                            //段长度
typedef struct _EEPROM_CONFIG_DATA
{
    char serialnum[EEPROM_FILED_LENGTH+1];          //系列号
    char protocoltype[EEPROM_FILED_LENGTH+1];       //协议类型
    char ipaddr[EEPROM_FILED_LENGTH+1];             //IP地址
    char portnum[EEPROM_FILED_LENGTH+1];            //端口
    char telnum[EEPROM_FILED_LENGTH+1];             //电话号码
    int bufsize;                                        //缓存大小
    int alarm_h;                                    //上限报警值
    int alarm_l;                                    //下限报警值
    int gprs_send_interval;                         //上传时间
    int pm100_send_interval;                        //采集时间
    int rtu_id;                                    
}EEPROM_CONFIG_DATA;
EEPROM_CONFIG_DATA g_config_data;
//默认设置数据                                  
#define SERNUM "0000001"
#define PROTOTOCOL "TCP"
#define IPADDR "59.44.149.60"
#define PORTNUM "1001"
#define TELNUM "15922041115"
#define CACHESIZE 512
#define ALARM_H 100
#define ALARM_L 80
#define GPRS_SEND_INT 2
#define PM100_SEND_INT     1


//WDT
uint WDT_second,WDT_minute_gprs,WDT_minute_pm100;

//gprs
unsigned char gprs_send_enable;
unsigned char pm100_send_enable;
typedef enum
{
    INIT0,
    CGMM,
    ECHO0,
    SIMCARD,
    RST,
    CREG,
    INIT_FINISH_OK,

    GPRS_JH_S,
    GPRS_DK_S ,
    GPRS_QD_S ,
    GPRS_OPEN_FINISH,       /// GPRS 打开成功了

    TCPIP_IO_MODE,
    TCPIP_BJ_ADDR,
    TCPIP_CONNECT,
    TCP_IP_OK,
    TCP_IP_NO,
    TCP_IP_CONNECTING,

    GPRS_DEF_PDP_S,         /// 定义PDP场景
    GPRS_ACT_PDP_S,         /// 激活场景
    GPRS_ACT_PDP_S_RET,     /// 激活反馈
    GPRS_CMNET_APN_S,       /// 接入模式

    TRANSPARENT_MODE_START,
    TRANSPARENT_MODE_DEF,
    TRANSPARENT_MODE_ACT,
    TRANSPARENT_MODE_IOMODE,
    TRANSPARENT_MODE_TYPE,
    TRANSPARENT_MODE_CONFIG,
    TRANSPARENT_MODE_CONNECT,
    TRANSPARENT_MODE_CONNECT_RET,
    TM_OK,
    TM_NO,

    TCPIP_CLOSE_START,
    TCPIP_CLOSE_DEF,
    TCPIP_CLOSE_ETCPIP,
    TCP_IP_CLOSE_OK,
    TCP_IP_CLOSE_NO,


    GSM_SEND_TEXT_S,
    GSM_MSG_MODE_S,
    GSM_CHAR_MODE_S,
    GSM_TEXT_MODE_FINISH,

    SMS_READ_MESSAGE_START_S,
    SMS_READ_CONTENT_S,
    READ_SMS_FINISH,

    INIT_GPS_FINISH_OK,

    SIM900_LOC_START,
    SIM900_GPRS_S,
    SIM900_APN_S,
    SIM900_PBR1_S,
    SIM900_PBR2_S,
    SIM900_LOC_S,
    SIM900_LOC_G_S,
    SIM900_LOC_FINISH
}SIM_STATUS ;
SIM_STATUS current_status = INIT0 ;
unsigned char is_gprs_mode_ok = 1;                  //gprs start succeed
unsigned char is_gprs_mode_start_succeed = 0;       //gprs connect ok
UART_BUF buf_uart0;                                 //gprs
char g_gprs_conn_ok=0;                                    //GPRS处于连接状态
unsigned char GPRS_BUF_SIZE;
//char ibusy  = 0;                                    //在发送数据的时候,心跳包停止

//REG
#define ATE0_CMD "ATE0\x00D\x00A"                       // 禁止回显                                                                                                                                               
#define CREG_CMD "AT+CREG?\x00D\x00A"               // 查询网络注册情况
#define CGMM_CMD "AT+CGMM\x00D\x00A"
#define SIMCARD_CMD "AT+CPIN?\x00D\x00A"            //检查登入移动设备(ME)的密码,返回READY表示正常
//LD GPRS
#define GPRS_QD "AT+CSTT\x00D\x00A"                 // GPRS启动
#define GPRS_JH "AT+CIICR\x00D\x00A"                // 移动场景开启,激活
//LGL GPRS
#define GPRS_DEF_PDP "AT+CGDCONT=1,\"IP\",\"CMNET\"\x00D\x00A"  // 接入点
#define GPRS_ACT_PDP "AT+CGATT=1\x00D\x00A"                     // GPRS激活PDP

#define GPRS_CMNET_APN "AT+CIPCSGP=1,\"CMNET\"\x00D\x00A"       // 设置GPRS模式
//CONNECT... GPRS
#define GPRS_BJ_ADDR "AT+CIFSR\x00D\x00A"           // 获取本地IP
#define GPRS_TCP1 "AT+CIPSTART="                    // 建立一个IP连接
#define GPRS_TCP2 PROTOTOCOL
#define GPRS_TCP3 IPADDR
#define GPRS_TCP4 PORTNUM

#define PM "^SIM800A^"
//SEND  GPRS
#define GPRS_SEND_DATA "AT+CIPSEND\x00D"
//SEND SMS
#define GSM_MSG_MODE "AT+CMGF=1\x00D\x00A"
//#define GSM_CENTER_NUM "AT+CSCA=\"+8613800512500\"\x00D\x00A"
#define GSM_CHAR_MODE "AT+CSCS=\"GSM\"\x00D\x00A"
#define GSM_SEND_TEXT "AT+CMGS=\"+8613512963352\"\x00D\x00A"
//READ SMS
#define SMSCAT "CMTI: \"SM\","
#define SMSCATRHOS "+CMT:"

//电源检测
#define POWER_DETECT_CMD "AT+CBC\x00D\x00A"
#define SIGNAL_CMD "AT+CSQ\x00D\x00A"     //;+CREG?


//modbus tcp
unsigned int ProID;
unsigned char yali_float_buf[4];
unsigned char signal_float_buf[4];
unsigned char battery_float_buf[4];
unsigned char timetag_float_buf[8];
#define USE_MODBUS_DATA_LENGTH 100
char modbus_buf[USE_MODBUS_DATA_LENGTH];


//*************************************************************************
//              函数声明
//*************************************************************************
//void send_string_uart0(char *s)
void Port_Init();
void I2c_Init(void);
void uart0_init();
void read_data_pm100(void);
void read_data_timetag(void);
void start_gprs_mode(void);
void clear_buf_uart0(void);
void init_gprs(void);
void open_gprs_simple(void);
void creat_tcp();
void read_data_signal(void);
void read_data_power(void);
void Send_Modbus_16(void);
void Send_Modbus_3(void);
void send_string_uart0(char *s);

code.rar

360.03 KB, 下载次数: 20, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表