二氧化碳物联监测系统调试问题汇总

服务器端

气象站ModBus TCP协议

  • 时间:20211216
  • 描述:气象站按照ModBus TCP协议向指定服务器ip+端口传输数据,需要在服务器上部署相关代码实现数据解析并存入数据库
    • 首先考虑通过django直接解析,发现django资源基本难以持续监听,只能单次执行,持续监听成本高昂;
    • 接着考虑配置Nginx监听端口,结果发现转发后仅仅只是换了个端口,数据还是TCP协议的数据,并且仍然没有办法进行解析;
    • 后来查阅大量资料的之后突然领悟到既然服务器能处理HTTP请求,那用一个脚本直接拿到TCP数据后包装成HTTP请求,再发给服务器处理不就好了;
    • 最后就采用了最笨的方法,考虑后台跑一个python脚本,持续监听指定端口,拿到TCP的数据之后包装成HTTP请求,再次转发给服务器,django部署一个URL和相应的视图处理HTTP请求中的数据,并利用django的API写入数据库中,基本满足需求;
    • 随后测试过程中发现,一旦一个气象站连接网络后,通过TCP工具无法再向该端口发送数据,开始以为是TCP协议没有接受到1024个字节的数据,所以一直在等待,但通过TCP工具发送10个字节的数据发现socket能正常关闭。最后发现是气象站发送完数据后断开了立即重连,所以一直占用端口,形成阻塞,因此需要配置了socket的超时时间,一查代码发现确实默认不检测超时,因此把超时时间改为5s,问题解决。

数据库更改后Django执行迁移失败问题

  • 时间:20220115
  • 描述:在修改了Django中的模型后,需要执行迁移以修改数据库,但迁移过程报错,提示(1050, “Table ‘tb_content‘ already exists“)
    • 首先需要了解Django生成迁移文件的逻辑,Django在迁移过程中会将当前APP已存的所有迁移文件组成为一个完整的模型,与model.py中撰写的模型进行对比,若发现不同,则将相应的修改生成为迁移文件。因此若迁移文件中存在重复定义,则无法生成迁移文件,会产生报错。
    • 其次是需要了解Django在执行迁移时的逻辑,Django执行过的迁移文件相关信息会保存在django_migrations表单中,在执行迁移前,首先会查django_migrations表单,校验migrations目录下的迁移文件是否已经执行过,若未执行则会全部执行一遍,此操作是针对数据库而言的,因此若被执行的迁移文件内容与数据库已有内容冲突,则会报错,这也正是此问题的根本原因。
    • 解决方案也很直观:
    • 1、将model.py手动恢复为与当前数据库相同的状态,一般将新添加的条目删除即可;
    • 2、将迁移文件手动恢复为与当前数据库相同的状态,一般将新生成的迁移文件删除即可;
    • 3、运行生成迁移文件的命令,观察是否会有更改,无更改说明model.py与迁移文件匹配,有更改则重新校对1和2
    • 4、执行python3 manage.py migrate carbon --fake,将现存的所有迁移文件标记为已执行过;
    • 5、修改model.py按照所需目标修改,重新生成迁移文件并执行,此时不会报错,更改被成功应用于数据库中。

单片机端

Flash读写和NB发送数据冲突

  • 时间:20211112(随意写的,记不清了)
  • 描述:单片机端需要将NB发送的数据帧保存在本地FLASH中作为备份,防止无网络时丢数
    • 首先单独测试了FLASH存储的功能和NB发送数据的功能,发现单独运行时均运行正常;
    • 随后联合调试,发现NB发送数据之后flash有时能存储成功,有时不能,百思不得其解;
    • 最后发现是在NB发送数据拼接字符串时,数组初始化时没有赋值为0,导致得到的字符串最后的末尾时而是0时而不是0,完全依内存当时的情况而定,最后对数据初始化时进行赋值,并在拼接完成后在末尾补0,问题解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值