项目进度:

完成基本参数和运行模式页面的代码,可获取基本参数字典,还没有获取运行模式字典模块。


目录

项目进度:

问题1

问题描述

原因分析

解决方案

问题2

问题描述

原因分析

解决方案

问题3

问题描述

原因分析

解决方案

问题4

问题描述

原因分析

解决方案

问题5

问题描述

原因分析

解决方案

问题6

问题描述

原因分析

解决方案

问题7

问题描述

原因分析

解决方案

问题8

问题描述

原因分析

解决方案


问题1

问题描述

十进制数-10000,转十六进制是0xFFFFD8F0,再转十进制时,数据变成4294957296,再转十六进制没问题,还是0xFFFFD8F0。

原因分析

十进制与十六进制转换函数中,未明确负数转换机制。

python 是将输入的数分割成符号和数值两部分,那就是如电脑计算器算出来的一样:

不会判断符号位,就导致直接转换十六进制数的现象。

解决方案

使用 binascii 和 struct 包进行转换, 参考:http://t.csdn.cn/zvRHN

主要参考的是这块指导,但链接原文说的不太对:

2.十六进制还原为负数

先提取为十六进制的字符串,并逆置

neghex_s = hex(neghex)[2:-1] = 'ffff0520'

neghex_s=neghex_s[::-1] = '0250ffff'

使用binascii.unhexlify进行去十六进制化

neghex_pack=binascii.unhexlify(neghex_s)='\x02P\xff\xff'

再利用struct.unpack进行解析

neg=struct.unpack('i', neghex_pack)=(-45054,)

那么neg[0]就是neghex还原的负数

应该是把字符串 'ffff0520' 改为 '2005ffff',再按程序进行去十六进制化和解析,得到的才是我想要的负数。

更正后代码如下:

def value_translate(value, num):if value[0:2] == '0x':  # value是十六进制if num == 'dec':  # 十进制显示value = value[2:]if len(value) < 5:    # 如果数据是0x1,则在前面补0,成为0x00000001while len(value) < 8:value = '0' + valueelse:passvalue = value[6:8] + value[4:6] + value[2:4] + value[0:2]value_pack = binascii.unhexlify(value)trans_value = struct.unpack('i', value_pack)value = trans_value[0]print('当前为十六进制,换算后重新显示', value)......

问题2

问题描述

源地址表中有区分子地址的参数,查找通讯字典对应的地址不正确。举例:

参数:目标位置1,CAN地址:0x3547,子地址:0x01

参数:目标位置2,CAN地址:0x3547,子地址:0x02

查询Modbus通讯地址应为:目标位置1:0x69,目标位置2:0x6B

实际为:目标位置1:0xF0D6,目标位置2:0xF0D8

原因分析

查询通讯字典表时未加入对子地址的数据筛选。

实际是筛选子地址前,会先定位地址,然后应该是以定位地址得到的数据中再次筛选子地址,而当前是以原地址表所有数据筛选子地址了。

解决方案

# 查询Index对应的其他信息
def search(self, index, subindex):search_dic = {}i = self.mdic.loc[self.mdic['Od_Index'].isin([index])]print('ModbusDict')print(i)# 判断找地址表,找到则返回字典,没找到则返回0if i.size > 0:if len(i) > 1:  # 有子地址区分print('len(i) > 1')# 错误语句:i = self.mdic.loc[self.mdic['Od_Subindex_hex'].isin([subindex])]# 更正:i = i.loc[self.mdic['Od_Subindex_hex'].isin([subindex])]print(i)else:pass

问题3

问题描述

Modbus通讯地址不需转换长度,CANOpen地址和子地址不需转换十进制。

原因分析

进制转换中没对通讯做区分。

解决方案

修改后代码:

if self.B_type.currentIndex() == 0:     # Modbus通讯,地址由十进制变十六进制trans_index = modbus_index(index, num)print('地址显示:', trans_index)self.para_index.setItem(1, column - 3, QtWidgets.QTableWidgetItem(trans_index))
else:       # Modbus通讯地址不需转换长度,CANOpen地址和子地址不需转换十进制pass

问题4

问题描述

多段参数表中的运行模式下拉框没有显示对应行列的索引地址。

原因分析

该部分还未完成。

解决方案

2022-6-23 已完成


问题5

问题描述

多段参数表中如有空白的参数,点击时程序退出,无法显示对应的地址。

原因分析

我获取当前点击的单元格用的是QTableWidget.currentItem(),而QTableWidget只有输入数值,才会产生item,因此空白单元格的currentItem()返回是None,而我显示是直接用的currentItem().text(),就会报错None没有text属性。

解决方案

更改为QTableWidget.currentIndex(),无论是否有输入数值,都可以用currentIndex().data()获取空白的内容或输入的数值。


问题6

问题描述

连续点击多段参数表中的参数,显示的地址表中最后一列的标题不对。

原因分析

从列0往列1,列2...删除,要注意每删除一次,原列表的非0索引值会自动递减 1,因此每次都少一删除一列。

# 复原地址表
if self.para_index.columnCount() > 3:for j in range(0, self.para_index.columnCount() - 2):   # 只保留3列self.para_index.removeColumn(j)
else:pass

解决方案

更改为从后面往前面删除:

# 复原地址表
if self.para_index.columnCount() > 3:for j in range(self.para_index.columnCount() - 4, -1, -1):   # 只保留3列self.para_index.removeColumn(j)
else:pass

问题7

问题描述

多段参数表的运行参数1和2的当前取值,需要转换速度单位。

原因分析

该部分还未完成。

解决方案

2022-6-23已完成


问题8

问题描述

由多段参数表查询地址后,切换回其他模式,地址表的列数显示不对。

原因分析

和问题6相同

解决方案

参考问题6


全部解决时间:2022-6-23

项目初期BUG记录-20220622相关推荐

  1. 项目启动bug记录:出现报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd

    Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could ...

  2. Vue项目初期报错问题记录大全

    这里写自定义目录标题 Vue项目初期报错问题记录大全 1.vs终端无报错,浏览器加载空白,发现Cannot read properties of null (reading 'nextSibling' ...

  3. Android Studio 项目设计开发bug记录以及未来新技术

    文章目录 项目设计开发bug记录: (1)打包时出错 (2)关闭项目自启动 (3)显示工具栏 (4)怎么导入jar包 (5)导入工程出现异常 (6)run项目出现异常: (7)修改包名 (8)导入项目 ...

  4. 【BUG记录】记一次游戏越来越卡的BUG

    [BUG记录]记一次游戏越来越卡的BUG U3D的MOBA项目,测试过程中,10分钟以后,游戏帧率开始缓慢下降,约3-5分钟后,由60帧下降到小于10帧,编辑器模式. 打开profiler,看到CPU ...

  5. 分析了 3000 份 Bug 记录,可以发现什么?

    为了进一步了解软件开发团队处理bug的流程,我们随机抽取了过去的两个月中上传到我们数据库中的3000个bug记录...... 作者 | Dan Makarov 译者 | 弯月,责编 | 郭芮 出品 | ...

  6. 【BUG记录】解决Failure to find (pom/jar) in http://xxx.com was cached in the local repository

    [BUG记录]解决Failure to find (pom/jar) in http://xxx.com was cached in the local repository ☠注意:此解决方法仅针对 ...

  7. DayDayUp:昨天用微信发朋友圈—发现微信出现一点点Bug记录

    DayDayUp:昨天用微信发朋友圈-发现微信出现一点点Bug记录-屏蔽了该屏蔽的人,但没被屏蔽的人也看不到 目录 遇到微信小bug的前因后果 关于微信 遇到微信小bug的前因后果 博主于昨天23:5 ...

  8. AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19

    AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19 基于计算机视觉和语音识别案例项目打包过程 521 INFO: PyInstaller: 3.3.1 521 INFO: Pyt ...

  9. SpringBoot使用Slf4j+Log4j2完成项目的日志记录

    SpringBoot使用Slf4j+Log4j完成项目的日志记录 前言 本示例采用SpringBoot项目使用SpringAOP记录日志,Slf4j作为日志门面,Log4j2作为日志实现实,实现开发中 ...

最新文章

  1. 解决k8s中node拉取镜像失败问题
  2. UOJ #35. 后缀排序 后缀数组 模板
  3. Java基础:动态代理
  4. java服务自动降级方案_在京东我们是如何做服务降级的
  5. 为什么要用nodejs做中间层
  6. 逻辑电平0和1的世界
  7. php操作字符串(移除字符,计算字符串中字符个数,分割字符串,字符串序列化...
  8. 图像识别---opencv安装
  9. Powerpoint中VBA编程技巧
  10. 2023计算机毕业设计SSM最新选题之javaOA办公系统y7x0p
  11. 联想交换机服务器型号,Dell Networking X系列交换机
  12. JAVA IO流读取中文出现乱码
  13. 软件测试好书推荐《自动化测试实践》30个项目测试案例分析
  14. Kotlin入门-数据类与密封类 的解脱,由繁至简
  15. java 停止定时器_Java/Android计时器(开始,暂停,恢复,停止)
  16. 20220422web前端面试记录
  17. 富不过三代已成过去,解答为什么越有钱的越有钱?
  18. 单频信号的相位谱计算与误差修正-附Matlab代码
  19. 参考文献格式要首行缩进吗_参考文献顶格写吗
  20. 浅描工作环境电脑维护以及性能测试流程

热门文章

  1. 【Python】Python 函数用法:str()、int()、float() 函数
  2. 签了工作之后才发现,自己太草率了.....我看过的关于职业规划最好最全面的一篇文章...
  3. 区块链是什么意思?区块链的概念及特点
  4. 补充下3月面试题(好未来、腾讯音乐、小药药)
  5. Android 音频焦点处理
  6. 转载自鸿燕藏锋-ETL讲解(很详细!!!)
  7. 54. Java序列化三连问,是什么?为什么需要?如何实现?
  8. 公安部:办案中总结出来的60种电信诈骗形式
  9. 记一次xxl-job执行器Online机器地址(注册节点)加倍问题
  10. ArcGIS Online试用版注册 并发布要素服务