三菱CNC数采超详细,资料全备教程,后续更新发那科数采教程

三菱数采详细教程

文章目录

    • 三菱数采详细教程
      • 一、介绍
        • 1.背景
        • 2.需要掌握知识
        • 3.需要资料
          • ①三菱SDK包:A2
          • ②三菱com接口文档
          • ③C#代码:
          • ④VStudio
          • ⑤资料存放网盘
      • 二、程序运行
        • 1.调试设备
          • ①条件
          • ②命令
        • 2.运行软件
          • ①打开软件
          • ②运行程序
      • 三、数据采集
        • 1.代码了解
        • 2.参考手册
        • 3.采集案例
          • ①找需要的数据
          • ②找接口方法
          • ③实现方法
      • 四、代码思路
        • 1.总结代码
        • 2.初始化
          • ①思路
          • ②代码
        • 3.连接方法
          • ①思路
          • ②代码
        • 4.获取信息方法
          • ①思路
          • ②案例
          • ③代码
        • 5.读取信息
          • ①思路
          • ②代码

一、介绍

1.背景

​ 这是我在接手MES系统的生产采集功能时,花费巨大心血,才掌握的应该设备采集数据的教程。如果你也因为网上教程太杂,而且不附带资源,那么你就找对了文档,本篇文档1w字数,制作不易,请点赞收藏

2.需要掌握知识

​ C#,winform这个语言有基本的语法掌握,Mysql语言要学会增删改操作,VS工具的使用,连接mysql的步骤我暂时还没完成,本篇文章后续会将mysql数据库连接更新进来的

3.需要资料
①三菱SDK包:A2

​ 下载地址:三菱CNC数据采集与驱动A2协议手册:三菱CNC数据采集与驱动A2协议手册欢迎使用《三菱CNC - 三菱数控系统 - 数据采集 - 驱动 - A2驱动,协议手册》 - GitCode

​ 下载后一路下一步安装,遇到需要解锁的激活码时,就在A2包里面的,SN.txt文本里面

②三菱com接口文档

​ FCSB1224W000PDF文档

③C#代码:

​ SimCNC-master

④VStudio

​ 浏览器直接搜索下载,不过vs下载时要注意下载包含winform的负载包
在这里插入图片描述

⑤资料存放网盘

​ 这些我全都放在我的百度网盘里面,这个是网盘的地址大家可以自己去下载,但是vs这个需要自己去网上安装。

​ 通过百度网盘分享的文件:三菱设备采集教程
​ 链接:https://pan.baidu.com/s/1RRG-sKQcYtK_1q9sNR1Qyw?pwd=love
​ 提取码:love

二、程序运行

1.调试设备
①条件

​ 你需要调试三菱的设备IP让其可以被ping通

​ 还要确保你和三菱机床要是同一个网段下

②命令

​ –ipconfig

​ 电脑在命令窗口使用 ipconfig查看IPV4的地址,来确定自己电脑在哪一个网段。

​ 我用虚拟机的,网卡设备太多,不过大家电脑就不会这么多,一眼就能看到自己所在网段
在这里插入图片描述

​ –arp -a

​ 电脑在命令窗口使用 arp -a查看这个网段下面存活的设备
在这里插入图片描述

​ –设置设备IP

​ 确定好设备可以使用的IP后,就去设置CNC机床的IP,这是一个调试设备IP的文档:

​ 机床数据采集之Mitsubishi三菱M70/M80数控IP地址参数设定_三菱m70以太网设定教程-CSDN博客

2.运行软件
①打开软件

​ 双击打开会让你选择打开软件,我们选择vs2022这个紫色图标就行了
在这里插入图片描述

②运行程序

​ 运行起来后,就直接按连接按钮,看看是否能够采集到数据就行了
在这里插入图片描述
在这里插入图片描述

三、数据采集

1.代码了解

注意:ctrl+鼠标单击进入,我截图有一个文字写错了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

​ 进入后我们就能看到一堆COM接口的方法,我们并不清楚文档里面方法是干嘛,这时候我们就需要打开PFf的参考手册了

2.参考手册

​ 打开FCSB1224W000PDF 参考手册PDF文件
在这里插入图片描述

3.采集案例
①找需要的数据

​ 我们从参考手册里面找到我们要采集的数据,例如AliveTime
在这里插入图片描述

②找接口方法

​ --我们在代码里面找到我们手册里面的的接口方法

​ --我们能看到返回的是int的数据,然后要传入一个out int plTime的参数

​ --int不解释了,这个out就是值传递意思,从外部传入的值,在里面值发生改变会传递到外部

在这里插入图片描述

③实现方法

​ --因为我们的界面中调用的都是MitCom类中的方法,所以我们要在这个类写个方法

​ --完成后可以在我们的代码中通过mitCom对象调用了

 /*** 获取电源开启到关闭的时间*/public void GetRunAliveTime(out int plTime){//初始化运行时间为0,会因为out而修改掉plTime = 0;try{if (EZNcCom != null){lResult = EZNcCom.Time_GetAliveTime(out plTime);ErrorCheck("GetRunAliveTime");}}catch{ErrorCheck("通讯已关闭");}}

四、代码思路

1.总结代码

​ --我的代码全部总结出来,其实就四个内容

在这里插入图片描述

2.初始化
①思路

​ --初始化连接池

​ --初始化零件加工循环时间判断类

​ --装载连接IP的容器创建

​ --在程序执行时会执行无参构造方法,在立马初始化表格头,还有连接池的连接对象,和循环时间判断类装载

​ --优化思路:把三菱的连接池,包括其他的需要初始化的数据,全部放到一个类中,写成对象数组

②代码
#region 初始化相关内容
//--------------------------------------------
//懒得写个对象数组了,大家想优化可以自己写
//int connCount = 0;//连接池初始化的次数,用来防止频繁创建连接
List<EZSockets.MitCom> mitComs = new List<EZSockets.MitCom>();//模拟连接池//零件加工循环时间判断类
List<PartCycleTimeChecker> pctCheckers = new List<PartCycleTimeChecker>();//
//---------------------------------------------//获取连接IP的数据
List<String> nodes = new List<string>();public MultipleMitForm()
{InitializeComponent();init();//初始化连接个数//默认初始化连接个数 10个connectionInit(10);
}public void init()
{//设置列名dataGridView1.Columns.Clear();dataGridView1.Columns.Add("version", "版本信息:");dataGridView1.Columns.Add("aliveTime", "设备状态:");dataGridView1.Columns.Add("processCount", "零件加工总数:");dataGridView1.Columns.Add("waringMessage", "告警信息:");dataGridView1.Columns.Add("runTime", "运行时间:");dataGridView1.Columns.Add("runStatus", "运行状态:");dataGridView1.Columns.Add("CNCTime", "机床加工时间:");dataGridView1.Columns.Add("processTime", "目前零件加工时间:");// 设置列宽dataGridView1.Columns["processCount"].Width = 130; // 设置宽度为 100 像素dataGridView1.Columns["waringMessage"].Width = 150; // 设置宽度为 100 像素dataGridView1.Columns["CNCTime"].Width = 130; // 设置宽度为 100 像素dataGridView1.Columns["processTime"].Width = 150; // 设置宽度为 100 像素}
#endregion
3.连接方法
①思路

​ --这个初始化连接的详细方法

​ --进行输入连接地址的获取方法

​ --点击连接按钮进行连接事件

​ --连接数修改的方法

​ --防止窗口关闭忘记断开连接的的方法

②代码
 #region 连接相关方法群//初始化连接池public void connectionInit(int connCount){//清空连接池mitComs.Clear();// 设置连接数的文本信息this.formMitConnSum.Text = "" + connCount;//设置更新连接数判断参数 发生变化时用来比对updateConneSum = connCount;//默认初始化连接个数 10个for (int i = 1; i <= connCount; i++){EZSockets.MitCom mitCom = new MitCom();mitComs.Add(mitCom);PartCycleTimeChecker pctCheck = new PartCycleTimeChecker();pctCheckers.Add(pctCheck);}Console.WriteLine("connectionInit:" + mitComs.Count);}// 方法:获取每行文本并填充集合private List<string> GetLinesFromTextBox(TextBox textBox){// 创建一个集合来存放每一行文本List<string> lines = new List<string>();// 将多行文本框的内容按行分割foreach (string line in textBox.Lines){// 添加到集合if (!string.IsNullOrWhiteSpace(line)) // 检查非空行{lines.Add(line);}}return lines; // 返回包含每行文本的集合}private void Connect_Click(object sender, EventArgs e){//读取你输入IP作为一个数组nodes = GetLinesFromTextBox(nodeNames);//连接状态string connStatus = Connect.Text;string version = "";int pvValue;//非空判断,IP输入数不合理判断if (nodes.Count < 1){MessageBox.Show("请输入IP", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}//连接数判断 为false 就进入判断结束方法if (!connectionCountChanged()){return;}try{if (connStatus == "连接"){//连接状态禁止修改nodeNames.ReadOnly = true;formMitConnSum.ReadOnly = true;for (int i = 0; i < nodes.Count; i++){//初始化连接池的连接mitComs[i].GetSimConnect("M700M", "" + i + 1, TimeOut.Text, nodes[i]);//连接三菱设备Connect.Text = "断开";}//读取一下数据readData();}if (connStatus == "断开"){//清除表格旧数据readCount = 0;dataGridView1.Rows.Clear();//连接状态禁止修改nodeNames.ReadOnly = false;formMitConnSum.ReadOnly = false;for (int i = 0; i < nodes.Count; i++){version = "";//断开指定连接//初始化连接池的连接mitComs[i].GetSimConnect("M700M", "" + i + 1, TimeOut.Text, nodes[i]);//连接三菱设备//初始化标记是否可以计数pctCheckers[i].RunCount = 0;Connect.Text = "连接";}}}catch (Exception ex){MessageBox.Show($" 连接/断开 过程中出现错误: {ex.Message}");}}//连接数修改方法int updateConneSum = 0;bool connectionCountChanged(){Console.WriteLine("连接池个数:" + mitComs.Count);Console.WriteLine("连接个数:" + nodes.Count);bool flag = true;// 尝试解析输入内容,符合整数才能继续判断if (int.TryParse(formMitConnSum.Text, out int connectionCount)){//检查输入IP个数是否超出设定连接数据 if (nodes.Count > Convert.ToInt32(mitComs.Count) ){MessageBox.Show("检查输入IP个数是否超出设定连接数据", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);flag = false;}//当连接数发生变化时,就修改连接数if(Convert.ToInt32(formMitConnSum.Text) > updateConneSum){Console.WriteLine("连接数发生修改:"+ connectionCount);updateConneSum = Convert.ToInt32(formMitConnSum.Text);// 修改连接池个数connectionInit(Convert.ToInt32(formMitConnSum.Text));}}else{// 输入无效的情况,可提示用户MessageBox.Show("请输入有效的连接数", "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error);// 此行可以选用取消输入或清空内容// connectionSum.Clear(); // 可选flag = false;}return flag;}//窗体关闭前先关闭连接private void MultipleMitForm_FormClosing(object sender, FormClosingEventArgs e){Console.WriteLine("窗口关闭前!!!!!!!!!!!!!!!!");if (Connect.Text == "断开"){Connect_Click(sender, e);}}private void MultipleMitForm_FormClosed(object sender, FormClosedEventArgs e){Console.WriteLine("窗口关闭后!!!!!!!!!!!!!!!!");if (Connect.Text == "断开"){Connect_Click(sender, e);}}#endregion
4.获取信息方法
①思路

​ --首先找到接口文档手册,查阅到需要的方法

​ --然后去找到通讯类中的接口,进行调用,忘记的可以到三、数据采集去看看

​ --我们可以看看三菱官方写的MitCom类中有没有大家需要的方法

​ --假设没有,我们就需要在MitCom中创建好,然后在页面中进行调用

②案例

​ --假设我们要写一个获取电源时间的,且MitCom中没有

​ --1.我们按照标题三、数据采集的方法找到这个方法

​ --2.在MitCom完成方法的实现

​ --3.在我们的界面中进行调用,以及修改表格展示初始化,和表格数据的读取

​ --4.代码中要修改的地方

添加列名到表格

dataGridView1.Columns.Add("aliveTime", "电源时间:");

添加数据表表格行

dataGridView1.Rows.Add(GetAliveTime(mitComs[i]));

循环读取内容时,进行修改表格数据

row.Cells[0].Value = GetAliveTime(mitComs[i]);

1..在我们的界面中进行调用/// <summary>/// 获取电源运行时间/// </summary>string GetAliveTime(EZSockets.MitCom mitCom){int plTime;mitCom.GetRunAliveTime(out plTime);if (plTime > 0){return "在线";}else{return "离线";}}2.以及修改表格展示初始化public void init(){//设置列名dataGridView1.Columns.Clear();dataGridView1.Columns.Add("aliveTime", "电源时间:");}3.表格数据的读取//读取需要的数据int readCount = 0; //表格读取次数public void readData(){//获取连接IP的数据List<String> nodes = GetLinesFromTextBox(nodeNames);this.BeginInvoke((MethodInvoker)delegate (){Console.WriteLine("表格读取次数:" + readCount);Console.WriteLine("表格行数:" + dataGridView1.RowCount);//如果if (readCount == 0 && dataGridView1.RowCount <= 1){//清除表格行数据dataGridView1.Rows.Clear();for (int i = 0; i < nodes.Count; i++){//,GetCount(mitComs[i])dataGridView1.Rows.Add(GetAliveTime(mitComs[i]));readCount++;}}else{//清除表格行数据for (int i = 0; i < nodes.Count; i++){// 更新已有行DataGridViewRow row = dataGridView1.Rows[i];row.Cells[0].Value = GetAliveTime(mitComs[i]);}}});}
③代码
#region 获取信息的方法群
/// <summary>
/// 获取零件运行时间
/// </summary>
string GetEstimateTime(EZSockets.MitCom mitCom, PartCycleTimeChecker pctChecker)
{ //获取当前运行状态string stauts = GetRunStatus(mitCom);// 获取当前时间DateTime now = DateTime.Now;// 将时、分、秒转换为总秒数int currentTime = (now.Hour * 3600) + (now.Minute * 60) + now.Second;//新的一轮开始判断if(stauts == "未运行"){//判断是否为新的一轮if (pctChecker.RunCycle){//标记为下一轮可以开始计数pctChecker.RunCount = 1;//runCount++;Console.WriteLine("成功标记下一次可以开始计数:" + pctChecker.RunCount);}else {//如果是新的一轮//标记为下一轮可以开始计数pctChecker.RunCount = 1;Console.WriteLine("成功标记下一次可以开始计数:" + pctChecker.RunCount);//重置循环时间和零件加工时间为0pctChecker.RunStartTime = 0;//关闭新一轮开始按钮pctChecker.RunCycle = false;}}if (stauts == "运行中" && pctChecker.RunCount == 1) {//设定只能修改一次,然后下一次零件加工开始时间刷新//首先设定程序的开始时间if (pctChecker.RunStartTime == 0) {pctChecker.CountTime = 0;pctChecker.RunStartTime = currentTime;}//循环时间 = 当前时间 - 开始运行的时间pctChecker.CountTime = currentTime - pctChecker.RunStartTime;Console.WriteLine("成功进入查看循环时间:" + pctChecker.CountTime);}return ""+ pctChecker.CountTime;
}/// <summary>
/// 获取运行状态
/// </summary>
string GetRunStatus(EZSockets.MitCom mitCom)
{int status;mitCom.GetRunStatus(1,out status);if (status == 0){return "未运行";}else {return "运行中";}
}/// <summary>
/// 获取自启动时间
/// </summary>
string GetStartTime(EZSockets.MitCom mitCom)
{int plTime;mitCom.GetStartTime(out plTime);return plTime.ToString();
}/// <summary>
/// 获取运行时间
/// </summary>
string GetRunTime(EZSockets.MitCom mitCom)
{int plTime;mitCom.GetRunTime(out plTime);return plTime.ToString();
}/// <summary>
/// 获取NC系统报警
/// </summary>
string GetNCAlarm(EZSockets.MitCom mitCom)
{string[] alarmMsgs;string alarmMsg = "";mitCom.GetAlarm(out alarmMsgs);alarmMsg = "{ ";for (int i = 0; i < alarmMsgs.Length; i++){if (alarmMsgs[i] != "" && alarmMsgs[i] != null){alarmMsg = alarmMsg + alarmMsgs[i] + ", ";}}alarmMsg = alarmMsg + " }";return alarmMsg;
}/// <summary>
/// 获取电源运行时间
/// </summary>
string GetAliveTime(EZSockets.MitCom mitCom)
{int plTime;mitCom.GetRunAliveTime(out plTime);if (plTime > 0){return "在线";}else{return "离线";}
}/// <summary>
/// 统计件数
/// </summary>
string GetCount(EZSockets.MitCom mitCom)
{string pvValue;mitCom.GetParaValue(30, 8002, 1, 1, out pvValue);return pvValue;
}/// <summary>
/// 版本型号信息
/// </summary>
string GetVersion(EZSockets.MitCom mitCom)
{string version;mitCom.GetSimVersion(1, 0, out version);//获取版本return version;
}
#endregion
5.读取信息
①思路

​ --我们开启定时器进行读取

​ --然后判断表格读取的次数,如果是大于0,就说明表格已经读取过了数据

​ --那么就不会添加,而是进行修改了

②代码
#region 数据读取的方法群
//刷新UI界面的数据
private void btn_refresh_Click(object sender, EventArgs e)
{readData();
}//读取需要的数据
int readCount = 0; //表格读取次数
public void readData()
{//获取连接IP的数据List<String> nodes = GetLinesFromTextBox(nodeNames);this.BeginInvoke((MethodInvoker)delegate (){Console.WriteLine("表格读取次数:" + readCount);Console.WriteLine("表格行数:" + dataGridView1.RowCount);//如果if (readCount == 0 && dataGridView1.RowCount <= 1){//清除表格行数据dataGridView1.Rows.Clear();for (int i = 0; i < nodes.Count; i++){//,GetCount(mitComs[i])dataGridView1.Rows.Add(GetVersion(mitComs[i]),GetAliveTime(mitComs[i]),GetCount(mitComs[i]),GetNCAlarm(mitComs[i]),GetRunTime(mitComs[i]),GetRunStatus(mitComs[i]),GetStartTime(mitComs[i]),GetEstimateTime(mitComs[i], pctCheckers[i]));readCount++;}}else{//清除表格行数据for (int i = 0; i < nodes.Count; i++){// 更新已有行DataGridViewRow row = dataGridView1.Rows[i];row.Cells[0].Value = GetVersion(mitComs[i]);row.Cells[1].Value = GetAliveTime(mitComs[i]);row.Cells[2].Value = GetCount(mitComs[i]);row.Cells[3].Value = GetNCAlarm(mitComs[i]);row.Cells[4].Value = GetRunTime(mitComs[i]);row.Cells[5].Value = GetRunStatus(mitComs[i]);row.Cells[6].Value = GetStartTime(mitComs[i]);row.Cells[7].Value = GetEstimateTime(mitComs[i], pctCheckers[i]);}}});
}//每秒执行的定时任务
private void timer2_Tick(object sender, EventArgs e)
{readData();
}//开启读取按钮点击事件
private void readBtn_Click(object sender, EventArgs e)
{if (readBtn.Text == "开启读取"){//定时器开启refreshTimer.Enabled = true;readBtn.Text = "关闭读取";readFlag.Text = "开启";}else{refreshTimer.Enabled = false;readBtn.Text = "开启读取";readFlag.Text = "关闭";}
}
#endregion

如果看完后还有不懂的地方,可以来问博主

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

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

相关文章

常见限流算法详细解析

常见限流算法详细解析 分布式系统中&#xff0c;由于接口API无法控制上游调用方的行为&#xff0c;因此当瞬时请求量突增时&#xff0c;会导致服务器占用过多资源&#xff0c;发生响应速度降低、超时、乃至宕机&#xff0c;甚至引发雪崩造成整个系统不可用。 限流&#xff0c;…

java+ssm+mysql高校学籍管理系统

项目介绍&#xff1a; 使用javassmmysql开发的高校学籍管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、教师、学生角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff08;可以新增管理员&#xff09;&#xff1b;专业管理&…

(5)JS-Clipper2之PolyNode

1. 描述 PolyNodes是被封装在PolyTree的容器中&#xff0c;同时提供了一个数据结构来代表由Excute()方法返回的多边形轮廓中的父子关系。 一个PolyNode对象代表一个多边形&#xff1b;它的“IsHole”属性表明它是一个“外轮廓”还是一个“内孔”&#xff0c;PolyNodes可能包含…

Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速&#xff0c;租房市场日益繁荣&a…

MATLAB稀疏感知图像和体数据恢复的系统对象研究

稀疏感知图像和体数据恢复是一种用于恢复损坏、噪声或不完整的图像和体数据的技术。它利用了信号的稀疏性&#xff0c;即信号在某种基础下可以用较少的非零系数表示&#xff0c;从而实现高质量的恢复。 在进行稀疏感知图像和体数据恢复的研究时&#xff0c;需要定义一些系统对…

安卓调试环境搭建

前言 前段时间电脑重装了系统&#xff0c;最近准备调试一个apk&#xff0c;没想到装环境的过程并不顺利&#xff0c;很让人火大&#xff0c;于是记录一下。 反编译工具下载 下载apktool.bat和apktool.jar 官网地址&#xff1a;https://ibotpeaches.github.io/Apktool/install…

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果&#xff0c;然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了&#xff01;这个 5 天 这个工具是一个音频文件格式转换工具&#xff0c;支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…

在ARM Linux应用层下使用SPI驱动WS2812

文章目录 1、前言2、结果展示3、接线4、SPI驱动WS2812原理4.1、0码要发送的字节4.2、1码要发送的字节4.3、SPI时钟频率 5、点亮RGB5.1、亮绿灯5.2、亮红灯5.3、亮蓝灯5.4、完整程序 6、RGB呼吸灯7、总结 1、前言 事情是这样的&#xff0c;前段时间&#xff0c;写了一个基于RK3…

BERT:用于语言理解的深度双向 Transformer 的预训练。

文章目录 0. 摘要1. 介绍2. 相关工作2.1 无监督的基于特征的方法2.3 无监督微调方法2.3 从受监督数据中迁移学习 3. BERT3.1 预训练 BERT3.2 微调 BERT 4. 实验4.1 GLUE4.2 SQuAD v1.14.3 SQuAD v2.04.4 SWAG 5. 消融研究5.1 预训练任务的影响5.2 模型大小的影响5.3 使用 BERT …

在算网云平台云端在线部署stable diffusion (0基础小白超详细教程)

Stable Diffusion无疑是AIGC领域中的AI绘画利器&#xff0c;具有以下显著优势&#xff1a; 1、开源性质&#xff0c;支持本地部署 2、能够实现对图像生成过程的精确控制 虽然SD在使用上有很多的有点&#xff0c;但缺点也是不言而喻的&#xff0c;由于AI绘画的整个过程以及现…

设计模式——Chain(责任链)设计模式

摘要 责任链设计模式是一种行为设计模式&#xff0c;通过链式调用将请求逐一传递给一系列处理器&#xff0c;直到某个处理器处理了请求或所有处理器都未能处理。它解耦了请求的发送者和接收者&#xff0c;允许动态地将请求处理职责分配给多个对象&#xff0c;支持请求的灵活传…

macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表

以下是 macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表&#xff1a; 符号按键名称描述⌘Command (Cmd)常用的功能键&#xff0c;用于执行大多数快捷操作。⌥Option (Alt)Option 键&#xff0c;常用于辅助操作和特殊字符输入。⇧ShiftShift 键&#xff0c;常用…

el-table一键选择全部行,切换分页后无法勾选

el-table一键全选&#xff0c;分页的完美支持 问题背景尝试解决存在问题问题分析 解决方案改进思路如下具体代码实现如下 问题背景 现在有个需求&#xff0c;一个表格有若干条数据(假设数量大于20&#xff0c;每页10条&#xff0c;保证有2个以上分页即可)。 现在需要在表格上方…

【55 Pandas+Pyecharts | 实习僧网Python岗位招聘数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 调整部分城市名称 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 招聘数量前20岗位3.2 各城市招聘数量3…

【赵渝强老师】PostgreSQL的控制文件

PostgreSQL数据库的物理存储结构主要是指硬盘上存储的文件&#xff0c;包括&#xff1a;数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等。 下面重点讨论一下PostgreSQL的控制文件。 视频讲解如下 【赵渝强老师】PostgreSQL的控制文件 控制文件记录了数据库运行…

在做题中学习(79):最小K个数

解法&#xff1a;快速选择算法 说明&#xff1a;堆排序也是经典解决问题的算法&#xff0c;但时间复杂度为&#xff1a;O(NlogK)&#xff0c;K为k个元素 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章&#xff0c;分别学习&#xff1a;数组分三块&#…

连续大涨,汉王科技跑步进入AI应用舒适区

OpenAI正在进行的“12天12场直播”让行业再次沸腾&#xff0c;二级市场也在寻找AI应用的机会。这刺激了12月首周同花顺sora概念涨超11&#xff05;&#xff0c;远超同期大盘指数涨幅。 截至目前&#xff0c;“满血版”推理模型o1和月收费高达200美元的ChatGPT Pro订阅服务&…

[MySQL基础](三)SQL--图形化界面+DML

本专栏内容为&#xff1a;MySQL学习专栏 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;MySql &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 目录 图…

基于单片机的智能灯光控制系统

摘要 现在的大部分的大学&#xff0c;都是采用了一种“绿色”的教学方式&#xff0c;再加上现在的大学生缺乏环保意识&#xff0c;所以在学校里很多的教室&#xff0c;在白天的时候灯都会打开&#xff0c;这是一种极大的浪费&#xff0c;而且随时都有可能看到&#xff0c;这是…

解决Windows与Ubuntu云服务器无法通过Socket(udp)通信问题

今天在写Socket通信代码的时候&#xff0c;使用云服务器自己与自己通信没有问题&#xff0c;但是当我们把客户端换为Windows系统的时候却无法发送信息到Linux当中&#xff0c;耗时一上午终于搞定了&#x1f612;。 问题&#xff1a; 如上图&#xff0c;当我在windows的客户端…