Rexroth(力士乐)PLC与Labwindows CVI OPC通讯的实现

OPC Server 安装

力士乐开发软件中已经集成了OPC Server的相关组件,只需要安装Indraworks里的communication 组件即可,当前我使用的版本是Indraworks 12v08,这里就不详细介绍安装方法了。
只是要注意一点:最好将电脑非Unicode设置成非中文,再安装,我碰到许多次出现Indraworks安装失败,或者在配置后测试 noconfig的状态。

OPC Server配置

OPC Configurator 配置

  1. 打开Rexroth>IndraLogic>OPC Configurator
    在这里插入图片描述
  2. 添加PLC, 如果是一个客户端选择 Single PLC,如果位多个可以右击append PLC在这里插入图片描述.在这里插入图片描述
  3. Edit创建通讯参数,如果已有Gateway可以直接点添加New…,如有没有先添加Gateway 选择TCP/IP
  4. 在这里插入图片描述在这里插入图片描述
  5. 添加PLC配置时,请选择TCP/IP(Level 2 Route)在这里插入图片描述

OPC Test Client 测试

如果想要确认新建的OPC Server运行状态如何,可以使用 OPC Test Client 程序。
Rexroth>Communication>OPC Test Client
在这里插入图片描述
选择IndraLogic.OPC在这里插入图片描述状态信息栏里显示运行状态
在这里插入图片描述
如果出现状态noconfig的状态,你的PLC是连接到你的服务器的,只是读不到你的配置文件,或者读不到 你的变量表。
遇到这个问题
1.首先确认你的电脑是否设置成了Unicode简体中文,可先将他设置成英文。
2.变量表是你的PLC编译后生成的.SDB文件。可以将他手动配置到你的Gateway Files里。

连接好PLC后可以通过添加Item 来确认变量是否可以遍历到
在这里插入图片描述

PLC端配置

新建变量
在这里插入图片描述Project>Option>Symbol Configuration>Configure symbol file 选中所有变量
在这里插入图片描述

CVI OPC通讯编程

当前使用的是Labwindows CVI 2013版本
从文件读取配置信号ini配置文件如下
[PLC_TO_IPC]
Num=16
;
[IPC_TO_PLC]
Num=25
;
[PO_0]
EN=“HeartBeat”
CN=“心跳信号”
GM=“HeartBeat”
URL=“opc://localhost/IndraLogic.OPC.02/PLC1:.stPLC.bPuls”
TYPE=111
SIZE=2
;
[PO_1]
EN=“DMC”
CN=“ID码”
GM=“DMC”
URL=“opc://localhost/IndraLogic.OPC.02/PLC1:.stPLC.chDMC”
TYPE=115
SIZE=50
;
[PO_2]
EN=“Mode”
CN=“模式”
GM=“Mode”
URL=“opc://localhost/IndraLogic.OPC.02/PLC1:.stPLC.iMode”
TYPE=102
SIZE=4
;

封装部分直接上源代码
当前只读取PLC 的四种类型。CodeSys下的 REAL,BOOL,INT,STRING

// Include files

#include "dataskt.h"
#include <ansi_c.h>
#include "inifile.h"
#include "PLCCom.h"

//==============================================================================
// Constants

#define GETURL(section,chvalue)   if(0>=Ini_GetPointerToRawString (handle,section,"URL",&chvalue)) return -1001;else      //get the url if wrong return -1;
#define GETTYPE(section,value)   if(0>=Ini_GetInt(handle,section,"TYPE",&value)) return -1002;else 				//get the valible type if wrong return -1;
#define GETSIZE(section,value)   if(0>=Ini_GetInt(handle,section,"SIZE",&value)) return -1005;else 				//get the valible type if wrong return -1; 
#define GETHANDLE(url,section,i)  if(0>DS_OpenEx(url,DSConst_ReadWriteAutoUpdate,NULL,NULL,DSConst_EventModel,1,&section)) return -1003000-i;else  //get the handle of the valible

#define CHECK_HANDLE(handle,i)	if(handle== 0)  return -1000000-10000*i;else
#define OPC_GETTYPE(handle,type,i)  if(0>DS_GetDataType(handle,&type,&uiSize,NULL)) return -2000000-10000*i;else
#define CHECK_TYPE(type,type2,i)   if(type2!=type) return -3000000-10000*i-type2;else 
#define ErrCheck(function,i)    if(function<0) return -4000000-10000*i;else
//==============================================================================
// Types

//==============================================================================
// Static global variables
static struct  SignalInfo stPLC[56];
static struct  SignalInfo stIPC[56]; 
int PLCNO=0;
int IPCNO=0;

//==============================================================================
// Static functions
enum Type
{
	T_BOOL=111,
	T_INT=102,
	T_REAL=104,
	T_STRING=115,

};

unsigned char *pPlcData;
unsigned char *pIpcData;


//==============================================================================
// Global variables

//==============================================================================
// Global functions
/*****************  initial  the url********************/
//RootPath  the root path of the program
//pPlcInfo plc 信息的结构体指针
//pIpcInfo ipc信息结构体指针
//success 返回0   失败返回负数
//               -1 FAIL TO GET URL
//               -2 FAIL TO GET THE HANDLE
//               -3 FAIL TO GET THE TYPE
//               -4 FAIL TO fIND THE FILE 
extern "C" __declspec(dllexport)int PLC_COM_Initial(char *RootPath,unsigned char *pPlcInfo , unsigned char *pIpcInfo)
{
	char path[225]="";
	char *chval;
	char temp[20]="";
	char *opcURLs;
	pPlcData=pPlcInfo;
	pIpcData=pIpcInfo;
	strcpy(path,RootPath);
	strcat(path,"\\Configuration\\PLCInterface.ini"); //文件路径获取
	IniText handle=Ini_New (0);
	if(0!=Ini_ReadFromFile(handle,path)) {Ini_Dispose(handle);return -1004;}
	
	if(0>=Ini_GetInt (handle,"PLC_TO_IPC","Num",&PLCNO)) return -1005;
	
	if(0>=Ini_GetInt (handle,"IPC_TO_PLC","Num",&IPCNO)) return -1006;
	
		
	unsigned int  uiType=0, uiSize=0; 
	//read the url for the config file
	for(int i=0; i<PLCNO; i++)
	{
		sprintf(temp,"PO_%d",i);
		GETURL(temp,chval);
		opcURLs=StrDup(chval);
		GETHANDLE(opcURLs,stPLC[i].iHandle,i);
		free(opcURLs); 
		GETTYPE(temp,stPLC[i].iType); 
		GETSIZE(temp,stPLC[i].iSize);
		OPC_GETTYPE(stPLC[i].iHandle,uiType,i);
		CHECK_TYPE(stPLC[i].iType,uiType,i) ;
	}
	
	for(int i=0; i<IPCNO; i++)
	{
		sprintf(temp,"IO_%d",i);
		GETURL(temp,chval);
		opcURLs=StrDup(chval);
		GETHANDLE(opcURLs,stIPC[i].iHandle,i);
		free(opcURLs); 
		GETTYPE(temp,stIPC[i].iType);
		GETSIZE(temp,stIPC[i].iSize);
		OPC_GETTYPE(stIPC[i].iHandle,uiType,i);
		CHECK_TYPE(stIPC[i].iType,uiType,i) ;
	}
	
	Ini_Dispose(handle);
	return 0;
}
/*****************  read the signal from plc********************/
//success 返回0   失败返回负数 
//               -1 FAIL CHECK THE HANDLE
//               -2 FAIL TO GET THE TYPE  
//               -3 FAIL TO CHECK THE TYPE
//               -4 FAIL TO GET THE VALUE
extern "C" __declspec(dllexport)int PLC_COM_Read()
{
	int index=0;
	unsigned int uiType=0;
	unsigned int uiSize=0;
		
	//plc to ipc signal receive
	for(int i=0; i<PLCNO; i++)
	{
		int *piVal=(int *)(pPlcData+index);
		short *psVal=(short *)(pPlcData+index);
		char *pcVal=(char *)(pPlcData+index);
		float *pfVal =(float *)(pPlcData+index);
		
		int iVal=0;
		short sVal=0;
		float fVal=0;
		CHECK_HANDLE(stPLC[i].iHandle,i);
		OPC_GETTYPE(stPLC[i].iHandle,uiType,i);
		switch(stPLC[i].iType)
		{
			case T_BOOL:
				ErrCheck(DS_GetDataValue(stPLC[i].iHandle,CAVT_SHORT, &sVal, uiSize+1, NULL,NULL),i);
				sVal=abs(sVal);
				*psVal=sVal;
				break;
			case T_INT:
				ErrCheck(DS_GetDataValue(stPLC[i].iHandle,CAVT_INT, &iVal, uiSize+1, NULL,NULL),i);
				*piVal=iVal;
				break;
			case T_STRING:
				ErrCheck(DS_GetDataValue(stPLC[i].iHandle,CAVT_CSTRING,pcVal, uiSize+1, NULL,NULL),i);
				break;
			case T_REAL:
				ErrCheck(DS_GetDataValue(stPLC[i].iHandle,CAVT_FLOAT, &fVal, uiSize+1, NULL,NULL),i);
				*pfVal=fVal;
				break; 
			default:
				return -600000-i*1000-stPLC[i].iType;
		}
		index+=stPLC[i].iSize; 
	}
	return 0;
}
/*****************  write the signal to plc ********************/
//success 返回0   失败返回负数 
//               -1 FAIL CHECK THE HANDLE
//               -2 FAIL TO GET THE TYPE  
//               -3 FAIL TO CHECK THE TYPE
//               -4 FAIL TO set THE VALUE
extern "C" __declspec(dllexport)int PLC_COM_Set()
{
	int index=0; 
	//ipc to plc signal receive
	for(int i=0; i<IPCNO; i++)
	{
		int *piVal=(int *)(pIpcData+index);
		short *psVal=(short *)(pIpcData+index);
		char *pcVal=(char *)(pIpcData+index);
		float *pfVal =(float *)(pIpcData+index);
		
		int iVal=0;
		short sVal=0;
		float fVal=0;
		CHECK_HANDLE(stIPC[i].iHandle,i);
		switch(stIPC[i].iType)
		{

			case T_BOOL:
				sVal=*psVal;
				ErrCheck(DS_SetDataValue (stIPC[i].iHandle,CAVT_SHORT, &sVal,0,0),i);
				break;
			case T_INT:
				iVal=*piVal;
				ErrCheck(DS_SetDataValue(stIPC[i].iHandle,CAVT_INT, &iVal, 0,0),i);
				break;
			case T_STRING:
				ErrCheck(DS_SetDataValue (stIPC[i].iHandle,CAVT_CSTRING, pcVal,0,0),i);
				break;
			case T_REAL:
				fVal=*pfVal;
				ErrCheck(DS_SetDataValue(stIPC[i].iHandle,CAVT_FLOAT, &fVal, 0,0),i);
				break;
			default:
				return -700000-i*1000-stIPC[i].iType;
		}
		index+=stIPC[i].iSize; 
	}
	return 0;
}

调用以上函数的方法

//此部分位初始化调用
int PLCInterface_Initial()
{
	int iRetVal=0;
	
	if(Initialed==0)
		iRetVal=PLC_COM_Initial(gPara.SWPath,(unsigned char*)&stPLC,(unsigned char*)&stIPC);
	if(iRetVal==0)
	{
		Initialed=1;
		stIPC.bIsReady=TRUE;
	}else
	{
		char temp[20]="";
		sprintf(temp,"Code:%d",iRetVal);
		MessageAlarm("1081",temp,gPara.ActLanguage); 
	}
	return iRetVal;
}
//此部分贴入定时器循环扫描
int PLC_IPC_Ctrol()
{
	static int bPulseEx=0;
	static double dTimerA=0,dTimerB=0;//timer count
	static char Trigger=0;
	static int ModeEx=-1;
	

	if(!Initialed) return 0; // 
	//READ AND WRITE
	int ret=PLC_COM_Read();
	if(0!=ret)
	{
		char temp[20]="";
		sprintf(temp,"RCode:%d",ret);
		MessageAlarm("1070",temp,gPara.ActLanguage);
		return 0;
	}
	ret=PLC_COM_Set();
	if(0!=ret)
	{
		char temp[20]="";
		sprintf(temp,"WCode:%d",ret);
		MessageAlarm("1070",temp,gPara.ActLanguage);
		return 0;
	}
}

至此,整个OPC通讯的实现就已完成。
划重点
DS_GetDataValue(stPLC[i].iHandle,CAVT_SHORT, &sVal, uiSize+1, NULL,NULL),i);
CAVT_SHORT 是指 在上位机程序变量的定义类型 而非PLC端变量的定义类型。
运行效果
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1 IndraLogic 的简要介绍.........................................................................................................1 1.1 什么是IndraLogic...............................................................................................................................1 1.2 IndraLogic 功能总览...........................................................................................................................1 1.3 用户文档总览........................................................................................................................................2 2 IndraLogic 的组成.................................................................................................................3 2.1 工程的组成............................................................................................................................................3 2.2 语言......................................................................................................................................................10 2.2.1 指令表.......................................................................................................................................10 2.2.2 结构化文本...............................................................................................................................12 2.2.3 顺序功能图(SFC)...............................................................................................................16 2.2.4 功能模块图...............................................................................................................................20 2.2.5 连续功能图表编辑器...............................................................................................................21 2.2.6 梯形图.........................................................................................................................................21 2.3 调试联机功能......................................................................................................................................22 2.4 标准化..................................................................................................................................................24 3 我们来编写一个小程序.......................................................................................................25 3.1 控制一个交通灯信号单元..................................................................................................................25 3.2 可视化交通信号单元..........................................................................................................................36 4 各个单独的组件...................................................................................................................39 4.1 主窗口..................................................................................................................................................40 4.2 工程选项..............................................................................................................................................42 4.3 管理工程..............................................................................................................................................54 4.4 管理工程中的对象..............................................................................................................................81 4.5 编辑功能..............................................................................................................................................87 4.6 联机功能..............................................................................................................................................92 4.7 设置窗口............................................................................................................................................103 4.8 帮助....................................................................................................................................................103 5 IndraLogic 中的编辑器.....................................................................................................105 5.1 编辑器的组件....................................................................................................................................105 5.2 声明编辑器........................................................................................................................................106 5.2.1 在声明编辑器中编程.............................................................................................................106 5.2.2 联机模式中的明编辑器..........................................................................................................111 5.2.3 声明编辑器中的编程指令.....................................................................................................112 5.3 文本编辑器........................................................................................................................................117 5.3.1 在文本编辑器中工作.............................................................................................................117 5.3.2 指令表编辑器.........................................................................................................................120 5.3.3 结构化文本编辑器.................................................................................................................120 5.4 图形化编辑器....................................................................................................................................121 5.4.1 在图形化编辑器中工作.........................................................................................................121 5.4.2 功能模块图编辑器.................................................................................................................122 5.4.3 梯形图.....................................................................................................................................127 5.4.4 顺序功能图表编辑器.............................................................................................................131 ii IndraLogic编程 5.4.5 连续功能图表编辑器.............................................................................................................138 6 资源....................................................................................................................................149 6.1 资源(Resources)综述........................................................................................................................149 6.2 全局变量,变量配置,文件框架....................................................................................................149 6.2.1 全局变量….............................................................................................................................150 6.2.2 变量配置….............................................................................................................................154 6.2.3 文档框架.................................................................................................................................155 6.3 报警配置............................................................................................................................................156 6.3.1 综述.........................................................................................................................................156 6.3.2 警报的一般信息,术语.........................................................................................................156 6.3.3 报警类.....................................................................................................................................157 6.3.4 报警组.....................................................................................................................................160 6.3.5 存储报警.................................................................................................................................162 6.3.6 'Extras' 菜单:设置...............................................................................................................163 6.4 库管理器............................................................................................................................................163 6.5 日志记录............................................................................................................................................164 6.6 PLC 配置...........................................................................................................................................166 6.6.1 综述.........................................................................................................................................166 6.6.2 PLC 配置中的工作................................................................................................................167 6.6.3 PLC 配置中的一般设置........................................................................................................168 6.6.4 定制特定的参数的对话框.....................................................................................................169 6.6.5 I/O 模块配置..........................................................................................................................170 6.6.6 通道配置.................................................................................................................................172 6.6.7 Profibus 模块的配置.............................................................................................................173 6.6.8 CAN 模块的配置..................................................................................................................180 6.6.9 CanDevice (CANopen Slave) 的配置....................................................................................185 6.6.10 在线模式中的PLC配置.......................................................................................................189 6.6.11 来自PLC的硬件扫描/状态/诊断信息.................................................................................189 6.7 任务配置............................................................................................................................................189 6.7.1 任务配置工作.........................................................................................................................189 6.7.2 系统事件(System Events)................................................................................................193 6.7.3 在线模式下的任务配置.........................................................................................................193 6.8 监视和收据管理器(Watch and Receipt Manager...)................................................................195 6.8.1 综述.........................................................................................................................................195 6.8.2 脱机方式下的监视和收据管理器.........................................................................................195 6.8.3 在线模式下的监视和收据管理器.........................................................................................196 6.9 采样追踪(The Sampling Trace).................................................................................................197 6.9.1 综述和配置.............................................................................................................................197 6.9.2 采样追踪的显示(Display of the Sampling Trace).........................................................199 6.9.3 'Extras' 'Save Trace'.............................................................................................................200 6.9.4 'Extras' 'External Trace Configurations'............................................................................201 6.10 工作区(Workspace)..................................................................................................................201 6.11 参数管理器(Parameter Manager ).........................................................................................202 6.11.1 综述,启动...........................................................................................................................202 6.11.2 参数管理器的编辑,浏览...................................................................................................203 6.11.3 参数列表的类型和属性.......................................................................................................204 IndraLogic1.0 编程iii 6.11.4 管理参数列表.......................................................................................................................205 6.11.5 编辑参数列表.......................................................................................................................207 6.11.6 在线模式下的参数管理.......................................................................................................208 6.11.7 参数列表的导出,导入.......................................................................................................208 6.12 目标系统设置(Target Settings)................................................................................................208 6.13 PLC 浏览器.....................................................................................................................................209 6.13.1 关于PLC浏览器操作的一般讨论.....................................................................................210 6.13.2 在PLC浏览器中的命令输入.............................................................................................210 6.13.3 在PLC浏览器输入命令时使用宏指令.............................................................................212 6.13.4 PLC 浏览器的更多选项......................................................................................................212 6.14 工具..................................................................................................................................................212 6.14.1 可用工具快捷键的特性(对象特性)...............................................................................213 6.14.2 管理工具快捷键...................................................................................................................216 6.14.3 关于工具的常见问答...........................................................................................................217
LabWindows CVI是一种强大的图形化编程软件,通常用于数据采集、仪器控制和自动化测试等领域。而西门子S7-1200是一种先进的工业自动化控制器,用于控制多种设备和系统。 要实现LabWindows CVI与西门子S7-1200之间的通讯,可以采用以下步骤: 1. 确定通讯协议:LabWindows CVI支持多种通讯协议,如Modbus、OPC等。确定S7-1200支持的通讯协议,并根据需要选择适合的协议。 2. 配置通讯参数:LabWindows CVI提供了一些函数和工具用于设置通讯参数,如IP地址、端口号等。根据S7-1200的网络配置和通讯协议的要求,进行适当的配置。 3. 建立连接:使用LabWindows CVI提供的库函数,通过网络连接与S7-1200建立通讯。通常需要提供S7-1200的IP地址和端口号。 4. 通讯数据交互:根据通讯协议的要求,使用LabWindows CVI提供的函数来读取和写入S7-1200的数据。可以通过读取S7-1200的PLC变量值,或者设定S7-1200的输出状态等。 5. 断开连接:在通讯完成后,通过LabWindows CVI提供的函数断开与S7-1200的连接,释放资源。 在配置LabWindows CVI和S7-1200通讯时,需要了解LabWindows CVI的编程知识和S7-1200的通讯协议。可以参考相关的LabWindows CVI和S7-1200的文档和教程,以了解更多关于通讯配置和编程的细节。 综上所述,通过以上步骤和相关的LabWindows CVI和S7-1200的文档,可以成功实现LabWindows CVI与西门子S7-1200之间的通讯

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值