为什么第一次接通输入点,动力输出装置点会置位。而第二次接通 动力输出装置点复位呢

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
解决PLC输入点数量不足的方法
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
解决PLC输入点数量不足的方法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口数字编码器通过PLC一组输入(X0-X7)进入PLC,但每个点只能代表接通与断开,怎么会代表一个数呢_百度知道
数字编码器通过PLC一组输入(X0-X7)进入PLC,但每个点只能代表接通与断开,怎么会代表一个数呢
如果代表一个数,传送时为什么只传送的一个(如X0),.而不是整个(X1-X7)
我有更好的答案
用位传送指令如 MOV K2X0 D0
可将X0~X7的状态传递到D0里面。但是这个指令程序有个缺点,MOV在传送时只扫描当前的状态,而我们的输入过程确不是立即输入,可不是MOV每时每刻都在等待的。为了解决这一问题。可在编码器每个输入点X,使用相应编号内部继电器M记录状态并置位。然后每隔一段时间如1秒,使用MOV指令传送相应的M0~M7的状态如MOC K2M0 D0传送完后将M0~M7复位,等待下一轮扫描,如此反复执行,即可解决你说的问题。 例如LD X0SET M0
//置位...LD M8013MOV K2M0 D0ZRST M0 M7...
采纳率:42%
你使用的编码器应该是绝对型编码器,其输出绝大部分是格雷码,所以编码器的每一个位置都对应的输出一个八位的二进制码。你查找一下有关格雷码的资料就清楚了。理解了这两者之间的配合关系,再琢磨在程序里解码的过程。上楼的方法可以借鉴。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。PLC一个简单问题_百度知道
PLC一个简单问题
我是初学者 在触摸屏中加入一个按钮输入点在程序中没有此点的输出点(置位复位都木有)为啥设备走一个循环后 这个按钮就自动复位了呢有可能的原因有哪些 望详细罗列一下
我有更好的答案
1.FP(P)和FN(N)是RLO边沿检测指令,可以是多个地址位提供信号的上升沿或下降沿检测,可举例说明:当I3.0和I0.0组成的串联电路由断开变为接通时,中间标有“P”的上升沿(或中间标有“N&的下降沿),由0变为1(或由1变为0),检测一次正跳变(或负跳变),能流只在该扫描周期内流过检测元件,Q4.5的线圈公在这一个扫描周期内“通电”(或Q4.3通电)。检测元件的地址(M0.0和M0.1)为边沿存储位,用来储存上一次循环的RLO。程序如下:程序段1:(程序1为上升沿,程序2为下降沿)A
Q4.5程序段2:A
Q4.32.POS和NEG是信号边沿检测指令,是单个地址位提供的信号的上升沿检测指令。举例说明,I0.1的常开触点接通,且I0.2由0变为1(即输入信号I0.2的上升沿),Q4.3的线圈”通电“一个扫描周期。M0.0为边沿存储位,用来储存上次循环时I0.2的状态。其程序如下:程序段1:(程序1为上升沿,程序2为下降沿)A
Q4.3程序段2:A
I0.4BLD 100FN
Q4.5其上述程序STL都可以转换为LAD,即可以转换为pos neg 和(p)(n)指令的。不知道你看懂没有,S7 300有个很基础的概念叫逻辑运算结果(RLO),P\N与POS\NGE的区别就在于前者是RLO的边沿检测指令,是由多地址提供的信号,上例就是i0.3和i0.0组成的串联电路。后者只是由单个地址即i0.2提供的信号。你如果要模拟Q4.0输出1,加上自锁电路即可。
我只是用触摸屏中添加一个按钮(闲置输入点)去屏蔽设备的一些功能程序中这个闲置点的搜索结果只有我添加的AND 和 AND NOT 两条指令~你上面说的很专业 不过我貌似看不太懂。。。。。应该木有什么边沿检测指令啊
采纳率:56%
是否用到某寄存器的其中一位了?并且在程序中对寄存器有操作,被全部清零。
一个寄存器16位 我都有搜过啊
木有清零的指令啊 ?PLC自带程序有这样的功能吗?
我用AB的PLC举例,假设你用了B3:1/1这一位作为按钮地址,并置为1,在程序中又用了CLR(清除),RES(复位)或者MOV(赋值,但目标值为0)等操作,都会将寄存器B3:1的16位都置为0,自然按钮地址为0.除了清零操作以外,再检查有无其他操作。AB的可以直接输入地址 或寄存器搜索,看看针对地址或寄存器都有哪些操作。
PLC给复位了,虽然没程序,单也会被复位,你可以换地址试试看
我就是不明白为啥被复位啊。。。。
什么PLC地址是多少?
横河 I8065
1.在触摸屏的点是否保持输入,还是瞬时的!2.可能是PLC中有字元件复位,字地址中包括你的按钮输入(看PLC品牌)
1 触摸屏中的点是保持输入的 只是设备走过一个循环后才OFF掉的2 复位的木有 最多复位16位啊 地址往前往后我各搜了8位 没有复位指令PLC品牌是横河~
能否看看具体执行到那一条指令时,发生OFF,我觉得还是有和 I8065相关联的点!换一个不相关的点试试!
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
可编程序控制器(PLC)都有一个编程口。以日本三菱公司生产的PLC为例(包括FX系列和A系列),其编程口为RS-422格式,根据PLC型号不同又分为8针座编程口和25针座编程口。对于后者,可直接将SC—08编程电缆将PLC的编程口和微型计算机的RS—232口连接起来;对于后者,则还需要一根转换电缆将PLC 的8针座编程口和25针编程电缆相连。无论何种情况,一旦将PLC用户程序由微型计算机编程环境传到PLC 用户程序区,其编程口大多就没有被再利用。其实,这是一种浪费。也就是说,可利用此编程口实现微型计算机和PLC 的数据通讯,将PLC的工作状态纳入微型计算机管理之下。  
2 编程口操作命令类型与通讯端口初始化
串行通讯是计算机与其它机器之间进行通讯的一种常用方法,在WINDOWS操作系统中提供了实现各种串行通讯的API函数。通过SC—08编程电缆或FX232AW模块,可将微型计算机的串行通讯口RS—232和PLC 的编程口连接起来,这样微型计算机就可对PLC的RAM区数据进行读、写操作。由PLC本身所具有的特性,可对PLC进行以下四种类型的操作:
  (1)位元件或字元件状态读操作(CMD0);
  (2)位元件或字元件状态写操作(CMD1);
  (3)位元件强制ON操作(CMD7);
  (4)位元件强制OFF操作(CMD8)。
另外,在进行上述四类操作以前,首先要对端口进行初始化操作,即设定通讯协议(包括设置通讯波特率、数据位数、数据停止位及奇偶校验)。在WINDOWS的SDK中定义了一个结构DCB,该结构详细地说明了如何对通讯端口进行控制,所以通讯端口的初始化也是围绕着对这个结构的正确设置为中心进行的。用VC++语言实现端口初始化如下:
  BOOL CSerial::Open(int nPort)
  //nPort 为微型计算机串行通讯口端口号。nport=1为端口1;nPort=2为端口2。
  char szPort\\[15\\];
  m_hIDComDev=CreateFile(szPort, GENERIC_READ│GENERIC_WRITE,O,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED,NULL);
  dcb.DCB1ength=sizeof(DCB);
  GetCommState(m_hIDComDev,&dcb);//取得通讯资源当前设置
  dcb.BaudRate=9600;//设定波特率为9600
  dcb.ByteSize=7;//7数据位
  dcb.Parity=2;//偶校验
  dcb.StopBits=0;//设定1个停止位
  if(SetCommState(m_hIDComDev,&dcb)return(TRUE);
  else return(FALSE);//设置端口,若设置成功则返回TRUE,否则返回FALSE
  需要说明的是CSerial是一个用于串行通讯的类,它包含了进行串行通讯的所需的函数。除上述端口初始化成员函数Open外,还包括另两个重要成员函数:一个是endData,把数据从一个缓冲区发送到串行端口。另一个是ReadData,从端口的接收缓冲区中读入数据。
  其次,在每进行一次上述四类操作中的一种操作以前,还要进行握手联络。对PLC发请求讯号ENQ(代码为OX05),然后读PLC 的响应讯号。如果读到的响应讯号为ACK(代码为OX06),则表示PLC已准备就绪,等待接收通讯数据。握手联络VC++语言示PLC已准备就绪,等待接收通讯数据。握手联络VC++语言实现为:
BOOL CNTJD1g::ReadFromPLC(char *Read_char char *Read_address,int Read_bytes)
  CSerial S//用于串行通讯的类
  char read_BUFFER;
  if(Serial.Open(2)//初始化串行口通讯口COM2
  { Serial.SendData(&ENQ_request,1);//发送联络讯号
   Sleep(1000);//等待1秒钟
   Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
  if(read_BUFFER==ACK)
  { 如果PLC响应讯号等于ACK,则进行上述四种操作:}}
  Serial.Close()://操作完毕后,关闭通讯口
3 编程口命令操作
(1)位元件或字元件状态读操作
  操作对象元件:PLC内部的X、Y、M、S、T、C、D元件;命令格式:
说明:①为读命令起始标志STX,代码为OX02;
   ②为位元件或字元件状态读命令CMDO,命令代码为OX30;
   ③为读位元件或字元件的4位起始地址,高位先发,低位后发,且是以ASCII码的形式发送;
   ④为一次读取位元件或字元件的个数,最多一次可读取OXff个字节的元件,以ASCII码的形式发送;
   ⑤为停止位标志ETX,代码为OX03;
   ⑥为2位和校验,和累计为②、③、④项代码,取其和最低两位转化成ASCII码,高位先发,低位后发。
  在发送完上述命令格式代码后,就可直接读取PLC响应的信息。响应信息格式如下
VC++语言实现:
  BOOL CNTJDlg::ReadFromPLC(char *Read_char char
*Read_address, int Read_bytes)
  char senddatasum_CHECK\\[2\\];char readdatasum_CHECK\\[2\\]; char total_DATABYTES\\[2\\];
  char readdatasum_check\\[2\\];int readdata_
  int datasum_check=0;  
  Serial.SendData(&STX_start,1);/向PLC发送“开始”标志代码
  Serial.SendData(&CMDO_read,1);//发送“读”命令代码datasum_check+=CMDO_
  for(i=0;i&4;i++){Serial.SendData(&Read_address\\[i\\],1);//发送起始元件地址的ASCII代码datasum_check+=Read_address\\[i\\];}
  Change to ASCII(total DATABYTES,Read_bytes);//将字节数转化成ASCII代码
  for (i=0;i&2;i++){Serial.SendData(&total_DATABYTES\\[i\\],1);//发送元件字节数的ASCII代码)datasum_check+total_DATABYTES\\[i\\];}
  Serial.SendData(&ETX_end,1);//发送“结束”标志代码senddatasum_CHECK+ETX_
  Change_to_ASCII(senddatasum_CHECK,senddatasum_CHECK);//将“和”转化成ASCII码
  for (i=0;i&2;i++) Serial.SendData(&senddatasum_CHECK\\[i\\],1);
  Sleep(1000);//等待PLC响应
  Serial.ReadData(&read_BUFFER,1);
  if(read_BUFFER==STX_start){
    readdata_sum=0;
    for(i=0;i&2*Read_i++){Serial.ReadData(&Read_char\\[i\\],1);//读Read_bytes个字节readdata_sum+Read_char\\[i\\];}
    Serial.ReadData(&read_BUFFER,1);
    if(read_BUFFER==ETX_end){Serial.ReadData(readdatasum_CHECK,2);//读入的“和”的低2位ASCII码Readdata_sum+=ETX_}
   Change_to_ASCII(readdatasum_check,readdata_sum);//将计算得到的“和”转化成ASCII码
   if(*readdatasum_CHECK==*readdatasum_check)//“和”校验
  { AfxMessageBox(“数据读出成功!”)return TRUE;}
   else { AfxMessageBox(“校验错误”)return FALSE.}
  (2)位元件或字元件状态写操作
  操作对象元件:同3(1);命令格式:
说明:①为写命令起始标志STX,代码为OX02;
   ②为位元件或字元件状态写命令CMD1,命令代码为OX31;
   ③为写位元件或字元件的4位起始地址,高位先发,低位后发,且是以ASCII码的形式发送;
   ④为一次写入位元件或字元件的个数,以ASCII码的形式发送;
   ⑤为待写到PLC RAM区的数据DATA,以ASCII码形式发送;
   ⑥为停止位标志ETX,代码为OX03;
   ⑦为2位和校验,和累计为②、③、④项代码,取其和最低两位转化成ASCII码,高位先发,低位后发。
  VC++语言实现:
  BOOL CNTJDlg::WritePLC(char *data_ADDRESS,char *Write_ASC,int bytesnumber)
   char total_BYTES\\[2\\];char senddatasum_CHECK\\[2\\];
   char read_BUFFER;char read_finishBUFFER;
   int datasum_check=0; int i=0;
   Serial.SendData(&STX_start,1);//向PLC发送“开始”标志代码
   datasum_check=0;Serial.SendData(&CMD1_write,1);//发送“写”命令代码
   datasum_check+CMD1_
   for(i=0;i&4;i++) {Serial.SendData(&data_ADDRESS\\[i\\],1);//发送起始元件地址的ASCII码
   datasum_check+=data_ADDRESS\\[i\\];
    Change_to_ASCII(total_DATABYTES,bytesnumber);//将字节数转化成ASCII码
  for(i=0;i&2;i++)
   Serial.SendData(&total_BYTES\\,1);//发送元件字节数的ASCII代码
   datasum_check+=total_BYTES\\[i\\];}
   for {i=0;i  {
   Serial.SendData(&Write_ASC\\[i\\],1);//发送要写入的数据的ASCII码
   datasum_check+=Write_ASC\\[i\\];}
   Serial.SendData(&ETX_end,1);//发送“结束”标志代码
   datasum_check+=ETX_
   Change_to_ASCII(senddatasum_CHECK,datasum_check);//将“和”转化成ASCII码
   Serial.SendData(&senddatasum_CHECK,2);
  Sleep(1000); Serial.ReadData(&read_finishBUFFER,1);
   if (read_finishBUFFER==ACK_reply)
  {AfxMessageBox(“数据写入 OK”)return TRUE;}
  else {AfxMessageBox(“数据写入失败”)return FALSE。}
  (3)位元件强制ON操作
  操作对象:X、Y、M、S、T、C元件;
  命令格式:
说明:①为强制OFF命令起始标志STX,代码为OX02;
   ②为强制OFF命令CMD8,命令代码为OX38H;
   ③为强制OFF位元件4位起始地址,高位先发,低位后发,以ASCII码形式发送;
   ④为停止位标志ETX,代码为OX03;
   ⑤为2位和校验,和累计为②、③、④项代码,取其和最低两位转化成ASCII码,高位先发,低位后发。
  VC++语言实现:
  void NTJDlg::ForceOffOperation (char *OFF_Address)
  char Sum_Check\\[2\\];
  char read_
  int Sum=0;
  Serial.SendData(&STX_start,1);//向PLC发送“开始”标志代码
  Serial.SendData(&CMD8_ForceOFF,1);//发送“OFF”命令代码
  Sum=CMD8_ForceOFF;
  for (i=0;i&4;i++) {
   Serial.SendData(&OFF_Address\\[i\\],1);//发送起始元件地址的ASCII码
   Sum+=OFF_Address\\[i\\];}
  Serial.SendData(&ETX_end,1);//发送“结束”标志代码
  Sum+=ETX_
  Change_to_ASCII(Sum_Check,Sum);//将“和”转化成ASCII码
  Serial.SendData(&Sum_Check,2);
  Skeeo(1000);
  Serial.ReadData(&read_buffer,1);
  if(read_fininhBUFFER==ACK_reply) AfxMessageBox(“OFF 操作 OK ”);
  else AfxMessageBox(“OFF 操作失败”)。
  注意:必须严格按照上述四种操作命令格式进行发送,在发送前,起始地址、数据、数据个数、校验和都必须按位转换成ASCII码。从PLC读到的数据亦是ASCII码形式,需要经过适当转换才能利用。另外,要注意强制命令地址与读写地址的顺序不是一样,且一次最多只能传送64个字节数据。 
kadan [ 22:31:22]&
利用上述四种操作命令,就可对PLC的RAM区数据进行管理操作。将PLC的工作状态纳入微型计算机管理之下。在此基础上,用户可以应用VC很方便地设计自己的PLC人机接口界面,为监控与管理PLC的运行提供一种良好的方法。PID温度控制的PLC程序设计
&& PID温度控制的PLC程序设计
  温度控制是许多机器的重要的构成部分。它的功能是将温度控制在所需要的温度范围内,然后进行工件的加工与处理。PID控制系统是得到广泛应用的控制方法之一。在本文中,将详细讲叙本套系统。
  l 系统组成
  本套系统采用Omron的PLC与其温控单元以及Pro-face的触摸屏所组成。系统包括CQM1H-51、扩展单元TC-101、GP577R以及探温器、加热/制冷单元。
  l 触摸屏画面部分(见图1-a)
  如图所见,数据监控栏内所显示的002代表现在的温度,而102表示输出的温度。如按下开始设置就可设置参数。需要设置的参数有六个,分别是比例带、积分时间、微分时间、滞后值、控制周期、偏移量。它们在PLC的地址与一些开关的地址如下所列。
  比例带 : DM51
  积分时间 : DM52
  微分时间 : DM53
  滞后值 : DM54
  控制周期 : DM55
  偏移量 : DM56
  数据刷新 : 22905
  l PLC程序部分
  002:PID的输入字
  102:PID的输出字
  [NETWORK]
   Name="Action Check" //常规检查
  [STATEMENTLIST]
   LD 253.13 //常ON
   OUT TR0
   CMP 002 #FFFF //确定温控单元是否完成初始化
   AND NOT 255.06 //等于
   OUT 041.15 //初始化完成
   LD TR0
   AND 041.15
   OUT TR1
   AND NOT 040.10 //不在参数设置状态
   MOV DM //将设置温度DM50传送给PID输出字
   LD TR1
   MOV 002 DM0057 //将002传送到DM57
  [NETWORK]
   Name="Setting Start"//设置开始
  [STATEMENTLIST]
   LD 253.13
   OUT TR0
   AND 229.05 //触摸屏上的开始设置开关
   DIFU 080.05 //设置微分
   LD TR0
   AND 041.15
   AND 080.05
   SET 040.01 //开始设置标志位1
   SET 040.10 //开始设置标志位2
  [NETWORK]
   Name="Poportion"//比例带设置
  [STATEMENTLIST]
   LD 040.01
   OUT TR0
   AND NOT 042.01
   MOV #C110 102 //读输出边与输入边的比例带
   CMP 002 #C110 //比较输入字是否变成C110
   AND 255.06 //等于
   SET 042.01 //设置比例带标志
   LD TR0
   AND 042.01
   MOV DM //将比例带的设定值写入输出字
   CMP 002 DM0051 //是否写入
   AND 255.06
   RSET 040.01 //复位标志1
   RSET 042.01 //复位比例带标志
   SET 040.02 //向下继续设置标志
  [NETWORK]
   Name="Integral"//积分时间设置
  [STATEMENTLIST]
   LD 040.02
   OUT TR0
   AND NOT 042.02
   MOV #C220 102 //读输出边与输入边的积分
   CMP 002 #C220 //比较输入字是否变成C220
   AND 255.06
   SET 042.02 //设置积分标志
   LD TR0
   AND 042.02
   MOV DM //将积分的设定值写入输出字
   CMP 002 DM0052 //是否写入
   AND 255.06
   RSET 040.02
   RSET 042.02
   SET 040.03 //向下继续设置标志
  [NETWORK]
   Name="differential"//微分时间设置
  [STATEMENTLIST]
   LD 040.03
   OUT TR0
   AND NOT 042.03
   MOV #C330 102 //读输出边与输入边的微分
   CMP 002 #C330 //比较输入字是否变成C330
   AND 255.06
   SET 042.03 //设置微分标志
   LD TR0
   AND 042.03
   MOV DM /将微分的设定值写入输出字
   CMP 002 DM0053 //是否写入
   AND 255.06
   RSET 040.03
   RSET 042.03
   SET 040.04 //向下继续设置标志
  [NETWORK]
   Name="Hysteresis"//滞后值设置
  [STATEMENTLIST]
   LD 040.04
   OUT TR0
   AND NOT 042.04
   MOV #C440 102 //读输出边与输入边的滞后值
CMP 002 #C440 //比较输入字是否变成C440
   AND 255.06
   SET 042.04 设置滞后值标志
   LD TR0
   AND 042.04
   MOV DM /将滞后值的设定值写入输出字
   CMP 002 DM0054 //是否写入
   AND 255.06
   RSET 040.04
   RSET 042.04
   SET 040.05 //向下继续设置标志
  [NETWORK]
   Name="Period"//控制周期设置
  [STATEMENTLIST]
   LD 040.05
   OUT TR0
   AND NOT 042.05
   MOV #C550 102 //读输出边与输入边的控制周期
   CMP 002 #C550 //比较输入字是否变成C550
   AND 255.06
   SET 042.05 //设置控制周期标志
   LD TR0
   AND 042.05
   MOV DM 将控制周期的设定值写入输出字
   CMP 002 DM0055 是否写入
   AND 255.06
   RSET 040.05
   RSET 042.05
   SET 040.06 //向下继续设置标志
  [NETWORK]
   Name="Shift"//偏移量设置
  [STATEMENTLIST]
   LD 040.06
   OUT TR0
   AND NOT 042.06
   MOV #C660 102 //读输出边与输入边的偏移量
   CMP 002 #C660 //比较输入字是否变成C660
   AND 255.06
   SET 042.06 //设置偏移量标志
   LD TR0
   AND 042.06
   MOV DM //将偏移量的设定值写入输出字
   CMP 002 DM0056 //是否写入
   AND 255.06
   RSET 040.06
   RSET 042.06
   SET 040.00
  [NETWORK]
   Name="Return"//返回
  [STATEMENTLIST]
   LD 040.00
   OUT TR0
   AND NOT 042.00
   MOV #C070 102 //读输入边的处理值
   CMP 002 #C070 比较输入字变成C070
   AND 255.06
   SET 042.00 //返回标志
   LD TR0
   AND 042.00
   MOV DM 将设定温度值写入输出字
   RSET 040.00
   RSET 042.00
   RSET 040.10
以上是本套系统的全部内容,经过反复试验,此系统可以维持温度在1°C之间变化。保证了好的生产状况,减少不合格品发生的几率。
PC机的串口和PLC的串口一样,也需要对其编程才能实现数据的收发。看来PLC的通讯程序应该不是你自己编的,最多是依葫芦画瓢,因为你对串行通讯好象还没建立起基本的概念。:)
   在你这个项目里面,上位机通讯程序的作用就是接收PLC送过来的数据,也可能还要向PLC发送数据。你所说的“无协议通讯”实际上真正的含义应该是“未采用业界现行的一些标准通讯协议 (比如Modbus协议),而是按自己定义协议编写程序”。
   所谓“通讯协议”的概念说白了实际上就是对如下一些问题作出明确的约定:
  1、上位机于下位机之间需要交换哪些数据
  2、按什么格式发送这些数据
  我这里来举两个简单的通讯协议的例子,希望以此能让新入行的师弟师妹们对“通讯协议”这个看上去很深奥,其实很简单的东东能有个清楚的认识
  例1:某项目中,PLC需要每隔1秒钟把一个温度测量值送往上位机, 上位机不需要向PLC返回任何信息。
  分析:这是个最简单的通讯协议的例子,发送对象只有一个,所以我们在通讯协议中只需把这么几条说清 楚就可以:
  1、所发送数据的含义
   比如你PLC发来一串字符“1234”,作为上位机首先需要知道的当然是“PLC送来的这个数值是什么数 据"。在我们这个例子中,很简单,就是所测的温度值。
  2、数据发送的格式
   明确了数据的含义,那么下面需定义的就是数据的格式了。所谓数据格式,说句大白话就是你PLC发来的“1234”这个数据,是不是就代表当前温度就是1234℃,如果不是,那么我上位机还需再作什么样的处理后才能得到当前真正的温度。我们假设在这个例子中,PLC发送的温度值为4位数,前两位代表温度值的“十位”和“个位”,后两位代表小数点后1位和后两位,即发送来的数值“1234”并不是代表当前温度为1234℃,上位机还需把这个数值再乘以0.01才是当前真正的温度.
   这样,一个最简单的协议就完成了。协议写好了,那么PLC和上位机各自通讯程序的任务也就清楚了吧。 PLC的任务就是把温度值按4位整数的格式发往上位机,而上位机的任务呢,就是接收这些数据,并把收到的数据再乘以0.01,得出实际的温度值。
  例2:在例1的基础上,我们再作些变化,原先是只采集一个数据,现在增加为采集A,B,C 3路温度值,依 旧是每隔1秒钟把数据上传一次,上位机不返回任何信息。
  分析:由于1次要发送3个温度值,所以例1中的“纯数字格式”无法再使用,必须修改协议。
  1、数据含义
   3个温度值
  2、数据格式
   为能正确区分去3个温度值,我们把一些字母掺杂到数据中,所以新的数据格式定义如下:
   (1)、3个温度值排列顺序为“ABC”
   (2)、3个温度值的结尾加上字母“M”以便于把3个温度值隔开
   (3)、每个温度值的格式与例1一样,仍然是4位整数,前两位表示十位与个位,后两位为小数
   这样,PLC发来的数据格式就应该是“xxxxMxxxxMxxxxM”。假设A,B,C 3路温度当前为12.35℃,
  20.21℃和45.12℃,则PLC发送的数据应为“12M”
   通讯协议变复杂了,PLC和上位机通讯程序的任务也就变复杂了。PLC发送数前先要把数据按协议所规定的格式组织好,而上位机接收到数据后先要按协议中所规定的格式把所需要的数据分离出来。PLC与编码器应用
旋转编码器的一般介绍
  其主要有两种,一种是增量型,另一种是绝对型。增量型的特征是只有在旋转期间会输出对应旋转角度脉冲,停止是不会输出。它是利用计数来测量旋转的方式;价格比较便宜。绝对型的的特征是不论是否旋转,可以将对应旋转角度进行平行输出的类型,不需要计数器可确认旋转位置;它还有不受机械的晃动或震动以及开关等电器干扰的功能,价格贵。在选择使用时,可参考以下几点。包括成本、分辨率、外形尺寸、轴负荷及机械寿命、输出频率、环境、轴旋转力矩、输出回路等等。
  它一般应用在对机器的动作控制。我那一个实例详细说明一下。我刚刚改造一台机器,机器在运行过程中先要对工件进行处理,然后加工。它以前是用光电开关做的,机器的电路就比较复杂,而且成本增加,维护调校麻烦。于是我就对机器的电路进行改造,主要是用一个编码器来代替以前的光电开关。此套系统由OMRON的PLC与编码器组成。下面是PLC程序。
  I/O 及数据
   检测是否有工件开关:00007 变频器零速输出:00008
   处理工序1:开(DM100) 关(DM101) 10100
   处理工序2:开(DM102) 关(DM103) 10101
   处理工序3:开(DM104) 关(DM105) 10102
   加工工序1:开(DM106) 关(DM107) 10103
   加工工序2:开(DM108) 关(DM109) 10104
   加工工序3:开(DM110) 关(DM111) 10105
  PLC程序
   Name="Initialize"
  [STATEMENTLIST]
   LD 253.13 //On
   OUT TR0
   OUT 252.00 //Encoder software reset
   TIM 000 #0100 //System initialize delay
   AND 253.15 //PLC First scan on
   INI 000 002 DM0000 //Control Encoder mode
   LD TR0
   AND TIM000
   PRV 000 000 DM0000 //Encoder PV read
   DIV DM DM0002 //1440 Change 360
   BCMP DM0002 DM0100 HR01 //Block compare for operation
   Name="Shift"
  [STATEMENTLIST]
   LD 000.07 //Part on
   LD HR01.08 //Shift degree
   LD 253.14 //Off
   SFT HR60 HR62 // the rightmost word of the shift register
   Name="Treat 1"
  [STATEMENTLIST]
   LD TIM000
   AND HR60.08 //Shift to action 1 operate position
   AND NOT 00008 //Inverter zero speed output
   AND HR01.00 //Degree of action 1
   OUT 101.00 //Output Treat 1
   Name=" Treat 2"
  [STATEMENTLIST]
   LD TIM000
   AND HR60.10 //Shift to action 2 operate position
   AND NOT 00008
   AND HR01.01 //Degree of action 2
   OUT 101.01 //Output Treat 2
   Name=" Treat 3"
  [STATEMENTLIST]
   LD TIM000
   AND HR60.15 //Shift to action 3 operate position
   AND NOT 00008
   AND HR01.02 //Degree of action 3
   OUT 101.02 //Output Treat 3
  Name="Process 1"
  [STATEMENTLIST]
   LD TIM000
   AND HR62.03 //Shift to Print 1 operate position
   AND NOT 00008
   AND HR01.03 //Degree of print 1
   OUT 101.03 //Output Process 1
  Name=" Process 2"
  [STATEMENTLIST]
   LD TIM000
   AND HR62.05 //Shift to Print 2 operate position
   AND NOT 00008
   AND HR01.04 //Degree of print 2
   OUT 101.04 //Output Process 2
  Name=" Process 3"
  [STATEMENTLIST]
   LD TIM000
   AND HR62.08 //Shift to Print 3 operate position
   AND NOT 00008
   AND HR01.04 //Degree of print 3
   OUT 101.04 //Output Process 3日本欧姆龙PLC应用经验点滴
  以下叙述的硬件/软件条件为:不带RS232串口的笔记本电脑、欧姆龙CPM2AH-60CDR型PLC、Cx-Programmer V5.0编程软件。
  1. Cx-Programmer V5.0与PLC通信不稳定:
  电脑与PLC的连接方式:电脑USB口(该电脑没有RS232串口)←→[USB转RS232电缆的USB插头←→USB转RS232电缆线(电脑已经安装驱动,且默认的COM4端口已经设置为COM1)中间部分←→USB转RS232电缆的RS232公头]←→[[电脑与PLC的连接电缆的RS232母头←→电脑与PLC的连接电缆线的中间部分←→电脑与PLC的连接电缆的RS232公头]]←→PLC的RS232母头。
  上面单中括号内为USB转RS232电缆,双中括号内为电脑与PLC的连接电缆。电脑与PLC的连接电缆接线如下:(1).公头(用以连接PLC)的2、3、9分别与母头的2、3、5(用于连接电脑或USB转RS232连接线)短接,这是欧姆龙官方的连接方法;(2).公头和母头的2-2、3-3、5-5分别短接,这是RS232连接线的常规连接方法。后来经过实践证明:上面2种电脑和PLC的连接电缆都可以使用。第1种电缆通信稳定可靠。对于第2种电缆,当电脑和PLC之间通过VC应用程序进行通信时效果不好,容易丢帧(用串口调试助手可以看到),只有当电脑和PLC共用电源(共地)时才没有发现问题。所以,请尽量采用第1种连接电缆。
  有时间电脑和PLC能正常通信,有时间却不行——显示“Modem已经被选中,要继续码?”故障(实际上“码”应当为“吗”),一旦出现该故障信息,就一定会出现以下故障信息:
  当通信不上时,笔者采用过克隆回以前的正常操作系统、重新安装Cx-Programmer V5.0编程软件等方法,又可以正常通信了,但一旦断线后又可能通信不上了。有几次还发现,有些程序可以和PLC通信上,而有些程序却不行!因此,笔者就将可以通信的PLC程序先备份,然后全部删除程序中的指令,最后将目标程序的指令全部复制过来(复制时注释可以自动复制过来),这样居然电脑就可以正常和PLC进行通信了!但是——下一次这个程序可能又无法正常通信了!郁闷……
  根据通信错误信息“Modem已经被选中,要继续码?”,笔者找到了解决方法:在桌面上右击“我的电脑”,再点击“属性”——“硬件”——“设备管理器”,再双击“调制解调器”,再右击展开的调制解调器型号,点击“停用”就可以了。
  另外,正确连接方法如下:在电脑没开机或(和)PLC没通电(否则带电拔插通信口可能造成通信口损坏(虽然这种几率不大,但你最好不要去碰运气))的情况下连接好USB转RS232电缆、电脑与PLC的连接电缆,然后再通过Cx-Programmer连接电脑与PLC。
  请注意:USB口也不是随便乱插就可以的,关键要保证设备管理器里的RS232口为COM1。笔者的电脑上时这种情况:最初已将默认的RS232口从COM4口改为COM1口,但插下面的USB口却对应RS232的COM4口(COM1、COM3正在使用),无法连接电脑与PLC;插上面的USB口对应RS232的COM1口(COM2、COM4正在使用),可以连接电脑与PLC。
  2. Cx-Programmer V5.0与PLC通信干扰:
  如果Cx-Programmer在线,电脑和PLC已经连接,处于通信状态下,当每次设备停机时(将近20个交流接触器同时断开)Cx-Programmer将会出现通信错误,电脑和PLC连接中断。而当每次开机时(将近20个交流接触器同时吸合)却不会出现通信错误的情况。
  解决方法:重新连接PLC。如果你是个完美主义者,可以在每个接触器线圈上加一个RC阻容模块(每个RC模块大概60个大洋左右),也许不会出现通信错误的情况(不过笔者没有试过哟...)。
  3. 电脑与PLC的连接电缆试验:
因为想到电脑与PLC的连接电缆(第1种常规的连接电缆)为2-2短接、3-3短接、5-5短接,所以考虑直接用USB←→RS232电缆将电脑和PLC连接起来,如果这样可以的话不就省了一条连接电缆了吗?下面是直接用USB←→RS232电缆将电脑和PLC连接起来的试验结果:
有时间第1次通信时出现以下错误:“所选的端口被另一个应用所占用”;第2次通信时出现以下错误:
为什么电脑通过上述两种连接电缆与PLC连接没有问题,而直接采用USB转RS232电缆线与PLC连接却不行呢?以下是分析过程:
第1种可能:阻抗的原因。虽然上述两种连接电缆为直连线,却有阻抗存在,多了这个阻抗就可以正常连接。但这个原因好像很牵强,连笔者自己都不能相信。
第2种可能:该USB转RS232的公头与PLC的母头接触不良,而加一根电缆却能连接正常——USB转RS232的公头与连接线的母头接触良好,连接线的公头与PLC的母头接触良好。该猜测来源于笔者遇到过的一次电脑故障:某台电脑的鼠标无法使用,另外换一个鼠标正常,把故障鼠标换到其它电脑却能正常使用。最后怀疑鼠标接头与主板插口接触不良,就将鼠标插头破开再涂上一层焊锡,结果使用正常!但是对于USB转RS232的公头与PLC的母头接触不良这种猜测,笔者觉得可能性不大——因为他解释不了“所选的端口被另一个应用所占用”这个故障。
最后想到了另外一个可能:USB转RS232直接与PLC连接就相当于USB转RS232的串口与PLC的串口1-1、2-2、3-3、4-4、5-5、6-6、7-7、8-8、9-9一一对应连接,而通过连接线却只有2-2、3-3、5-5三对端子连接,这说明1-1、4-4、7-7、8-8、9-9至少有一对是不能连接的,否则就会出现问题,而且这还既有可能损坏PLC与电脑的通信端口。笔者认为就是这个原因。
&PLC顺序控制设计法编制梯形图
&&& 可编程控制器PLC外部接线简单方便,它的控制主要是程序的设计,编制梯形图是最常用的编程方式,使用中一般有经验设计法,逻辑设计法,继电器控制电路移植法和顺序控制设计法,其中顺序控制设计法也叫功能表图设计法,功能表图是一种用来描述控制系统的控制过程功能、特性的图形,它主要是由步、转换、转换条件、箭头线和动作组成。这是一种先进的设计方法,对于复杂系统,可以节约60%~90%的设计时间.我国1986年颁布了功能表图的国家标准(GB)。有了功能表图后,可以用四种方式编制梯形图,它们分别是:起保停编程方式、步进梯形指令编程方式、移位寄存器编程方式和置位复位编程方式。本文以三菱公司F1系列PLC为例,说明实现顺序控制的四种编程方式。
&&& 例如:某PLC控制的回转工作台控制钻孔的过程是:当回转工作台不转且钻头回转时,若传感器X400检测到工件到位,钻头向下工进Y430当钻到一定深度钻头套筒压到下接近开关X401时,计时器T450计时,4s后快退Y431到上接近开关X402,就回到了原位。功能表图见图1:
图1&&&& 功能表图
2& 使用起保停电路的编程方式
&&& 起保停电路仅仅使用与触点和线圈有关的指令,无需编程元件做中间环节,各种型号PLC的指令系统都有相关指令,加上该电路利用自保持,从而具有记忆功能,且与传统继电器控制电路基本相类似,因此得到了广泛的应用。这种编程方法通用性强,编程容易掌握,一般在原继电器控制系统的PLC改造过程中应用较多。如图2为使用起保停电路编程方式编制的与图1顺序功能图所对应的梯形图,图2中只有常开触点、常闭触点及输出线圈组成。
图2&&&& 起保停电路实现顺序控制
3& 使用步进梯形指令的编程方式
&&& 步进梯形指令是专门为顺序控制设计提供的指令,它的步只能用状态寄存器S来表示,状态寄存器有断电保持功能,在编制顺序控制程序时应与步进指令一起使用,而且状态寄存器必须用置位指令SET置位,这样才具有控制功能,状态寄存器S才能提供STL触点,否则状态寄存器S与一般的中间继电器M相同。在步进梯形图中不同的步进段允许有双重输出,即允许有重号的负载输出,在步进触点结束时要用RET指令使后面的程序返回原母线。把图1中的0-3用状态寄存器S600-S603代替,代替以后使用步进梯形指令编程,对应的梯形图如图3所示。这种编程方法很容易被初学者接受和掌握,对于有经验的工程师,也会提高设计效率,程序的调试、修改和阅读也很容易,使用方便,程序也较短,在顺序控制设计中应优先考虑,该法在工业自动化控制中应用较多。
图3&&&& 步进指令实现顺序控制
4& 使用移位寄存器的编程方式
&&& 从功能表图可以看出,在0-3各步中只有一个步在某时刻接通而其他步都在断开,把各步用中间继电器M200-M203代替,就很容易用移位寄存器实现控制。图4为用移位寄存器编程时的梯形图,采用移位寄存器M200-M217的前四位M200-M203代表4个步,组成1个环形移位寄存器。用移位寄存器主要是对数据、移位、复位3个输入信号的处理。该方法设计的梯形图看起来简洁,所用指令也较少,但对较复杂控制系统设计就不方便,使用过程中在线修改能力差,在工业控制中使用较少,大多数应用在彩灯顺序控制电路中。
图4&&&& 移位寄存器实现顺序控制
5& 使用置位复位指令的编程方式
如图5为使用置位复位编程方式编制的与图1顺序功能图所对应的梯形图。在以置位复位指令的编程方式中,用某一转换所有前级步对应的辅助继电器的常开触点与转换对应的触点或电路串联,作为使所有后续步对应的辅助继电器置位和使所有前级步对应的辅助继电器复位的条件。对简单顺序控制系统也可直接对输出继电器置位或复位。该方法顺序转换关系明确,编程易理解,一般多用于自动控制系统中手动控制程序的编程。
图5&&&& 置位复位指令实现顺序控制
以上四种顺序控制编程方式各有特点,可以根据实际情况选择一种来编制梯形图,它们的一般比较见附表。教学实践表明这些编程方式很容易被初学者接受和掌握,用它们可以得心应手地设计出任意复杂的顺序控制程序。
采用功能表图的四种方式来编制梯形图,可适应于不同场合,供工程技术人员视工艺要求决定。它是一种先进的设计方法,对于复杂系统,能节省(60~90)%的时间。PLC应用中节省输入/输出点的实用技术
&&& 在设计PLC控制系统或对老设备进行PLC技术改造时,设计人员经常会发现系统的输入/输出信号太多,需占用大量的PLC输入/输出点,在原先预计的输入/输出点不够用的情况下,当然可以通过I/O扩展单元或I/O模块来解决,被迫提高PLC的选用档次,进而使系统的硬件配置增加,体积变大,设备初投资也随之大大增加。笔者认为在对不是需要增加很多输入/输出点的情况下,可以通过一定的设计技术来扩展输入/输出点的数量,而又不降低PLC系统的可靠性,从而达到降低设备初投资成本的目的。
2& 对输入点的扩展技术
2.1& 合并输入扩展技术
一台棉纺织设备中常常有几个起动控制按钮和几个停止控制按钮,且它们分别设置在机台的不同位置,形成一种多地控制系统。图1为三地控制的继电器控制线路,从图1中可以看出:在不同的地方装有3只停止按钮SB1、SB2、SB3,按下其中任一按钮都使KM失电,电动机停转;有3只起动按钮SB4、SB5、SB6,按下其中任一按钮都使KM得电并自保持,使电动机正常运转;还有一过载检测元件FR,只要主电路有过负荷故障,其串联在图1中的FR常闭触点断开,也使KM失电,电动机停转,从而切断过负荷故障。
图1&& 三地控制的继电器控制线路
若对该设备进行PLC改造,对输入信号不加任何处理,将有SB1~SB6、FR共7个输入信号要占用PLC 7个输入点,在输入/输出点相对紧张时,对输入信号可以采取图2所示合并输入扩展技术:即在PLC外部将4个常闭(动断)触点串联,3个常开(动合)触点并联后再分别接入PLC的输入端子,这样只需占用2个输入点,节省了5个输入点,同样能达到对其7个输入信号的处理目的。转化为梯形图如图3所示即可。
图2& 合并输入扩展技术线路图
图3& 采取合并输入扩展技术的梯形图&& 图4& 油泵电机起停控制的梯形图
2.2& 状态变换扩展技术
通常对于工作状态属于0/1或者开/关量变化的动作(如油泵电机的起停、冷却液的开关、灯的亮熄等)进行PLC控制时,一般情况下要由2个按钮分别控制它们的开和关。
图4为某机床油泵电机起停控制的梯形图,占用了PLC 2个输入点X0、X1,其中X0为油泵电机开按钮输入信号,X1为油泵电机关按钮输入信号,Y0为油泵电机开输出信号。
对图4采用状态变换扩展技术,则只需一个按钮X0即可,每按一下按钮X0,就将当前的油泵电机的工作状态翻转一次,其实现的PLC梯形图程序有三种电路,分别如图5、图6、图7所示。
图5& 用计数器的梯形图&&& 图6& 不用计数器的梯形图
图7&& 用功能指令的梯形图
图5为用计数器进行控制的状态变换技术。从图5可以看出,当第一次按下X0时,使Y0=1且自保持,油泵电机运转,同时X0的下降沿启动C0计数一次;当第二次按下X0又松开时,它的下降沿又使C0计数一次,此时的计数值达到C0的设定值(K2),计数器C0动作,其动断触点断开Y0回路,油泵电机停转,实现了输出状态的翻转,在接下来的一个扫描周期内,计数器的动合触点使C0复位,为下次计数做准备,从而实现了用一只按钮启停的单数次计数、双数次计数复位的控制。
图6为不用计数器进行控制的状态变换技术。从图6可以看出,初始运行时,M0=M1=Y0=0,当第一次按下X0时,其上升沿即使Y0=1且自保持,油泵电机运转,此时M0=1,M1=0;当第二次按下X0时的扫描周期内,M0=1,M1=1,Y0=0,油泵电机停转,实现了输出状态的翻转,在接下来的一个扫描周期内,M0=M1=Y0=0,又恢复为初始状态,为下一次的状态变换作好了准备。从而也实现了用一只按钮启停的单数次运转、双数次停转的控制
图7为用功能指令进行控制的状态变换技术。图7中,ALT为交替输出指令,其实际上是一个二分频电路,每执行一次ALT指令,目标元件的输出状态取反,即目标元件的状态在ON和OFF之间交替变换。初始运行时,Y0=0,当第一次按下X0时,其上升沿即使Y0=1且自保持,油泵电机运转,当第二次按下X0时的扫描周期内,Y0=0,油泵电机停转,实现了输出状态的翻转[2]。
2.3& 条件分隔扩展技术
在各种数控装置中,自动和手动是最常用的两种控制方式。手动工作方式的大量按钮,占用了很多的输入点,操作面板上的控制按钮大多是为手动方式准备的,仔细分析会发现有些手动控制中使用的按钮在自动方式中根本就不会出现。因此,我们可将这些不会同时出现的输入信号按工作方式分成两组,使它们在不同的工作方式中接入相同的输入点,从而达到节省输入点的目的,这种方法即为条件分隔扩展技术。具体方法如图8所示。
图8中,HK为工作方式转换开关(如1位为自动,2位为手动方式),必须占用一个点X0,以便在梯形图中区分不同的作用;X1、X2、X3为重复使用的输入点,这3个点分别接不同作用的开关,通过转换开关方式的选择,使点在不同时期起不同的作用,又为了避免寄生电路引起各点互相牵扯,各开关必须通过二极管或门再接到输入点上。像图8所示电路可节省6-4=2个输入点,达到了节省输入点的目的。
图8&& 采用条件分隔扩展技术的线路图
2.4& 输入点组合应用扩展技术
将n个输入点取m个点组合,可得到Cnm个组合组,其每一个组合组便是一个新的输入点,从而使输入点从n个扩展为Cnm个,在不改变PLC原始配置的情况下使输入点净增Cnm-n个,这种技术称为输入点组合应用扩展技术。这种技术中,当n增加时,被扩展点数量增加很快。如n=6,当m=2时,新形成点数量为C62=15,这样就从n=6点扩展为15个点。在此技术中,一般取m=2,这样不致使梯形图过繁。具体实现办法如图9所示:
图9& 采用输入点组合应用扩展技术的线路图
图9为n=5,m=2的组合应用图。图9中,在每个参与组合的点(X0到X4)上接一个二极管或门,其每个或门扇输入数为(n-1)=5-1=4,且每m个(本图为2)或门各与一个输入端相连,一直不重复地接完,直至形成Cnm(本图为C52)条连接线,这每一条连接线便是一个新的控制点。[3]
2.5& 利用比较指令的输入扩展技术
比较指令的功能是比较两个数的大小。其指令格式如图10所示。当X0=ON时,则将K1(S1)与计数器C0(S2)的内容进行比较:
当K1&C0,M0=1; K1=C0, M1=1; K1工厂生产线上经常有这么一种要求,即要求n台电动机随时随地顺序起动,随时随地可逆序停车。如n=3时,若不采用任何输入扩展技术,则需3只起动按钮、3只停止按钮,要占用PLC 6个输入点。现采用比较指令设计技术,按图10所示梯形图设计,则只需占用X0、X1 2个输入点,即可实现上述功能。[2]
图10& 利用比较指令输入扩展技术的梯形图
图10中,当按一下X0=ON,M1=1,Y0=1且自保持,第一台电动机起动;再按一下X0=ON,M2=1,Y1=1且自保持,第二台电动机起动;第三次按下X0=ON,M0=1,Y2=1且自保持,第三台电动机起动,起动过程完成。同理,当要求逆序停车时,按一下X1=ON,M11=1,Y2=0,第三台电动机停车;再按一下X1=ON,M12=1,Y2=Y1=0,第二台电动机停车;第三次按下X1=ON,M10=1,Y2=Y1=Y0,第一台电动机停车, 停车过程按要求完成。
3& 对输出点的扩展技术
3.1& 合并输出扩展技术
目前,用PLC来实现控制的领域越来越多,像舞台的艺术灯、大型户外广告屏、节日灯的控制等,在这些灯光的控制逻辑中,有一些灯的控制逻辑完全相同,对于通断状态完全相同的2个及以上的负载,可以采用并联连接的合并输出扩展技术,只需占用PLC的一个输出点即可;对于在不同的工作方式下(如自动或手动工作方式)或者通过外部开关的转换,有些输出点不会同时出现的场合,也可以采用合并输出扩展技术,使每个PLC输出点可以控制两个及以上不同时工作的负载。具体实现方法如图11所示。
图11& 采用合并输出扩展技术的线路图
图11中,如果KM1、KM2所带负载的状态完全相同,只需把KM1、KM2的线圈并联连接,只占用1个输出点Y0,可节省1个输出点;同样图11中,如果Q1、Q2不会同时为接通状态,则可以1个输出点Y1来带动两路不会同时有输出的负载KM3、KM4的输出,从而也节省了一个输出点。
3.2& 输出点组合应用扩展技术
输出点组合应用扩展技术的要点是将n个输出继电器号分为两组,每组个数各为n/2个,通过外部接线的技术组合,使每组每次有一个继电器有输出,则其可带(n/2)×(n/2)个负载,这种技术可节省(n/2)×(n/2)-n个输出点。如图12所示:用6个(注:n=6)输出点可以驱动9(3×3)个负载,节省了3个输出点,在梯形图编程时,需要用编码的方法确定每一个负载,每一个负载由行线和列线所在的输出继电器号共同承担。
3.3& 机外处置扩展技术
PLC控制器有基本单元、扩展单元、扩展模块之分,其相对继电器-接触器控制电路而言,价格相对较高,尤其是在需要占用大量输出点时,还要对PLC基本单元进行扩展处理或需要选用更大点数的基本单元时,价格问题显得尤为突出,因此在对某些控制逻辑简单而又不参与工作循环的电气设备或者在工作循环之前须先工作的设备而言,在用PLC进行总体控制设计时,这些设备可以不用PLC来控制其输出,而采用PLC机外处置的办法仍用继电器-接触器来进行控制,从而也达到了节省输出点的目的,并且可大大降低投资成本。[1]
图12& 采用输出点组合应用扩展技术的线路图
上述介绍的这些技术,虽经笔者在电气实验室调试取得了成功,证明是切实可行的,但在实际应用过程中仍要注意进行模拟调试和系统联调,确保万无一失。这些技术方法应当是在迫不得已的情况下考虑的方法,因为在考虑节约投资成本等经济性的同时,这些技术难免会带来实践操作、维护的复杂性,即使是非用不可,也一定要确保设备安全可靠,将复杂程度降到最低限度,并注意做好设计资料的保管工作,以便提供维护人员随时查阅。PLC实现变频器多机控制
以变频调速器为调速控制器的同步控制系统、比例控制系统和同速系统等已广泛应用于冶金、机械、纺织、化工等行业。以比例控制系统为例,一般的系统构成如图1 所示。
工作时操作人员通过控制机(可为PLC或工业PC)设定比例运行参数,然后控制机通过D/A转换模件发出控制变频调速器的速度指令使各个变频调速器带动电机按一定的速度比例运转。此方案对电机数目不多,电机分布比较集中的应用系统较合适。但对于大规模生产自动线,一方面电机数目较多,另一方面电机分布距离较远。采用此控制方案时由于速度指令信号在长距离传输中的衰减和外界的干扰,使整个系统的工作稳定性和可靠性降低;同时大量D/A转换模件使系统成本增加。为此我们提出了PLC与变频调速器构成多分支通讯控制网络。该系统成本较低、信号传输距离远、抗干扰能力强,尤其适合远距离,多电机控制。
二、系统硬件构成
系统硬件结构如图2 所示,主要由下列组件构成;
1、FX0N—24MR为PLC基本单元,执行系统及用户软件,是系统的核心。
2、FX0N—485ADP为FX0N系统PLC的通讯适配器,该模块的主要作用是在计算机—PLC通讯系统中作为子站接受计算机发给PLC的信息或在多PLC构成n:n网络时作为网络适配器,一般只作为规定协议的收信单元使用。本文作者在分析其结构的基础上,将其作为通讯主站使用,完成变频调速器控制信号的发送。
3、FR—CU03为FR—A044系列比例调速器的计算机连接单元,符合RS—422/RS—485通讯规范,用于实现计算机与多台变频调速器的连网。通过该单元能够在网络上实现变频调速器的运行控制(如启动、停止、运行频率设定)、参数设定和状态监控等功能,是变频器的网络接口。
4、FR—A044变频调查器,实现电机调速。
在1:n(本文中为1:3)多分支通讯网络中,每个变频器为一个子站,每个子站均有一个站号,事先由参数设定单元设定。工作过程中,PLC通过FX0N—485ADP发有关命令信息后,各个子站均收到该信息,然后每个子站判断该信息的站号地址是否与本站站号一致。若一致则处理该信息并返回应答信息;若不一致则放弃该信息的处理,这样就保证了在网络上同时只有一个子站与主站交换信息。
三、软件设计
1、通讯协议
FR—CU03规定计算机与变频器的通讯过程如图3 所示,
该过程最多分5个阶段。?、计算机发出通讯请求;?、变频器处理等待;?、变频器作出应答;?、计算机处理等待;?、计算机作出应答。根据不同的通讯要求完成相应的过程,如写变频器启停控制命令时完成?~?三个过程;监视变频器运行频率时完成?~?五个过程。不论是写数据还是读数据,均有计算机发出请求,变频器只是被动接受请求并作出应答。每个阶段的数据格式均有差别。图4 分别为写变频器控制命令和变频器运行频率的数据格式。
2、PLC编程
要实现对变频器的控制,必须对PLC进行编程,通过程序实现PLC与变频器信息交换的控制。PLC程序应完成FX0N—485ADP通讯适配器的初始化、控制命令字的组合、代码转换及变频器应答信息的处理等工作。PLC梯形图程序(部分程序)如图5 所示。
程序中通讯发送缓冲区为D127~D149;接受缓冲区为D150~D160。电机1启动、停止分别由X0的上升、下降沿控制;电机2启动、停止分别由X1的上升、下降沿控制;电机3启动、停止分别由X2的上升、下降沿控制。程序由系统起始脉冲M8002初始化FX0N—485ADP的通讯协议;然后进行启动、停止信号的处理。以电机1启动为例,X0的上升沿M50吸合,变频器1的站号送入D130,运行命令字送入D135,ENQ、写运行命令的控制字和等待时间等由编程器事先写入D131、D132、D133;接着求校验和并送入D136、D137;最后置M8122允许RS指令发送控制信息到。变频器受到信号后立刻返回应答信息,此信息FX0N—485ADP收到后置M8132,PLC根据情况作出相应处理后结束程序。
1、实际使用表明,该方案能够实现PLC通过网络对变频调速器的运行控制、参数设定和运行状态监控。
2、该系统最多可控制变频调速器32台,最大距离500m。
3、控制多台变频器,成本明显低于D/A控制方式。
4、随着变频器的增加,通讯延迟加大,系统响应速度低于D/A控制方式。PLC通信原理与程序设计
通讯程序设计在自动化系统的应用越来越广泛,例如plc与操作界面的数据交换,通过通讯对变频器的控制,plc的连网等等。
  要想实现plc的通讯编程,首先所选的plc必须有强大的通讯能力,就是说plc的操作系统能够支持多种通讯格式,通常一种品牌的plc如果能够提供给用户更多的编程自由度,那么这种品牌的技术开发能力就越强大,大多数品牌只能提供固定格式的通讯格式或协议,这就大大局限了plc与其他智能设备的数据交换。
  我们的plc产品具有RS232和光电隔离的RS485两个自由通讯口,两个通讯口可以同时收发数据,几乎可以适应所有通讯格式,可以提供CRC和BCC等多种校验方式。
  以一台PLC通过485通讯控制多个某品牌的变频器为例:
  如果该变频器的波特率是9600b/s,8个数据位,奇校验,1个停止位。那么首先必须在plc的嵌入C窗口的初始化代码区编程一个通讯口设置语句:Set485Port(9600,o,8,1);仅仅一个语句就完成了对485通讯口的编程。
  由于485通讯必须设定主从关系,这里是plc控制多台变频器,所以plc必须设置为主,因此还需在初始化代码区增加一个地址和主从设定语句:SetAddress(1,MASTER);事实上,对于主控制器来说,地址已经失去意义。
  通讯口已经设置完毕,下面就是如何根据要求将数据发送给变频器。
   例如一组8字节控制数据如下所示:
   01h ----&变频器编号
   03h ----&命令
   21h ----&两字节参数地址
   00h ----&两字节参数
   CRC ---&两字节CRC校验马
   PLC程序:
   Set485TBAddPointer(0);
   AddNumberTo485TB(0x1);
   AddNumberTo485TB(0x3);
   AddNumberTo485TB(0x21);
   AddNumberTo485TB(0x2);
   AddNumberTo485TB(0x0);
   AddNumberTo485TB(0x2);
   AddCRCTo485TB();
   Start485Transmit();
&上位机与下位机通信设计
现代化集中管理需要对现场数据进行统计、分析、制表、打印、绘图、报警等,同时,又要求对现场装置进行实时控制,完成各种规定操作,达到集中管理的目的。加之单片机的计算能力有限,难以进行复杂的数据处理。因此在功能比较复杂的控制系统中,通常以PC机为上位机,单片机为下位机,由单片机完成数据的采集及对装置的控制,而由上位机完成各种复杂的数据处理及对单片机的控制。
2& PC机与单片机8051之间的通信特点
在工业控制系统中,各种数据的采集和执行机构的控制都是由下位机或探测站来完成。由于单片机具有体积小、价格低廉、可应用于恶劣工业环境的特点,在分布式控制系统中大多采用单片机作为下位机来进行数据采集和现场控制。在这些应用中,单片机只是直接面向被控对象底层。而对采集到的数据进行进一步分析和处理的工作是由功能强大的主控PC机来完成的。因此,PC机和单片机之间就有着大量的数据交换。
3& PC机与单片机8051通信的硬件设计
通常PC机和单片机之间的通信是通过串行总线RS-232实现的。因此采用一种以MAX232为核心的通信接口电路。该接口电路适用于由一台PC机与多个8051单片机串行通信的设计,其原理和方法同样适用于PC机与其它单片机之间的串行数据通信。其原理框图见图1:
图1&& 单片机与PC机通信原理框图
该框图中,起着重要作用的是RS-232C通信接口电路。它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成,上位机直接利用它的RS-232串行口,为此,采用了RS-232串行通信来接收或上传数据和指令。但RS-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。在此电路中,采用MAX232实现TTL逻辑电平和RS-232电平之间的相互转换。 MAX232由单一的+5V电源供电,只需配接5个高精度10μF/50V的钽电容即可完成电平转换。因此,避免了用时必需两路电源的麻烦。转换后的串行信号TXD、RXD直接与PC机的串行口连接。如此设计,既可发挥出PC机强大的计算和显示功能,又可以体现出单片机灵活的控制功能,有利于对现场信号的实时采集、处理和监控。
3.1& 8051与PC机之间的通信协议
在许多场合的测控系统中,约定PC机和8051单片机的通信协议为:
Number+Command+Length+Data+Check
Number:下位机的机号,若设计中有3台下位机,即Number 取01H,02H,03H,分别代表:#1,#2,#3号下位机;
Command:本次命令的代码;Length:本次发送数据段的字节数;
Data:要发送的数据段;
Check:1字节的校验码。
本设计只考虑一个8051单片机,故可对上述通信协议进行简化。
3.2& 8051和PC机之间通信的软件设计
VB提供了串行端口控件Mscomm方便应用程序实现串行通讯,该控件屏蔽了通信过程中的底层操作,程序员应用时只需设置、监视Mscomm控件的属性和事件即可完成对串行口的初始化和数据的输入、输出工作。汇编语言是一种执行效率高、可读性强的语言。为实现通讯正常,PC机与单片机约定如下:
波特率:2400
信息格式:1个起始位,8位数据位,1个停止位,无奇偶校验位;
串行口操作模式:标准异步串行通信,串行口模式1;
传送方式:PC机采用查询方式接收数据,8051单片机采用中断方式接收信息。
(1) 总体功能设计
通过综合分析,本系统至少应具备如下功能:
l PC机与单片机8051都可发送和接收数据,进行可以异步串行通信;
l PC机键盘输入发送给单片机8051,单片机接收PC机发来的数据并送LED显示;
l 单片机8051键盘的每次输入以BCD码送给单片机的LED显示,单片机发送的数据由四次按键的BCD码组成,发送时作为一个队列发送,PC机接收单片机发送来的数据并送窗口显示;
l 上位机程序即PC端程序采用VB6.0制作,人机界面友好,界面简洁,功能完善,下位机程序即单片机端采用汇编语言进行开发。
图2&& 上位机模块
图3& 下位机模块
(2) 通讯流程图
实现下位机即单片机8051系统的初始化,8255初始化,设置单片机串行口控制寄存器SCON,电源控制寄存器PCON,定时器T1初始化,开中断。
系统不停的对键盘和RxD线进行监测,当通过扫描发现有按键输入时,经过按键处理后就启动该模块向上位机PC端发送所检测到的键码;当单片机8051监测到RxD线上有数据到时就启动该子程序对PC发来的数据进行接收,同时经过BCD转换送单片机系统的LED进行显示以方便和PC机发送的数据进行比较,以确认通信是否正确。流程图见图4。
图4& 主程序流程图
图5& 数据队列发送流程图
l 数据队列发送子程序
当单片机8051键盘已有4次输入时,就启动该模块向上位机PC端发送所检测到的键码。流程图见图5。
l 键码发送子程序
当单片机8051检测到键盘有输入时,就通过按键处理启动该模块向上位机PC端发送所检测到的键码。流程图见图6。
图6& 键码发送流程图
图7& 数据接收流程图
图8& BCD转换流程图
l 数据接收子程序
当8051监测到RxD线有数据到时就启动子程序对PC发来的数据进行接收。流程图见图7。
l BCD码转换子程序
该程序通过把#DATABUF中的十进制数值除以100(64H),得到的商就是百位数的BCD码,然后把余数除以10(0AH)便可以得到十位和个位的BCD码,从而得到相应的三位BCD码。在该子程序中进行双字节无符号二进制数的除法时要用到前面介绍的多字节无符号二进制数的除法算法,由于原理相似,在此不再重述。流程图见图8。在此程序中因原来的接收数据存在于#DATABUF附近,为防止发生信息覆盖故使用了暂存单元来暂时寄存除法计算的中间值。
l LED显示子程序
该子程序实现对接收数据进行BCD码转换并输出到LED,采用动态显示的方式进行显示。流程图见图9:
图9& LED显示流程图
上位机与下位机通讯是一个应用性广,适用性强的基础设计,可以应用在变频器上。要真正做好一个具有良好人机界面及交互性,使上位机和下位机能正常高效的通讯,需要设计人员具有很强的VB和单片机汇编语言的驾驭能力。同时,需要相当程度的设计经验,这样才能对设计中出现的问题采取行之有效的解方案。本文的研究对以后进一步深入奠定了基础。
阅读(2801)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'電氣維修經驗--计算机与PLC的通讯格式和实现方法',
blogAbstract:'& 计算机与PLC的通讯格式和实现方法
可编程序控制器(PLC)都有一个编程口。以日本三菱公司生产的PLC为例(包括FX系列和A系列),其编程口为RS-422格式,根据PLC型号不同又分为8针座编程口和25针座编程口。对于后者,可直接将SC—08编程电缆将PLC的编程口和微型计算机的RS—232口连接起来;对于后者,则还需要一根转换电缆将PLC 的8针座编程口和25针编程电缆相连。无论何种情况,一旦将PLC用户程序由微型计算机编程环境传到PLC 用户程序区,其编程口大多就没有被再利用。其实,这是一种浪费。也就是说,可利用此编程口实现微型计算机和PLC 的数据通讯,将PLC的工作状态纳入微型计算机管理之下。  
2 编程口操作命令类型与通讯端口初始化
blogTag:'',
blogUrl:'blog/static/5',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:5,
permalink:'blog/static/5',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 输入输出装置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信