使用python控制eTM-3020C程控电源

article/2025/11/6 15:55:58

目录

  • 基本参数
  • 接口
    • 串口参数
    • 演示上位机串口通信连接步骤
    • 电源地址码修改方法
    • 通讯协议
      • MODBUS_RTU帧结构
        • 地址域
        • 功能域
        • 数据域
        • CRC校验
      • MODBUS RTU 通讯协议
        • 通讯信息传输过程
          • 地址码
          • 功能码
          • 数据区
          • 静止时间要求
        • MODBUS功能码简介
          • 功能码“03”:读多路寄存器输入
          • 功能码“06”:写单个寄存器
        • 错误校验码(CRC校验)
  • 使用python控制
    • 依赖
    • python脚本
    • 运行效果

PyCharm Community Edition 2020.3 x64
eTM-3020C程控电源


客服提供的资料合集:eTM-3020C程控电源通信协议(P系列_DP系列_C系列)

基本参数

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

接口

  (摘自客服提供的资料《联机使用步骤》)

  本机可选配RS232或者RS485或者USB传输标准与计算机通信, 仅支持Modbus通讯协议(目前只支持功能码03、06)。

串口参数

  波特率:9600;
  起始位:1;
  数据位:8;
  校验位:无;
  停止位:1;
  地址码:0x01(可修改);

演示上位机串口通信连接步骤

  • 连接通信线、电源线,打开电源;

    • 注:
    1. 如选配的接口是RS232接口时串口线需要使用出厂机器配送的2-3母母交叉线;
    2. 如选配的接口是USB接口时,需要确认插上USB线、打开电源后,在电脑“设备管理器”中能识别到USB对应的串口号,如果没有识别到设备口号则需要安装相应的USB驱动;
  • 打开上位机演示软件;
    在这里插入图片描述

  • 在软件上添加“电源设备”:打开上位机软件后,在电脑桌面右下角的任务栏找到软件图标,右键选择“采样端口设置”,在“设备名称”窗口设置一个设备名称,在“端口号”窗口选择电源联机后对应的串口号(可在电脑的“设备管理器”中查找对应的COM号),其他的选项按需要选择或默认参数即可,设置完参数点“添加设备”, 此时软件窗口这边就会生成对应的电源设备图标;
    在这里插入图片描述
    在这里插入图片描述

  • 双击已添加的电源设备图标,打开串口进行控制;
    在这里插入图片描述

电源地址码修改方法

  (摘自客服提供的资料《电源地址码修改方法》)

  本机出厂默认地址码为0x01,如需要修改本机地址码,可参照下面方法修改:

  • 方法一:连接串口后通过发送指令修改地址码,详细可参照通信资料;
  • 方法二:进入工程模式修改:
    1. 型号P系列电源(功率300W(含)以下的小程控电源)修改方法:
      1. 在电源关机的状态下,按下电源“ON/OFF”小开关不松手再按下橙色电源开关给电源上电,直到电源电压窗口显示“Addr”内容后松开电源“ON/OFF”小开关,此时已进入工程模式;
      2. 电压窗口显示“Addr”的同时,电流窗口显示的就是本机地址码值,此时, 可直接通过按“M3”、“M4”按键增加或者减小地址码值;(地址码可设置范围:0-250);设置完重新开机即开始生效;
    2. 型号C系列电源(大功率双旋钮数控电源)修改方法:
      1. 在电源关机的状态下,按下电源“ON/OFF”小开关不松手再按下橙色电源开关给电源上电,直到电源电压窗口显示“O.U.T.”内容松开电源“ON/OFF”小开关,此时已进入工程模式;
      2. 在电压窗口显示为“O.U.T.” 时,按一次“电压调节旋钮”切换电压窗口显示为“Addr”,此时对应功率窗口显示的就是本机地址码值,然后通过旋转“电压调节旋钮”可增加或者减小地址码值;(地址码可设置范围:0-250);设置完重新开机即开始生效;

通讯协议

  (摘自客服提供的资料《(D)P系列_C系列通讯协议》)

  P系列/C系列仪表采用RS232或者RS485传输标准与计算机通讯(本机只支持功能码03,06 —— 20180611版)

  波特率:9600
  起始位:1
  数据位:8
  校验位:无
  停止位:1

MODBUS_RTU帧结构

  消息发送至少要以3.5个字符时间的停顿间隔开始;整个消息帧必须作为一连续的数据传输流,如果在帧完成之前有超过3.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。
  一帧信息的标准结构如下所示:

开始地址域功能域数据域CRC校验结束
T1-T2-T3-T48Bit8Bitn个8Bit16BitT1-T2-T3-T4

地址域

  主机通过将要联络的从机的地址放入消息中的地址域来选通从设备,单个从机的地址范围是1…15(十进制)。
  地址0是用作广播地址,以使所有的从机都能认识。

功能域

  有效的编码范围是1…255(十进制);当消息从主机发往从机时,功能代码将告之从机需要去干什么。例如:读/写一组寄存器的数据内容等。

数据域

  主机发给从机的数据域中包含了从机完成功能域的动作时所必要的附加信息;如:寄存器地址等。

CRC校验

  CRC生成之后,低字节在前,高字节在后。

  本仪表通讯时帧与帧之间的响应间隔,通讯速率大于等于9600bps时不大于5ms

序号名称说明范围小数点位数读写参数通讯地址
0ON/OFF电源输出/停止设定1,00r/w0001H
1OP.S保护状态(注1)0-0xFFFF0r0002H
2规格型号规格型号0-655350r0003H
3尾缀分类尾缀分类0-0xFFFF0r0004H
4小数点位数V_A_W位数(注2)0-0xFFFF0r0005H
5U电源的电压显示值0-655352r0010H
6I电源的电流显示值0-655353r0011H
7P电源的功率显示值32位数据3r0012H(高16位),0013H(低16位)
9SetU设置电压0-655352r/w0030H
10SetI设置电流0-655353r/w0031H
12OVP过压保护设定值0-655352r/w0020H
13OCP过流保护设定值0-655352r/w0021H
14OPP过功率保护设定值32位数据2r/w0022H(高16位),0023H(低16位)
15RS-Adder通讯地址设定1~2500r/w9999H

  红注:红色序号部分是公用的。
  蓝色序号部分是可编程专用的。
  黑色序号部分是可选的。

  • 注1:保护状态位定义如下
union _ST
{struct{uint8_t isOVP:1;	//过压保护uint8_t isOCP:1;	//过流保护uint8_t isOPP:1;	//过功率保护uint8_t isOTP:1;	//过温保护uint8_t isSCP:1;	//短路保护}OP;uint8_t Dat;
};
  • 注2:小数点位数信息如下图
case 0x0005://电压电流功率小数点位数Dat = ShowPN;// ((2<<8) | (3<<4) | (3<<0)) ;//0.00V 0.000A 0.000Wbreak;

  比如读到:0x0233,就是 电压2个小数,电流3个小数,功率3个小数

MODBUS RTU 通讯协议

  • 通讯数据的类型及格式:
      信息传输为异步方式,并以字节为单位。在主站和从站之间传递的通讯信息是10位的字格式:
字格式(串行数据)10位二进制
起始位1位
数据位8位
奇偶校验位
停止位1位
  • 通讯数据(信息帧)格式
数据格式地址码功能码数据区CRC校验
数据长度1字节1字节N字节16位CRC码(冗余循环码)

通讯信息传输过程

  当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。

地址码

  地址码是每次通讯信息帧的第一字节(8位),从1到250。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。

功能码

  是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。

M O D B U S 部分功能码 MODBUS部分功能码 MODBUS部分功能码

功能码定 义操 作(二进制)
02读开关量输入DI读取一路或多路开关量状态输入数 (遥信)
01读状态量输出OUT读取一路或多路开关量输出状态数据
03读寄存器数据读取一个或多个寄存器的数据
05写开关量输出OUT控制一路继电器“合/分”输出,遥控
06写单路寄存器把一组二进制数据写入单个寄存器
10写多路寄存器把多组二进制数据写入多个寄存器
数据区

  数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。
  电源采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03),可以任意读取其数据寄存器(其数据信息表详见附录)。
  响应的命令格式是从机地址、功能码、数据区及CRC码。数据区的数据都是两个字节,并且高位在前。

静止时间要求

  发送数据前要求数据总线静止时间即无数据发送时间大于(5ms 波特率为9600时).

MODBUS功能码简介

功能码“03”:读多路寄存器输入

  例如:
  主机要读取地址为01,起始地址为0001的3个从机寄存器数据。
从机数据寄存器的地址和数据 从机数据寄存器的地址和数据 从机数据寄存器的地址和数据

寄存器地址寄存器数据(16进制)对应参数
00100BB8 (30.00V)U
001101F4 (5.00A)I
00123A98 (150.00W)P

主机发送的报文格式 主机发送的报文格式 主机发送的报文格式

主机发送字节数发送的信息备 注
从机地址101发送至地址为01的从机
功能码103读寄存器
起始地址20010起始地址为0001
读数据长度20003读取3个寄存器(共6个字节)
CRC码2040E由主机计算得到CRC码

从机响应返回的报文格式 从机响应返回的报文格式 从机响应返回的报文格式

从机响应字节数返回的信息备 注
从机地址101来自从机01
功能码103读寄存器
数据长度(字节数)106共6个字节
寄存器1的数据20BB8地址为0001寄存器的内容
寄存器2的数据201F4地址为0002寄存器的内容
寄存器3的数据23A98地址为0003寄存器的内容
CRC码2D311由从机计算得到CRC码
功能码“06”:写单个寄存器

  主机利用这个功能码把数据保存到电源内部数据存储器中去。Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。这样存储器都是二个字节。
  例如:
  主机要把0E10保存到地址为0004的从机寄存器中去(从机地址码为01)。
主机发送的报文格式 主机发送的报文格式 主机发送的报文格式

主机发送字节数发送的信息备 注
从机地址101发送至地址为01的从机
功能码106写单个寄存器
起始地址20004要写入的寄存器的地址
保存数据20E10待写入0004地址的数据
CRC码2CDA7由主机计算得到CRC码

从机响应返回的报文格式 从机响应返回的报文格式 从机响应返回的报文格式

从机响应字节数返回的信息备 注
从机地址101发送至地址为01的从机
功能码106写单个寄存器
起始地址20004要写入的寄存器的地址
保存数据20E100004地址的数据
CRC码2CDA7由从机计算得到CRC码

错误校验码(CRC校验)

  主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。
  MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CRC码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则表明出错。

  • CRC码的计算方法
  1. 预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;
  2. 把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器;
  3. 把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
  4. 如果移出位为0:重复第3步(再次右移一位); 如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
  5. 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
  6. 重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
  7. 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换;
  8. 最后得到的CRC寄存器内容即为:CRC码。

使用python控制

依赖

modbus_tk
pyserial

python脚本

import time
import serial
import serial.tools.list_ports
import modbus_tk.defines as cst
from modbus_tk import modbus_rtudef connect_serial(keyword: str = "", baud_rate: int = None, timeout: int = 1):"""连接串口:param keyword: 串口名关键词:param baud_rate: 波特率:param timeout: 超时时间:return: 串口类"""serial_list = list(serial.tools.list_ports.comports())serial_list_len = len(serial_list)if serial_list_len <= 0:raise ValueError("Can't find a serial port")else:if not keyword:print("找到如下串口:")for serial_port in serial_list:print("\t", str(serial_port))print("请输入要连接的串口关键词:")keyword = input()if not baud_rate:print("请输入使用的波特率:")baud_rate = input()try:baud_rate = int(baud_rate)except:baud_rate = 9600for _ in range(serial_list_len):if keyword.lower() in str(serial_list[_]).lower():serial_port = serial.Serial(serial_list[_].name, baud_rate, timeout=timeout)print("与", serial_list[_], "建立连接!")return serial_portraise ValueError("Can't find the serial port")class power_supply:"""电源类"""def __init__(self, serial_obj: serial.serialwin32.Serial, addr: int):"""构造函数:param serial_obj: 串口类:param addr: 从机地址"""self.modbus_rtu_obj = modbus_rtu.RtuMaster(serial_obj)self.modbus_rtu_obj.set_timeout(1.0)self.addr = addrself.name = self.read(0x0003)self.class_name = self.read(0x0004)dot_msg = self.read(0x0005)self.W_dot = 10 ** (dot_msg & 0x0F)dot_msg >>= 4self.A_dot = 10 ** (dot_msg & 0x0F)dot_msg >>= 4self.V_dot = 10 ** (dot_msg & 0x0F)protection_state_int = self.read(0x0002)self.isOVP = protection_state_int & 0x01self.isOCP = (protection_state_int & 0x02) >> 1self.isOPP = (protection_state_int & 0x04) >> 2self.isOTP = (protection_state_int & 0x08) >> 3self.isSCP = (protection_state_int & 0x10) >> 4self.V(0)def read(self, reg_addr: int, reg_len: int = 1):"""读取寄存器:param reg_addr: 寄存器地址:param reg_len: 寄存器个数,1~2:return: 数据"""if reg_len <= 1:return self.modbus_rtu_obj.execute(self.addr, cst.READ_HOLDING_REGISTERS, reg_addr, reg_len)[0]elif reg_len >= 2:raw_tuple = self.modbus_rtu_obj.execute(self.addr, cst.READ_HOLDING_REGISTERS, reg_addr, reg_len)return raw_tuple[0] << 16 | raw_tuple[1]def write(self, reg_addr: int, data: int, data_len: int = 1):"""写入数据:param reg_addr: 寄存器地址:param data: 待写入的数据:param data_len: 数据长度:return: 写入状态"""if data_len <= 1:self.modbus_rtu_obj.execute(self.addr, cst.WRITE_SINGLE_REGISTER, reg_addr, output_value=data)if self.read(reg_addr) == data:return Trueelse:return Falseelif data_len >= 2:self.modbus_rtu_obj.execute(self.addr, cst.WRITE_SINGLE_REGISTER, reg_addr, output_value=data >> 16)self.modbus_rtu_obj.execute(self.addr, cst.WRITE_SINGLE_REGISTER, reg_addr + 1, output_value=data & 0xFFFF)if self.read(reg_addr) == (data >> 16) and self.read(reg_addr + 1) == (data & 0xFFFF):return Trueelse:return Falsedef read_protection_state(self):"""读取保护状态:return: 保护状态寄存器原始值"""protection_state_int = self.read(0x0002)self.isOVP = protection_state_int & 0x01self.isOCP = (protection_state_int & 0x02) >> 1self.isOPP = (protection_state_int & 0x04) >> 2self.isOTP = (protection_state_int & 0x08) >> 3self.isSCP = (protection_state_int & 0x10) >> 4return protection_state_intdef V(self, V_input: float = None):"""读取表显电压或写入目标电压:param V_input: 电压值,单位:伏特:return: 表显电压或目标电压"""if V_input is None:return self.read(0x0010) / self.V_dotelse:self.write(0x0030, int(V_input * self.V_dot + 0.5))return self.read(0x0030) / self.V_dotdef A(self, A_input: float = None):"""读取表显电流或写入限制电流:param A_input: 电流值,单位:安:return: 表显电流或限制电流"""if A_input is None:return self.read(0x0011) / self.A_dotelse:self.write(0x0031, int(A_input * self.A_dot + 0.5))return self.read(0x0031) / self.A_dotdef W(self):"""读取表显功率:return: 表显功率,单位:瓦"""return self.read(0x0012, 2) / self.W_dotdef OVP(self, OVP_input: float = None):"""读取或写入过压保护设定值:param OVP_input:过压保护设定值:return:过压保护设定值"""if OVP_input is None:return self.read(0x0020) / self.V_dotelse:self.write(0x0020, int(OVP_input * self.V_dot + 0.5))return self.read(0x0020) / self.V_dotdef OCP(self, OAP_input: float = None):"""读取或写入过流保护设定值:param OAP_input:过流保护设定值:return:过流保护设定值"""if OAP_input is None:return self.read(0x0021) / self.A_dotelse:self.write(0x0021, int(OAP_input * self.A_dot + 0.5))return self.read(0x0021) / self.A_dotdef OPP(self, OPP_input: float = None):"""读取或写入过功率保护设定值:param OPP_input:过功率保护设定值:return:过功率保护设定值"""if OPP_input is None:return self.read(0x0022, 2) / self.W_dotelse:self.write(0x0022, int(OPP_input * self.W_dot + 0.5), 2)return self.read(0x0022, 2) / self.W_dotdef Addr(self, addr_input: int = None):"""读取或改变从机地址:param addr_input: 要设成的从机地址, 1~250:return: 从机地址"""if addr_input is None:self.addr = self.read(0x9999)return self.addrelse:self.write(0x9999, addr_input)self.addr = addr_inputreturn self.read(0x9999)def set_volt(self, V_input, error_range: int = 0.05, timeout: int = 60):"""设置目标电压,等待转换完成并测量响应时间:param V_input: 目标电压,单位:伏特:param error_range: 容许的误差大小:param timeout: 超时时间:return:"""old_volt = self.V()self.V(V_input)start_time = time.time()while abs(self.V() - V_input) > error_range:if (time.time() - start_time) > timeout:raise ValueError("Set volt timeout")print("从", old_volt, "V跳至", self.V(), "V, 用时", time.time() - start_time, "秒")def operative_mode(self, mode_input: int = None):"""读取或写入工作状态:param mode_input: 工作状态,1: 开启输出; 0: 关闭输出:return: 当前工作状态"""if mode_input is None:return self.read(0x0001)else:if mode_input:self.write(0x0001, 1)else:self.write(0x0001, 0)return self.read(0x0001)if __name__ == '__main__':eTM_3020C = power_supply(connect_serial("CH340", 9600), 1)eTM_3020C.operative_mode(1)eTM_3020C.set_volt(0)eTM_3020C.set_volt(12)eTM_3020C.set_volt(0)eTM_3020C.set_volt(16)eTM_3020C.set_volt(0)eTM_3020C.set_volt(32)print("当前表显电压:", eTM_3020C.V())print("当前表显电流:", eTM_3020C.A())print("当前表显功率:", eTM_3020C.W())eTM_3020C.set_volt(0)eTM_3020C.operative_mode(0)

运行效果

  可见,该电源升压较快,降压较慢:

D:\Anaconda3\envs\eTM-3020C\python.exe D:/Work/Python/eTM-3020C/main.py与 COM3 - USB-SERIAL CH340 (COM3) 建立连接!
从 0.0 V跳至 0.0 V, 用时 0.0859994888305664 秒
从 0.0 V跳至 11.97 V, 用时 1.754119634628296 秒
从 11.97 V跳至 0.05 V, 用时 6.720765113830566 秒
从 0.05 V跳至 15.96 V, 用时 1.924328327178955 秒
从 15.96 V跳至 0.05 V, 用时 7.704945802688599 秒
从 0.05 V跳至 31.96 V, 用时 1.5403895378112793 秒
当前表显电压: 31.96
当前表显电流: 0.0
当前表显功率: 0.031.96 V跳至 0.05 V, 用时 10.615259647369385 秒进程已结束,退出代码0

  对比官方演示上位机的响应曲线:
0 V − > 16 V 0V->16V 0V>16V
在这里插入图片描述
16 V − > 0 V 16V->0V 16V>0V

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


http://chatgpt.dhexx.cn/article/1r8Fswpr.shtml

相关文章

CANBridge 系列本安型智能 CAN 总线隔离中继器

概述 CANbridge 系列本质安全型智能 can 总线隔离中继器具有两路相互隔离的 can 通道&#xff0c;每个 can 接口采用金升阳电源模块和信号隔离芯片实现 2500VDC 电气隔离&#xff0c;电源输入防反设计&#xff0c;支持 DC6.5~36V 输入&#xff1b;具有优秀的 EMC性能&#xff0…

本质安全设备标准(IEC60079-11)的理解(二)

本质安全设备标准&#xff08;IEC60079-11&#xff09;的理解&#xff08;二&#xff09; 十&#xff0c;本安设备的测试 我们知道如何测试本安设备以及一些基本概念后&#xff0c; 现在需要进一步说明&#xff1a; &#xff08;1&#xff09;&#xff0c;本安设备的测试和一…

系统硬件工程师进阶之路--本安电路设计

文章目录 本安电路概念理论背景本安电路定义设计依据 本安电路设计电压与电流电容电感保护电路电源部分信号部分数字信号隔离模拟隔离方法&#xff1a; PCB设计关注布局&#xff1a;电气间隙、爬电距离线宽、线径PCB关注点 本安电路概念 理论背景 理论背景&#xff1a;1886年…

台式计算机电源待机电流有多大,终于知晓电脑机箱电源12v多少安

想知道电脑机箱电源12v多少安? 不同的电脑的ATX开关电源输出的12V是不同的,今天汇学小编就这话题给大家说说相关方法。 电脑 电源查看方法 1,打开机箱,查看开关电源上的铭牌。 2,以某开关电源为例: 从铭牌上就可以看出,提供CPU的12V输出最大可以有14A,其他的12V输出最大…

本安电源的图纸

http://bbs.elecfans.com/jishu_568846_1_1.html 这部分原理比较简单&#xff0c;主要是楼主对本安认证的要求与过程不那么熟悉。我这里概要讲一下&#xff1a;1、电芯输出端保险丝F3、限流电阻R16是短路保护和限制短路电流的器件&#xff0c;是必须要用的。2、R7、Q7、Q3、R9、…

24V-2A矿用本安电源设计

24W DC-DC矿用本质安全型电源设计 随着我国煤矿事业的蓬勃发展&#xff0c;煤矿电气化越来越发展迅猛。煤矿的特殊环境&#xff0c;要求电气设备在有瓦斯、煤尘等爆炸性气体的危险环境中使用&#xff0c;且无论设备出现任何故障&#xff0c;设备产生的任何火花或任何热效应均不…

Python搭建自己的基金查看管理Web项目(一)

前言 自己在支付宝买了一些基金&#xff0c;但是由于支付宝受限于手机屏幕的大小有些数据放不下&#xff0c;要一直切换页面才能看到&#xff0c;这样有些不爽&#xff0c;刚好最近在学习python就自己查资料搞一个web项目来查看基金的每日数据 一. 需求 首先要能添加我想查看…

牛逼了 这 7 个 Python 入门实战项目,我打 99.99 分

Python的运行速度确实没有C或者Java快&#xff0c;但是有一些项目正在努力让Python变得更快。 Python代码简洁干净&#xff0c;但是大家都知道Python运行起来相对较慢 — 在CPU密集型的任务上慢于C、Java和Java&#xff08;但是大多数服务都不是CPU密集型的&#xff09;— 但是…

Python实战项目总结

Python实战项目总结 项目&#xff1a;处理超市营业额。 题目&#xff1a;一&#xff1a;已知文件“超市营业额2.xlsx”&#xff0c;将所有员工的工号前面增加一位数字&#xff0c;增加的数字和原工号最后一位相同&#xff0c;把修改好的数据写入新文件“超市营业额2_修改工号.…

服务器部署 Python 项目总结

title: 服务器部署 Python 项目总结 date: 2023-07-05 16:33:49 tags: 服务器Python categories:服务器 cover: https://cover.png feature: false 1. 准备 Python 项目需要 Python 的环境&#xff0c;假如服务器操作系统为 CentOS 7 的话&#xff0c;默认安装了 Python2 与 …

python基础——经营第一个项目,如何将python学得更6 ?

python基础——经营第一个项目&#xff0c;如何将python学得更6 &#xff1f; hello&#xff01;我是wakeyo_J&#xff0c;每天一个konwledge point&#xff0c;一起学python&#xff0c;让技术无限发散。 经营第一个项目&#xff0c;如何将python学得更6 &#xff1f; python基…

5分钟就能完成的5个Python小项目,赶紧拿去玩玩吧

最近在做python项目开发的时候发现了好多好玩的小项目&#xff0c;并且都是代码量较少容易上手&#xff0c;对新手十分友好。所以今天就来和小伙伴分享一些Python从一行代码到三十行代码的好玩项目&#xff0c;之后博主也会在这里持续更新更多好玩的项目&#xff0c;记得关注哦…

70个Python练手项目列表,看了让你茅塞顿开~

前言&#xff1a; 不管学习哪门语言都希望能做出实际的东西来&#xff0c;这个实际的东西当然就是项目啦&#xff0c;不用多说大家都知道学编程语言一定要做项目才行。 这里整理了70个Python实战项目列表&#xff0c;都有完整且详细的教程&#xff0c;你可以从中选择自己想做的…

Python 小型项目大全 36~40

三十六、沙漏 原文&#xff1a;http://inventwithpython.com/bigbookpython/project36.html 这个可视化程序有一个粗糙的物理引擎&#xff0c;模拟沙子通过沙漏的小孔落下。沙子堆积在沙漏的下半部分&#xff1b;然后把沙漏翻过来&#xff0c;重复这个过程。 运行示例 图 36-…

7 年 Python 的我,总结了这 90 条写 Python 程序的建议

本文于网络整理&#xff0c;版权归原作者所有 自己写 Python 也有四五年了&#xff0c;一直是用自己的“强迫症”在维持自己代码的质量。都有去看Google的Python代码规范&#xff0c;对这几年的工作经验&#xff0c;做个简单的笔记&#xff0c;如果你也在学pythpn&#xff0c;准…

pot lib:optimal transport python库

文章目录 transport1. [计算最优传输&#xff08;Computational Optimal Transport&#xff09;](https://zhuanlan.zhihu.com/p/94978686)2. 离散测度 (Discrete measures), 蒙日(Monge)问题, Kantorovich Relaxation (松弛的蒙日问题)3. scipy.stats.wasserstein_distance 距…

Python 小型项目大全 46~50

# 四十六、百万骰子投掷统计模拟器 原文&#xff1a;http://inventwithpython.com/bigbookpython/project46.html 当你掷出两个六面骰子时&#xff0c;有 17%的机会掷出 7。这比掷出 2 的几率好得多&#xff1a;只有 3%。这是因为只有一种掷骰子的组合给你 2&#xff08;当两个…

在 Python 中完成的一些大型项目有哪些?

在本文中&#xff0c;我们将了解一些在 Python 中完成的大型项目。 Python是目前最流行的编程语言之一。这一趋势似乎将在 2022 年及以后继续下去。所以&#xff0c;如果你刚刚开始使用Python&#xff0c;你能做的最好的事情就是研究一些现实世界的Python项目想法。 Python 是…

PBL Python 学习——第0天

一个月PBL Python学习 第一章 Python环境的基本搭建 文章目录 一个月PBL Python学习前言一、Python下载二、Pycharm下载和配置1.Pycharm下载macOS查看方法第一步第二步第三步 Windows 2.Pycharm配置macOSWindows 总结 前言 本人是一位中学生&#xff0c;python新手&#xff0…

Python 小型项目大全 61~65

六十一、ROT13 密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一&#xff0c;代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25&#xff0c;加密后的字母距离明文字母 13 个空格&#xff1a; A变成N&…