机电之家行业门户网运行
文章 下载
最新公告:

  没有公告

设备维修与管理培训
您现在的位置: 设备维修与管理 >> 监测诊断 >> 控制技术 >> 监测诊断系统 >> 文章正文
 
赞助商
 
 
最新文章
 
 步进电机的PLC直接控制
 涤纶工业长丝纺丝机用变频器、可
 PLC实现变频调速器多电机控制
 啤酒糖化绞笼吹气出槽改用LOGO!
 PLC控制步进电机在机床自动线中的
 应用PLC改进绕线式电动机起动控制
 KDN-K3系列PLC在热封切袋机中的应
 GEO系列旋转包装机计量控制系统的
 PLC在轧钢生产故障诊断中的应用研
 浮法玻璃生产线的智能自动化技术
 
推荐技术
 
 
相关文章
 
S系列I/O前端与InTouch
使用无协议通讯方式改变
基于三菱可编程控制器无
 
客户服务
 
如果您有设备方面好的文章或见解,您可以送到我们的投稿信箱
客服电话:0571-87774297
信   箱:88ctv@163.com
我们保证在48小时内回复


s

b

g

l

.

j

d

z

j

.

c

o

m

 

[组图]串行通讯的PLC远程控制           
串行通讯的PLC远程控制
作者:佚名 文章来源:网络 点击数: 更新时间:2009-6-5 11:12:11

可编程控制器PLC的应用绝大部分都是通过编写梯形图的方式实现程序控制的,但对于智能低压开关系统来讲,其分、断的控制往往要求由主控操作室远程控制来完成。按传统的方法,主控室要对某一个开关柜进行操作,须先发一个控制命令,PLC接收到该控制命令后,再由PLC程序执行该命令,该段程序必须用梯形图或逻辑指令编程,当开关柜数目巨大或要求多路设备同时控制时,PLC的程序编写就比较复杂,尤其是采用脉冲型输出控制而不是用电平保持型控制时更是如此。因为开关柜的分、合控制须两路继电器输出分别控制“分闸”和“合闸”,而不是由单路继电器保持输出控制,使继电器输出与开关柜分合一致。考虑这些因素,本文采用串行通讯实现PLC的控制,PLC本机无须任何梯形图或逻辑指令,这样不仅实现简单而且方便可靠。

一、低压监控系统设计

(一)系统设计要求

依据用户的实际要求,智能低压开关柜不仅能在当地手动进行分、合,而且具有系统零位、时控和远方控制的功能,其控制回路的电气控制图如图1所示。图1中SV 为转换开关,当1、2通时,为当地时控方式;9、10通时为手动方式;5、6通时为远程控制。当开关柜工作在远方控制方式时,当PLC输出触点#107- #113闭合时,KM线圈加载得电,KM常开触点闭合,并形成回路使KM线圈始终得电,此时PLC输出触点#107-#113释放,当PLC输出触点 #105-115吸合时,KA线圈得电,KA常闭继电路断开,使KM线圈回路失电,KM常开触点断开,当KM线圈常开触点断开后,PLC#1052115 输出触点释放,开关维持断开状态。图中#901-#903作为PLC的输入触点。

(二)设计方案简述

本系统针对低压系统的实际要求设计,实现开关柜的远程控制。主站通过电力专用modem与远方子站RTU进行双向通讯,主站发出控制命令,子站接收主站控制命令并转发到PLC,并将PLC的执行结果及时反馈给主站,控制时间在1~2s完成。

监控系统分为三级:主站、变电站当地子站、PLC和仪表设备。主站借助GPS时钟精确定时,操作员可将任何时候的停电和启动设置进主站,由主站自动发出控制命令,该监控系统极适合路灯及景观灯的控制。



图1 控制回路的电气控制原理图

二、通讯协议及处理方法

(一)主站与子站的通讯协议

主站采用电力系统远动循环规约与子站进行通信,但远动循环规约中仅有主站对子站的单点遥控命令,为此主站端必须对CDT规约进行扩展,我们借用遥信报文的格式,将主站端需要控制的低压开关状态,用遥信报文下发到子站,为此仅需将下发的遥信报文中的开关状态内容分析出来,分别放置在yk_road[0]、 yk_road[1]、yk_road[2]、yk_road[3]四个字节中,支持对32路低压断路器的控制。报文由同步字、控制字和信息字三部分组成,其格式如下:

同步字为6个字节:0dbh,09h,0dbh,09h,0dbh,09h;控制字为6个字节:控制字节、帧类别、帧长度、源站址、目的站址、CRC校验;信息字为帧长度×6个字节,本文因为控制点数在32个以内,所以信息字仅为6个字节:功能码、1到8组开关柜控制状态、9到16组开关柜控制状态、17到24组开关柜控制状态、备用开关柜控制状态、CRC校验。整个控制报文18个字节,这样既符合CDT规约的通信格式,又不增加RTU的通信报文分析负担。

在该规约处理中,关键为实时判断出同步字头,然后根据帧类别区别遥控选择命令、遥控执行命令、遥控辙消命令、系统对时和成组开关控制命令,分析出遥控数据存放在yk_road[0]~yk_road[3]中,并置相应标志,再由远动测量装置将命令进行分析转换发给

PLC。实现该规约的分析方法voidinterruptCntReach1()函数如下:

voidinterruptCntReach1()/*串口1每收到一个字节中 断一次的中断处理程序*/

{ cntreach[1]++; /*每接收一个字节,中断 接收计数器加1*/

stat=sio_read(p[1],data,1);/*从串口1缓冲区读入一 个字节数据放到data[0]中*/

if(ok[1]==0){/*如未判断到同步字节,以下分析同步 字头*/

switch(tp[1]){

case0:if(data[0]==0xd7)tp[1]++; break;

case1:if(data[0]==0x09)tp[1]++;

else tp[1]=0; break;

case2:if(data[0]==0xd7)tp[1]++;

else tp[1]=0; break;

case3:if(data[0]==0x09)tp[1]++;

else tp[1]=0; break;

case4:if(data[0]==0xd7)tp[1]++;

else tp[1]=0; break;

case5:if(data[0]==0x09)

{ ok[1]=1;cntreach[1]=0; }



else tp[1]=0; break;

default:break; } }

if((ok[1]==1)&&(cntreach[1]、=0))/*已判断到同步字头后,以下分析报文内容*/

{Rx_buf[1][cntreach[1]-1]=data[0];

if(cntreach[1]==3)LGn[1]=Rx_buf[1][2];

if(cntreach[1]>=(LGn[1]*6+6))

{step_flag[1]=1;/*置报文同步标志*/

CODE[1]=Rx_buf[1][1]; /*帧类别*/

switch(CODE[1]){

case0x61:…/*遥控选择命令处理*/

case0xc2:…/*遥控执行命令处理*/

case0xb3:…/*遥控辙消命令处理*/

case0x7a:…/*系统对时,*/

case0xf4:if(Rx_buf[1][6]==0xf0)/*分析出遥控数 据,并置相应标志*/

if(Rx_buf[1][2]==1)

{yk_road[0]=Rx_buf[1][7];

yk_road[1]=Rx_buf[1][8];

yk_road[2]=Rx_buf[1][9];

yk_road[3]=Rx_buf[1][10];

yk.road=1;yx1_state[0]=1;} break;

default:break;

}reset_point(1);/*复位各种标志的函数*/

} }sio_flush(p[1],0); }


(二)子站与松下PLC的通信协议

松下PLC通信协议MEWTOCOL2COM为厂家专门设计的协议,采用ASCII码的方式传送,用应答方式实现PC机与松下Fp1PLC之间的通信。由子站端RTU发出/命令信息0,FP1PLC响应,其基本格式如图2。



其命令代码Commandcode由2~3个ASCII字符组成,共26种,主要有:RCS为读一个触点数据;WCS为写一个触点数据;RCP为读多个触点数据;WCP为写多个触点数据;RS为读定时器和计数器的设定值;WS为写定时器和计数器的设定值;RCC为将多个触点数据以字方式读入;WCC为将多个触点数据以字方式写入;因此,通过对这26种命令组合分析,可以完全构成由远程对PLC进行控制,而PLC本身无需编写任何梯形图。通过分析测试,例如对 PLC下发ASCII数据串“%01#RCCX00000001**\xod”,共19个字节,其中X是输入数据类型,Y是输出数据类型,数据串末尾是回车符,必须用\xod代替,其中报文可以不计算BCH校验码,用**代替,该报文实现了以字方式读01号PLC中的输入从0000到0001数据,共32 路输入数据。PLC收到该报文后,立即回17个字节的数据串,前6个数据为/%01#RC0,后8个数据为2个字的输入点数据,每个字数据用4个字节,每个字符可表示4位输入点的状态,设计了Read_fp1_input()函数实现报文分析转换方法。

对PLC的输出控制用WCC命令实现,其基本数据串格式为“%01#WCCY000000030000000000000000**/xod”,该报文实现了以字方式置01号PLC中的输出点从0000到0003数据,控制数据内容为16个字节,每个字符可表示4位输出点的状态,共64路输出数据。因为每个低压开关柜需要“开”、“断”2 路输出控制,实际此命令只可控制32路开关。为了系统可靠,低压开关设计为脉冲控制型,为此必须用通信命令

来实现PLC输出触点的同时输出,延时一段后再对PLC进行求反输出控制。设计Write_fp1_output()函数实现了具体报文转换成输出数据下发给PLC的方法。

Read_fp1_input() /*读FP1PLC输入数据的 处理函数*/

{unsignedcharfp1_read[19]=/%01#RCCX00000001* *\x0d0;intn;

memcpy(SendBuffer,fp1_read,19);

receive_ok=0; termintrr=0;count=0;

sio_putb(p[6],SendBuffer,19);

while(count<wait_time)

{if(termintrr)

{if(Test_buf[6][3]==0x24)

{Test_buf[6][6]=Asc_to_Hex(Test_buf[6][6]);

Test_buf[6][7]=Asc_to_Hex(Test_buf[6][7]);

Test_buf[6][8]=Asc_to_Hex(Test_buf[6][8]);

Test_buf[6][9]=Asc_to_Hex(Test_buf[6][9]);

Test_buf[6][10]=Asc_to_Hex(Test_buf[6][10]);

Test_buf[6][11]=Asc_to_Hex(Test_buf[6][11]);

Test_buf[6][12]=Asc_to_Hex(Test_buf[6][12]);

Test_buf[6][13]=Asc_to_Hex(Test_buf[6][13]);

yx_road[0]=((Test_buf[6][6]&0x0f)*16+Test_buf [6][7]);

yx_road[1]=((Test_buf[6][8]&0x0f)*16+Test_buf [6][9]);

yx_road[2]=((Test_buf[6][10]&0x0f)*16+Test_ buf[6][11]);

yx_road[3]=((Test_buf[6][12]&0x0f)*16+Tes buf[6][13]);

step_flag[6]=1; count = wait_time+1;

} } }}

Asc_to_Hex(charx)/*ASCII码转换成十六进制数 */

{ if(x<=0x39)x=x&0x0f; else x=x-“A”+ return x;}

Hex_to_Asc(charx,inthigh)/*十六进制数的高、 转换成ASCII码*/

{if(high==1)x=((x&0xf0)>>4)&0x0f; else x&0x0f;

if(x>9)x=x+-A。-10; elsex=x+0x30;

return(x);}

Write_fp1_output()/*控制FP1PLC输出,并合成 冲的处理函数*/

{unsignedcharfp1_write[35]=/%01#WCCY0000 00000000000000**\x0d0;

intn;

memcpy(SendBuffer,fp1_write,35);

receive_ok=0; termintrr=0; count=0;

SendBuffer[16]=Hex_to_Asc(~yk_road[0],1);

SendBuffer[17]=Hex_to_Asc(~yk_road[0],0);

SendBuffer[18]=Hex_to_Asc(~yk_road[1],1);

SendBuffer[19]=Hex_to_Asc(~yk_road[1],0);

SendBuffer[20]=Hex_to_Asc(yk_road[2],0);

SendBuffer[21]=Hex_to_Asc(~yk_road[2],0);

SendBuffer[28]=Hex_to_Asc(yk_road[0],1);

SendBuffer[29]=Hex_to_Asc(yk_road[0],0);

SendBuffer[30]=Hex_to_Asc(yk_road[1],1);

SendBuffer[31]=Hex_to_Asc(yk_road[1],0);

sio_putb(p[6],SendBuffer,35);

while(count<wait_time)

{if(termintrr) count=count+1;}

count=0;

while(count<36){if(count>30)

{memcpy(SendBuffer,fp1_write,35);

receive_ok=0; termintrr=0;

sio_putb(p[6],SendBuffer,35);

count=40;

}}sleep(1);

Read_fp1_input();/*读PLC得触点状态数据*/

yx_duiwei();/*遥信数据对位*/

Send_yx();} /*将遥信数据上送*/



图2 报文格式图

(三)控制的实现

我们为系统操作员在主站端设计了两种控制方式,第1种为手动遥控:在后台的图形界面中,点击进入相应的变电站,再进入路灯和景观灯所在的控制界面,界面中每一组路灯对应变电站的一个低压抽屉柜,操作员用鼠标选择路灯和景观灯的“开”、“灭”状态,再将所有的开灭状态组成字节数据,用CDT报文下发给变电站的 RTU。RTU收到路灯控制命令后,将报文解析和重组,用MEWTOCOL2COM通信协议将控制数据传送给PLC。PLC将按照系统操作员在后台的设置执行控制命令,RTU将控制结果及时反馈给主站端,主站端将这一控制过程作为一条记录存入数据库,可以事后查询。第2种控制方式为时控:操作员用鼠标选择在××年××月××日××时××分或星期几时的路灯和景观灯的/开0、/灭0状态,将这些数据存入数据库,当设定时间到达时系统自动发出这些数据,系统可以根据RTU的反馈信息确定控制是否成功,并可决定是否重发。

因为对PLC的控制是在子站RTU完成的,为控制的实时性,我们采用C语言编程实现了对PLC的通信控制,确保PLC中无需编写任何梯形图逻辑。由于系统主站与子站之间的通信是基于十六进制数据的CDT规约,而 MEWTOCOL2COM通信协议是基于ASCII码的数据通信,为此设计了两个函数用于基于ASCII字符数据的发送和接收。其中发送数据函数 Sio_putb(),其使用格式见Read_fp1_input()程序。另一个数据接收中断处理处理函数为本设计的关键,为方便和可靠,本文设计的中断触发信号为“串行口收到回车符(十六进制的0dH)”,确保PLC每应答完一帧完整的报文,RTU才进入中断处理,并在中断处理程序中完成报文数据的分析,大大提高了快速性和可靠性。这种方法在基于ASCII字符的通信中极为有效。本文RTU有6个串口,串口1为与主站的全双工通信通道,串口6为与 PLC通信通道,用sio_term_irq(p[6],TermCome,0x0d);函数指明串口6只有收到回车符(0x0d)才响应中断 voidinterruptTerm2Come(),其他的为变电站内的微机保护监控装置、发电机、直流电源屏、变压器通信通道,本文不做赘述。其中断函数初始化及中断处理程序参见文献。

三、结语

利用串行通信实现对PLC的远程控制,可以方便在主站后台端改变对底端设备的控制逻辑和运行方式,PLC中无需编写任何梯形图程序,这在设备远程控制中有重要意义。该项目2004年在厦门海沧大桥多个变电站正式投运,达到了设计要求,实现了全桥低压设备的远方控制.

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    不良信息
    举报中心
    机电之家设备管理网
    致力于机电设备维修与管理技术
    网络110
    报警服务
    服务热线:0571-87774297 传真:0571-87774298 电子邮件:donemi@hz.cn 服务 QQ:66821730
    机电之家(www.jdzj.com)旗下网站 杭州滨兴科技有限公司提供技术支持

    版权所有 Copyright © 机电之家--中国机电行业门户·设备维修与管理

    主办:杭州高新(滨江)机电一体化学会
    网站经营许可证:浙B2-20080178-1