金南瓜SECS/GEM是最适应于全自动智能设备的选择。 金南瓜SECS/GEM具有怪兽级的强劲性能,全面升级的高适应性,易用友好的SECS工具,利于快速开发部署。
金南瓜SECS兼容运行在独自工控机,或与设备软件集成在一台工控机,让用户灵活应对各种使用场景。
支持VB、C/C++、C#、Labview、各种PLC(opc、fins、mc、modbus等)、终端传感器等
全部软件目录清单
1 SECS/GEM用户
提供EquipViewApp.exe和HostViewApp.exe俩款demo软件,分别对应的场景是设备端和主机EAP端模拟。
红色框内为所需文件
2. PLC SECS/GEM用户
提供EquipViewApp.exe、 PlcSecsControlView.exe和HostViewApp.exe软件,分别对应的场景是设备端、PLC连接器和主机EAP端模拟。
3. GEM300用户
额外提供EquipViewApp300.exe和HostViewApp300.exe测试软件,分别对应的GEM300设备端和主机EAP端模拟。
1. 设备端模拟软件EquipViewApp
2. 主机端模拟软件 HostViewApp
3. PLC控制软件 PlcSecsControlView
4. GEM300模拟软件EquipViewApp300
5. 其他软件
1. 编程语言
主流语言 C、C++、C#、Labview
2 运行环境
Windows XP SP3
windows 7
windows 10
3 支持开发工具
LabVIEW、VC6.0、QT、Visual Studio 2008及以上、C++ Builder 6
4 硬件环境
硬件:
PC工控机,只要是电脑都能运行,无配置要求。
接口:
RJ45或者光纤以太网网口 1个
5 运行许可
运行许可与设备主机MAC地址绑定
更换硬盘、内存条、光驱及操作系统等不影响许可证问题。
用户可以在我们的网站上下载开发包文件。
1. 如果为加密狗方式,将加密狗插入USB接口即可
2. 运行文件许可方式
1. 参考 “Demo使用介绍书(日期).pdf”操作使用书
SDK与设备软件交互关系图
1. 初始化SDK dll模块
2. 设置各类参数、回调函数等
3. 设置控制模式(OFFLINE或ONLINE)
4. 启用通讯
初始化流程
1. 通讯状态发生改变时,通过回调函数反馈给设备
2. 设备发生事件时,调用EventPos API通知SDK
3. 设备发生Alarm时,调用AlarmSet API通知SDK
4. 服务器发送远程命令给设备,SDK通过远程命令回调函数实时通知设备
作用:
将变量、事件、警报等数据含义配置给SDK
配置文件目录:
在../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字符串类型 |
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 | 4-byte floating point |
44 | F8 | 8-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 |
通过SV.csv方法添加
① 变量的ID
② TYPE类型:
可填写L、A、TF、B、U1、U2、U4、I1、I2、I4、F4、F8
参考章节“6.1 类型映射表”
③ CLASS数据的类型
填写:SV
④ Int value 初始化值,一般不填值。
⑤ Units为单位
例如:
um、mm、kg等
⑥ callback设为0
通过Event.csv方法添加
① 事件的ID
② EVENT_NAME
事件的名称
③ DES描述
事件的描述
通过alarm.csv方法添加
① 警报的ID
② NAME
警报的名称
③ Enable
1为启用警报,当警报发生时将报告给主机
0位禁用警报,当警报发生时不会报告给主机
通过ReportVid.csv方法添加,该配置一般由主机端完成
① 第一列为Report ID
② 第二列及后面为VID
通过EventReport.csv方法添加,该配置一般由主机端完成
① 第一列为Event ID
② 第二列及后面为Report ID
这部分内容针对于PC端的C++语言二次开发
无需改动
需要修改代码
1. 启用“SecsPortExport.h”的宏定义 #define __CPP_BUILDER__
原来没有启用
启用宏定义
2. 删除“Group.cpp”、“SecsBase.cpp”和“SecsEquip.cpp”第一行的 #include “stdafx.h”
3. 用C++ Builder 6 的implib.exe将SecsPort.lib转换成C++ Builder 6所能支持的格式
只需将包含的cpp的最上边的 #include “stdafx.h” 删掉
在使用SECS通讯之前需要调用Start函数进行初始化dll模块。
接口:
void Start(string pServerAddr, int nPort);
例子:
m_pSecs = new CSecsEquip();
// 连接服务器
RcResult rc = m_pSecs->Start();
初始化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没有初始化”);
}
// 初始化其他
// 设置参数
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;
m_pSecs->m_pVarValueProc = ::OnVarValueProc;
// 示例的回调内容结束
// 特殊
m_pSecs->PPHandleMode(eCostomizeHandle);
m_pSecs->m_pPPFormatValueProc = OnPPFormatValueProc;
// 通过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;
参考:
1. 调用接口API开始通讯
CommEnable();
VariableSet();
例子:
int nVarID = 13001;
string pValue = “300”;
m_pSecs->VariableSet(1601, pValue);
通过API函数发送事件
EventPos(事件ID);
通过API函数设置/清除警报
AlarmSet(警报ID, true/false);
true为设置
false为清除
例子:
这部分内容针对于PC端的C#语言二次开发
接口名称和作用跟C++风格一致
注意:
工程师需要将SecsEquip项目重新编译,生成对应net版本的dll
1. 将项目的net版本选择与设备软件一致的版本
2. 编译生成DLL文件,将DLL文件添加到设备软件项目当中
创建一个SECS通讯对象
public CSecsEquip m_pSecs = new CSecsEquip();
金南瓜SDK软件使用之前必须先对其初始化
初始化方法:
1. 调用开始接口
void Start(string pServerAddr, int nPort);
2. 使用例子
Start();
1. 设置SECS连接参数
SetIP();
SetPort();
SetPassive();
SetMDLN();
SetT1();
SetT2();
SetT3();
SetT4();
SetT5();
SetT6();
SetT7();
2. 加载CSV数据
LoadDataByCsvFile();
3. 设置响应/委托函数
m_pOnCommState 通讯状态改变通知
m_pOnControlState 控制状态改变通知
4. 设置处理对象指针
SetClientData();
5. 设置控制模式
SetControlMode();
6. 增加变量、事件、警报等
增加方法参考后面对应名称
1. 调用接口API开始通讯
CommEnable();
通过API函数发送事件
EventPos();
通过API函数设置/清除警报
AlarmSet(警报ID, true/false);