资讯详情

secs/gem协议系统通讯平台

第一章 产品简介

1. 产品介绍

金南瓜SECS/GEM是最适合全自动智能设备的选择。 DMS SECS/GEM怪兽级性能强,适应性高,易用友好的SECS工具有利于快速开发和部署。

金南瓜SECS/GEM独立工控机或与设备软件相结合,使用户能够灵活应对各种使用场景。

2. 软件清单及显示

所有软件目录清单

2.1软件清单

1

提供EquipViewApp.exe和HostViewApp.exe俩款demo对应的场景是设备端和主机端的模拟。

2.

提供EquipViewApp.exe、 PlcSecsControlView.exe和HostViewApp.exe软件,对应的场景是设备端,PLC连接器和主机EAP端模拟。

3.

额外提供EquipViewApp300.exe和HostViewApp300.exe测试软件,分别对应GEM模拟300设备端和主机端。

2.2 模拟软件展示

1. 设备端模拟软件EquipViewApp

4. SECS/GEM300模拟软件EquipViewApp300

5. 其他软件

  1. 后台服务流程JNG_Server.exe

2.3 介绍其他文件

  1. SecsConfig 文件夹中的主要文件
    1. 加密狗或加密狗可用于操作许可证licenses.ini方式授权
      1. 报警信息表(ALID)
      2. 设备常量表(ECID)
      3. 为设备常量表(CEID)
      4. 用户软件设备常量表(SVID/VID)
  2. PlcSecsData文件夹为PLC配置档,保存客户和PLC各种通信数据。

3. 开发环境

1. 编程语言

主流语言 C、C 、C#、Labview

2 运行环境

Windows XP SP3

windows 7

windows 10

3 开发工具

LabVIEW、VC6.0、QT、Visual Studio 2008及以上

4 硬件环境

硬件:

         PC工控机

接口:

RJ45或者光纤以太网网口 1个

第二章   软件使用

4. 软件获取

4.1 获取金南瓜SECS SDK

用户可以在我们的网站上下载开发包文件。

http://www.secsgem.cn

下载地址http://download.semisecs.com               

4.2 获取运行许可

1.      如果为加密狗方式,将加密狗插入USB接口即可

2.      运行文件许可方式

  1. 运行licenseClient获取PC的序列号GUID

  1. 将获取到的GUID发送给厂商
  2. 将金南瓜给予的license替换/JngServer/SecsConfig/license.ini文件夹里面原来的许可。

4.3 软件使用

1. 参考 “Demo使用介绍书(日期).pdf”操作使用书

第三章   开发指导

5 软件交互流程

SDK与设备软件交互关系图

5.1 初始化SECS/GEM SDK模块

1. 初始化SDK dll模块

2. 设置各类参数、回调函数等

3. 设置控制模式(OFFLINE或ONLINE)

4. 启用通讯

​​​​​​​ ​​​​​​​

 

初始化流程

5.2 SECS/GEM SDK与设备之间交互

1. 通讯状态发生改变时,SDK通过回调函数实时反馈给设备

         例如:

                   通讯状态

                   控制状态

2. 设备发生事件时,调用EventPos API通知SDK

3. 设备发生Alarm时,调用Alarm Set API通知SDK

4. 服务器发送远程命令给设备,SDK通过远程命令回调函数通知设备

 

6 数据配置

作用:

         SECS/GEM 将变量、事件、警报等数据含义配置给SDK

配置文件目录:

         SECS/GEM在../JngServer/SecsConfig/当中

secs code

JNG 类型代码

Meaning & Examples

00

L

List类型

10

B

binary - unsigned 8 bit data:

二进制类型  

         "0x00"

         "0x01 0x02 0x03"

11

TF

boolean data:

布尔类型

TF 1 非零代表true

TF 0 零代表false

20

A

Character string data:

ASCII字符串类型

“A {hello world}”

“A hello”

30

I8

8-byte signed integer

31

I1

1-byte signed integer

32

I2

2-byte signed integer

34

I4

4-byte integer signed

40

F4

8-byte floating point

44

F8

4-byte floating point

50

U8

8-byte unsigned integer

51

U1

1-byte unsigned integer

52

U2

2-byte unsigned integer

54

U4

4-byte unsigned integer

6.1 变量添加

通过SV.csv方法添加

  1. ID建议
  2. TYPE类型:L、A、TF、B、U1、U2、U4、I1、I2、I4、F4、F8
  3. CLASS一般为SV
  4. Int value 一般为空
  5. Units为单位
  6. callback为通过回调方式访问最新值

 

6.2 事件添加

通过Event.csv方法添加

 

6.3 警报添加

通过alarm.csv方法添加

  1. ID 是唯一性的

7  C/C++二次开发

这部分内容针对于PC端的C++语言二次开发

7.1 编译器配置改动:

8.1.1 编译器 VC6 配置

无需改动

8.1.2 SECS/GEM 编译器 C++ Builder 6 配置

1. 启用“SecsPortExport.h”的宏定义 #define __CPP_BUILDER__

 

原来没有启用

 

启用宏定义

2. 删除“Group.cpp”、“SecsBase.cpp”和“SecsEquip.cpp”第一行的 #include "stdafx.h"

 

3. SECS/GEM 用C++ Builder 6 的implib.exe将SecsPort.lib转换成C++ Builder 6所能支持的格式

 

 

7.2 初始化SDK

在使用SECS通讯之前需要调用Start函数进行初始化dll模块。

void Start(string pServerAddr, int nPort);

m_pSecs = new CSecsEquip();

// 连接服务器

RcResult rc = m_pSecs->Start();

7.3 初始化参数

初始化SECS/GEM通讯的各项参数,例如IP、端口号、device ID等。

1. SECS连接参数的接口

设置通讯对方的TCP/IP地址

RcResult SetIP(string ip);

设置TCP/IP通讯的端口号

RcResult SetPort(int port);

设置主动/被动的TCP/IP通讯模式

RcResult SetPassive(bool bPassive);

设置设备型号名称

RcResult SetMDLN(string pMDLN);

设置会话ID

RcResult SetDeviceID(int nDeviceID);SetT1();

设置各种场景的超时

RcResult SetT1(int nTimeout);

RcResult SetT2(int nTimeout);

RcResult SetT3(int nTimeout);

RcResult SetT4(int nTimeout);

RcResult SetT5(int nTimeout);

RcResult SetT6(int nTimeout);

RcResult SetT7(int nTimeout);

RcResult SetT8(int nTimeout);

2. 加载CSV数据

加载指定的数据CSV配置

RcResult LoadDataByCsvFile(string pDir = "");

3. 设置响应函数

SecsStateChangeProc* m_pStateChangeCallback;                    // 状态改变回调SecsTerminalProc* m_pTerminalCallback;                                 // 终端信息回调

SecsRemoteProc* m_pRemoteCallback;                                      // 远程控制回调            

4. 如果需要多线程同步,可以同步对象

回调函数会附带该参数

void SetClientData(void* pClientData);

5. 设置控制模式

设置控制状态

RcResult SetControlMode(CONTROL_MODE state);

6. 增加变量、事件、警报等

增加方法参考后面对应名称

m_pSecs = new CSecsEquip();

// 连接服务器

RcResult rc = m_pSecs->Start();

         if (rc.rc != 0)

         {

                   MessageBox(rc.ToString().c_str(), "JNG_Server.exe没有初始化");

                  

                   // 暴力退出不推荐

                   exit(0);

         }

// 初始化其他

         // 设置参数

         rc = m_pSecs->SetIP(g_appdata.m_pAddress);                                      

         rc = m_pSecs->SetPort(g_appdata.m_nPort);                                        

         rc = m_pSecs->SetPassive(g_appdata.m_bPassive);                              

         rc = m_pSecs->SetDeviceID(g_appdata.m_nDeviceID);             

         rc = m_pSecs->SetMDLN(g_appdata.m_pInterfaceName);                

         rc = m_pSecs->SetEnableLog(g_appdata.m_bEnableLog);                   

         rc = m_pSecs->SetT1(g_appdata.m_nTimeout[0]);                               

         rc = m_pSecs->SetT2(g_appdata.m_nTimeout[1]);                               

         rc = m_pSecs->SetT3(g_appdata.m_nTimeout[2]);                               

         rc = m_pSecs->SetT4(g_appdata.m_nTimeout[3]);                               

         rc = m_pSecs->SetT5(g_appdata.m_nTimeout[4]);                               

         rc = m_pSecs->SetT6(g_appdata.m_nTimeout[5]);                               

         rc = m_pSecs->SetT7(g_appdata.m_nTimeout[6]);                               

         // 设置回调

         m_pSecs->SetClientData(this);

         m_pSecs->m_pTerminalCallback = ::OnTerminalProc;

         m_pSecs->m_pStateChangeCallback = ::OnStateChangeProc;

         m_pSecs->m_pRemoteCallback = ::OnRemoteProc;

// 示例的回调内容结束       

        

         // 通过Csv文件加载配置

         rc = m_pSecs->LoadDataByCsvFile();

        

         // 建立通讯

         rc = m_pSecs->SetControlMode((CONTROL_MODE)g_appdata.m_nControlMode);

        

         if(g_appdata.m_bCommEnable)

         {

                   rc = m_pSecs->CommEnable();

                   SHOW_MSG_RC(rc);

         }

        

         return true;

7.4 建立通讯

1. 调用接口API开始通讯

CommEnable();

7.5 变量设置

更新变量数据的方式

  1. 采用设置方法 

VariableSet();

7.6 事件发送

通过API函数发送事件

EventPos();

7.7 警报设置/清除

通过API函数设置/清除警报

AlarmSet(ID, true/false);

true为设置

false为清除

8  C# SECS/GEM 二次开发

这部分内容针对于PC端的C#语言二次开发

接口名称和作用跟C++一致

         工程师需要将SecsBase和SecsEquip俩个C#项目重新编译

         1. 将项目的net版本选择与设备软件一致的版本

 

2. 编译生成DLL文件,将DLL文件添加到设备软件项目当中

8.1 初始化SDK

创建一个SECS通讯对象

public CSecsEquip m_pSecs = new CSecsEquip();

金南瓜SDK软件使用之前必须先对其初始化

初始化方法:

1. 调用开始接口

void Start(string pServerAddr, int nPort);

2. 使用例子

Start();

8.2 初始化参数

1. 设置SECS连接参数

         SetIP();

         SetPort();

         SetPassive();

         SetMDLN();

         SetT1();

         SetT2();

         SetT3();

         SetT4();

         SetT5();

         SetT6();

         SetT7();

2. 加载CSV数据

LoadDataByCsvFile();

3. 设置响应/委托函数

m_pOnCommState                    通讯状态改变通知

m_pOnControlState                   控制状态改变通知

m_pOnRemoteCommand         远程命令通知

m_pOnTerminal                          终端消息通知

4. 设置处理对象指针

SetClientData();

5. 设置控制模式

SetControlMode();

6. 增加变量、事件、警报等

         增加方法参考后面对应名称

8.3 建立通讯

1. 调用接口API开始通讯

CommEnable();

8.4 变量设置

更新变量数据的方式

  1. 采用设置方法

VariableSet();

8.5 事件发送

通过API函数发送事件

EventPos();

8.6 警报设置/清除

通过API函数设置/清除警报

AlarmSet(ID, true/false);

true为设置

false为清除

第四章   常见问题与解决

9 问题与场景

9.1 笔记本控制设备

         笔记本通过SECS控制设备

         一根网线

         用网线将设备和笔记本网口相接

        

        

                   1.      将设备配置成“设备配置图1”的网络配置。

2.      笔记本配置成“笔记本配置图2”的网络配置。

 

 

 

                                    设备配置图1                                                         笔记本配置图2

3.      将设备端SECS设置为被动模式,启动通讯

4.      将笔记本的SECS Host端配置为主动模式,IP地址为192.168.1.1,启用通讯就能通讯上。

                  

1. 如果使用笔记本跟设备电脑连接,如果任一电脑加公司域。该情况有可能无法连接。

9.2 防火墙导致无法通讯

        

1. 使用cmd的ping可以对俩台电脑进行测试通畅

         2. 模拟器在本地通讯测试没问题,俩台电脑时候却无法通讯

        

1. 防火墙拦截住通讯连接,将防火墙关闭再测试

10 错误代码

错误代码

描述

1001

没有发现处理对象

1002

数据错误

1003

DLL加载失败

1010

没有连接到对方

1011

读取文件失败

1012

读取文件失败

1013

打开文件失败

1014

删除文件失败

1015

目录或路径为空

1020

消息答复数据错误

2001

大括号中的列表元素,后边跟非空格

2002

引号中的列表元素,后边跟非空格

2003

列表元素中存在开放性的引号(不成对)

2004

列表元素中存在开放性的括号(不成对)

3100

不支持

3101

链接状态中

3102

分配内存失败

3103

没有连接

3104

指针为空

3105

数据有误

3106

加载DLL失败

3107

许可没有发现

3108

许可没有发现

3109

没有处理对象

3110

没有给客户数据,导致无法处理

6105

函数的数据有误,将出现的场景反馈给工程师处理 

6121

event不存在,请先添加secs event对象,再使用event 

6123

event的名称太长,event名称长度不能超过300字节 

6124

Constant没有找到数据 

6126

终端服务反馈数据错误 

6127

终端服务被对方拒绝,S10F0终止 

6134

操作的文件太大,最大支持16M 

6136

服务器答复的数据不符合SECS要求 

6140

服务器答复PP的数据是错误的,不符合SECS要求 

6141

服务器答复PP名称与请求的PP名称不符 

6142

Constant的值超出Constant设置的最大、最小值 

6145

数据格式不属于SECS数据类型格式,请参考数据类型手册 

6150

压缩文件失败,请查看软件权限是否满足,或者文件需要管理员身份才能处理 

6151

解压文件失败,请验证文件是否属于压缩文件 

6152

Winrar.exe软件没有找到,请查看rar路径是否正确 

6160

PPID没有发现,请查看pp回调函数是否已经正确处理 

6162

处理程式发送:服务器答复ACK7其他错误 

6170

处理程式授权:已经有对象 

6171

处理程式授权:没有空间 

6172

处理程式授权:无效的PPID 

6173

处理程式授权:忙,请稍后 

6174

处理程式授权:不接受 

6175

处理程式授权:其他错误 

9100

不支持

9101

链接状态中

9102

通讯没有初始化

9103

分配内存失败

9104

没有连接

9105

指针为空

9106

数据有误

9107

加载DLL失败

9120

没有连接

9121

dmh没有加载

12100

标签: 连接器s10b

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司