我用以太网接收COGNEX 条码阅读器读取的条码,用FC6 AG_RECV系统块作为接收指令:
AN M 170.3
JNB _001
CALL "AG_RECV"
ID :=2
LADDR :=W#16#150
RECV :=P#DB216.DBX2.0 BYTE 12
NDR :=M170.0
ERROR :=M170.1
STATUS:=#REC_STA
LEN :=#REC_LEN
_001: NOP 0
我这里设置的读取的条码长度为12BYTE,如果一直读取的条码是12个字符的就没什么问题,可是当我读取一个大于或小于12个字符的条码后,再读12个字符的条码,条码的排序会乱掉,比如:正常的条码是1234567890AB,当我接收一次不是12个字符的数据后,再读12个字符的条码有可能排序是34567890AB12,而且这个错误的排序的排法和接收的非12个字符的字符长度有关系,不如如果是15个字符的,又可能变成67890AB12345了。即使每次条码收到后我会对存储条码的DB块DB216进行清除数据也不行。对此问题很是困惑。不知道大家用以太网读取条码阅读器的数据是用什么指令?
注:我用的以太网模块是CP343-1 6GK7 343-1EX30-0XE0;CPU:313C-2DP或315—2PN/DP;条码阅读器为康耐视DATE MAN 200或IS5110.
求高手指教。谢谢!可以联系QQ交流。QQ:6347234
问题补充:
谢谢1楼的回答,资料上是说先发一个数据长度数据过来,根据这个数据设定接收长度,但是现在的问题是,条码枪给我发的数据不会提前告诉我这个数据有多长的。。。。
FC5、FC6是不是只能用于CP343之内的独立的通讯模块,而FB63-FB66只适用于象315-2PN/DP类的集成在CPU上接口的通讯?
最佳答案
1.如果你不选择以太网CP,而是选择带PN口的CPU,如315-2PN/DP,那么就没有这种问题,315-2PN/DP可以采用OPEN IE的方式,通过调用FB63-FB66来建立连接和发送接受数据,接收功能块只要设置一个参数就可以实现每次从接受缓冲区的首字节来接收数据,不会发生乱序的问题。具体你可以搜索相关OPEN IE的资料。
2.如果采用CP343,需要调用FC5、FC6来收发数据,关于你的问题,西门子专门编写了一个文档,你参考下:
《CPx43-1之间变长TCP数据包接收》
连接:http://www.ad.siemens.com.cn/download/docMessage.aspx?ID=6079&loginID=&srno=&sendtime=
综合比较来说,我倾向于使用PN口的CPU,在我的项目中一直用的很好。
补充:你的理解正确。你可以看看条码枪给你发的数据包里是否有代表数据帧长度的内容。
提问者对于答案的评价:
谢谢你的帮助。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc242501.html