.NET的PLC帮助类

 TCP和UDP协议:

        TCP(传输控制协议)和UDP(用户数据报协议)是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务,但具有不同的特性和功能。

        TCP协议是一种提供可靠、面向连接的字节流服务的传输协议。在数据传输前,发送方和接收方必须先建立TCP连接,然后才能进行数据传输。它通过超时重发、丢弃重复数据、数据检验等功能,确保数据能从一端传输到另一端。

        UDP协议则是一种简单的面向数据报的传输层协议,它提供的是非面向连接、不可靠的数据流传输服务。由于UDP在传输数据报前不需要在客户和服务器之间建立连接,也没有超时重发等机制,因此其传输速度相对较快。但这也意味着它不能提供数据传输的可靠性保障。

        总的来说,TCP和UDP各有其优点和使用场景。TCP主要应用于可靠性要求高的应用,如网页浏览、文件传输等;而UDP则更适合于可靠性要求低、对传输速度和经济性有一定需求的应用,如视频流、游戏等。

RS-232和RS-475通信接口标准及Modbus协议:

        RS-232是一种常见的串行通信接口标准,由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定。其全名为“数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。它通常被应用于计算机、调制解调器和各种电子设备之间的通信连接。

        RS-475是一种由美国电子工业协会(EIA)制定的半双工通信接口标准,它通常被应用于电子设备之间的数据传输。它采用平衡驱动和差分接收,因此具有较好的抗干扰能力,同时传输距离较远,可以达到数百米甚至千米级别。与RS-232不同的是,RS-475通常采用9针D型连接器,并且其引脚定义也与RS-232有所不同。RS-475主要用于工业、科学和医疗等领域的设备间通信,但由于其半双工的限制,应用场景不如RS-232和RS-485广泛。

        Modbus是一种串行通信协议,最初由Modicon公司(现在的施耐德电气 Schneider Electric)于1979年开发,用于可编程逻辑控制器(PLC)之间的通信。此协议已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。西门子的S1200和S1500用的就是Modbus协议

        Modbus协议定义了一个控制器能够识别的消息结构,不管它们是经过何种网络进行通信的。它描述了控制器请求访问其他设备的过程,如果回应来自其他设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在Modbus网络上通信时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。总的来说,Modbus是一种应用于电子控制器之间的通用语言,通过它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

一、使用HslCommunication程序集,官网:胡工科技。

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading;
using HslCommunication;
using HslCommunication.Profinet.Siemens;
using HslCommunication.Profinet.Omron;
using HslCommunication.Profinet.Keyence;namespace PLC.Class
{public class PLCHelper{#region 连接西门子PLC--SiemensS7Net/// <summary>/// 连接西门子PLC--SiemensS7Net/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <returns></returns>private bool ConnectSiemens(SiemensS7Net siemens, string ip, int port){try{IPAddress ipaddress;bool flag = !IPAddress.TryParse(ip, out ipaddress);if (flag){return false;}else{siemens.IpAddress = ip;siemens.Port = port;OperateResult operateResult = siemens.ConnectServer();bool isSuccess = operateResult.IsSuccess;if (isSuccess){return true;}else{return false;}}}catch (Exception){return false;}}/// <summary>/// 给西门子PLC点位写信号/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="flag">给点位传入的值</param>/// <returns></returns>public bool WriteFlagBySiemens(SiemensS7Net siemens, string ip, int port, string point, short flag){if (ConnectSiemens(siemens, ip, port)){OperateResult result = siemens.Write(point, flag);siemens.ConnectClose();return result.IsSuccess;}else{return false;}}/// <summary>/// 读取西门子PLC的状态/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <returns></returns>public bool ReadBoolBySiemens(SiemensS7Net siemens, string ip, int port, string point){if (ConnectSiemens(siemens, ip, port)){OperateResult<bool> value = siemens.ReadBool(point);siemens.ConnectClose();return value.Content;}else{return false;}}/// <summary>/// 读取西门子PLC的值/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="length">读取长度</param>/// <returns></returns>public string ReadStringBySiemens(SiemensS7Net siemens, string ip, int port, string point, ushort length){if (ConnectSiemens(siemens, ip, port)){OperateResult<string> result = new OperateResult<string>();result = siemens.ReadString(point, length);string source = string.Empty;if (!string.IsNullOrEmpty(result.Content)){source = result.Content;}else{for (int i = 0; i < 3; i++){Thread.Sleep(10);result = siemens.ReadString(point, length);if (!string.IsNullOrEmpty(result.Content)){source = result.Content;break;}}if (string.IsNullOrEmpty(result.Content)){return "未读取到PLC信息";}}siemens.ConnectClose();return source;}else{return "false";}}/// <summary>/// 清空西门子PLC点位中的值/// </summary>/// <param name="siemens"></param>/// <param name="ip"></param>/// <param name="port"></param>/// <param name="point"></param>/// <param name="length">写入的长度</param>/// <returns></returns>public bool ClearPlcPocketBySiemens(SiemensS7Net siemens, string ip, int port, string point, int length, string flag = " "){if (ConnectSiemens(siemens, ip, port)){OperateResult result = siemens.Write(point, flag, length);siemens.ConnectClose();return result.IsSuccess;}else{return false;}}#endregion#region 连接欧姆龙PLC--OmronFinsNet/// <summary>/// 连接欧姆龙PLC--OmronFinsNet/// </summary>/// <param name="omron"></param>/// <param name="ip"></param>/// <param name="port"></param>/// <returns></returns>private bool ConnectOmron(OmronFinsNet omron, string ip, int port){//OmronFinsUdptry{IPAddress ipaddress;bool flag = !IPAddress.TryParse(ip, out ipaddress);if (flag){return false;}else{omron.IpAddress = ip;omron.Port = port;omron.SA1 = 239;//if (ip240.Contains(ip))//{//    omron.SA1 = 240;//}//else//{//    omron.SA1 = 239;//}//omron.DA1 = 24;OperateResult operateResult = omron.ConnectServer();if (!operateResult.IsSuccess){for (int i = 0;i < 3;i++){operateResult = omron.ConnectServer();if (operateResult.IsSuccess){break;//return true;}}//SA1使用239连接不上,则采取240连接if (!operateResult.IsSuccess){omron.SA1 = 240;for (int i = 0; i < 3; i++){operateResult = omron.ConnectServer();if (operateResult.IsSuccess){break;//return true;}}}//if (!isSuccess)//{//    return false;//}}return operateResult.IsSuccess;}}catch (Exception ex){LogHelper.WriteErrLog(ex.ToString());return false;}}/// <summary>/// 给欧姆龙PLC点位写信号/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="flag">给点位传入的值</param>/// <returns></returns>public bool WriteShortByOmron(OmronFinsNet omron, string ip, int port, string point, short flag){//if (ConnectOmron(omron, ip, port))//{OperateResult result = omron.Write(point, flag);if (!result.IsSuccess){for (int i = 0;i < 3;i++){result = omron.Write(point,flag);if (result.IsSuccess){break;//return true;}}//if (!result.IsSuccess)//{//    return false;//}}//omron.ConnectClose();return result.IsSuccess;//}//else//{//    return false;//}}//写入float值public bool WriteFloatByOmron(OmronFinsNet omron, string ip, int port, string point, float flag){//if (ConnectOmron(omron, ip, port))//{OperateResult result = omron.Write(point, flag);if (!result.IsSuccess){for (int i = 0; i < 3; i++){result = omron.Write(point, flag);if (result.IsSuccess){break;//return true;}}//if (!result.IsSuccess)//{//    return false;//}}//omron.ConnectClose();return result.IsSuccess;//}//else//{//    return false;//}}public string WritePointByOmron(OmronFinsNet omron, string ip, int port, List<string> pointlst, List<string> dataTypelst, List<string> valuelst,string type,List<string> filedlst){//int sucNum = 0;string errorFileds = "";try{if (type == "EDIT"){//return 0;return "";}//调用时以下6个点位不写入List<string> addNotWritePoint = new List<string>() { "D200", "D202", "D210", "D212", "D0", "D469" };if (ConnectOmron(omron, ip, port)){for (int i = 0; i < pointlst.Count; i++){if (addNotWritePoint.Contains(pointlst[i])){continue;}if (dataTypelst[i] == "FLOAT" && !string.IsNullOrEmpty(valuelst[i])){float flag = Convert.ToSingle(valuelst[i]);bool result = WriteFloatByOmron(omron, ip, port, pointlst[i], flag);if (result){//sucNum++;}else{if (errorFileds.Length > 0){errorFileds += ",";}errorFileds += filedlst[i];LogHelper.WriteErrLog($"IP:{ip},端口:{port},点位:{pointlst[i]},值:{valuelst[i]}写入失败!");}}else if (dataTypelst[i] == "SHORT" && !string.IsNullOrEmpty(valuelst[i])){short flag = Convert.ToInt16(valuelst[i]);bool result = WriteShortByOmron(omron, ip, port, pointlst[i], flag);if (result){//sucNum++;}else{if (errorFileds.Length > 0){errorFileds += ",";}errorFileds += filedlst[i];LogHelper.WriteErrLog($"IP:{ip},端口:{port},点位:{pointlst[i]},值:{valuelst[i]}写入失败!");}}}//return sucNum;}//else//{//    return sucNum;//}}catch (Exception ex){LogHelper.WriteErrLog(ex.ToString());}finally{omron.ConnectClose();}//return sucNum;return errorFileds;}/// <summary>/// 读取欧姆龙PLC的状态/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <returns></returns>public bool ReadBoolByOmron1(OmronFinsNet omron, string ip, int port, string point){if (ConnectOmron(omron, ip, port)){OperateResult<bool> value = omron.ReadBool(point);omron.ConnectClose();return value.Content;}else{return false;}}//读取float型数据public float ReadFloatByOmron(OmronFinsNet omron, string ip, int port, string point){//if (ConnectOmron(omron, ip, port))//{OperateResult<float> value = omron.ReadFloat(point);if (!value.IsSuccess){for (int i = 0;i < 3;i++){value = omron.ReadFloat(point);if (value.IsSuccess){break;//return value.Content;}}//if (!value.IsSuccess)//{//    return 0;//}}//omron.ConnectClose();if (value.IsSuccess){return value.Content;}else{return 0;}//}//else//{//    return 0;//}}//读取short型数据public short ReadShortByOmron(OmronFinsNet omron, string ip, int port, string point){//if (ConnectOmron(omron, ip, port))//{OperateResult<short> value = omron.ReadInt16(point);if (!value.IsSuccess){for (int i = 0; i < 3; i++){value = omron.ReadInt16(point);if (value.IsSuccess){break;//return value.Content;}}//if (!value.IsSuccess)//{//    return 0;//}}//omron.ConnectClose();if (value.IsSuccess){return value.Content;}else{return 0;}//}//else//{//    return 0;//}}//读取Bool类型数据public bool ReadBoolByOmron(OmronFinsNet omron, string ip, int port, string point){OperateResult<bool> value = omron.ReadBool(point);if (!value.IsSuccess){for (int i = 0; i < 3; i++){value = omron.ReadBool(point);if (value.IsSuccess){break;}}}if (value.IsSuccess){return value.Content;}else{return false;}}public string ReadPointByOmron(OmronFinsNet omron, string ip, int port, List<string> filedlst, List<string> pointlst, List<string> datatypelst){string result = "0";JObject jObj = new JObject();try{if (ConnectOmron(omron, ip, port)){for (int i = 0; i < pointlst.Count; i++){if (datatypelst[i] == "FLOAT"){result = ReadFloatByOmron(omron, ip, port, pointlst[i]).ToString();}else if (datatypelst[i] == "SHORT"){result = ReadShortByOmron(omron, ip, port, pointlst[i]).ToString();}else if (datatypelst[i] == "BOOL" && pointlst[i] == "H10"){//涂布单双面3个点位细分—00:单面,01:双面,01;02:连续bool res = false;List<string> H10s = new List<string>() { "H10.00", "H10.01", "H10.02" };foreach (string h10 in H10s){res = ReadBoolByOmron(omron, ip, port, h10);if (res){result = h10.Substring(h10.Length - 1,1);break;}}}jObj.Add(new JProperty(filedlst[i], result));}}}catch (Exception ex){LogHelper.WriteErrLog(ex.ToString());}finally{omron.ConnectClose();}return jObj.ToString();}/// <summary>/// 读取欧姆龙PLC的值/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="length">读取长度</param>/// <returns></returns>public string ReadStringByOmron(OmronFinsNet omron, string ip, int port, string point, ushort length){if (ConnectOmron(omron, ip, port)){OperateResult<string> result = new OperateResult<string>();result = omron.ReadString(point, length);string source = string.Empty;if (!string.IsNullOrEmpty(result.Content)){source = result.Content;}else{for (int i = 0; i < 3; i++){Thread.Sleep(10);result = omron.ReadString(point, length);if (!string.IsNullOrEmpty(result.Content)){source = result.Content;break;}}if (string.IsNullOrEmpty(result.Content)){return "未读取到PLC信息";}}omron.ConnectClose();return source;}else{return "false";}}/// <summary>/// 清空欧姆龙PLC点位中的值/// </summary>/// <param name="siemens"></param>/// <param name="ip"></param>/// <param name="port"></param>/// <param name="point"></param>/// <param name="length">写入的长度</param>/// <returns></returns>public bool ClearPlcPocketByOmron(OmronFinsNet omron, string ip, int port, string point, int length, string flag = " "){if (ConnectOmron(omron, ip, port)){OperateResult result = omron.Write(point, flag, length);omron.ConnectClose();return result.IsSuccess;}else{return false;}}#endregion#region  连接基恩士PLC--KeyenceMcNet/// <summary>/// 连接基恩士PLC--KeyenceMcNet/// </summary>/// <param name="omron"></param>/// <param name="ip"></param>/// <param name="port"></param>/// <returns></returns>private bool ConnectKeyence(KeyenceMcNet keyence, string ip, int port){try{IPAddress ipaddress;bool flag = !IPAddress.TryParse(ip, out ipaddress);if (flag){return false;}else{keyence.IpAddress = ip;keyence.Port = port;OperateResult operateResult = keyence.ConnectServer();bool isSuccess = operateResult.IsSuccess;if (isSuccess){return true;}else{return false;}}}catch (Exception){return false;}}/// <summary>/// 给基恩士PLC点位写信号/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="flag">给点位传入的值</param>/// <returns></returns>public bool WriteFlagByKeyence(KeyenceMcNet keyence, string ip, int port, string point, short flag){if (ConnectKeyence(keyence, ip, port)){OperateResult result = keyence.Write(point, flag);keyence.ConnectClose();return result.IsSuccess;}else{return false;}}/// <summary>/// 读取基恩士PLC的状态/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <returns></returns>public bool ReadBoolByKeyence(KeyenceMcNet keyence, string ip, int port, string point){if (ConnectKeyence(keyence, ip, port)){OperateResult<bool> value = keyence.ReadBool(point);keyence.ConnectClose();return value.Content;}else{return false;}}/// <summary>/// 读取基恩士PLC的值/// </summary>/// <param name="siemens"></param>/// <param name="ip">IP地址</param>/// <param name="port">端口</param>/// <param name="point">PLC点位</param>/// <param name="length">读取长度</param>/// <returns></returns>public string ReadStringByKeyence(KeyenceMcNet keyence, string ip, int port, string point, ushort length){if (ConnectKeyence(keyence, ip, port)){OperateResult<string> result = new OperateResult<string>();result = keyence.ReadString(point, length);string source = string.Empty;if (!string.IsNullOrEmpty(result.Content)){source = result.Content;}else{for (int i = 0; i < 3; i++){Thread.Sleep(10);result = keyence.ReadString(point, length);if (!string.IsNullOrEmpty(result.Content)){source = result.Content;break;}}if (string.IsNullOrEmpty(result.Content)){return "未读取到PLC信息";}}keyence.ConnectClose();return source;}else{return "false";}}/// <summary>/// 清空基恩士PLC点位中的值/// </summary>/// <param name="siemens"></param>/// <param name="ip"></param>/// <param name="port"></param>/// <param name="point"></param>/// <param name="length">写入的长度</param>/// <returns></returns>public bool ClearPlcPocketByKeyence(KeyenceMcNet keyence, string ip, int port, string point, int length, string flag = " "){if (ConnectKeyence(keyence, ip, port)){OperateResult result = keyence.Write(point, flag, length);keyence.ConnectClose();return result.IsSuccess;}else{return false;}}#endregion}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go-fastdfs分布式文件存储集群搭建和测试

一、官方文件 https://sjqzhang.github.io/go-fastdfs/#character2、集群原理 小集群原理&#xff1a; 大集群原理 二、服务端集群部署 1、在集群每个节点机器上下载安装包 (建议使用最新稳定版本&#xff09; wget --no-check-certificate https://github.com/sjqzhang/go…

【Linux基础】Linux发展史

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunny-ll 一、前言 本篇主要介绍Linux的发展历史&#xff0c;这里并不需要我们掌握&#xff0c;但是作为一个合格的Linux学习者与操作者&#xff0c;这些东西是需要了解的&#xff0c;而且…

docker基本命令

一、镜像操作 1、搜索镜像 docker search 仓库名/镜像名 2、下载镜像 docker pull 仓库名/镜像名&#xff1a;标签 若不指明标签&#xff0c;则表示下载最新版本的【标签为latest】 3、查看镜像 docker images 4、创建镜像 docker tag 原仓库/镜像名&#xff1a;原标名 新…

机器人制作开源方案 | 家庭清扫拾物机器人

作者&#xff1a;罗诚、李旭洋、胡旭、符粒楷 单位&#xff1a;南昌交通学院 人工智能学院 指导老师&#xff1a;揭吁菡 在家庭中我们有时无法到一些低矮阴暗的地方进行探索&#xff0c;比如茶几下或者床底下&#xff0c;特别是在部分家庭中&#xff0c;如果没有及时对这些阴…

【网络安全】2023年堡垒机品牌大全

随着大家网络安全意识的增加&#xff0c;随着国家等保政策的严格执行&#xff0c;越来越多的企业开始采购堡垒机。这里就给大家总结了部分堡垒机品牌&#xff0c;让大家参考参考。 2023年堡垒机品牌大全 1、行云堡垒 2、JumpServer 3、安恒 4、骞云 5、齐治 6、阿里云 …

【应用层协议】HTTPS的加密流程

文章目录 1. 认识HTTPS2. 密文3. HTTPS加密流程3.1 对称加密3.2 非对称加密3.3 证书 1. 认识HTTPS HTTPS&#xff08;超文本传输协议安全&#xff09;也是一个应用层协议&#xff0c;它是在HTTP协议的基础上引入了一个加密层。 也就是HTTP协议传输文本的方式是明文&#xff0c;…

【Docker Compose】Docker Compose 的安装,使用以及实现微服务集群的部署

文章目录 前言&#xff1a;Docker 部署存在的问题一、 初识 Docker Compose1.1 什么是 Docker Compose1.2 在 CentOS 上安装 Docker Compose 二、深入了解 Docker Compose 文件2.1 Docker Compose 文件概述2.2 Docker Compose 文件详解2.3 示例&#xff1a;编写 Docker Compose…

Flutter AI五子棋

前言 在上一篇文章中&#xff0c;讲解了如何实现双人在本地对战的五子棋&#xff0c;但是只有一个人的时候就不太好玩&#xff0c;同时博主也没有把五子棋相关的文章写过瘾。那么这篇文章&#xff0c;我们来实现一个功能更加丰富的五子棋吧&#xff01;在设计五子棋的算法方面&…

mysql5.7停止维护时间

mysql5.7将于2023年10月停止官网支持和更新&#xff1b;老项目要准备升级&#xff0c;新项目的mysql必须是mysql8.0&#xff08;2023-10&#xff09; 官方升级咨询地址 oracle官方升级咨询地址https://go.oracle.com/LP116153?elq_mid247718&sh1518132002061316121320310…

vue、vuex状态管理

使用步骤&#xff1a; 1、安装vuex 口诀&#xff1a;“233”、“344” 数字分别对应&#xff0c;“vue版本&#xff0c;vue 路由版本、vuex 版本”。 所以这里了使用vuex3版本&#xff1a; yarn add vuex3 2、创建仓库文件 编写如下&#xff1a; // 这个文件用于存放vuex的…

JAVA面经整理(7)

一)什么是AQS&#xff1f; 1)AQS也被称之为是抽象同步队列&#xff0c;它是JUC包底下的多个组件的底层实现&#xff0c;Lock&#xff0c;CountDownLatch和Semphore底层都使用到了AQS AQS的核心思想就是给予一个等待队列和同步状态来实现的&#xff0c;它的内部使用一个先进先出…

机器视觉工程师努力工作确实不一定涨工资,但是努力工作,确实有很大可能涨工资

机器视觉工程师努力工作确实不一定涨工资&#xff0c;但是努力工作&#xff0c;确实有很大可能涨工资 其实在我们机器视觉工程张薪资方面&#xff0c;正常是一年两次调整周期。

arm 汇编基础指令

实现1-100求和 .text .globl _start_start:mov r0, #1 i&#xff0c;i1mov r1, #100 条件变量i<100mov r2, #0 sumLoop: 循环cmp r0,r1 比较r0和r1的大小bhi stop 当r0>r1时&#xff0c;跳到stop标签a…

Android 中级控件

目录 一、图形定制1.1 图形Drawable1.2 形状图形1.3 状态列表图形 二、选择按钮2.1 复选框2.2 开关按钮2.3 单选按钮 三、文本输入3.1 编辑框3.2 焦点变更监听器3.3 文本变化监听器 四、对话框4.1 提醒对话框4.2 日期对话框4.3 时间对话框 一、图形定制 1.1 图形Drawable ~~~~…

苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?

&#xff08;一&#xff09;TestFlight 能够让您&#xff1a;邀请内部和外部的测试人员为应用程序提供反馈。 跟踪应用程序在测试过程中发现的 bug 和用户体验问题。 收集 Crash 报告&#xff0c;了解应用程序在真实设备上的运行状况。 要使用 TestFlight&#xff0c;您可以按照…

基于Java的校园跑腿接单管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

jquery和jquery-ui拖动元素(vue2)

彩色小方块可以任意拖动&#xff0c;红色箭头指向的区域可以拖动 CDN在index.html文件中引入 <link rel"stylesheet" href"//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"><script src"https://code.jquery.com/jquery-3.6.0.min…

01-工具篇-windows与linux文件共享

一般来说绝大部分PC上装的系统均是windows&#xff0c;为了开发linux程序&#xff0c;会在PC上安装一个Vmware的虚拟机&#xff0c;在虚拟机上安装ubuntu18.04&#xff0c;由于windows上的代码查看软件、浏览器&#xff0c;通信软件更全&#xff0c;我们想只用ubuntu进行编译&a…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第三周测验

课程1_第3周_测验题 目录&#xff1a;目录 第一题 1.以下哪一项是正确的&#xff1f; A. 【  】 a [ 2 ] ( 12 ) a^{[2](12)} a[2](12)是第12层&#xff0c;第2个训练数据的激活向量。 B. 【  】X是一个矩阵&#xff0c;其中每个列都是一个训练示例。 C. 【  】 a 4 […

01-http概述

HTTP概述 HTTP使用的是可靠地数据传输协议。HTTP属于应用层协议 Web客户端和服务器 web服务器&#xff1a;又称http服务器&#xff0c;用于存储web内容&#xff0c;并向web客户端提供web内容web客户端&#xff1a;用于请求web服务器的应用软件&#xff0c;常见为浏览器 资源…