控制工程网首页 | 产品 | 在线研讨会 |  视频 | 空间 | 论坛 | 博客 
我的空间
用户名:
密 码:
我要加入该社区!   注册新会员
楼主:发表于:2012/12/15 22:40:57,查看3452次
    以台达EH2系列PLC为例,默认出厂设置是9600,7,1,E. 只要用串口调试助手向PLC发几次指令,就会熟练控制。比如想接通Y0点,就发(:01 05 0500 FF00 F6 CR LF )对应16进制是3A 3031 30353030 46463030 4636 0D 0A     其中:是起始码,01是地址,05是指令码,0500是Y0的通讯地址,FF00是强制节点开,F6是校验和,CR LF是结束字符。校验和自己计算,方法是01H+05H+05H+00H+FFH+00H=10AH,取后两位数0A的补码(FFH-0AH=F5H)F5再加1,即F6.  强制Y0接通以后PLC内部程序还可以照样控制Y0通断。

用串口调试助手发指令时别忘了把通讯参数设置好,最好点选16进制发送,当然发送的指令也得是16进制的3A 3031 30353030 46463030 4636 0D 0A  。成功通讯的话,PLC会返回数据显示在接收区。

单片机程序

#include<reg52.h>
#define uchar unsigned char 
#define uint  unsigned int
sbit sw=P1^0;
uint num=0;
uchar SendBuffer[]="";
void delay100ms(uchar times)
 {
  uint i=0,j=0,k=0;
  for(k=0;k<times;k++)
   for(i=0;i<100;i++)
    for(j=0;j<67;j++);
 }

void init(void)     //串口初始化
{
 TMOD=0x20;//
 TH1=0xfd;
 TL1=0xfd;//9600,
 SCON=0x50;//
 TR1=1;
}

/*void key()
{
    num=(unsigned int)P0<<8+(unsigned int)P2;//强制转换,两个8位组合成一个16位
 //一共16个开关对应PLC中M0到M15 16个寄存器,原样不动把他的状态值映射过去
    //强制多个节点: 01 0f 0800 000f 02 P2 P0 LRC CR LF 
 //01+0F+08+0F+02=29
}*/
void main()
{
 uchar i=0;
 init();
 while(1)
 {
  if(sw==0)
  {
      delay100ms(1);
      if(sw==0)
   {
   unsigned char SendBuffer[]={":010f0800000f02"};
       SendBuffer[15]=P2;
    SendBuffer[16]=P0; 
    SendBuffer[17]=~(0x29+P2+P0)+1;
    SendBuffer[18]=0x0d;
    SendBuffer[19]=0x0a;
             
    for(i=0;i<20;i++)
     {
      SBUF=SendBuffer[i];
      while(TI==0);//等待发送出去
       TI=0;
     }
   }
  }   
 }
}


  • 发表回复
请先登录,在回复。
  • 社区公告
  • 台达自动化社区是中达电通和控制工程网共同建立的互动网络社区,欢迎加入社区,成为社区成员,在您个人空间里第一时间看到本社区的动态,并可以进行在线互动交流!
  • 社区专家
  • 社区赞助商
  • 通过本社区和厂商联系
1.我有以下需求:
我想得到贵公司产品详细资料
我想得到贵公司产品的价格信息
我让贵公司产品销售人员联系我
我让贵公司技术支持人员联系我
2.详细的需求:

(不支持Html)
姓名:
单位:
电话:
邮件:
  • 网友反馈
  • 陈瑞时 在2024/11/09留言
  • 留言类型:贵公司产品销售人员联系我,
  • 详细留言:VFD055B43A变频器
  • 肖小姐 在2024/09/27留言
  • 留言类型:贵公司产品销售人员联系我,
  • 详细留言:DIGGCOM工控机
  • 欧阳垚 在2024/09/26留言
  • 留言类型:贵公司技术支持人员联系我,
  • 详细留言:DVP 64EH00T3 通讯自动侦测 显示通讯端口已使用或无此通讯端口 解决的办法
更多请进入空间管理中心查看
© 2003-2024
本页面信息涉及广告内容