都是什么人啊?看看这协议.....16进制和字符都分不清

2019-12-08 14:37发布

本帖最后由 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进制和字符都分不清,可能是我理解错了吧,用的全是字符,中间带空格,统一不加引号
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
82条回答
lihui_mc
1楼-- · 2019-12-17 07:43
vvi 发表于 2017-9-20 12:55
你说的那个总工也是个菜鸟吧?标准协议也改。

总工是做上位机C#的,水平肯定是可以(公司上千万的订单,软件系统是他带头的),但在硬件方面确实是个菜鸟。好多次他都想自己写单片机端软件。在他看来,写单片机程序与写软件的思路是一样的。
有次开会,他提到让他写单片机端,让我做做上位机 。我当时也只能呵呵了。

后来回头一想,他的想法真是太天真了:软件的编程思路是一样,但写单片机程序与上位机程序还真是差太多了,PC程序员写单片机,也就能写写算法部分了。涉及硬件的就不要参合了,例如:
1,PC端软件的调试环境已经很完善,因程序问题带来的奔溃,vs都可以定位问题大概位置。而单片机,没有MMU,指针误操作导致系统奔溃,然后就是进HardFault,试想一个PC软件人员,有这方面的调试经验吗。
2,单片机更多的是硬件寄存器访问,和楼上的各位说的是一样的,位操作那是相当频繁。PC程序员比较少涉及的。
3,和硬件打交道,假如ADC寄存器数值频繁跳动,PC程序员只能求助硬件人员了吧。
4,记得有一次,在工业现场,使用LPC1788,进行FLASH编程操作时,因单片机温度升高到55度以上时(其实没到芯片数据手册的极限,是厂家未测试完善),一定概率写Flash过程中进异常,然后就是设备校准参数等设置丢失。当时困扰了我好多天,在客户现场各种被虐,承受了极大的压力,后来抓到一个规律,往往运行到一定时间,设备出问题,出问题的设备就一直出问题,除非停下设备降温,又可以运行半个多小时不出问题。我相信一个普通的PC程序员,或许写出FLASH编程程序都有难度,更不要说排除这个BUG。排除一个BUG,特别涉及到单片机底层操作与硬件有交集的部分,PC程序员很难做到。

说到底,术业有专攻,PC程序员主要在硬件寄存器及模拟电路这些方面是欠缺的。
lihui_mc
2楼-- · 2019-12-17 08:16
擦鞋匠 发表于 2017-9-20 14:20
如果我记得没错的话,这里还有一处跟标准的modbus不一样。
CRC16是低8位在前,高8位在后 ...

你是对的,可能是我失误了,标准MODBUS确实是寄存器地址,寄存器数以大端发送,CRC以小端发送,为什么不保持一致呢。。。
openmcu666
3楼-- · 2019-12-17 11:21
PC程序员内存管够,不用手指数着内存大小来用,
CoolBird007
4楼-- · 2019-12-17 12:29
说实话我看真的不是别人的错,是你文档写得不详细。
CX表是什么,应该详细说明,几个字节,取值范围。
如果倒过来你看到别人写给你这样的文档,你也会MMP..
qwf
5楼-- · 2019-12-17 13:00
 精彩回答 2  元偷偷看……
dellric
6楼-- · 2019-12-17 17:06
告诉老板,MODBUS是业界通用协议,不按照这个协议做,产品卖不出去。

一周热门 更多>