本帖最后由 chinaboy25 于 2017-9-17 23:34 编辑
我写下位机,定了MODBUS协议,结果写上位机说CRC写不出了,(现在想起上次和一个JAVA的调试最后出的问题是JAVA 里没有无符号变量 只有有符号的,用C代码拷贝到JAVA里面运行CRC得出校验码两边对不上,后来把整形16位的用32位&0xFFFF替代,估计是这个原因整的,)我把代码协议什么都给对方了,对方说太复杂了不想写,要用自己的协议,不然不做了,老板妥协了;
然后传来了一个协议,
QQ截图20170917220816.png (68.62 KB, 下载次数: 0)
下载附件
2017-9-17 22:09 上传
QQ截图20170917220816.png (66.94 KB, 下载次数: 0)
下载附件
2017-9-17 22:22 上传
QQ截图20170917220840.png (59.66 KB, 下载次数: 0)
下载附件
2017-9-17 22:09 上传
QQ截图20170917220840.png (57.85 KB, 下载次数: 0)
下载附件
2017-9-17 22:22 上传
妈的,就这水平,这么牛B哄哄.................
16进制和字符都分不清,可能是我理解错了吧,用的全是字符,中间带空格,统一不加引号
后来咋样了?
用JSON还不如传统仪器设备行业内的SCPI简单明了。
另外这个也要看应用吧,JSON数据量通常情况下比用16进制的协议要大很多。
类似经历啊,在上一家企业工作时,与另一个同事用Modbus通信,我发了标准Modbus协议给他,然后他修改了协议,按照新协议写了程序没和我说,等到联调前才说改了一个地方:
1.jpg (60.27 KB, 下载次数: 0)
下载附件
2017-9-19 17:08 上传
他在协议里面加了一个数据有效标志,意思是485读FIFO寄存器没数据时,标志要发0。 FIFO寄存器有数据时,标志要发1,读常规寄存器时,也要发1。这显然可以在FIFO结果寄存器某一位设立标志来达到同样的目的。
他就非要在标准协议里面添加一个字节来干这事,而且影响到的是所有寄存器了,还影响到将来可能与这条485总线接口的其它程序员,我又比较轴,觉得不合理的事情就不想干。
后来这事就闹得不愉快了,总工(一个写上位机C#的)让我按照他的想法做,谁叫他两关系好,自认倒霉,调试时每次用Modsim32调试读寄存器也总要错开一个寄存器才能匹配内容。
我想骂爹的是:标准就是标准,大家按照标准来做,才能接口,或者只能说,这人脑子不会转吧。
一周热门 更多>