这段时间做了个小项目,有关数据采集的,用的平台是labview,功能是上位机要通过串口与四把扫码枪通信,收到条码后给PLC启动指令,PLC测试完成后给上位机指令,上位机开始存数据和显示。
在做的过程中遇到了一些问题,前面博客有写点击打开链接
做这个项目经历了人生第一次出差,到厂方后,发现前期沟通的功能需求跟实际的需求至少有百分之80不一致,也就意味着前期做的软件需要全部推翻重来……大概熬了一整天完成了新版功能需求的软件雏形。
做完第二天到厂房做现场测试,发现上位机无法收到数据,或者偶尔收到条形码的信息,经过各种调试,用串口调试助手试验,大概得出两个可能的原因:
1.程序中采用串口收发数据,在一次写、一次读之后没有清除缓冲区,就可能发生上面的情况;
2.程序中设计的是用hostlink协议一次读取PLC80个寄存器的内容,总共有三百多个字节,通过串口调试助手试验,读取格式为:@00RD0290004059*回车 ,发现每次只能收到一百三个左右的字节,考虑是不是hostlink协议对PLC读写有什么限制。
发现问题后回去加班做了两部分的修改:
1.在每次写之后和读之前加上了清除缓冲区模块;
2.把一次读取80个寄存器的命令改为读取四次,每次读取20个寄存器。
修改完成后,在室内进行模拟试验,已经能正确读写数据,并能显示存储。
随后信心满满再次去厂房进行现场调试。又有新的问题:
1.单个扫码枪一次工作,PLC依次启动时,软件一切正常;
2.两个扫码枪一起工作时,程序会报错,PLC读取超时。
分析原因:
程序中写了四次读取PLC寄存器,代表四把扫码枪对应工位的产品谁在检测,两个同时启动时,可能读写存在冲突,一个在读时,另一个工位又启动了,就无法写入了,所以产生错误。
发现问题后,由于时间有限,只能回学校修改,解决的方法就是加了若干个标志位,也就是布尔变量,在一个工位进行读写操作时,屏蔽其他工位的读写,随时保证程序中只有一次读写。
修改完成后,在实验室模拟了现场的测试流程,目前没有发现BUG,现已交给厂房测试,等反馈。
总结:
1、做产品的跟在实验室做研究真的是完全不一样;
2、做软件的需求分析太重要太重要太重要了!彻底搞清客户的需求,能少做很多无用功。这次也是因为在学校的局限性,一直电话沟通,厂房那边的对接人员不是很懂,这几方面原因造成了这次功能需求了解不清楚。
3、都说程序员百分之20在写代码,百分之80在改代码,这次体会到了。在调试过程中,通过发现问题,解决问题,才能提高。
后续待补充:
关于Hostlink命令分为C-mode以及Fins,它们的命令格式和字节限制需要一整篇博文来专门总结,后面再写。
上图:(最终软件界面)