想串口发送十六机制数据问题。环境:XP SP3,古董VC++6.0。我用的是网上下载的PComm封装库进行串口读写的。char bufCheck[100]="55AA00055552588555555";sio_write(Port, buffCheck, 100);这段代码执行成功后,下位机也没发送另外的数据过来。但用串口调试助手,点击选择按十六进制发送。然后把55AA00055552588555555这串数据写入,点击发送。下位机就会把另外的数据传过来。图片如下!

解决方案 »

  1.   

    楼主,你的基础要多注意了字符串和实际的数据都没分清。char bufCheck[100]="55AA00055552588555555";改成: BYTE bufCheck[100]={0x55,0xAA,0x00,0x05,0x55,0x52,0x58,0x85,0x55,0x55,0x5};
    看看。
      

  2.   

    楼主你用的modbus协议吧?
    你这么发的话就是modbus ASCII方式
    但你这个设备显然是modbus RTU方式
      

  3.   

    回复2楼  saliors
    int  WINAPI sio_write(int port, char *buf, int len);这是函数声明,我现在可以算出一个CString的数据串,现在我想做的是代码如何把数据串转换为
      BYTE bufCheck[100]={0x55,0xAA,0x00,0x05,0x55,0x52,0x58,0x85,0x55,0x55,0x5};
    这种,其实我数据时这样得到的
    CString a="55AA0081000000001000"+CheckH_chk+CheckD_chk+SYNC+"000000";
    新手,确实基础不好!!!还望指教
      

  4.   

     #3楼 得分:0回复于:2012-09-26 15:16:59回复2楼 saliors
    int WINAPI sio_write(int port, char *buf, int len);这是函数声明,我现在可以算出一个CString的数据串,现在我想做的是代码如何把数据串转换为
      BYTE bufCheck[100]={0x55,0xAA,0x00,0x05,0x55,0x52,0x58,0x85,0x55,0x55,0x5};
    这种,其实我数据时这样得到的
    CString a="55AA0081000000001000"+CheckH_chk+CheckD_chk+SYNC+"000000";
    新手,确实基础不好!!!还望指教 
     
      

  5.   

    建议看看 VC++/Turbbo C 串口通信编程实践 这本书
      

  6.   

    sio_write没有用过,一直用CreateFile,WriteFile等原生API
    原生API还有一个DCB结构,可以设置很多东西,不知道你这个库有否?
    例如windows如果想要发送binary数据,好像需要在串口初始化时就设置好,否则默认ASCII
    char bufCheck[100]好像你还没有memset初始化,你这个发送函数好像不看\0,所以字符串末尾后的乱码也可能一并发了出去。
    CString有charset二义性,最好用CStringA或者std::string