PLC在煤矿探测及救援中实践

时间:2022-05-13 05:33:00

PLC在煤矿探测及救援中实践

在机器人的控制中,实时控制是非常重要的,特别是在煤矿探测与救援中,机器人要在未知的、非常恶劣的环境中工作,感应环境变化,搜救受困人员。操作者要准确控制机器人的各种动作,接收机器人采集反馈的各种信息,这就要求通信系统和通信方式稳定可靠,人机交互系统的设计要高效和人性化,既能设置相关参数,向下位机发出准确命令,又能实时显示下位机反馈的信息。以基于松下FP∑系列PLC的煤矿探测与救援机器人为平台,对机器人上下位机通信原理和过程进行介绍,详细阐述了机器人本体中多个PLC间、下位机与上位机PC之间的通信系统的设计。

1下位机控制系统的组成

下位机中的控制系统由5个松下FP∑系列的PLC组成,型号为FPΣ-C32T2H,可扩展数模转换等单元,程序容量为32kB。它完全具有工控机的所有功能,各种接口模块、通讯模块、数学函数齐全,具有速度、位置电机多轴控制,循环扫描周期0.32μs,具有直线插补功能。现在所有的5台PLC均扩图1多PLC的RS485总线通信示意图展了FPG-COM4通讯插卡,具有一个三线式RS232C通道和一个两线式RS485通道,RS232串口用来和各自相应的模块通信,RS485接口用于通信组网,从而实现各PLC之间的通信。多PLC组成的RS485网络示意图如图1所示。

机器人本体中5个PLC分别编号1—5,各自分工,实现机器人的主体控制及信号的采集功能。其中PLC1充当通信系统的网关节点,实现信息的中转作用,即接收上位机的指令并发送给下位机中的其他PLC,同时接收其他PLC采集和反馈的信息,返回给上位机。PLC1与其他PLC之间采用RS485进行通信,PLC1与上位机之间利用无线通信模块SRWF-1028,采用RS232进行通信。通信示意图如图2所示。

2通信方式的选择和设定

2.1通信方式的选择

作者所采用的FP∑系列的通信插卡,可以实现以下3种通信功能:计算机链接功能。计算机链接功能是计算机与PLC、PLC与外部设备连接后进行通信的功能。当计算机链接后通信时,应使用松下公司提供的专用协议MEWTOCOL-COM。这种通信协议以计算机作为主站,PLC作为从站,通信由主站发起,将命令帧发向从站,从站以响应帧或错误帧做应答。MEWTOCOL-COM协议对命令帧、响应帧及错误帧做了严格的规定。这种通信方式的局限性较大,可移植性差,只能用于特定的PLC。

PC(PLC)链接。使用专门的内部继电器[链接继电器L]和数据寄存器[链接寄存器LD],使连接起来的PC(PLC)间数据共享。这种通信方式主要用于PLC的调试中。通用串行通信方式。COM端口上连接的外部设备的数据,可以通过串行通信来接收或发送。这种通信方式应用广泛,可移植性强。设计者可以根据实际需要,自行设计和规定通信协议,简单易行。基于通用串行通信方式的简单和易移植性,采用此种方式进行通信。

2.2上下位机通信协议的设定

机器人上下位机的通信主要包括上位机发送命令帧给机器人本体执行,机器人返还信息帧给上位机显示。其中命令帧的格式如表1所示。命令以$开始,可自行选择通信方式。机器人地址用于在多个机器人的控制中自主选择多个或某个特定的机器人发送或接受相应的指令。命令字段为控制机器人本体的直接命令,包括前进、后退等。参数1和参数2利用机器人命令的扩展,默认为0。校验码为对前面的6位数据进行异或运算,使发送的命令帧更加准确有效。最后一个字段是结束符,判断一帧数据结束与否。返还给上位机的信息帧的数据格式与命令帧格式类似,同样包含帧起始符、帧结束符、校验码、机器人地址等,另外还包含许多机器人状态信息字段,如机器人左右履带当前速度、前后摆臂角度、罗盘三维姿态信息、红外传感器所测障碍物的距离信息、温湿度和各种气体浓度信息等。

2.3煤矿机器人中PLC与PC通信的软件设置

上位机的通信界面如图3所示。打开软件界面,系统初始化为串口打开,选择COM1口。点击相应的按钮时,上位机把包含具体操作代码的数据帧通过无线通信模块SRWF-1028发送给下位机。如图1所示,操作代码0x71、0x76代表具体的操作,如前进、右转指令。下位机中的PLC1起到网络节点的作用,直接与上位机进行通信,并向下位机中的其他PLC发送或采集指令。对于PLC1,通信插件选用AFPG806RS4851通道(COM1),用于与下位机中的其他PLC进行通信,选用RS232C1通道混载型(COM2)用于接收或发送上位机的指令。通信口的系统寄存器设置如下:

COM1口(RS485,用于RS485组网通信)设置:

No.412通信模式:通用通信No.414通信格式:8n1,结束符:CR,起始符:无STXNo.415速率115200b/sNo.416COM1串口接收区开始地址:27000

No.417COM1串口接收区大小(字):2000数据接收缓冲区范围DT27000~DT28999COM2口(RS232用于和上位机通信)设置:

No.412通信模式:通用通信

No.414通信格式:8n1,结束符:CR,起始符:无STXNo.415速率2400b/sNo.418COM2串口接收区开始地址:25000

No.419COM2串口接收区大小(字):2000数据接收缓冲区范围DT25000~DT26999其他PLC的设置类似,除了COM2的通信波特率和通信格式稍有区别。各个PLC的软件流程图如图4所示。

3基于VC++6.0上位机通信界面的设计和实现

3.1VC++6.0的通信控件及相关属性

Microsoft公司的VisualC++6.0功能强大,利用它可以开发出规模强大、功能复杂的Windows应用程序,并且用它来实现底层的通信控制,有着较快的通信速度。因此该通信系统的上位机采用VisualC++6.0开发串行通信程序来实现PC与PLC的实时通信。RS232协议是OSI(OpenSystemInterconnection)协议体系中基于物理层的通信协议。它负责与硬件打交道,而C语言与其他高级语言相比,在此方面具有较大的优势,这也是采用VisualC++作为程序开发平台的另外一个重要原因。MSComm控件是VC++6.0专门用于通信的控件,通过串行端口传输和接收数据,为应用程序提供串行通信功能。MSComm控件在串口编程时非常方便,程序员不必花时间去了解更为复杂的API函数。MSComm控件属性很多,而且其属性可以随时改变,表2介绍了文中用到的属性及设定值。

3.2利用VC++6.0编写通信程序

具体的操作过程如下:

(1)在VC++6.0中新建一个基于对话框的文件,并在当前项目中加入MSComm控件。

(2)在主对话框中加入所需要的控件,设置各个控件的属性,并在MFCClassWizard中将对话框的控件和变量相关联。设计完成的对话框如图6所示。

(3)添加消息和程序代码。①串口初始化/*串口初始化开始*/serial_port_open_flag=FALSE;m_mscom.SetCommPort(1);//串口1m_mscom.SetInBufferSize(1024);//设置输入缓冲区的大小,1024Bytesm_mscom.SetOutBufferSize(512);////设置输入缓冲区的大小,512Bytesif(!m_mscom.GetPortOpen())//打开串口m_mscom.SetPortOpen(TRUE);m_mscom.SetInputMode(1);//设置输入方式为二进制方式m_mscom.SetSettings("2400,n,8,1");//设置波特率等参数m_mscom.SetRThreshold(1);//为1表示有一个字符即引发事件m_mscom.SetInputLen(0);②发送数据过程intCJC_robot_control_applicationDlg::send_command_frame(charnode_id,charcmd,chararg1,chararg2){charbcc_temp;CByteArraysendArr;//构造要发送的字节数组sendArr.SetSize(LENGTH_OF_COMMAND_SEND_TO_ROBOT);//设置数组元素的个数inti_send;command_send_to_robot[INDEX_OF_NODE_ID_IN_COMMAND_FRAME]=node_id;//节点IDcommand_send_to_robot[INDEX_OF_CMD_IN_COMMAND_FRAME]=cmd;//命令command_send_to_robot[INDEX_OF_ARG1_IN_COMMAND_FRAME]=arg1;//参数1command_send_to_robot[INDEX_OF_ARG2_IN_COMMAND_FRAME]=arg2;//参数2bcc_temp=bcc_check(command_send_to_robot,INDEX_OF_BCC_IN_COMMAND_FRAME);//计算BCC校验码command_send_to_robot[INDEX_OF_BCC_IN_COMMAND_FRAME]=bcc_temp;//添加BCC校验码for(i_send=0;i_send<LENGTH_OF_COM-MAND_SEND_TO_ROBOT;i_send++)sendArr.SetAt(i_send,command_send_to_ro-bot[i_send]);/*给数组中相对应的元素赋值*/}系统进行第一次视频采集之后,就进入到网络传送程序,网络传送程序负责对采集的数据进行编码、压缩、UDP传送,并进行下一次视频采集。网络传送子程序如下:voidudps_respon(intsockfd,intw,intn){…/*客户端PC机IP地址*/addrdst.sin_addr.s_addr=inet_addr(“10.10.31.100”);addrdst.sin_port=htons(SERVER_IP);while(1){/*数据采集*/read_usb(NULL,w,h);/*对采集到的数据进行H.264编码*/Long=H264_encode(m_t264,cam_data,m_pDst,row_stride);printf(“encoded:%d,%dbytes\n”,row_stride,Long);/*frame_num存放帧号*/memcpy(m_pPData,&m_t264->frame_num,1);/*m_pDst解码后的数据*/memcpy(m_pPData+1,m_pDst,Long);Long++;/*使用UDP协议发送编码后的数据到服务器*/sendto(sockfd,m_pPData,Long,0,(structsockaddr*)&addrdst,sizeof(structsockaddr_in));}}

4结论

基于H.264,在运行Linux操作系统的ARM9开发板上成功实现了远程监控,程序设计采用统一的V4L2接口规范,模块化编程,思路清晰,操作简单,视频成像清晰。该系统已在实际中运行,其稳定性和实时性均得到用户认可。

上一篇:自然元素对服饰设计影响及发展趋向 下一篇:汇率形构体制状态及革新建议