【发布时间】:2015-07-25 19:57:49
【问题描述】:
我正在为摩托罗拉 MC9190 RFID 手持阅读器开发一个应用程序。
我需要在 UHF RFID 标签中读取和写入人类可读的信息。所以我决定用 ASCII 字符来写信息。
在做一些研究时,我发现可以在 RFID 标签内存中写入 ASCII 字符,但它支持的字符较少。在少于 10 个字符之前我不会介意。
参考:
http://blog.atlasrfidstore.com/types-of-memory-in-gen-2-uhf-rfid-tags
现在,我有点困惑如何直接在阅读器中读写 ASCII 字符。
这是用十六进制字符编写的代码。
private void writeButton_Click(object sender, EventArgs e)
{
string dataToWrite="ABCDEF9876";
Symbol.RFID3.TagAccess.WriteAccessParams m_WriteParams;
m_WriteParams.AccessPassword = 0;
m_WriteParams.MemoryBank = MEMORY_BANK.MEMORY_BANK_USER;
m_WriteParams.ByteOffset = 0;
m_WriteParams.WriteDataLength = 6;
byte[] writeData = new byte[m_WriteParams.WriteDataLength];
for (int index = 0; index < m_WriteParams.WriteDataLength; index += 2)
{
writeData[index] = byte.Parse(dataToWrite.Substring(index * 2, 2),
System.Globalization.NumberStyles.HexNumber);
writeData[index + 1] = byte.Parse(dataToWrite.Substring((index + 1) * 2, 2),
System.Globalization.NumberStyles.HexNumber);
}
m_WriteParams.WriteData = writeData;
string m_SelectedTagID = "0123456789ABCDEF"; //for example
RunWriteOperation(m_SelectedTagID,m_WriteParams);
}
void RunWriteOperation(string m_SelectedTagID,Symbol.RFID3.TagAccess.WriteAccessParams m_WriteParams)
{
if (m_SelectedTagID != String.Empty)
{
m_ReaderAPI.Actions.TagAccess.WriteWait(m_SelectedTagID,m_WriteParams, null);
}
}
如果我想用 ASCII 写,我猜它应该被编码为 ASCII 字节。所以不是for循环,如果我替换下面的代码,会不会写成功?
string dataToWrite="HELLOWORLD";
byte[] writeData = ASCIIEncoding.ASCII.GetBytes(dataToWrite);
由于我没有随身携带阅读器,所以我现在无法测试。
如果读取成功,在读取标签时,如何配置阅读器以解码为 ASCII 字符并显示它还是需要编程转换?
由于我是 RFID 技术的新手,我不确定我是否正确地完成了研究。如果我错了,请纠正我。
【问题讨论】:
-
您显示的代码不起作用,它希望
dataToWrite是一个十六进制字符串,而“HELLOWORLD”不是。 Encoding.GetBytes() 方法将为您提供在给定编码中形成字符串的字节,是的。反过来是通过 Encoding.GetString() 完成的,使用与编码相同的 Encoding。 -
糟糕。你说的对。查看我的编辑。
-
那么,你读过我剩下的评论了吗?你有什么问题?
-
@tymac 给出的相同答案我会与读者核实并很快告诉你。
标签: c# encoding rfid windows-embedded motorola-emdk