C#学习笔记(一)

news2024/11/27 10:33:44

C#学习笔记(一)

    • 简介
    • 第一章 上位机开发环境之 VS 使用和.NET 平台基础
      • 一、安装软件
      • 二、创建项目
      • 三、第一个Hello world
      • 四、解决方案与项目
      • 五、Debug 和 Release 的区别
      • 六、代码的生产过程
      • 七、CLR的其它功能

简介

C# .NET工控上位机开发
在工控领域,C# .NET技术被广泛用于构建上位机软件,它以其强大的功能、易用性和高效的性能成为了开发者的重要工具。本文将详细探讨C# .NET在工控上位机开发中的应用,以及相关的核心知识点。

一、C#语言基础
C#是一种面向对象的编程语言,由微软公司开发,主要用于.NET Framework平台。它的语法简洁明了,支持类型安全和垃圾回收,是开发工业控制应用的理想选择。学习C#时,需要掌握类、对象、接口、继承、多态等面向对象概念,以及异常处理、委托和事件等特性。

二、.NET Framework与.NET Core
.NET Framework是微软的开发框架,包含了大量的库和服务,如Windows Forms、WPF、ASP.NET等,为C#应用程序提供运行环境。而.NET Core是跨平台的开源版本,同样支持C#开发,且具有更小的体积和更高的性能。在工控上位机开发中,根据项目需求和目标平台可以选择合适的.NET版本。

三、Windows Forms
Windows Forms是.NET Framework中的一个组件,用于创建桌面应用程序,特别适合开发工控上位机界面。通过Windows Forms,开发者可以利用各种**控件(如按钮、文本框、图表等)**设计用户界面,并实现与硬件设备的交互。

四、数据通信与协议
工控上位机通常需要与PLC、传感器、驱动器等硬件设备进行数据交换,这就涉及到了串口通信(RS-232、RS-485)、TCP/IP网络通信、CAN总线等协议。C#提供了丰富的类库,如System.IO.Ports命名空间下的SerialPort类用于串口通信,System.Net命名空间下的Socket类用于网络通信,方便开发者实现不同协议的通信功能。

五、实时数据处理
在工控系统中,实时性是非常关键的。C# .NET允许开发者使用多线程和异步编程模型来处理实时数据,确保程序在处理大量数据时仍能保持响应。Task类和async/await关键字是实现异步操作的强大工具。

六、可视化和图表展示
工控上位机往往需要实时显示设备状态和生产数据,这需要用到数据可视化技术C# .NET的System.Windows.Forms.DataVisualization命名空间提供了丰富的图表控件,如Chart,可以用于绘制折线图、柱状图、饼图等,便于监控和分析工况。

七、数据库集成
很多工控系统需要存储和查询历史数据,这时可以利用C# .NET与SQL Server、MySQL、SQLite等数据库进行交互。ADO.NET是.NET Framework提供的数据库访问框架,支持连接池,能有效提高数据库操作的效率。

八、安全性与权限管理
工控软件往往涉及重要生产数据,因此安全性是不容忽视的。C# .NET提供了加密解密、身份验证、访问控制等安全机制,确保数据的安全。

九、部署与维护
C# .NET应用程序可以通过ClickOnce技术实现快速部署,用户只需点击一次即可完成安装。此外,Visual Studio提供了一整套的调试和测试工具,方便开发者进行程序的维护和优化。

C# .NET为工控上位机开发提供了强大的支持,从界面设计、数据通信到数据库集成和安全性管理,都有成熟的解决方案。开发者掌握这些核心知识点,就能高效地构建出功能完备、性能稳定的工控上位机软件。

第一章 上位机开发环境之 VS 使用和.NET 平台基础

一、安装软件

  1. 编程语言软件
    安装VS2019、SQLServer 数据库( SQL Server 2008 R2 Expresswith Advanced Services 版)(“SQLEXPRADV_x64_CHS)
  2. 上位机工具软件
    串口助手、Modbus 系列等这些软件非常多。

二、创建项目

打开 VS 开发工具,选择“创建新项目”→控制台程序,选“.NET Framework”。

三、第一个Hello world

在这里插入图片描述
Console:控制台

四、解决方案与项目

  • 从广义的角度看,比如你说我正在开发一个项目,通常把这个开发的项目,在 VS 的环境中就认为是一个解决方案。
    从狭义的角度看,解决方案中的一个部分就是一个“项目”。一个解决方案可以包含多个项目。
    在这里插入图片描述
    狭义上这些项目都是直接或间接有联系的。最终通过“添加引用”让这些项目关联到一起(后续学习添加引用)。

五、Debug 和 Release 的区别

  • 概念上的不同
    Debug 的意思是调试
    Release 的意思发布,正式作为生产环境的应用软件。
  • 断点与调试
    Debug 在任何情况下,都可以打断点观察变量。可以打断点后让程序一行一行的执行。从而观察程序逻辑和变量的值。Release无法直接断点,并且观察数据可能存在不正确的情况。
  • 生成与优化
    Debug 所生成的文件,包含很多调试信息,生成的文件比较大。
    Release 不包含调试信息,生成的文件较小。项目结束最后使用 Release 发布。

六、代码的生产过程

.NET 平台在编译开发者所写的代码的时候,是通过两次编译完成的,这点和
其他的编程语言是有差别的
在这里插入图片描述
第一次编译是完成从源代码到微软中间语言 IL(Intermidiate Language)的编译**。第二
次编译**是从 IL 到机器码的编译。

  1. 第一次编译-代码到 IL 编译
    从图中我们可以看到在.NET 平台可以选择不同的开发语言,每一种开发语言都对应一个编译器,我们现在用的是 C#语言,当写完代码后,会通过 VS 中自带的 csc.exe这个可执行文件完成代码的编译,如果代码没有错误,就会生成对应的 exe 或 dll 文件。exe 文件我们称为可执行文件,也就是你双击可以直接运行的文件。dll 文件是动态链接库文件,这种文件一般都是作为项目的模块来使用,不能直接运行,否则会报错。
  2. 第二次编译-IL 到机器码的编译
    当启动编译好的文件exe的时候项目即可运行起来,其实在运行之前.NET 平台在操作系统上运行的JIT 的即时编译器(Just-In-Time Compilier),会把运行的“IL 中间语言代码”,再次根据当前所在的操作系统类型,编译成对应的机器码,最后才被计算机执行。但是这个过程是非常快,通常是感觉不到的。这样做的好处是针对不同的操作系统和计算硬件无需多次编译,对程序的部署带来很大方便。

七、CLR的其它功能

CLR(Common Language Runtime)也可以称为公共语言运行库。这个东西的作用在.NET 平台太重要了。

  1. 托管代码和非托管代码
    在这里插入图片描述
  • 非托管代码:通俗理解,就是你的程序代码直接运行到操作系统上,
    不用其他程序的干预。准确一点说,非托管代码就是针对特定操作系统而生成的 CPU 机器指令。
  • 托管代码:在 CLR 管理之下运行的程序指令代码(也就是 MSIL,微软中间语言代码)。
  1. 公共语言运行时的两个“管家”
    图中没有直接画出来的两个东西 CLS 和 CTS。
  • CLS(Common Language Specification)公共语言规范。它在 CLR 中主要是解决不同开发语言之间的语法规范问题。在.NET 平台上有 C#语言、VB.NET 等,这些不同开发语言开发的模块是可以直接相互使用而不需要做任何处理。如何做到呢?其中一半功劳是CLS来完成的。
  • CTS(Common Type System)通用类型系统。它在 CLR 中主要解决不同开发语言之间的数据类型差异。不同的开发语言在数据类型表示上是有差别的,比如在 C#中整形用 int 表示,在 VB.NET 中用Integer 来表示。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 build:before 事件钩子详解

title: Nuxt.js 应用中的 build:before 事件钩子详解 date: 2024/10/20 updated: 2024/10/20 author: cmdragon excerpt: build:before 钩子在 Nuxt.js 中是一种有力的工具,使开发者能够在应用的构建流程开始之前进行自定义处理和配置。在处理动态需求和配置时,开发者可以…

深度解析RLS(Recursive Least Squares)算法

目录 一、引言二、RLS算法的基本思想三、RLS算法的数学推导四、RLS算法的特点五、RLS算法的应用场景六、RLS算法的局限性七、总结 一、引言 在自适应滤波领域,LMS(Least Mean Squares)算法因其计算简单、实现方便而广受欢迎。然而&#xff0…

C++ 哈希桶和封装unordered_map和unordered_set

目录 哈希桶的概念 哈希桶的结构 哈希桶的结点 哈希桶的类 Insert插入函数 Find查找函数 Erase删除函数 哈希的两种仿函数(int) 和(string) 哈希表的改造 ​编辑 迭代器 改造 unordered_map和unordered_set的封装 前言 上一篇文章讲的哈希表,属于闭散…

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时,开启了日志功能,部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…

【D3.js in Action 3 精译_034】4.1 D3 中的坐标轴的创建(中篇):定义横纵坐标轴的比例尺

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主,卫星、载波、微波等多种通信方式共存,分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高,以及终端通信入网的迅速发展,迫切地需要高效的通信管理系统来应对大规模、复…

STM32传感器模块编程实践(七) MLX90614红外测温模块简介及驱动源码

文章目录 一.概要二.MLX90614主要技术指标三.模块参考原理图四.模块接线说明五.模块工作原理介绍六.模块通讯协议介绍七.STM32单片机与MLX90614模块实现体温测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.小结 一.概要 一般来说,测温方式可分为接触式和…

大模型常见算子定义

本文将汇总大模型常用的算子定义,方便快速根据定义公式评估其计算量。 LayerNorm 这是在BERT、GPT等模型中广泛使用的LayerNorm: RMSNorm RMSNorm(root mean square)发现LayerNorm的中心偏移没什么用(减去均值等操作)。将其去掉之后,效果几乎…

51系列--人体身高体重BMI指数检测健康秤

本文主要介绍基于51单片机实现的人体身高体重BMI指数检测健康秤称设计(程序、电路图、PCB以及文档说明书见文末链接) 一、简介 本系统由STC89C52单片机、LCD1602液晶显示、按键、超声波测距、HX711称重传感器模块(0-1000KG)以及…

O(1)调度算法与CFS

目录 引言 linux内核的O(1)进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器,两个队列的机制 两个队列的机制如下: 这个算法后期被CFS替代 CFS 工作原…

进阶篇-Redis集群算法详细介绍

目录 一 、集群是什么1.1 主从复制与集群的架构区别 二、Redis集群的作用三、集群算法3.1.分片-槽位slot3.2 分片是什么3.3如何找到找到给定的key值分片3.4分片的优势 四、槽位映射的三中国解决方案4.1 哈希取余分区算法4.2 哈希一致性算法4.2.1 背景以及概念4.2.2 算法的步骤4…

【Python加密与解密】深入了解Python中的数据加密技术!

Python加密与解密:深入了解Python中的数据加密技术 在现代信息时代,数据加密成为保障网络和通信安全的重要手段之一。无论是在保护个人隐私还是在保证企业数据的安全性方面,加密技术都发挥着关键作用。Python 作为一种流行的编程语言&#x…

(10) GTest c++单元测试(mac版)

文章目录 概要安装实现机制-断言(简单、独立的测试)实现机制-测试套件实现机制-Test Fixture和事件 概要 官方文档 https://google.github.io/googletest/ 安装 git clone https://github.com/google/googletestcd googletestmkdir build && c…

鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)

当运行时的状态变量变化,UI重新渲染,在ArkUI中称为状态管理机制,前提是变量必须被装饰器修饰。不是状态变量的所有更改都会引起刷新,只有可以被框架观测到的更改才会引起UI刷新。其中boolen、string、number类型,可观察…

PyQt 入门教程(3)基础知识 | 3.2、加载资源文件

文章目录 一、加载资源文件1、PyQt5加载资源文件2、PyQt6加载资源文件 一、加载资源文件 常见的资源文件有图像、图标、样式表,下面分别介绍下加载资源文件的常用方法 1、PyQt5加载资源文件 创建.qrc文件: 可以使用QtCreator或手动创建一个.qrc文件&…

注意LED亚型号区分

一. 前言 最近产品试产遇到一次批量事故:全部绿光LED的光功率不达标。最终定位到的原因就是未注意LED的细分型号,试产采用的批次与研发时的亚型号不一样,光功率范围不一致。在此记录下来,供大家做参考,避免走弯路。 …

桂林旅游一点通:SpringBoot平台应用

3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架,JAVA作…

uniapp结合uview-ui创建项目

准备工作: 下载HBuilderX;官网地址:HBuilderX-高效极客技巧 安装node.js;官网地址:Node.js — 在任何地方运行 JavaScript,下载所需版本,安装后配置好环境变量即可 方式一(NPM安装方式): 1、打开开发者…

OpenRTP 乱序排包和差分抖动计算

OpenRTP 开源地址 OpenRTP 开源地址 暂时使用h264 aac 的音频去测试,点开配置去选择 1 音视频同步问题 先要解决一个音视频同步问题,否则包排不排序都不对,这是因为视频时间戳不一定能够对上音频,为什么呢?因为大部…

前端考试总结

1HTML标签 h标题标签 块级标签 独占一行 p段落标签 同上 br换行标签 单标签 img图片标签 内联标签:不独占一行(src图片地址 alt图片的替代文字 title鼠标悬停提示文字) a超链接标签 同上 (href跳转路径 target属性{_blank新窗口打开 _self在当前窗口打开}) 列表标签(ul无…