(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的实时监控,传送数据准确,这种通信方法不仅成本低,而且简单、稳定、实用性强。  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |