对于那些发现无法通过COM端口与Wasp的WDT-2200条形码扫描仪进行通信的人,除非使用其提供的DTComm软件,否则我将介绍通过使用连接到COM端口的协议分析器发现的内容,以及如何设法将包含其他人使用扫描仪记录的交易的文件上传(从扫描仪到计算机)到“问题部件”。
很快,请允许我注意他们的AppGen软件已被证明足以设计我加载到扫描仪上的应用程序,以便可以用来记录这些交易。 此应用程序记录“颁发给”,“零件号”,“位置”,“数量”和“日期/时间戳”,每个字段用TAB(而不是逗号)分隔,因为AppGen不保存包含以下内容的CSV文件:根据标准的逗号,并且遇到逗号时,此类SINGLE字段将被解释为MULTIPLE字段)。 因此,我强烈建议您将分隔符设置为TAB,也就是说,除非您可能在其中一个字段中使用TAB字符。
现在到Wasp WDT-2200协议...
如果关闭,则发送一个空字节以打开WDT-2200,如果打开WDT-2200,则不需要该字节。 但是,在本机打开时发送空字节不会造成任何问题,因此,如果有可能关闭它,我建议您这样做。 (WDT-2200将在一段时间后自动关闭以节省电池寿命。)WDT-2200的开启需要4到4.5秒,因此我在空字节和零字节之间使用了5秒定时器。后续命令,建议您执行相同的操作。 如果要添加额外的代码以查看WDT-2200在使用5秒延迟之前是否会响应该命令,那么我可以说这就是DTComm软件所做的,但是为了简化代码,我只是将延迟编码为扫描仪是否打开。
=============================================
请求扫描仪识别的命令序列...0x00,{5秒延迟},0x02、0x1B,0x76、0x45、0x44、0xC1
那是...
NULL,{delay},STX,ESC,v,CRC16a,CRC16b,原始ETX注意1:我尚未确定他们如何计算我所确定的某种CRC16代码(也许有人可以启发我吗?),但是只要您使用与DTComm完全相同的相同命令字符串,它就会工作。 我忽略了WDT-2200随其自己的数据包发送的CRC16代码,因为我认为数据没有损坏就可以到达我的软件。
注2:字节0xC1似乎是WDT-2200期望看到的“文本结尾”,尽管它会为自己的传输发送回一个实际的ETX字节。 因此,我称其为“ Proto ETX”。
对于上述命令,WDT-2200响应...0x02、0x1B,0x76后跟...的字节表示
“ WDT2200 V1.20”,后跟0x48、0x4A,0x03
那是...
STX,ESC,v,“ WDT2200 V1.20”,CRC16a,CRC16b,ETX=============================================
请求扫描仪目录的命令序列...0xFF,0xFF,0xFF,0x02、0x1B,0x44、0x42、0x42、0xC1
那是...
0xFF,0xFF,0xFF,STX,ESC,D,CRC16a,CRC16b,proto ETX 对于上述命令,WDT-2200响应...0x02、0x1B,0x44,后跟用逗号分隔的文件名的字节表示形式,后跟0x45、0x4F,0x03
那是...
STX,ESC,D,“ ISS-RCV.EXE,JENG.EXE,JENG.LOG,ISSUED.TXT,RECVD.TXT”,
CRC16a,CRC16b,ETX
文件名将根据您自己的应用程序而有所不同,但是我已经将那些文件名包含在我的扫描仪中,以供那些可能希望弄清楚正在使用哪种类型的CRC代码的人使用。 如果您使用不同的文件名,则CRC代码当然会有所不同,因为它将根据实际发送到COM端口的数据进行计算。
=============================================
请求文件大小的命令序列...我将使用该示例来请求“ ISSUED.TXT”的文件大小,因为如果其他人选择为自己的应用程序使用完全相同的文件名,则记录的CRC代码可能会被其他人使用。
0x02、0x1B,0x4A,“ ISSUED.TXT”,0x42、0x4D,0xC1
那是...
STX,ESC,J,“ ISSUED.TXT”,B,M,原始ETX [/ b]
对于上述命令,WDT-2200响应...0x02、0x1B,0x4A,0x00、0x37、0x30、0x4D,0x41、0xC1
那是...
STX,ESC,J,NULL,7、0,M,A,ETX记录此数据流时,我的文件(ISSUED.TXT)为70字节。
这是WDT2200返回的其他文件大小的更多CRC16(?)字节
4008字节=> 0x43,0x 48
40172字节=> 0x46,0x4B
0字节=> 0x49,0x49
=============================================
请求扫描仪可用空间的命令序列...0x02、0x1B,0x47、0x42、0x45、0xC1,即...
STX,ESC,G,B,E,protoETX
扫描程序的响应不仅仅是可用空间,可能是扫描仪序列号或其他。但是,在我的情况下,可用空间为2237 KB,尽管文件大小以字节为单位报告,但可用空间似乎是以千字节为单位记录的。 。 这是协议分析器上记录的响应...
0x02、0x1B,0x47、0x32、0x35、0x36、0x30、0x30、0x32、0x33、0x36、0x32、0x32、0x33、0x37、0x4D,0x46、0x03这是...
STX,ESC,G,2、5、6、0、0、2、3、6
2,2,3,7,M,F,ETX=============================================
从WDT2200下载“ ISSUED.TXT”的命令序列...0xFF,0xFF,0xFF,0x02、0x1B,0x55,“ ISSUED.TXT”,0x43、0x48、0xC1
发送此命令后,如果文件位于扫描程序中,则WDT2200将以ACK字节(0x06)进行响应,如果文件不在扫描程序中,则将以NAK字节作为响应。
收到ACK字节后,使用以下命令完成命令...
0x02、0x1B,0x59、0x43、0x47、0xC1然后,WDT2200将响应...
0x02、0x1B,0x59,{ISSUED.TXT的数据流},CRC16a,CRC16b,0x03
您需要响应一个ACK字节,然后是一个延迟(最小值为0.1秒),然后重复上述命令
(即
0x02、0x1B,0x59、0x43、0x47、0xC1 )...直到WDT2200响应以下六个特殊字节...
0x02、0x1B,0x5A,0x47、0x47、0x03通过WDT2200的最终响应,您可以选择也可以不选择发送最终ACK字节。
=============================================
在我的应用程序中,我剥离了标头和控制字节,然后将其保存到C#中的字符串中。 应该注意的是,CR和LF不是您可能期望的字节。 相反,WDT2200为CR发送0x8D,为LF发送0x8A,而为TAB发送0x89。 遇到这些字节时,我分别在C#字符串中将它们替换为“ \ r”,“ \ n”和“ \ t”。 这样,我便可以通过提供建议的文件名和C#字符串来执行简单的文本文件保存
=============================================
如果您希望对应用程序进行编码,以在成功下载文件后将其从扫描仪中删除,请使用以下方法...
0x02、0x1B,0x45,“ ISSUED.TXT”,0x42、0x48、0xC1WDT2200将响应...
0x02、0x1B,0x48、0x00、0x46、0x43、0x03 ...如果文件存在。如果没有,它将以NAK字节作为响应。
=============================================
不幸的是,我无法确定用于两个错误控制字节的方法,因此文件特定的命令只能按我使用的文件名发布。 由于我不需要使用任何其他文件名,这对于我自己的应用程序就足够了,它使我可以直接从应用程序内部获取扫描仪数据,而不是试图指示用户使用DTComm进行下载和删除。扫描程序文件,然后让它们返回我们的数据库应用程序以从该文件导入数据。 另外,DTComm软件不允许我灵活地为从多个扫描仪下载的每个文件分配唯一的文件名,这对我们很重要,但是我只是保存了自己的应用程序创建的文件,并带有“时间戳记”文件名。
==================================================
我希望这可以帮助没有成功从Wasp的“免费终身支持”中请求协议的其他人。 你得到你所付出的。