当前位置: 首页 > news >正文

输电线路在线监测通信规约,即I1协议

文章目录

    • 概要
    • 整体架构流程
    • 数据帧格式
    • 技术细节

概要

输电线路在线监测系统 transmission lines online monitoring system
监测输电线路设备本体、气象环境、通道状况等信息,定性或定量分析输电线路运行状况的应用系
统。一般包括主站系统、监测装置以及主站系统与监测装置之间的通信网络

主站系统 master system
实现输电线路设备本体、气象环境、通道状况等信息的接收、存储、分析、统计、发布的信息系统。
一般由前置接收机、应用服务器、数据库服务器、监测工作站、网络交换设备、网络安全设备、通信设
备以及数据库和主站软件系统等组成。

监测装置 monitoring device
实现输电线路设备本体、气象环境、通道状况等信息的采集和处理,并通过通信网络向主站系统传
送数据的前端装置。一般由主控单元、通信模块、电源模块、各类型传感器等构成。

传感器 sensor
用于输电线路本体、气象环境、通道状况等信息采集的元件。

整体架构流程

`
a) 通信方式应满足 Q/CSG 1204009 中国南方电网电力监控系统安全防护技术规范要求;
b) 视频采用 IP 网络进行通信,采用 TCP 或 UDP 协议传输;
c) 图像采用采用 TCP 或 UDP 协议传输;
d) 视频、图像以外的数据采用 UDP 协议传输;
e) 主站应支持所有通信方式;
f) 监测装置采用主动上送数据的方式,主站应支持主动召唤数据;
g) 主站的网络管理、系统维护、安全漏洞与风险管理应满足 Q/CSG 212001-2018 中国南方电网电
力监控系统网络安全管理办法的要求,主站的操作系统、数据库、中间件、应用系统应按照公
司电力监控系统网络安全技术标准进行设置和管理;
h) 监测装置的操作系统、数据库等应按照公司电力监控系统网络安全技术标准进行设置和管理;
i) 严禁通过有线、无线等各种形式形成跨生产控制大区和管理信息大区(或互联网)直连等违规
现象。
在这里插入图片描述

数据帧格式

数据包采用数据帧模式,对数据帧定义起始码、装置号码、控制类型码、数据域长度、数据域、校验码和结束码
在这里插入图片描述
字节定义
字节定义如下:
a) 起始符:1 字节,该值定义为 68H;
b) 装置号码:见 4.4 节;
c) 控制字:1 字节,用于区分数据类型;
d) 数据域长度:2 字节,其中采用大端模式。若为零表示无数据域;
e) 数据帧长度不大于 4000 字节;短信通信方式,帧长不大于 130 字节;
f) 校验码:采用累加和取反的校验方式,发送方将装置号码、控制字、数据域长度和数据区的所
有字节进行算术累加,抛弃高位,只保留最后单字节,将单字节取反;
g) 结束符:1 字节,该值定义为 16H。

控制字定义
控制字可供使用的有 256(00H—FFH),可根据实际应用需求进行扩充,量测值的数据传输格式均
统一采用大端模式,具体定义如表 5 所示
在这里插入图片描述

技术细节

//开机联络信息(控制字:00H)
void app_i1_cmd_nan_open(){
    // int num=0;
    unsigned char openbuf[14]={
        0x68,
        0x54,0x47,0x30,0x30,0x35,0x33,  //装置号码
        0x00,//控制字
        0x00,0x02,
        0x03,//规范版本号
        0x00, //规范版本号
        0x98,
        0x16
    };  
    memcpy(openbuf+1,SYS_DEVICE_ID,6);
  
    unsigned char result;
    calculate_and_reverse(openbuf, 14, &result);  
    openbuf[12]=("%02x",result);
    openbuf[13]=0x16;
    app_udpc_send(openbuf,14);
    UDP_FOR_SWITCH_SEND(14,openbuf);
    int count=0;
    sem_wait(&sem_startup_thread);//等待信号量的值>0
    CLog(&logger,"等待信号量的值>0\n");
    while (1)
    {
        CLog(&logger,"开始进入循环发送阶段count:%d\n",count);
        sleep(30);
        app_udpc_send(openbuf,14);
        UDP_FOR_SWITCH_SEND(14,openbuf);
        count++;
        if(count>10){
            CLog(&logger,"循环发送开机联网超时十分钟,准备重启\n");
            util_restart("循环发送开机联网超时十分钟,准备重启");
            return;
        }
    }
}
//校时(控制字:01H)  active 装置请求校时格式如表 9 所示
void app_i1_cmd_timing_active(){
    int i=0;
    unsigned char heatbuf[18]={
        0x68,
        0x54,0x47,0x30,0x30,0x35,0x33,  //装置号码
        0x01,//控制字
        0x00,0x06,
        0x17,0x0c,0x04,0x0f,0x08,0x03,//信号记录时间
        0x00,
        0x16
    };  
    memcpy(heatbuf+1,SYS_DEVICE_ID,6);
    heatbuf[7]=0x01;
    heatbuf[8]=0x00;   
    heatbuf[9]=0x06;
    char nan_time[6];
    nan_time_get(nan_time);
    for (;i<6;i++){
        heatbuf[10+i]=nan_time[i];
    }
    unsigned char result;
    calculate_and_reverse(heatbuf, 18, &result);
    heatbuf[16]=("%02x",result);
    heatbuf[17]=0x16;
    app_udpc_send(heatbuf,18);
    UDP_FOR_SWITCH_SEND(18,heatbuf);
}

//装置心跳信息(控制字:05H) 发送心跳
void * app_i1_cmd_send_heatbeat(){
    int i=0;
    unsigned char heatbuf[20]={
        0x68,
        0x54,0x47,0x30,0x30,0x35,0x33,  //装置号码
        0x05,//控制字
        0x00,0x08,
        0x17,0x0c,0x04,0x0f,0x08,0x03,//信号记录时间
        0x1f,  //信号强度
        0x00, //蓄电池电压
        0x00,
        0x16
    };  
    
    //发送心跳保活
    voltage__heart();
    memcpy(heatbuf+1,SYS_DEVICE_ID,6);
    heatbuf[7]=0x05;
    heatbuf[8]=0x00;   
    heatbuf[9]=0x08;
    char nan_time[6];
    nan_time_get(nan_time);
    i=0;
    for (;i<6;i++){
        heatbuf[10+i]=nan_time[i];
    }
    char adc_char[15];
    double adc_double = voltage_read_value( adc_char);
    if (adc_double != 0.0){
        CLog(&logger,"ADC double value: %f  %02x\n", adc_double, adc_double);
        // CLog(&logger,"ADC char value: %s\n", adc_char);
    }else{
        CLog(&logger,"Failed to read ADC voltage.\n");
    }
    at_signal_get_singal();
    heatbuf[16]=("%02x",SYS_SIGNAL);  //信号强度
    heatbuf[17]=50;  //蓄电池电压
    unsigned char result;
    calculate_and_reverse(heatbuf, 20, &result);
    heatbuf[18]=("%02x",result);
    heatbuf[19]=0x16;
    app_udpc_send(heatbuf,20);
    UDP_FOR_SWITCH_SEND(20,heatbuf);
    heat_count_send++;
}

相关文章:

  • 医院信息系统建设:大数据平台、集成平台、数据治理平台,该如何选择?
  • 常用shell命令
  • NodeTextFileCollectorScrapeError 报警原因及解决方法
  • Linux中的权限管理(附加详细实验示例)
  • swe-bench环境安装踩坑
  • 如何利用 AI 进行 A/B 测试的优化?
  • 【设计模式】过滤器模式
  • 手机显示5GA图标的条件
  • Oracle中文一二三四排序【失败】
  • Linux防火墙的iptables命令示例与详细解释
  • deepseek v3-0324实现数学方程式绘制曲线功能
  • Redis-14.在Java中操作Redis-Spring Data Redis使用方式-操作列表类型的数据
  • 西门子TCP通讯过程中硬件连接突然断开
  • 轻帆云智能ITSM应用最佳实践,助力IT共享服务中心高效运营
  • Redis:集群
  • 广告推荐算法:COSMO算法与A9算法的对比
  • 如何让AI帮你做用户运营:用户消费偏好分层和洞察
  • Java之JDBC数据库连接技术
  • git 操作记录
  • 多账号安全登录与浏览器指纹管理的实现方案
  • 夜读丨春天要去动物园
  • 【社论】法治是对民营经济最好的促进
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师
  • 巴西外长维埃拉:国际形势日益复杂,金砖国家必须发挥核心作用
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 中国人寿一季度净利润288亿增39.5%,营收降8.9%