因为我发文的时候还在用chatgpt写code,所以让它做的都是杂活。
后面我开始用它调试代码,这个时候面对的就都是开放性问题了。
我把debug过程的对话附上,这次格式化成pdf版本,看起来会清晰一点。
我先说下背景,这次的开发工作基础部分都是找别人做的,他选了at32实现can底层通讯,然后我在它的基础上移植了canopenstm到at32上,并基于canopen去做上层应用。我对于can和canopen都是零认知,大概就是看了些科普扫盲级的资料了解了下,对于内部细节是一概不知,当然也没有去仔细看手册规范。
然后,如果忽略所有的报警和错误问题,正常的sdo流程是能走完的,所以我一直的判断是整个流程正常,只有一点“小”问题。最后发现的真正的问题有2个,一是can的通讯波特率设置不正常,具体是其中的采样点稍微大了一点(但也符合手册推荐的规范),导致can在自动重发的模式下能双向通讯,但可能部分数据包还是出现了错误,通讯之后总线上有大量的错误包。另一个是canopen在移植过程中,我参考了一个现成的配置,但需要删除其中的PDO配置项,但我没有删除干净导致PDO初始化不正常,进而导致canopen要发emergency包,叠加can底层的通讯问题,基本上can和canopen层面就到处都是各种奇奇怪怪的问题了。
然后,can的通讯波特率设置,人家是找的雅特力官方提供的配置工具给出的参数。人家在他自己的环境中也都通过了测试,我也独立的把他的流程走了一遍确认过,所以我一直是不认为can底层通讯参数上是有问题的。而且我没有逻辑分析仪和can协议分析器,所以一直没办法进行最底层的确认(其实都有,但我找不到了...再买了一套至今还在路上...)
以上是这个问题的背景,你可以看看期间我跟chatgpt的对话,感受下chatgpt分析问题的能力。其中pdo的参数配置,有一个小坑,就是canopennode的实现并没有做表达式解析,而是按照约定俗成的默认规则直接实现了代码。这点是在chatgpt的辅助下定位到的。此外canopen的pdo设置还有一些奇奇怪怪的细节规则,这些我估计不细看手册是打死也想不到的。但chatgpt都给我直接指出了问题。另一个can通讯设置的问题,也是在chatgpt的辅助下定位到的。当然在对话中可能无法直接看出来,因为我并没有指望问它xxx是什么问题,然后它直接给到我答案。更多的是让它帮我解释各种信息,让它提出分析建议,然后我在这个过程中边学习边分析。算是一起合作定位到了问题。
以上整个过程,我全程没有问人类专家,也几乎没有google去找别人的经验/类似案例(基本上,google就只用来找手册资料),作为一个对can和canopen细节完全不了解的人开始,通过chatgpt的对话分析出来的。从这个角度来说,我觉得它这个专家还是很称职的。当然,他里面还是犯了些错误的。比如他认为at32是新唐的,还有他的波特率计算公式也有点小问题,比如按照at32的手册其实bts1_size = bts1+1, bts2_size = bts2+1,而它没有指出来,所以自己不看手册没注意这个小细节的话参数会填错。不过我认为这些都是无伤大雅的问题。基本上它对于背景知识记忆的还是比较抽象的,不会去记非常琐碎的细节。所以如果关注细节,你得在最近的上下文中把细节告诉它。
下面就是最后一个问题,为什么雅特力给的官方can波特率配置器这么离谱。我测试了几个配置都不太正常,我找别人做的实现,他也是从这些参数里面选出了唯一一个能接近正常工作的配置。而且我自己按手册,自己手算出来的参数更是完全无法通讯。不过这些问题等逻分到位再研究了...
【 在 philbloo 的大作中提到: 】
: 看你给的例子确实是有点吃惊
: 不过你给的所有例子都不是开放性问题 我不太相信机器能给开放性问题给出有创新的答案
: 我想了一下最近在做的问题 感觉机器没法给出有建设性的意见 当然我没买chatgpt所以没法试
: ...................
--
修改:lvsoft FROM 180.111.27.*
FROM 180.111.27.*
附件(337.5KB) chatgpt_case4.pdf