串口发送数据的问题

lzj1980 2009-08-06 01:51:37
小弟最近在学习串口编程,使用龚建伟老师的书,进行联系,发送数据给485模块来控制智能插座,我写的源码如下:
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{

variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
//m_strRXData+=strtemp; //加入接收编辑框对应字符串
m_strRXData="eb 90 d7 00 ff 06 f9 00 0A 00 01 00 03 04 02 f4 00 00 00";
}
我将m_strRXData+=strtemp; 换成下面的一句,为什么点击发送按钮没有反应呢?应该怎么样才能保证发送eb 90 d7 00 ff 06 f9 00 0A 00 01 00 03 04 02 f4 00 00 00成功啊?谢谢大侠们!
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w0911h 2009-08-06
  • 打赏
  • 举报
回复
能不能把你完整的发送代码贴出来,包括数据的构造,我没做过windows下的,但应该差不多,linux下也是先构造一个unsigned char 数组,然后把十六进制数据构造好,然后直接send,但是send的时候可以指定数据长度,这里我不清楚SetOutPut是如何确定数据长度的,还有你说发送没有反应,具体是什么表现,是对方没有收到数据,还是收到的数据不对,还是其它什么问题,可以先用调试助手看看收到的是什么
lzj1980 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lzj1980 的回复:]
引用 1 楼 nicotia 的回复:
你这明明是接收的代码
哪有什么发送啊?
有转头了

发送那块是利用按钮void CSCommTestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //读取编辑框内容
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据

}
现在我把19个16进制的发送给485模块的串口就行了  我这么定义的
unsigned char str[19];
str[0] = 0xEB;
str[1] = 0x90;
      .
      .
      .
str[18] = 0x00;

然后我想的是把str[19]赋给编辑框的id  m_strRXData=str[19];  但是这样就没有信息了
[/Quote]

怎么越界了?现在我是把“eb 90 d7 00 ff 06 f9 00 0A 00 01 00 03 04 02 f4 00 00 00”要是以16进制的发给串口就ok了 现在我整理unsigned int str[19];
str[0] = 0xEB;
str[1] = 0x90;
.
.
.
str[18] = 0x00;

如何转换成16进制的发出去呢
w0911h 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lzj1980 的回复:]
然后我想的是把str[19]赋给编辑框的id  m_strRXData=str[19];  但是这样就没有信息了
[/Quote]
m_strRXData=str[19];这句对吗,str[19]已经越界了,而且看你的程序也应该是用m_strTXData吧,偿试把str数组按字节一个一个赋给m_strTXData看看
lzj1980 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nicotia 的回复:]
你这明明是接收的代码
哪有什么发送啊?
[/Quote]有转头了

发送那块是利用按钮void CSCommTestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //读取编辑框内容
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据

}
现在我把19个16进制的发送给485模块的串口就行了 我这么定义的
unsigned char str[19];
str[0] = 0xEB;
str[1] = 0x90;
.
.
.
str[18] = 0x00;

然后我想的是把str[19]赋给编辑框的id m_strRXData=str[19]; 但是这样就没有信息了
draculamx 2009-08-06
  • 打赏
  • 举报
回复
没有看见你的发送代码。。。

你如果用的是 PC 上的串口来收发数据的话,是不能和485直接通信的,PC机上的串口是 232 标准,你要和 485 通信的话,必须要转接设备(买一个转接头就可以了)
nicotia 2009-08-06
  • 打赏
  • 举报
回复
你这明明是接收的代码
哪有什么发送啊?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧