科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC环境下三菱PLC与微机的串行通信

VC环境下三菱PLC与微机的串行通信

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

主要介绍三菱FX系列PLC与上位机之间的通讯协议,并采用CSerial类来实现串行通信,本文给出了程序设计方法和部分源代码。

作者:周万里 曾文火 来源:计算基与信息技术 2007年10月17日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
(2) 位元件或字元件状态读操作

  操作对象元件:PLC内部的X、Y、M、S、T、C、D元件;命令格式如表1;在发送完上述命令格式代码后,就可以读取PLC响应信息了。响应信息格式如图2;


  部分程序代码:

BOOL CPlcComDlg::ReadPLC(char *Read, char *address, int bytes)
{
 CSerial Serial;
 char read_BUFFER;
 if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites))
 {
  Serial.SendData(&ENQ_request,1);//发送联络讯号
  Sleep(100);
  Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
  if(read_BUFFER==ACK)
  {
   //初始化变量
   //发送图2命令格式代码
   ASCII(readdatasum_check,readdata_sum);
   //将STX-ETX之间的字符相加,转换成ASCII(十六进制),并取和的低二位数。
   if(*readdatasum_CHECK==*readdatasum_check)//和校验
   {
    //对读出的数据进行处理,转换成整型数
    for(int j=0;j<bytes/2;j++)
    {
     for(i=j*2;i<j*2+4;i++)
      Read[i]=(Read[i]>0x39)?(Read[i]-0x41+0xA):(Read [i]-0x30);
      Read_value[j]=(((((Read [j*4+2]<<4)+Read [j*4+3]))+Read [j*4+0])<<4)+Read [j*4+1];
    }
    return TRUE;
   }
   else
    return FALSE;
   }
  }
 }
}
//将整数转换成ASCII(十六进制),并取低二位,
void CPlcComDlg::ASCII(char *total_databytes, int read_bytes)
{
 unsigned int uTmp;
 uTmp=read_bytes & 0x000f;
 total_databytes[1]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
 uTmp=(read_bytes>>4) & 0x000f;
 total_databytes[0]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
}

  (3) 位元件或字元件状态写操作

  操作对象元件:PLC内部的X、Y、M、S、T、C、D元件;命令格式如图3所示。


  程序代码(略)。

  (4) 位元件强制ON操作

  操作对象元件:PLC内部的X、Y、M、S、T、C元件;命令格式如图4所示。


  部分程序代码如下:

void CPlcComDlg::ForceOnOpreation(char *Address)
{
 CSerial Serial;
 char read_BUFFER;
 CString strtemp;
 if(Serial.Open(m_com,9600))
 {
  Serial.SendData(&ENQ_request,1);
  Sleep(100);
  Serial.ReadData(&read_BUFFER,1);
  if(read_BUFFER==ACK)
  {
   //初始化变量
   //发送图4命令格式代码
   ASCII(Sum_Check,sum); //将STX-ETX之间的字符相加,转换成ASCII(十六进制),并取和的低二位数
   for(i=0;i<2;i++)
    Serial.SendData(&Sum_Check[i],1);//和校验
   Sleep(100);
   Serial.ReadData(&read_buffer,1);
   if(read_buffer==ACK)
    return TRUE;
   else
    return FALSE;
  }
 }
}

  (5) 位元件强制OFF操作

  操作对象元件:PLC内部的X、Y、M、S、T、C元件;命令格式如图5所示。


  程序代码(略)。

  实时通讯控制界面

  本程序能够实现远程控制FX系列PLC的运行。能读取位元件的当前状态,以及对它们置位和复位。能够读取字元件的值和往字元件写值。并能自动连续读取单个字元件的值。

  结论

  本程序实现了上位机对三菱PLC的实时监控,传送数据准确,这种通信方法不仅成本低,而且简单、稳定、实用性强。
 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章