.netcore TSC打印机打印

此文章给出两种打印案例,

第一种是单列打印,第二种是双列打印

需要注意打印机名称的设置,程序中使用的打印机名称为999,电脑中安装打印机时名称也要为999。

以下是我在使用过程中总结的一些问题:

一 TSC打印机使用使用过程中遇到的问题

1、打印机刚连上就报警。

一般是纸张或色带安装有问题,纸张要放到档杆的下方。

2、打印机显示正常,DiagTool工具无法连接到打印机,无论点什么都提示“Port Open Error”。

如果使用USB模式,需要用线把打印机和电脑连接起来,同时打印机需插上网线。工具中,通讯接口选择USB,点击“读取状态”,正常显示待机中,点击“读取”,会重置工具中的各参数。

点击“网络设定”,指定IP地址,这里设置为192.168.50.222

如果用服务器连接打印机,这个时候已经添加了打印机,登录服务器,找到打印机,打开打印机属性-端口,打印机名称或ip地址设置为与打印机ip一致即可。

3、打印机打印完成后报警。

检查纸张,纸张安装过紧或档条没压住纸,都会导致此问题。

接下来上代码

二 打印方式

2.1 单列打印

这种打印方式示例中,打印的位置是可以配置的

using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Imagine.Mes.MesTrackV3.Application.CommonTool;
using Imagine.Mes.MesTrackV3.Application.Dtos;
using Volo.Abp.DependencyInjection;
using Newtonsoft.Json;
using System.IO;
using Newtonsoft.Json.Linq;namespace Imagine.Mes.MesTrackV3.Application.Services
{/// <summary>/// 打印服务/// </summary>public interface IPrintService{/// <summary>/// 打印流程卡/// </summary>/// <param name="printType">打印枚举 0-二维码;1-条形码</param>/// <param name="body">流程卡集合</param>/// <returns></returns>Task PrintLotAsync(PrintEnum printType, List<PrintLotInDto> body);}public class PrintService : IPrintService,IScopedDependency{private readonly ILogger<PrintService> _logger;public PrintService(ILogger<PrintService> logger){_logger = logger;}#region 打印流程卡/// <summary>/// 打印流程卡/// </summary>/// <param name="printType">打印枚举 0-二维码;1-条形码</param>/// <param name="body">流程卡集合</param>/// <returns></returns>/// <exception cref="Exception"></exception>public async Task PrintLotAsync(PrintEnum printType, List<PrintLotInDto> body){try{List<PrintLotInDto> printOutboundOrderList = new List<PrintLotInDto>();var jsonObject=await GetJsonFileAsync("CommonTool\\PrintLot.json");for (int i = 0; i < body.Count; i++){await PrintLotAsync(printType,jsonObject, new PrintLotInDto{LotNo = body[i].LotNo,ProductCode = body[i].ProductCode,ProductName = body[i].ProductName,Quantity = body[i].Quantity,WorkOrderNo = body[i].WorkOrderNo,UnitName= body[i].UnitName});}}catch (Exception ex){_logger.LogError($"打印流程卡错误:{ex}");throw new Exception($"打印流程卡错误:{ex.Message}");}}/// <summary>/// 打印流程卡/// </summary>/// <param name="printType">打印类型:0-二维码;1-条形码</param>/// <param name="jsonObject"></param>/// <param name="param"></param>/// <returns></returns>private async Task PrintLotAsync(PrintEnum printType, JObject jsonObject, PrintLotInDto param){#region 模板string port = "999";string currentEncoding = "utf-16";string chineseFont = "宋体";byte[] lotNo = Encoding.GetEncoding(currentEncoding).GetBytes($"批 次 号:{param.LotNo}");byte[] productCode = Encoding.GetEncoding(currentEncoding).GetBytes($"产品编码:{param.ProductCode}");byte[] productName = Encoding.GetEncoding(currentEncoding).GetBytes($"产品名称:{param.ProductName}");byte[] quantity = Encoding.GetEncoding(currentEncoding).GetBytes($"数    量:{param.Quantity} {param.UnitName}");byte[] workOrderNo = Encoding.GetEncoding(currentEncoding).GetBytes($"工 单 号:{param.WorkOrderNo}");byte[] date = Encoding.GetEncoding(currentEncoding).GetBytes($"打印日期:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");byte status = TSCLIB_DLL.usbportqueryprinter();//0 = idle, 1 = head open, 16 = pause, following <ESC>!? command of TSPL manual//打印机共享名999int openport = TSCLIB_DLL.openport(@$"{port}");//M 纸张宽度  ,N 纸张高度TSCLIB_DLL.sendcommand("SIZE 100 mm, 80 mm");TSCLIB_DLL.sendcommand("SPEED 4");TSCLIB_DLL.sendcommand("DENSITY 12");TSCLIB_DLL.sendcommand("DIRECTION 1");TSCLIB_DLL.sendcommand("SET TEAR ON");TSCLIB_DLL.sendcommand("CODEPAGE UTF-8");TSCLIB_DLL.clearbuffer();if (printType == PrintEnum.QRCode)//打印二维码{//文字(x边距,y边距,字体高度,旋转,字体样式,下划线,字体,文字内容)TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["lotNo"]["x"]), Convert.ToInt32(jsonObject["lotNo"]["y"]), Convert.ToInt32(jsonObject["lotNo"]["size"]), 0, 0, 0, chineseFont, lotNo);TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["productCode"]["x"]), Convert.ToInt32(jsonObject["productCode"]["y"]), Convert.ToInt32(jsonObject["productCode"]["size"]), 0, 0, 0, chineseFont, productCode);TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["productName"]["x"]), Convert.ToInt32(jsonObject["productName"]["y"]), Convert.ToInt32(jsonObject["productName"]["size"]), 0, 0, 0, chineseFont, productName);TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["quantity"]["x"]), Convert.ToInt32(jsonObject["quantity"]["y"]), Convert.ToInt32(jsonObject["quantity"]["size"]), 0, 0, 0, chineseFont, quantity);TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["workOrderNo"]["x"]), Convert.ToInt32(jsonObject["workOrderNo"]["y"]), Convert.ToInt32(jsonObject["workOrderNo"]["size"]), 0, 0, 0, chineseFont, workOrderNo);TSCLIB_DLL.windowsfontUnicode(Convert.ToInt32(jsonObject["date"]["x"]), Convert.ToInt32(jsonObject["date"]["y"]), Convert.ToInt32(jsonObject["date"]["size"]), 0, 0, 0, chineseFont, date);//二维码//QRCODE x,y,ECC Level,cell width(二维码大小),mode,rotation(旋转),[model,mask,]"content"TSCLIB_DLL.sendcommand($"QRCODE {Convert.ToInt32(jsonObject["qRCode"]["x"])},{Convert.ToInt32(jsonObject["qRCode"]["y"])},H,{Convert.ToInt32(jsonObject["qRCode"]["size"])},A,0,M2,\"{param.LotNo}\"");}else// 打印条码.{// 在 (450, 200) 的坐标上// 以 Code128 的条码方式// 条码高度 300// 打印条码的同时,还打印条码的文本信息.// 旋转的角度为 0 度// 条码 宽 窄 比例因子为 7:7// 条码内容为:barCode//BARCODE X,Y,”code type”,height,human readable,rotation,narrow,wide,[alignment,]”content“TSCLIB_DLL.barcode("30", "30", "128", "180", "1", "0", "6", "6", $"{param.LotNo}");}//TSCLIB_DLL.sendcommand(String.Format("QRCODE 740,320,H,8,A,0,M2,\"{0}\"", trayCode));//DMATRIX码  。DMATRIX 命令,740,320,90,90  指定 X 坐标,指定 Y 坐标,条码区域宽度//TSCLIB_DLL.sendcommand($"DMATRIX 740,320,90,90,x18,30,30,\"{trayCode}\"");int printlabel = TSCLIB_DLL.printlabel("1", "1");TSCLIB_DLL.closeport();#endregionawait Task.CompletedTask;}#endregion 打印流程卡#region 获取json文件内容private async Task<JObject> GetJsonFileAsync(string path){try{// 获取文件的绝对路径string filePath = Path.Combine(AppContext.BaseDirectory, path);string jsonContent = string.Empty;//json内容var exists = System.IO.File.Exists(filePath);if (!exists) throw new Exception($"配置文件[{path.Split("\\")[path.Split("\\").Length - 1]}]不存在");// 读取文件的内容using (StreamReader file = File.OpenText(filePath)){jsonContent = await file.ReadToEndAsync();}// 解析JSON到JObjectJObject jsonObj = JObject.Parse(jsonContent);// 反序列化//var plcModel = JsonConvert.DeserializeObject<List<PLCModel>>(jsonContent);return jsonObj;}catch (Exception ex){_logger.LogError(ex.ToString(), ex);throw new Exception(ex.Message);}}#endregion}
}
/// <summary>
/// 打印流程卡
/// </summary>
public class PrintLotInDto
{/// <summary>/// 批次号/// </summary>public string LotNo {  get; set; }/// <summary>/// 产品名称/// </summary>public string ProductName {  get; set; }/// <summary>/// 产品编码/// </summary>public string ProductCode { get; set; }/// <summary>/// 数量/// </summary>public int Quantity {  get; set; }/// <summary>/// 工单号/// </summary>public string WorkOrderNo {  get; set; }/ <summary>/ 打印日期/ </summary>//public DateTime Date { get; set; }/// <summary>/// 单位名称/// </summary>public string UnitName {  get; set; }
}/// <summary>
/// 打印枚举
/// </summary>
public enum PrintEnum
{QRCode = 0,//二维码BarCode = 1//条形码
}

PrintLot.json文件内容

{//批次号"lotNo": {"x": 430, //x坐标"y": 320, //y坐标"size": 50 //字体大小},//产品编码"productCode": {"x": 230,"y": 400,"size": 50},//产品名称"productName": {"x": 230,"y": 480,"size": 50},//数量"quantity": {"x": 230,"y": 560,"size": 50},//工单号"workOrderNo": {"x": 230,"y": 640,"size": 50},//打印日期"date": {"x": 230,"y": 720,"size": 50},//二维码"qRCode": {"x": 450,"y": 30,"size": 10 //二维码大小}
}

2.2 双列打印

using Imagine.Mes.MesBase.Application.CommonTool;
using Imagine.Mes.MesBase.Application.Dtos;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;namespace Imagine.Mes.MesBase.Application.Services
{public interface IPrintService{/// <summary>/// 打印库位信息/// </summary>/// <param name="printType"></param>/// <param name="body"></param>/// <returns></returns>Task PrintWarehouselocationsAsync(PrintTypeEnum printType, List<WarehouseLocationNoParam> body);}public class PrintService : IPrintService, ITransientDependency{private readonly ILogger<PrintService> _logger;public PrintService(ILogger<PrintService> logger){_logger = logger;}public async Task PrintWarehouselocationsAsync(PrintTypeEnum printType, List<WarehouseLocationNoParam> body){try{List<PrintWarehouseLocationParam> printQualityInspectionList = new List<PrintWarehouseLocationParam>();for (int i = 0; i < body.Count; i += 2){PrintWarehouseLocationParam printQualityInspection = new PrintWarehouseLocationParam();printQualityInspection.QRCodeContent = body[i].QRCodeContent;printQualityInspection.WarehouseLocationName = body[i].WarehouseLocationName;printQualityInspection.WarehouseLocationNo = body[i].WarehouseLocationNo;printQualityInspection.QRCodeContent2 = i + 1 < body.Count ? body[i + 1].QRCodeContent : null;printQualityInspection.WarehouseLocationName2 = i + 1 < body.Count ? body[i + 1].WarehouseLocationName : null;printQualityInspection.WarehouseLocationNo2 = i + 1 < body.Count ? body[i + 1].WarehouseLocationNo : null;printQualityInspectionList.Add(printQualityInspection);await PrintWarehouselocationAsync(printType, new PrintWarehouseLocationParam{QRCodeContent = printQualityInspection.QRCodeContent,WarehouseLocationName = printQualityInspection.WarehouseLocationName,WarehouseLocationNo = printQualityInspection.WarehouseLocationNo,QRCodeContent2 = printQualityInspection.QRCodeContent2,WarehouseLocationName2 = printQualityInspection.WarehouseLocationName2,WarehouseLocationNo2 = printQualityInspection.WarehouseLocationNo2});}}catch (Exception ex){_logger.LogError($"打印质检单/入库单错误:{ex}");}}/// <summary>/// 打印出库单/入库单/// </summary>/// <param name="printType">打印类型:0-二维码;1-条形码</param>/// <param name="param"></param>/// <returns></returns>private async Task PrintWarehouselocationAsync(PrintTypeEnum printType, PrintWarehouseLocationParam param){#region 模板string port = "999";string currentEncoding = "utf-16";string chineseFont = "宋体";byte[] warehouseLocationNo = null;byte[] warehouseLocationName = null;byte[] warehouseLocationNo2 = null;byte[] warehouseLocationName2 = null;warehouseLocationNo = Encoding.GetEncoding(currentEncoding).GetBytes($"{param.WarehouseLocationNo}");warehouseLocationName = Encoding.GetEncoding(currentEncoding).GetBytes($"{param.WarehouseLocationName}");warehouseLocationNo2 = Encoding.GetEncoding(currentEncoding).GetBytes($"{param.WarehouseLocationNo2}");warehouseLocationName2 = Encoding.GetEncoding(currentEncoding).GetBytes($"{param.WarehouseLocationName2}");byte status = TSCLIB_DLL.usbportqueryprinter();//0 = idle, 1 = head open, 16 = pause, following <ESC>!? command of TSPL manual//打印机共享名999int openport = TSCLIB_DLL.openport(@$"{port}");//M 纸张宽度  ,N 纸张高度TSCLIB_DLL.sendcommand("SIZE 100 mm, 30 mm");TSCLIB_DLL.sendcommand("SPEED 2");TSCLIB_DLL.sendcommand("DENSITY 15");TSCLIB_DLL.sendcommand("DIRECTION 1");TSCLIB_DLL.sendcommand("SET TEAR ON");TSCLIB_DLL.sendcommand("CODEPAGE UTF-8");TSCLIB_DLL.clearbuffer();if (printType == PrintTypeEnum.QRCode)//打印二维码{TSCLIB_DLL.windowsfontUnicode(150, 20, 26, 0, 0, 0, chineseFont, warehouseLocationName);TSCLIB_DLL.sendcommand($"QRCODE 180,55,H,5,A,0,M2,\"{param.QRCodeContent}\"");TSCLIB_DLL.windowsfontUnicode(150, 180, 26, 0, 0, 0, chineseFont, warehouseLocationNo);if (!string.IsNullOrWhiteSpace(param.QRCodeContent2)){TSCLIB_DLL.windowsfontUnicode(550, 20, 26, 0, 0, 0, chineseFont, warehouseLocationName2);TSCLIB_DLL.sendcommand($"QRCODE 580,55,H,5,A,0,M2,\"{param.QRCodeContent2}\"");TSCLIB_DLL.windowsfontUnicode(550, 180, 26, 0, 0, 0, chineseFont, warehouseLocationNo2);}}else// 打印条码.{// 在 (450, 200) 的坐标上// 以 Code128 的条码方式// 条码高度 300// 打印条码的同时,还打印条码的文本信息.// 旋转的角度为 0 度// 条码 宽 窄 比例因子为 7:7// 条码内容为:barCode//BARCODE X,Y,”code type”,height,human readable,rotation,narrow,wide,[alignment,]”content“TSCLIB_DLL.barcode("300", "340", "128", "180", "1", "0", "6", "6", $"{param.QRCodeContent2}");}//TSCLIB_DLL.sendcommand(String.Format("QRCODE 740,320,H,8,A,0,M2,\"{0}\"", trayCode));//DMATRIX码  。DMATRIX 命令,740,320,90,90  指定 X 坐标,指定 Y 坐标,条码区域宽度//TSCLIB_DLL.sendcommand($"DMATRIX 740,320,90,90,x18,30,30,\"{trayCode}\"");int printlabel = TSCLIB_DLL.printlabel("1", "1");TSCLIB_DLL.closeport();#endregionawait Task.CompletedTask;}}/// <summary>/// 打印枚举/// </summary>public enum PrintTypeEnum{QRCode = 0,//二维码BarCode = 1//条形码}
}

/// <summary>
/// 库位码打印参数
/// </summary>
public class WarehouseLocationNoParam
{/// <summary>/// 二维码内容/// </summary>public string QRCodeContent { get; set; }/// <summary>/// 库位名称/// </summary>public string WarehouseLocationName { get; set; }/// <summary>/// 库位编码/// </summary>public string WarehouseLocationNo { get; set; }
}
/// <summary>
/// 库位码打印参数
/// </summary>
public class PrintWarehouseLocationParam
{/// <summary>/// 二维码内容/// </summary>public string QRCodeContent { get; set; }/// <summary>/// 库位名称/// </summary>public string WarehouseLocationName { get; set; }/// <summary>/// 库位编码/// </summary>public string WarehouseLocationNo { get; set; }/// <summary>/// 二维码内容2/// </summary>public string QRCodeContent2 { get; set; }/// <summary>/// 库位名称2/// </summary>public string WarehouseLocationName2 { get; set; }/// <summary>/// 库位编码2/// </summary>public string WarehouseLocationNo2 { get; set; }
}

2.3 用到的公共类

using System.Runtime.InteropServices;namespace Imagine.Mes.MesBase.Application.CommonTool
{public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "about")]public static extern int about();[DllImport("TSCLIB.dll", EntryPoint = "openport")]public static extern int openport(string printername);[DllImport("TSCLIB.dll", EntryPoint = "barcode")]public static extern int barcode(string x, string y, string type,string height, string readable, string rotation,string narrow, string wide, string code);[DllImport("TSCLIB.dll", EntryPoint = "clearbuffer")]public static extern int clearbuffer();[DllImport("TSCLIB.dll", EntryPoint = "closeport")]public static extern int closeport();[DllImport("TSCLIB.dll", EntryPoint = "downloadpcx")]public static extern int downloadpcx(string filename, string image_name);[DllImport("TSCLIB.dll", EntryPoint = "formfeed")]public static extern int formfeed();[DllImport("TSCLIB.dll", EntryPoint = "nobackfeed")]public static extern int nobackfeed();[DllImport("TSCLIB.dll", EntryPoint = "printerfont")]public static extern int printerfont(string x, string y, string fonttype,string rotation, string xmul, string ymul,string text);[DllImport("TSCLIB.dll", EntryPoint = "printlabel")]public static extern int printlabel(string set, string copy);[DllImport("TSCLIB.dll", EntryPoint = "sendcommand")]public static extern int sendcommand(string printercommand);[DllImport("TSCLIB.dll", EntryPoint = "setup")]public static extern int setup(string width, string height,string speed, string density,string sensor, string vertical,string offset);[DllImport("TSCLIB.dll", EntryPoint = "windowsfont")]public static extern int windowsfont(int x, int y, int fontheight,int rotation, int fontstyle, int fontunderline,string szFaceName, string content);[DllImport("TSCLIB.dll", EntryPoint = "windowsfontUnicode")]public static extern int windowsfontUnicode(int x, int y, int fontheight,int rotation, int fontstyle, int fontunderline,string szFaceName, byte[] content);[DllImport("TSCLIB.dll", EntryPoint = "sendBinaryData")]public static extern int sendBinaryData(byte[] content, int length);[DllImport("TSCLIB.dll", EntryPoint = "usbportqueryprinter")]public static extern byte usbportqueryprinter();}
}

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

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

相关文章

【Node.js基础02】fs、path模块

目录 一&#xff1a;fs模块-读写文件 1 加载fs模块对象 2 读制定文件内容文件 3 向文件中写入内容 二&#xff1a;path模块-路径处理 1 问题引入 2 __dirname内置变量 使用方法 一&#xff1a;fs模块-读写文件 fs模块封装了与本机文件系统交互方法和属性 1 加载fs模块…

弹性布局 flex layout HTML CSS

文章目录 效果图参考文档代码 效果图 其实弹性布局的好处是&#xff1a;当网页大小变化&#xff08;如窗口resize&#xff09;时&#xff0c;处于弹性容器(flex container)中的弹性元素(flex item) 之间的距离也会变化。 需要特别注意的是&#xff1a; 弹性布局的主要CSS如下。…

开源邮箱套件介绍系列2:Roundcube webmail

1. 项目介绍 项目网站&#xff1a;Roundcube – Free and Open Source Webmail Software Roundcube 项目是一个免费的开源网络邮件解决方案&#xff0c;具有类似桌面的用户界面&#xff08;Webmail&#xff09;&#xff0c;易于安装/配置&#xff0c;并且可以在标准的LAMPP服…

PostgreSQL 中如何处理数据的唯一性约束?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的唯一性约束&#xff1f;一、什么是唯一性约束二、为什么要设置唯一性约束…

SAP第二季度财报和进一步裁员计划

7月22日公布了截至 2024 年 6 月 30 日的第二季度财务报告。以下位总体指标 当前云计算在手订单达 148 亿欧元&#xff0c;按名义货币和固定汇率计算均增长 28%云收入增长 25%&#xff0c;其中云 ERP 套件收入增长 33%&#xff0c;均按名义货币和固定汇率计算总收入增长 10%&a…

mysql 先子查询过滤再联合 和 先联合再过滤 执行效率问题

执行顺序 先子查询过滤再联合 SELECT XXX FROM(select * from edw_data_dyd.overrun_offsite_info WHERELENGTH( VEHICLE_ID ) > 12 AND CREATED_TIME > DATE_ADD(NOW(),INTERVAL -1 HOUR)AND CREATED_TIME < NOW()AND VEHICLE_ID not like %无车牌%AND VEHICLE_I…

Mac中maven配置安装路径

Mac中maven配置安装路径 没有下载maven的可以先下载&#xff1a;&#xff08;这里建议maven版本不要下高了&#xff09; 如果你的bash_profile中没有配置JAVA_HOME路径&#xff0c;可以按照下面的命令配置一下 获取JAVA的安装路径&#xff1a; /usr/libexec/java_home -V …

Pycharm2024最新版community社区版下载安装配置,快速上手

第一步&#xff1a;下载 方法1&#xff1a;官网链接 https://www.jetbrains.com/pycharm/download/?sectionwindows .方法2&#xff1a;百度网盘 链接&#xff1a;https://pan.baidu.com/s/1ic2N5hUQ2m1Kmyr5nK9Jxw?pwd76dt 提取码&#xff1a;76dt --来自百度网盘超级…

接口自动化测试框架实战-2-项目接口文档

上一小节我们完成了项目开发环境的搭建&#xff0c;本小结我们具体介绍一下项目中使用到的接口文档。 本次我们以钉钉开放接口作为项目接口测试的示例&#xff0c;方便大家都能统一学习和调用&#xff0c;具体接口如下&#xff1a; 1、获取企业内部应用的access_token 在获取…

poi库简单使用(java如何实现动态替换模板Word内容)

目录 Blue留言&#xff1a; Blue的推荐&#xff1a; 什么是poi库&#xff1f; 实现动态替换 第一步&#xff1a;依赖 第二步&#xff1a;实现word模板中替换文字 模板word&#xff1a; 通过以下代码&#xff1a;&#xff08;自己建一个类&#xff0c;随意取名&#xf…

(8) ubuntu ROS 安装

文章目录 安装流程1. 进入ros官网2. 根据自己ubuntu系统选择版本&#xff08;我是20.04的ubuntu&#xff09;3.根据流程开始安装3.1 设置sources.list 4.验证ros5.安装rosdep 安装流程 1. 进入ros官网 https://www.ros.org/ 2. 根据自己ubuntu系统选择版本&#xff08;我是2…

ORB_SLAM2 ORBSLAM2 Ubuntu20.04 ROS Noetic虚拟机镜像下载

下图是build.sh 和 build_ros.sh 编译完成截图&#xff1a; slam测试视频: orbslam2 ubuntu20.04 test 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/16R7Pb6LjgR5SeoeBSZfgaQ?pwdu05r 提取码&#xff1a;u05r

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 接上一篇文章FastAPI&#xff08;六十六&#xff09;实战开发《在线课程学习系统》接口开发--用户注册接口开发。这次我们分享实际开发--用户登陆接口…

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现GA-Transformer-LSTM多变量回归预测&#xff0c;遗传优化算法&#…

书生大模型实战营闯关记录----第二关:实现word_count统计文本中word频次

实现word_count统计文本中word频次 请实现一个wordcount函数&#xff0c;统计英文字符串中每个单词出现的次数。返回一个字典&#xff0c;key为单词&#xff0c;value为对应单词出现的次数。 Eg: Input: """Hello world! This is an example. Word coun…

每日刷题记录(codetop版)

7.21 7.22 7.23 复习7.21和7.22

并发情况导致事务失效的场景

public void test(Pageable request){for (int i 0; i < 100; i) {//新建线程处理new Thread(() -> {userInfoService.testDemo();}).start();} } 这里创建多个线程模拟多并发场景 Transactional(rollbackOn Exception.class) public synchronized void testDemo() {…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…