串口通讯
我想将数据十六进制格式(0x01)或(0xff)发送到连接rs232电缆的端口。 我使用的是VC++ 6.0中的MSCOMM控件。 这是发送十六进制数据的正确方法吗? 这是我的代码。
CString output;
UCHAR data1,data2;
data1=0x01;
output.Format("%x",data1);
m_mscom.SetOutput(COleVariant(output));
data2=0xff;
output.Format("%x",data2);
m_mscom.SetOutput(COleVariant(output));
如果不正确,请告诉我如何将十六进制格式的数据发送到端口。
提前致谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您的数据只是要发送的十六进制值(而不是十六进制格式的字符串),您可能需要“%c”而不是“%x”。 给定数据值(例如)0x65,“%x”将在串行端口上产生两个字节:“6”(ascii 值 54)和“5”(ascii 值 53)。 “%c”将在串行端口上生成一个字节:“e”(ascii 值 100 或 0x65)。
至于用 C 语言在串行端口上发送数据,请查看 CSerial 或 CSerialPort:它们可能会为您简化一些事情(请注意,我没有使用过它们,我倾向于使用 pyserial 模块或在 wxWidgets 中使用 ctb 库)。
编辑:另一个非常好的(我以前用过它,但在我写原始帖子时找不到链接)是 CSerialFile,WFC 库的一部分。 正如我所说,我现在倾向于使用 wxWidgets,但如果您使用 Microsoft 基础类,CSerialFile 确实使串行访问变得非常容易。
If your data is simply a hex value that you want to send out (as opposed to a hex formatted string), you probably want "%c" rather than "%x". Given a data value of (e.g.) 0x65, "%x" will produce two bytes on the serial port: '6' (ascii value 54) and '5' (ascii value 53). "%c" will produce a single byte on the serial port: 'e' (ascii value 100 or 0x65).
As far as sending data on a serial port in C, have a look at CSerial or CSerialPort: they may simplify things for you a bit (note that I've not used them, I tend to do serial port apps in python with the pyserial module or in wxWidgets with the ctb library).
Edit: The other one that's quite good (I have used it before, but couldn't find the link when I wrote the original post) is CSerialFile, part of the WFC libraries. As I said, I tend to use wxWidgets now, but if you're using the Microsoft foundation classes, CSerialFile does make serial access very easy.
我对 MSCOM 不熟悉,但它似乎不起作用。
Format
可能会将数据重新格式化为 ASCII 字符串表示形式。或者,您可以在 Windows 中将任何串行端口用作“文件”。 查看用于打开文件的 Windows api,您会发现可以使用“COM1:”之类的文件名来将某些设备作为文件进行寻址。
然后,您可以像文件一样读取/写入它。
I'm no familiar with MSCOM but it seems like it won't work.
Format
may re-format the data to an ASCII string representation instead.Alternatively, you can just use any serial port as a 'file' in Windows. Look at the windows api for opening files and you will see that you can address certain devices as files by using a filename like 'COM1:' instead.
Then, you can read/write from it like a file.