第一章   产品简介

1. 产品介绍

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

金南瓜SECS/GEM兼容运行在独自工控机,或与设备软件集成在一台工控机,让用户灵活应对各种使用场景。

2. 软件清单与展示

全部软件目录清单

2.1软件清单

1       SECS/GEM用户

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

移植所需文件

        

红色框内为所需文件

2.      PLC SECS/GEM用户

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

3.      GEM300用户

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

2.2 模拟软件展示

1.      设备端模拟软件EquipViewApp

4.      SECS/GEM300模拟软件EquipViewApp300

5. 其他软件

  1. 后台服务进程JNG_Server.exe

2.3 其他文件介绍

  1. SecsConfig 文件夹中主要的文件

    1. licenses.ini 为运行许可,可选用加密狗或licenses.ini方式授权
    2. 配置文件:
      1. Alarm.csv 为警报信息表(ALID)
      2. EC.csv 为设备常量表(ECID)
      3. Event.csv 为设备常量表(CEID)
      4. SV.csv 为用户软件的设备常量表(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

不支持

12101

链接状态中

12102

分配内存失败

12103

没有连接

12104

指针为空

12105

数据有误

12106

数据为空

12107

DataBase没有发现,或者vc14没有安装

18100

不支持

18101

链接状态中

18102

分配内存失败

18103

没有连接

18104

指针为空

18105

数据有误

18106

数据为空

18107

数据Server Dll没有发现

18108

调用SOCKET函数失败

18109

调用BIND函数失败

18110

调用LISTEN函数失败

18111

SOCKET对象错误

18112

没有RPC端口号

18113

创建发送线程失败

18114

创建接收线程失败

18115

创建接收数据处理线程失败

18116

不能初始化,状态在非空闲

18117

等待超时

18119

没有找到返回数据

18120

目标描述为空

18130

不允许非字符串开头

18131

字符串必须是ASCII

18132

没有连接对象

18140

发送数据为空

18141

接收数据地址为空

18142

还没连接客户端

18143

接受者描述字符为空

21100

已经存在连接

21101

还没连接服务器

21102

分配内存失败

21103

SOCKET对象错误,无法建立通讯

21104

发送数据为空

21105

接收数据地址为空

21106

创建socket失败

21107

连接服务器失败

21108

服务器反馈数据错误

21109

创建发送线程失败

21110

创建接收线程失败

21111

没有找到返回数据

21112

等待超时

21113

不能初始化,状态在非空闲

21114

接受者描述字符为空

21115

目标描述为空

21116

开始字符必须是ANSI

21117

字符不允许出现 -, _, ., !, :, or @

21130

创建接收处理线程失败

24100

已经存在连接

24101

还没连接服务器

24102

分配内存失败

24103

等待超时

24104

创建服务器进程失败,检查JND_server,或者打开JND_server权限不够

24105

没有发现服务器文件

24106

连接客户端Client DLL失败

24107

分配唯一名称失败

24108

T1超出范围: range 100..10000

24109

T2超出范围: range 200..25000

24110

T3超出范围: range 1000..120000

24111

T4超出范围: range 1000..120000

24112

T5超出范围: range 1000..240000

24113

T6超出范围: range 1000..240000

24114

T7超出范围: range 1000..240000

24115

T8超出范围: range 1000..240000

24116

参数错误

24117

IMCHandle为null

24118

ALTX应该小于120个ASCII字符串

24119

需要完整的变量名称

24120

需要完整的变量描述

24131

设备常量描述太长

24132

设备常量名称太长

24133

设备常量需要输入数值类型

24141

事件描述太长

24142

事件名称太长

24150

服务器答复数据错误

24160

需要一个非空的回调

24165

主机接口处于正在连接状态

24166

主机接口主动退出

24169

事件ID小于1

24190

没有初始化或者初始化失败

27001

连接失败

27002

连接状态

27003

倾听状态

27004

调用SOCKET函数失败

27005

调用BIND函数失败

27006

调用LISTEN函数失败

27007

SOCK开始状态

27008

创建SOCK对象失败

27009

初始化网络失败

27010

已经初始化

27011

SOCKET对象错误

27012

发送数据错误

27013

错误的参数

27020

TCP/IP端口被占用

30009

字符错误

30010

不能初始化,不在空闲状态

30011

组名称受限在ASCII的字母、数字和下划线

30012

初始化socket失败

30013

创建通信失败

30014

参数错误

30015

发送错误

30016

发送等待接收超时

30020

没有连接对象

30045

十六进制转B(BINARY)格式错误

30046

十进制转B(BINARY)格式错误

39001

已经存在通讯了

39003

初始化WSAS失败

39010

端口参数错误

39012

创建通讯对象失败

39013

通讯对象不存在

39015

参数指针为空

39016

分配内存失败

39020

同步发送:等待返回超时

39022

同步发送:没有收到数据或者被拒绝

secs/gem协议系统通讯平台相关推荐

  1. SECS/GEM金南瓜通讯平台

    全面支持E5.E30.E37 等 SECS/GEM 协议以及E39.E40.E94.E87.E90.E173等GEM300 协议,满足 APC.FDC 和 EAP 的高性能要求. 事件收集 Host ...

  2. HSMS/SECS/GEM/GEM300半导体通讯协议介绍

    HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1 ...

  3. SECS/GEM协议开发系列(二)与Host连接

    secs协议的连接,我们还是要先看协议栈,如下图所示: 从协议栈,我可以看到,连接方式有两种: 1,串口连接,对应的是secs i 协议.串口参数,串口号,波特率,数据位,停止位,校验位. 2,网口连 ...

  4. 半导体设备通讯标准(SECS/GEM)

    ​ 目录 收起 前言 一.SECS/GEM 简介 二.系统的硬件组成 三.搞清楚需求.(搞明白是什么,基本玩法规则) 1.secs是一个协议族 2.secs的消息通信 3.甲方的secs的标准不一定是 ...

  5. 半导体通讯标准EAP、SECS/GEM视频介绍

    GEM(或SECS / GEM)是由半导体设备材料倡议制定的一组连接标准.这些标准用于定义自动化设备与主机工厂网络之间的通信,从而实现智能工厂制造. SECS是半导体设备通信标准的首字母缩写.GEM是 ...

  6. C++实现SECS/GEM

    SECS/GEM (Standard Equipment Communication System/Generic Equipment Model) 是一种用于在设备之间传输数据和控制信息的协议.它主 ...

  7. SECS/GEM 半导体设备通讯标准学习笔记

    1. SECS/GEM简介 SEMI:Semiconductor Equipment and Materials International 国际半导体设备与材料产业协会 SECS:Semicondu ...

  8. EAP通讯基础之SECS/GEM/GEM300mm

    EAP系统用于控制半导体设备进行自动化生产.与MES系统整合,校验产品信息,自动做账,同时收集产品生产过程中的制程数据和设备参数数据,帮助提高半导体工厂的生产效率,避免人工操作失误,提高产品良率. 而 ...

  9. SECS/GEM/GEM300/EAP 讲解(三)半导体协议

    来自secs/gem网站 www.secsgem.cn 第一章 介绍 第二章 GEM 收集事件 第三章 数据轮询 第四章 GEM 工厂应用支持 第五章 报警 第六章 配方管理 第七章 文档 第八章 设 ...

  10. PLC SECS/GEM半导体通讯解决方案

    PLC To SECS/GEM方案 适用于PLC控制器的统一SECS / GEM接口 JNG PLC SECS/GEM控制器提供高稳定性的桥接环境. 可以运行多个不同的自动化服务,也可以作为用户显示终 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第15期)
  2. 需求分析的接口需求_再谈需求分析
  3. Dev c++中{ }不能自动缩进
  4. docker配置数据默认存储路径:--graph已过时,新版本中使用--data-root代替
  5. 2015年 第6届 蓝桥杯 Java B组 省赛解析及总结
  6. TensorFlow实战-AlexNet
  7. AcWing 1047. 糖果
  8. ZOJ-2342 Roads 二分图最小权值覆盖
  9. (转)淘淘商城系列——使用solrj来测试索引库
  10. 一步一步写算法(之排序二叉树线索化)
  11. Google正在失去DeepMind?
  12. android item list居中,RecyclerView选中item居中显示
  13. 零元学Expression Blend 4 - Chapter 28 ListBox的基本运用与更改预设样式
  14. CCNA考试题库中英文翻译版及答案13
  15. 如何用计算机自动求和,如何在excel中自动求和 自动求和的解决方法及步骤
  16. Android:日志系统
  17. composer.lock(锁文件)到底要不要提交到项目的版本库中?
  18. 使用虚拟机备份软件备份VMware vSphere虚拟机
  19. vuex入门到实战——实现一个todoList待办清单【学习记录】
  20. 杭电OJ 1181(C++)

热门文章

  1. SourceOffsite安装配置
  2. 面试经历记录——东方海外OOCL上海软件开发中心实习生
  3. 鼎新TIPTOP GP/鼎捷易拓ERP系统介绍
  4. 信息安全实验三 :PGP邮件加密软件的使用
  5. 谷歌浏览器为什么要禁用Flash插件?深夜有感而发
  6. jdk 7 官方下载
  7. 用91卫图助手获取研究区(勾画研究矢量shp格式范围等)
  8. 什么是信息安全管理体系
  9. Matlab GUI界面设计
  10. matlab gui界面的优点,关于Matlab GUI界面设计的一些了解