抄写了一次ping程序

别再手动抄数据了!用IGT-SER网关把西门子S7-1500数据自动存进MySQL,保姆级配置流程 本文详细介绍了如何通过IGT-SER网关实现西门子S7-1500 PLC数据自动存入MySQL数据库的完整解决方案。从硬件连接到网络配置,再到数据点映射和高级功能设置,提供了一套零代码、高效率的工业数据自动化采集方案,特别适合离散制造场景,显著提升数据采集的实时性和准确性。 阅读详情

// Ping_Project.cpp : Defines the entry point for the console application.  
//  
#include   
#include "stdafx.h"  
#include   
#include   
#pragma comment(lib,"WS2_32.lib")  
char szDestIP[]="119.147.15.11";  
int checksum(USHORT* buff, int size);  
int recSize=0;  
BOOL    HandPacket(char * Packet, SOCKADDR_IN sockFrom);  
#define PROTO_ICMP    1  
#define PROTO_IGMP    2  
#define PROTO_TCP     6  
#define PROTO_UDP     17  
typedef struct _IPHeader        // 20字节的IP头  
{  
    UCHAR     iphVerLen;      // 版本号和头长度(各占4位)  
    UCHAR     ipTOS;          // 服务类型   
    USHORT    ipLength;       // 封包总长度,即整个IP报的长度  
    USHORT    ipID;           // 封包标识,惟一标识发送的每一个数据报  
    USHORT    ipFlags;        // 标志  
    UCHAR     ipTTL;          // 生存时间,就是TTL  
    UCHAR     ipProtocol;     // 协议,可能是TCP、UDP、ICMP等  
    USHORT    ipChecksum;     // 校验和  
    ULONG     ipSource;       // 源IP地址  
    ULONG     ipDestination;  // 目标IP地址  
} IPHeader, *PIPHeader;   
typedef struct ICMPHeader   
{  
    unsigned char   icmp_type;  
    unsigned char   icmp_code;  
    unsigned short  icmp_checksum;  
    //回显头  
    unsigned short  icmd_id;  
    unsigned short  icmp_sequence;  
    unsigned long   icmp_timestamp;  
} ICMPH;  
int main(int argc, char* argv[])  
{  
    printf("%d,%d/r/n",sizeof(IPHeader),sizeof(ICMPH));  
    WSADATA wsaData;   
    if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)  
        ;  
    SOCKET  sRaw    =socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);  
    SOCKADDR_IN dest;  
    char sendBuf[sizeof(ICMPHeader)+32];  
    dest.sin_family =   AF_INET;  
    dest.sin_port   =   htons(0);  
    dest.sin_addr.S_un.S_addr   =   inet_addr(szDestIP);  
    ICMPHeader  *icmpHeader =(ICMPHeader*)sendBuf;  
    ZeroMemory(icmpHeader, sizeof(ICMPHeader));  
    icmpHeader->icmp_code    =   0;  
    icmpHeader->icmp_type    =   8;  
    icmpHeader->icmp_checksum    =   0;  
    icmpHeader->icmd_id      =   (unsigned short)GetCurrentProcessId();  
    int count=0;  
    char recBuff[1024];  
    SOCKADDR_IN from;  
    int nLen = sizeof(from);  
    int nRet=0;  
    while(1)  
    {  
        count++;  
        if (count==4)  
        {  
            break;  
        }  
        icmpHeader->icmp_code    =   0;  
        icmpHeader->icmp_type    =   8;  
        icmpHeader->icmd_id      =   (unsigned short)GetCurrentProcessId();  
        icmpHeader->icmp_sequence    =count;  
        icmpHeader->icmp_timestamp   =GetTickCount();  
        icmpHeader->icmp_checksum    =0;//有必要设置为0再算  
        icmpHeader->icmp_checksum    =checksum((USHORT*)sendBuf, sizeof(sendBuf));  
        sendto(sRaw, sendBuf, sizeof(sendBuf), 0, (SOCKADDR*)&dest, sizeof(dest));  
        if(nRet == SOCKET_ERROR)  
        {  
            printf(" sendto() failed: %d /n", ::WSAGetLastError());  
        //  return -1;  
            continue;  
        }  
        ZeroMemory(recBuff, 1024);  
        recSize=nRet    =recvfrom(sRaw, recBuff, 1024, 0, (SOCKADDR*)&from, &nLen);  
        if (nRet    ==  SOCKET_ERROR)  
        {  
            if (WSAGetLastError()==WSAETIMEDOUT)  
            {  
                printf("request time out!/r/n");  
                return 1;  
            }  
            printf(" recvfrom() failed: %d /n", ::WSAGetLastError());  
        //  return -1;  
            continue;  
        }  
        if(nRet < sizeof(IPHeader) + sizeof(ICMPHeader))  
        {  
            printf(" Too few bytes from %s /n", ::inet_ntoa(from.sin_addr));  
        }  
        HandPacket((char*)recBuff, from);  
    //  Sleep(11);  
    }  
    WSACleanup();  
    return 0;  
}  
///////////////////////////////////////////////////  
int checksum(USHORT* buff, int size)  
{  
/* 
    unsigned long cksum = 0; 
    while(size>1) 
    { 
        cksum += *buff++; 
        size -= sizeof(USHORT); 
    } 
    // 是奇数 
    if(size) 
    { 
        cksum += *(UCHAR*)buff; 
    } 
    // 将32位的chsum高16位和低16位相加,然后取反 
    cksum = (cksum >> 16) + (cksum & 0xffff); 
    cksum += (cksum >> 16);            
    return (USHORT)(~cksum); 
*/ 
        int checksum=0;  
        while(size>1)  
        {  
            checksum+=*(buff++);  
            size-=2;  
        }  
        if (size)  
        {  
            checksum+=*(UCHAR*)buff;  
        }  
        checksum    = (checksum>>16)+(checksum&0xffff);  
        checksum+=checksum>>16;  
        return ~checksum;  
}  
BOOL    HandPacket(char * Packet, SOCKADDR_IN sockFrom)  
{  
    IPHeader* ipHder=(IPHeader*)Packet;  
    ICMPHeader *icmphder=(ICMPHeader*)(Packet+sizeof(IPHeader));  
    if (icmphder->icmd_id!=GetCurrentProcessId())  
    {  
        printf("someone else's packet");  
        return TRUE;  
    }  
    if (icmphder->icmp_type!=0)  
    {  
        printf("not echo type icmpPacket");  
        return TRUE;  
    }  
    int nTick=GetTickCount();  
    printf("Reply %d bytes from %s:", strlen((char*)icmphder+sizeof(ICMPHeader)), inet_ntoa(sockFrom.sin_addr));  
    printf(" icmp_seq=%d. TTL=%d", icmphder->icmp_sequence,ipHder->ipTTL);  
    printf(" time: %dms Protocol:%d", nTick - icmphder->icmp_timestamp, ipHder->ipProtocol);  
    printf(" /n");  
//  printf(" ip: %d /r/n", ipHder->ipSource);  
    return TRUE;  
} 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/vincent_1011/archive/2009/08/25/4480347.aspx#

MSC8112外部信号深度解析:从内存控制器到多功能引脚的设计与调试 在嵌入式系统与数字信号处理(DSP)领域,外部接口信号是处理器与外部世界通信的基石,其设计直接决定了系统的性能、稳定性和灵活性。信号复用、时序控制和电气规范是核心原理,它们使得单一物理引脚能够承载多种功能,从而在有限的芯片资源内实现最大的设计弹性。这种技术的价值在于能够高效适配复杂应用场景,如通信网关、基站处理等。具体到硬件工程实践,工程师需要深入理解内存控制器信号(如BCTL、PSDA10)与SDRAM的“对话协议”,以及多功能引脚(如GPIO/TDM)的配置逻辑,从而在原理图设计、PCB布局和底层驱动开 阅读详情

相关推荐

基于MATLAB的电池等效电路模型(ECM)仿真,用于分析电气行为和动态响应.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

c/c++写的ping命令

前两天写了个小程序,现在给大家分享一下.这个是用c/c++加上原始套接字写的一个ping命令,ping命令的原理想必我不用多说了,了解ICMP协议的朋友们都知道的.. 该程序分几个文件: 初始化socket的类:InitSocket.h /**//* winsock应用程序必须加载Winsock Dll * 加载该Dll的函数就是::WSAStartup() * 使用结束后还得

hooky_zlr的专栏 1544

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地提供了隔离型全桥LLC谐振变换器的建模、仿真与参数设计全套技术资料,涵盖Simulink/Plecs仿真模型、详细设计报告及Mathcad计算书,内容涉及开环与闭环控制、软启动过程、恒压恒流双闭环竞争控制等多种工况。资料还拓展至多相交错LLC、双向CLLC拓扑以及V2G(Vehicle-to-Grid)电动汽车充放电等前沿应用场景,并融合状态估计算法(如卡尔曼滤波、扩展卡尔曼滤波、粒子滤波)与神经网络技术进行系统性能优化,配套PPT说明与高水平EI期刊复现案例,为电力电子领域的科研与工程设计提供完整的技术支撑; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校研究生、科研人员,以及从事高频DC-DC变换器、新能源电源系统开发的工程师,具备扎实电路理论基础和Matlab/Simulink仿真能力者尤佳; 使用场景及目标:①支撑LLC谐振变换器相关的科研课题、学位论文或项目开发;②开展高频高效电源的参数设计、效率优化与动态响应分析;③学习并复现高水平期刊中先进的控制策略,如变频控制、混合移相控制及智能优化算法;④掌握Simulink/Matlab在电力电子系统建模、控制算法实现与状态估计中的综合应用; 阅读建议:建议结合仿真模型、Mathcad计算书与设计报告三位一体同步研习,重点理解主电路参数设计与闭环控制逻辑之间的耦合关系,优先运行典型算例并调试关键模块,有条件者可进一步推进至硬件原型验证,并积极探索状态估计与人工智能算法在电力系统动态建模中的融合应用。

【计算机网络】理解ICMP&ping&traceroute

ICMP&ping&traceroute前言ICMPPINGTracetoute总结与补充部分内容参考来源于: 前言 此文章内容源于计算机网络自顶向下-陈鸣译。 初心是自认为网络上关于计算机网络概念的介绍,没有文章定义看起来舒适。所以权且把一些内容抄写过来。 个人理解以代码段的形式补充在旁边。 ICMP ICMP:Internet control message protocol 因特网报文控制协议。 由[RFC 792] 定义的因特网控制报文协议(ICMP) , 被主机和路由器用来彼此沟通

share something here 1317

标准材质转物理材质 对应脚本:标准转物理材质转x.ms 一、插件用途 将 3ds Max 场景中的 StandardMaterial 标准材质转换为 PhysicalMaterial 物理材质

标准材质转物理材质 对应脚本:标准转物理材质转x.ms 一、插件用途 将 3ds Max 场景中的 StandardMaterial 标准材质转换为 PhysicalMaterial 物理材质,并递归处理 Multi/Sub 多维子材质及 Blend 混合材质中的标准材质。 二、转换内容 脚本尝试进行以下参数映射: - 漫反射颜色 → Physical Material 基础颜色。 - 漫反射贴图及启用状态 → 基础颜色贴图。 - 凹凸贴图、启用状态及强度 → 物理材质凹凸槽;强度会按脚本比例换算。 - Opacity 贴图 → 物理材质透明颜色贴图。 - 标准材质自发光颜色和强度 → 物理材质发光颜色和发光强度。 - 反射贴图强度 → 粗糙度的反向换算。 - Glossiness → Metalness 数值换算。 三、使用方法 1. 在 3ds Max 中运行脚本。 2. 出现“赵山河材质转换”小窗口。 3. 点击“标准材质转物理材质”。 4. 脚本扫描整个场景的材质库,并将场景物体所使用的标准材质转换为物理材质。 5. 转换完成后刷新视口。 四、处理范围 - 不是只处理当前选择对象,而是扫描整个场景的材质库。 - 对 Multi/Sub 材质递归转换其中的标准材质子项。 - 对 Blend 材质递归转换 map1、map2 中的材质。 - 非 StandardMaterial 的材质会按脚本逻辑保留,不会强制全部转成 PhysicalMaterial。 五、注意事项 - 这是参数近似转换,不是渲染结果完全一致的材质转换。 - 标准材质中的高光、反射、透明度、特殊贴图和高级参数不一定有一一对应关系。 - 脚本把 Glossiness 映射到 Metalness,属于

三电平Buck直流变换器双闭环、单闭环、开环仿真【附参考文献】(Simulink仿真实现)

内容概要:本文介绍了名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该模型基于Plecs仿真平台,用于构建和分析全桥LLC谐振变换器的工作特性。作为一种高效率、高功率密度的DC-DC变换器,全桥LLC谐振变换器广泛应用于现代电源系统中。该仿真模型完整包含了全桥逆变器、由谐振电感、谐振电容和变压器构成的谐振腔,以及整流与滤波电路等核心组件。用户可通过该模型开展开环与闭环仿真,深入研究变换器在不同负载、输入电压及频率条件下的动态响应、转换效率、软开关实现能力,并分析关键参数如谐振频率、变比和负载变化对系统性能的影响。该模型不仅可用于理论验证,也为控制器设计与参数优化提供了高效平台,有助于加深对LLC变换器运行机理的理解。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生、从事开关电源研发的工程师以及对LLC谐振变换器有研究兴趣的科研人员。; 使用场景及目标:①用于课堂教学与实验,帮助学生掌握LLC谐振变换器的拓扑结构与工作原理;②用于科研项目中新型控制策略(如变频控制、移相控制)的仿真验证与性能评估;③用于工业产品研发前期,实现变换器的快速原型设计、关键参数优化与控制算法调试。; 阅读建议:在使用该仿真模型前,建议用户系统学习LLC谐振变换器的基础理论,包括基波分析法(FHA)、谐振网络阻抗特性及零电压/零电流开关的实现条件。仿真过程中应结合理论计算设定初始参数,并细致观察电压、电流波形与频率响应,以全面评估变换器的稳态与动态性能,进而实现理论与实践的有效结合。

resolv.conf在Linux系统中的作用

本人在工作中发现Linux 能PING IP, 但不能PING 域名。能PING IP 说明工作的主板网络是正常的,而无法PING 域名就显得有点不合理了,于是便从网络上查找原因发现大部分的解释都和 resolv.conf 这个配置文件相关。 一. resolv.conf 文件说明 resolv.conf是resolver类库使用的配置文件,每当一个程序需要通过域名来访问internet上面的...

longcheng217的博客 2万+

双Buck电路并联VDCM下垂控制(Simulink仿真实现)

内容概要:本文系统阐述了基于Simulink平台实现的双Buck电路并联运行系统中采用VDCM(虚拟直流电机)下垂控制策略的建模与仿真方法。该技术通过引入VDCM控制理念,模拟直流电机的动态外特性,有效提升了多模块并联系统在负载突变等工况下的均流精度与动态响应性能,增强了直流电源输出的稳定性与可靠性。文中提供了完整的双闭环控制Simulink仿真模型,并结合参考文献深入剖析了VDCM控制模块的设计原理、下垂控制律的构建、关键参数(如下垂系数)的整定方法以及系统稳定性分析过程,为研究多模块并联DC-DC变换器的协同控制与均流机制提供了详实的技术参考。; 适合人群:具备电力电子技术、自动控制理论及Simulink仿真基础,从事新能源发电、直流微电网、分布式电源系统或高可靠性直流供电装置研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解双Buck电路并联运行时实现精确均流的控制原理与挑战;②掌握VDCM下垂控制这一先进策略在直流系统中的具体建模步骤与实现技巧;③为多模块并联变换器的自主均流、冗余设计及系统级协调控制研究奠定坚实的仿真基础并提供直接的技术借鉴; 阅读建议:建议学习者结合所提供的Simulink仿真模型与文末参考文献进行对照研习,重点剖析VDCM控制模块的内部逻辑、下垂系数对系统静态均流度和动态响应速度的权衡影响,并通过反复调整控制器参数进行仿真对比实验,以深刻理解其内在机理与优化设计方法。

学习网安(6)

今天上午,老师给我们讲了些dos命令:。

weixin_52919955的博客 886

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

在进行深度学习算法的环境部署时,由于生产服务器被彻底隔离外网,只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到Windows 服务器,但在运行labelimg等工具时可能报错,因此用conda-pack来解决。

weixin_44115575的博客 1426

zds1104示波器使用指南

(2)将探头连接到探头补偿端,按下auto setup按键,一键捕获。(3)连接需要测量信号,开始查看波形。操作说明书,可以自行查看操作说明书。

m0_61973119的博客 6770

防水透气膜检测如何实现一次装夹双结果并高效对接MES系统

在制造企业数字化升级过程中,检测设备不再只是输出数值的工具,而是质量数据的重要采集节点。以防水透气膜为例,其性能评价核心在于耐水压与透气率两项指标的平衡,传统分开测试、手工记录的方式难以支撑研发选材与批次追溯。通过模块化设备方案,一次装夹即可同步完成防水和透气双结果测试,再借助模块升级实现设备端与MES系统对接,将检测结果自动关联至具体工单、批次与操作员,从而打通从测试到质量追溯的数据链路。这一方案兼顾了研发阶段对材料平衡曲线的比较需求与品质阶段对批次稳定性的管控需求,同时为生产执行系统提供可靠的数据支撑,

weixin_34319374的博客 339

WIFI基础入门--802.11g--增强速率物理层ERP--15

WIFI基础入门--802.11--增强速率物理层--191.802.11g的组件保护机制 1.802.11g的组件 802.11g其实是将好几种物理层规范合而为一。虽然统称为增强速率物理层(Extended Rate PHY简称ERP),但是实际上ERP有好几种不同的方式: ERP-DSSS与ERP-CCK 这两种模式向下兼容于原始直接序列规范(1Mbps与2Mbps),以及所提到的802.11...

香蕉一号 4617

MSPM0G3507实战——定时器事件驱动ADC与DMA高效数据流

本文详细解析了如何在MSPM0G3507微控制器上实现定时器事件驱动ADC与DMA的高效数据采集方案。通过将定时器作为精准节拍器触发ADC采样,并利用DMA在后台自动搬运数据,构建了一条解放CPU的自动化流水线。该方案能轻松实现1MHz以上的高速连续采样,CPU占用率极低,是音频处理、电机控制等实时信号采集应用的理想选择。

o9p0q1的博客 610

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1898

opencv-meshgrid

使用opencv::repeat函数和std::iota函数完成meshgrid功能。 X Y Z 通俗的说就是根据Z的大小生成X矩阵,Y矩阵

yuegooxi的博客 1607

ARM Cortex-M μDMA外设分散-聚集模式:原理、配置与实战

直接内存访问(DMA)是嵌入式系统中提升性能、降低CPU负载的核心技术,它允许数据在外设与内存间直接传输。其工作原理在于由专用控制器接管数据搬运任务,从而解放CPU处理更复杂的逻辑。这项技术的核心价值在于实现高效、低延迟的数据流处理,广泛应用于传感器数据采集、通信协议处理、音视频流传输等场景。传统DMA模式要求数据位于连续内存区域,这在处理非连续数据流时存在局限。而外设分散-聚集模式则通过引入“任务列表”机制,实现了智能化的DMA调度。该模式允许预先定义一系列传输任务,每个任务指定独立的源地址、目标地址和传

weixin_33922672的博客 406

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2198

从算法转战电源开发:我的CCS8.0+TMS320F28335新手踩坑全记录(附避坑指南)

本文分享了从算法工程师转型电源开发的经验,详细记录了使用CCS8.0和TMS320F28335开发过程中遇到的常见问题及解决方案。重点介绍了工程配置、寄存器操作、调试技巧和Flash烧录等关键步骤,并提供了实用的避坑指南,帮助新手快速掌握DSP电源开发的核心技能。

weixin_30570101的博客 446

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Hopsum:利用ICMP超时报文校验和实现网络分布式计算的概念验证

网络协议是互联网通信的基石,其设计初衷是确保数据可靠传输。其中,ICMP协议用于传递控制与差错信息,而校验和机制则是保障数据完整性的核心原理。在工程实践中,深入理解协议细节能揭示基础设施的潜在能力。Hopsum项目正是这样一个概念验证,它巧妙利用路由器生成ICMP Time Exceeded报文时必须计算校验和的规范行为,将特定的数据嵌入原始报文,使路由器在响应过程中无意间对这些数据执行了计算。这一过程涉及IPv4分片、TTL机制及校验和算法,虽无实际生产价值,却为网络协议教学、路由器行为研究和安全攻防思维

weixin_34406086的博客 419

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机网络故障定位:从Wireshark到内核参数的跨层诊断实战

计算机网络故障诊断本质上是协议在真实运行态下的行为分析,而非对OSI七层或TCP/IP规范的静态记忆。其核心原理在于利用分层模型构建故障隔离漏斗,通过Wireshark抓包、ss -i状态观测、/proc/net/snmp统计与内核参数(如tcp_rmem、tcp_syncookies)联动验证,实现从现象(如TCP重传率突增)到根因(接收缓冲区溢出或SYN Flood攻击)的精准归因。这一过程融合了传输层窗口机制、网络层MTU与分片、连接跟踪表等关键技术点,广泛应用于云服务运维、高并发网关调优及DDoS实

cojm55771的博客 464

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从安装到工程化:深度解析Codex类AI编程助手的核心价值与实战配置

在软件开发领域,AI代码生成技术正从辅助工具演变为工程化基础设施。其核心原理是通过自然语言处理将开发者意图转化为结构化代码,本质上是将大语言模型的生成能力标准化、接口化。这一转变的技术价值在于,它不再局限于单次问答,而是实现了工作流的固化与复用,显著提升了开发效率与代码一致性。从应用场景看,无论是基于模板的批量代码生成、集成到CI/CD的自动化问题排查,还是与现有开发工具链的深度结合,AI编程助手都在重构开发范式。本文聚焦于如何将这类工具(常被社区称为Codex)从“聊天式”应用升级为“工程式”伙伴,涵盖从

weixin_33736832的博客 381

SATA控制器寄存器配置实战:从PLL锁定到信号完整性优化

在嵌入式系统与SoC设计中,寄存器配置是连接软件与硬件的核心桥梁,其本质是通过对特定内存地址的读写,精确控制硬件模块的底层行为。其原理在于,每个比特位都对应着电路中的一个功能开关或参数,如时钟频率、信号幅度或使能状态。这项技术的核心价值在于,它使软件能够动态优化硬件性能、功耗与稳定性,是实现高速接口(如SATA、PCIe)信号完整性的关键。在应用场景上,寄存器配置广泛应用于通信PHY初始化、电源管理、外设驱动开发等领域。本文聚焦于SATA控制器,深入解析CFGRX4、CFGTX0及PLL配置等关键寄存器组,

366
上一篇: tcp和udp多线程的epoll服务器+客户端源代码
下一篇: 升级 perl 模块 以及编码转换
wind0513
博客等级 码龄24年 3粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值