登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:[求助]ormon和单片机通信问题 晕求

点击:1160 回复:6

我想用51单片机和ORMON PLC通信,用hoslink通信协议,
单片机程序简略如下,改plc内dm区的值
uchar DB[17]={0x40,0x30,0x30,0x57,0x44,0x30,0x31,0x30,0x30,0x36,0x36,0x36,0x36,0x35,0x32,0x2A,0x0D};  
for(s=0;s<=16;s++)
   {
      SBUF=DB[s];
      while(!TI);
      TI=0;
   }
但遇到问题是单片机发送的数据是两个字节两个字节的发送,但hoslink是一块发送17的字节才能通信的,导致plc和单片机不能实现通信。
请了解这个方面的大侠们帮帮我这个初学者,谢谢!!!!!
08-11-20 20:52
我首先想请问楼主你这个不能通信是自己猜测出来的还上已经实测出来的。
当PLC接收到启始符@时它的接收缓冲区就会开始接受所有发送来的数据,直到终止符0x2A0D。我已经做过测试,我使用的是串口调试软件与PLC通信。照你的数据发送的,每次发2个字节,最后一个0D补00,间隔2秒左右。发送完后收到返回值为@00WD0053*回车无显示。证明操作成功。
所以你的推论是不成立的。
08-11-21 11:58
要做mcu和plc通讯我觉的要这么做
先把plc的通讯协议搞清楚,然后用pc的串口试验,试验成功了再做mcu和plc的通讯。
至于连续发很简单,有用循环的也有用中断的。
08-11-21 22:56
首先谢谢你!我原来也用串口工具发过,可以发送的。后来我用51单片机发数就不行,用51发的数不是一整串17个数(Hoslink协议中发的数),而是一个一个发送的。我这是实测的,一整串数时,PLC能应答,但一个一个数时就不能应答了。我觉得是
    for(s=0;s<=16;s++)
   {
      SBUF=DB[s];
      while(!TI);
      TI=0;
   }
的问题。不过改了多个地方都不行!
08-11-23 13:00
我就是按这个步骤做得,用串口工具没事!因为他是发送的一串数据,按Hoslink协议的是17个数发送,但是用单片机时却是一个一个的发送,所以使PLC接收不到!单片机的发送方式就是我上边写得那种。
08-11-23 13:05
把你的单片机接到pc上的串口,看收到的是什么数据
08-11-26 17:24
接到pc上的串口。就是我说的一个一个数的发,怎么才能一下发17个数呢??????????????????????????????
08-12-01 20:19

工控新闻

更多新闻资讯