充电桩-单片机交互逻辑 数据交互问题

CyberSicko
hava a nice day.

简述

单片机(控制器)控制电表,其中电表分三相电表和单项电表,三相电表用于记录当前三相电表下的所有单项电表的电量,1个充电桩对应一个电表。

下单业务逻辑/单片机交互

状态描述:

Pid:项目id(1-65535); Ch:485通道(1-4); No:表序号0-127
Order:下单状态 0未下单,1已下单,2充电完成,9优先充电订单
Sw:合闸状态 0拉闸,1合闸,2限电拉闸,3紧急拉闸,4通信失联
Amp:当前电流(0-65535)*0.01
Qe:当前电量(0-42亿)*0.01

其中数据库有order_state 和 order_bk ,通过这两个值来完成下单流程。

order_stateorder_bksw描述
000初始状态
100开始下单
111单片机收到下单状态,合闸进入充电状态
211用户主动停止充电
220单片机收到2拉闸,处理结算
020结束,重置
000初始状态
单片机主动停止↓
111充电状态
120单片机限电等情况,拉闸
220处理订单结算
000结算完成,重置

命令下发,Byte 字节和 Char 处理

在下发数据到单片机的时候,单片机无法处理我回复的数据,通过抓包分析原始数据查看差异:

5b 07 00 01 01 01 01 01 07 d0 01 90 03 e8 03 08 01 03 5d  PHP 
  
5b 07 00 03 01 01 01 01 07 c3 90 01 c2 90 03 c3 a8 03 08 01 03 5d  .NET

PHP是单片机的回复示例,.NET是业务程序。

前面几位数一致,到208这个数字就不对了,PHP 使用 chr 函数得到的是一个未识别的符号,.net转换得到ascii码 Ð。

1019,132

这就很蛋疼了,于是将原先的交互返回格式重写了,全部用 byte。

在API返回时,不能返回string,直接返回文件流。

     var result = DoAsync(data).Result;

     return File(result, "application/octet-stream");




评论

还没有评论

发表评论