labview通过hostlink读写Omron CJ系列PLC,同时与多把扫码枪进行通信(心得)
2017-12-05 10:55
113 查看
这段时间做了个小项目,有关数据采集的,用的平台是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,它们的命令格式和字节限制需要一整篇博文来专门总结,后面再写。
上图:(最终软件界面)
在做的过程中遇到了一些问题,前面博客有写点击打开链接
做这个项目经历了人生第一次出差,到厂方后,发现前期沟通的功能需求跟实际的需求至少有百分之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,它们的命令格式和字节限制需要一整篇博文来专门总结,后面再写。
上图:(最终软件界面)
相关文章推荐
- PC和三菱FX系列PLC直接通过现成库和编程口进行 串口通讯
- C# / VB / LabView /VC 上位机使用OPC方式与PLC进行通信的教程
- SuperSocket 1.4系列文档(9) 通过AppServer获得需要的session并进行通信
- Qt学习系列之四:多线程及通过事件进行通信
- Android入门:通过JSON数据与服务器进行通信
- 通过管道进行线程间通信:字节流。字符流的用法及API类似
- Spring代码实例系列-02:松耦合loose coupling(通过xml文件以默认的方式进行setter注入)
- Android入门:通过JSON数据与服务器进行通信
- Java I/O通过输入输出流进行文件读写(二)用户界面
- 终端与终端之间通信通过Socket(机制)进行通信
- 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
- Java通过Internet进行通信
- Lucene4.2源码解析之fdt和fdx文件的读写(续)——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压
- C#使用命名管道通过网络在进程之间进行通信
- Android通过HttpURLConnection类进行网络通信,获取网络图片
- HTTP深入浅出 http请求HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HT
- 自由口通信模式下计算机读写PLC存储区的程序设计
- zynq系列通过XMD进行JTAG调试出错解决方案
- 通过命令管道,在进程之间进行通信的简单例子
- 【物联网云端对接-3】通过MQTT协议与微软Azure IoT Hub进行云端通信