secs/gem协议系统通讯平台

secs/gem协议系统通讯平台金南瓜 SECS GEM 是最适应于全自动智能设备的选择 DMSSECS GEM 具有怪兽级的强劲性能 全面升级的高适应性 易用友好的 SECS GEM 工具 利于快速开发部署 金南瓜 SECS 兼容运行在独自工控机 或与设备软件集成在一台工控机 让用户灵活应对各种使用场景

第一章   产品简介

1. 产品介绍

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

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

      

2. 软件清单与展示

secs/gem协议系统通讯平台

 

全部软件目录清单

2.1软件清单

1       SECS/GEM用户

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

移植所需文件

         secs/gem协议系统通讯平台

 

红色框内为所需文件

2.      PLC SECS/GEM用户

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

3.      GEM300用户

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

2.2 模拟软件展示

1.      设备端模拟软件EquipViewApp

secs/gem协议系统通讯平台

 

4.      SECS/GEM300模拟软件EquipViewApp300

secs/gem协议系统通讯平台

 

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 开发工具

LabVIEWVC6.0QTVisual 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. 启用通讯

secs/gem协议系统通讯平台 ​​​​​​​ ​​​​​​​

 

初始化流程

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

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

         例如:

                   通讯状态

                   控制状态

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

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

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

secs/gem协议系统通讯平台

 

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为通过回调方式访问最新值

secs/gem协议系统通讯平台

 

6.2 事件添加

通过Event.csv方法添加

secs/gem协议系统通讯平台

 

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__

secs/gem协议系统通讯平台

 

原来没有启用

secs/gem协议系统通讯平台

 

启用宏定义

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

secs/gem协议系统通讯平台

 

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

secs/gem协议系统通讯平台

 

secs/gem协议系统通讯平台

 

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版本选择与设备软件一致的版本

secs/gem协议系统通讯平台

 

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”的网络配置。

secs/gem协议系统通讯平台  secs/gem协议系统通讯平台

 

 

                                    设备配置图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..

24111

T4超出范围: range 1000..

24112

T5超出范围: range 1000..

24113

T6超出范围: range 1000..

24114

T7超出范围: range 1000..

24115

T8超出范围: range 1000..

24116

参数错误

24117

IMCHandlenull

24118

ALTX应该小于120ASCII字符串

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208890.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午10:32
下一篇 2026年3月19日 上午10:32


相关推荐

  • eclipse Maven配置[通俗易懂]

    eclipse Maven配置[通俗易懂]简述:现需要在Eclipse中配置Maven插件,同时安装maven应用,配置Maven环境变量,建立Maven管理的工程,并用Maven导入Gson包,编写简易Json输出程序步骤:1.首先到EclipseMarketplace中下载MavenIntegrationforEclipseWTP,如下,之后查看是否成功下载,Win

    2022年5月17日
    38
  • git每次push和pull都要输入密码

    git每次push和pull都要输入密码

    2022年2月18日
    40
  • USB转RS485串口电路设计「建议收藏」

    USB转RS485串口电路设计「建议收藏」USB转串口芯片的串口信号一般为TTL/CMOS电平,在实现半双工RS485串口时需要外接485电平转换芯片,设计中需要有信号来控制485转接芯片的发送和接收使能端,建议选择自带485控制引脚的转接芯片(如CH340/CH342系列芯片的TNOW引脚),该引脚默认为低电平,当串口处于发送状态时会自动拉高处于有效状态,发送完成再恢复低电平。同理,可以延伸到其他应用场景,如单片机串口转485电路设计中可以使用GPIO口来控制485转接芯片的发送和接收使能。以MAX485为例:1.DE..

    2022年6月10日
    60
  • Java 创建线程的三种方式总结

    Java 创建线程的三种方式总结Java 创建线程的三种方式总结我们在开发中 为了提高程序的运行效率 经常会使用多线程的方式来实现并发操作 那么创建线程有几种方式呢 1 继承 Thread 类直接继承 Thread 即可实现多线程 Thread 本质上也是实现了 Runnable 接口 线程启动的唯一方法是通过 Thread 类的 start 实例方法实现的 start 方法调用时 系统才会真正创建一个新线程 并执行 run 方法 它是一个 native 方法 classMyThrea

    2026年3月26日
    2
  • sqlyog下载安装_sqlyog激活成功教程版

    sqlyog下载安装_sqlyog激活成功教程版地址:https://github.com/webyog/sqlyog-community/wiki/Downloads

    2026年2月22日
    3
  • js取数组截取

    js取数组截取splice()会删除选定的数组,slice()只会进行选定,pop选定最后一个元素删除并返回最后一个元素的值,length函数判断数组的长度,使用slice选取单个值的时候记得返回的是一个数组类型。constarr=[1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]//slice()方法constsliceArr…

    2022年5月2日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号