三菱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.rhkb.cn/news/486804.html

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

相关文章

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…

juc并发编程(下)

一些辅助类 减少计数CountDownLatch 设置一个计数器&#xff0c;通过countDown方法进行减1操作&#xff0c;使用await方法等待计数器不大于0&#xff0c;继续执行await方法之后的语句。 当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞 其他线程调用countDown方…

调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量

很多朋友在使用matlab时&#xff0c;会使用或自己编辑多个function函数&#xff0c;来满足自己对任务处理的要求&#xff0c;但是在调用function函数时&#xff0c;会出现这个问题&#xff1a;调用matlab用户自定义的function函数时&#xff0c;有多个输出变量只输出第一个变量…

计算机毕设-基于springboot的志愿者招募管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

嵌入式蓝桥杯学习7 产生PWM

Cubemx配置 打开cubemx&#xff0c;前面的配置看上文&#xff0c;这里主要配置定时器产生PWM波。 以PA1的TIM2-CH2通道为例进行演示。 1.在Timers中打开TIM2,将Channel2配置为PWM Generation CH2。 2.将Clock Source 选择为Internal Clock。 3.配置Paramater Settings中的参…

LobeChat-46.6k星!顶级AI工具集,一键部署,界面美观易用,ApiSmart 是你肉身体验学习LLM 最好IDEA 工具

LobeChat LobeChat的开源&#xff0c;把AI功能集合到一起&#xff0c;真的太爽了。 我第一次发现LobeChat的时候&#xff0c;就是看到那炫酷的页面&#xff0c;这么强的前端真的是在秀肌肉啊&#xff01; 看下它的官网&#xff0c;整个网站的动效简直闪瞎我&#xff01; GitH…

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)

Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 &#xff08;OC20…

[小白系列]Ubuntu安装教程-安装prometheus和Grafana

Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。&#xff08;/data/prometheus/可根据自己需要调整&#xff09; global:scrape_interval: 15s # By default, scrape targets ev…

oracle之用户的相关操作

&#xff08;1&#xff09;创建用户(sys用户下操作) 简单创建用户如下&#xff1a; CREATE USER username IDENTIFIED BY password; 如果需要自定义更多的信息&#xff0c;如用户使用的表空间等&#xff0c;可以使用如下&#xff1a; CREATE USER mall IDENTIFIED BY 12345…

Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1

文章目录 Jenkins环境一站式教程&#xff1a;从安装到配置&#xff0c;打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、安装配置Jenkins2.1 安装JDK…

flinkSql 将流和表的互相转换

流——>表 方式一 方式二 方式一&#xff1a;写sql DataStreamSource<String> source env.socketTextStream("localhost", 8881); // 表名&#xff0c;流&#xff0c;字段名称 tableEnv.createTemporaryView("t_1",source&#xff0c;$("…

AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)

在当今AI驱动的时代&#xff0c;数据分析已成为各行各业不可或缺的能力。然而&#xff0c;传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能&#xff0c;这对非技术背景的业务人员来说是一个不小的挑战。 想象一下&#xff0c;当数据中心的负责人打开手机时…

PyCharm+Selenium+Pytest配置小记

1、下载ChromeDriver&#xff1a; Chrome130以后的Driver下载&#xff1a; Chrome for Testing availabilityhttps://googlechromelabs.github.io/chrome-for-testing/ &#xff08;1&#xff09;查看自己Crome浏览器的版本&#xff1a;设置-->关于 Chrome&#xff1b; &…

【原生js案例】webApp实现鼠标移入移出相册放大缩小动画

图片相册这种动画效果也很常见&#xff0c;在我们的网站上。鼠标滑入放大图片&#xff0c;滑出就恢复原来的大小。现在我们使用运动定时器来实现这种滑动效果。 感兴趣的可以关注下我的系列课程【webApp之h5端实战】&#xff0c;里面有大量的css3动画效果制作原生知识分析&…

Qt 安装Qt Serial Port

最近要用Qt写个串口上位机软件&#xff0c;发现Qt的串口库用不了&#xff0c;上网找了一下资料&#xff0c;找到一种解决办法&#xff0c;具体操作如下&#xff1a; 参考文章&#xff1a;https 目录 一、找到QT安装路径&#xff0c;并运行Qt Maintenance Tool二、选择 添加或移…

语音识别flask接口开发

要开发一个flask语音识别接口&#xff0c;首先要解决语音文件在网络中的传输问题&#xff0c;然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码&#xff0c;以…

计算机毕业设计Python医疗问答系统 医疗可视化 BERT+LSTM+CRF深度学习识别模型 机器学习 深度学习 爬虫 知识图谱 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

shell条件测试

一.命令执行结果判定 && 在命令执行后如果没有任何报错时会执行符号后面的动作 || 在命令执行后如果命令有报错会执行符号后的动作 示例&#xff1a; [rootqingdeng shell3]# sh sl.sh /mnt/file is not exist no二.条件判断方法 在 shell 程序中&#xff0c;用户可…