Imports System.Runtime.InteropServices
Module SCIO
    '/********************************宏定义****************************************/

    Public Const MAX_SUPPORT_DEVICES As Integer = 16

    ' 指令返回值定义 

    Public Const RTN_CMD_SUCCESS As Integer = 0         '指令执行成功
    Public Const RTN_CMD_ERROR As Integer = -1          '指令执行失败
    Public Const RTN_LIB_PARA_ERROR As Integer = -2     '指令参数错误
    Public Const RTN_NO_SUPPORT As Integer = -3         '不支持
    Public Const RTN_INVALID_HANDLE As Integer = -4     '无效句柄

    '//设备信息结构
    Public Structure TDevInfo
        Dim address As UShort       '在上位机系统中分配的地址序号,如USB 
        <MarshalAs(UnmanagedType.ByValTStr, sizeconst:=16)> Dim idStr As String         ' 识别字符串
        <MarshalAs(UnmanagedType.ByValTStr, sizeconst:=64)> Dim description As String      ' 描述符
        Dim ID As UShort                   ' 板上的ID(未用)
    End Structure


    Public Structure CALENDAR
        Dim w_year As UShort
        Dim month As Byte
        Dim day As Byte
        Dim week As Byte
        Dim hour As Byte
        Dim min As Byte
        Dim sec As Byte
    End Structure

    '/********************************函数声明**************************************/
    '/*******************************************************************************


    ' 函数名称: NIO_Search
    ' 功能说明: 板卡搜寻
    ' 入口参数: pDevNo:     用于接收搜寻到的设备的数目
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_Search Lib "scio32.dll" (ByRef pDevNo As UShort, ByRef pInfoList As TDevInfo) As Short

    ' 函数名称: NIO_OpenByID
    ' 功能说明: 根据SIO 设备在系统中名称，打开相应的设备。
    ' 入口参数: idStr:      设备名称
    '           pDevHandle: 用于接收设备操作句柄
    ' 出口参数: 指令执行成功

    Public Declare Function NIO_OpenByID Lib "scio32.dll" (ByVal idStr As String, ByRef pDevHandle As IntPtr) As Short

    ' 函数名称: NIO_Close
    ' 功能说明: 关闭打开的设备
    ' 入口参数: devHandle:  设备操作句柄
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_Close Lib "scio32.dll" (ByVal devHandle As IntPtr) As Short

    ' 函数名称: NIO_GetDO
    ' 功能说明: 获取设备点位输出状态
    ' 入口参数: devHandle:  设备操作句柄
    '           portStart:  起始端口号, 取值范围(0-1)
    '           portCount:  要获取的端口数量, 取值范围(1-2)
    '          value:      用于存储端口状态值缓冲(每个端口16个点位), 每个点位: 
    '                        1 代表触发; 0 代表未触发
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetDO Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal portStart As UShort, ByVal portCount As UShort, ByRef value As UShort) As Short

    ' 函数名称: NIO_SetDO
    '功能说明: 设置设备输出端口状态
    ' 入口参数: devHandle:  设备操作句柄
    '            portStart:  起始端口号, 取值范围(0-1)
    '            portCount:  要获取的端口数量, 取值范围(1-2)
    '            value:      要设置的端口状态值缓冲(每个端口16个点位), 每个点位: 
    '                       1 代表触发; 0 代表不触发
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_SetDO Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal portStart As UShort, ByVal portCount As UShort, ByRef value As UShort) As Short

    ' 函数名称: NIO_GetDOBit
    ' 功能说明: 获取设备单个点位输出状态
    ' 入口参数: devHandle:  设备操作句柄
    '            channel:    点位位置, 取值范围: 0-31
    '           value:      用于存储获取的点位状态, 1 代表触发; 0 代表未触发
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetDOBit Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal channel As UShort, ByRef value As UShort) As Short

    '* 函数名称: NIO_SetDOBit
    ' 功能说明: 设置设备单个点位输出状态
    ' 入口参数: devHandle:  设备操作句柄
    '           channel:    点位位置, 取值范围: 0-31
    '          value:      要设置的值, 1 代表触发; 0 代表不触发
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_SetDOBit Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal channel As UShort, ByVal value As UShort) As Short

    ' 函数名称: NIO_GetDI
    ' 功能说明: 获取设备输入状态，按端口获取
    ' 入口参数: devHandle:  设备操作句柄
    '            portStart:  起始端口号, 取值范围(0-1)
    '           portCount:  要获取的端口数量, 取值范围(1-2)
    '           value:      用于存储端口状态值缓冲(每个端口16个点位), 每个点位: 
    '                       1 代表有效（接通）; 0 代表无效（未接通）
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetDI Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal portStart As UShort, ByVal portCount As UShort, ByRef value As UShort) As Short

    ' 函数名称: NIO_GetDIBit
    ' 功能说明: 获取设备单个点位输入状态
    ' 入口参数: devHandle:  设备操作句柄
    '           channel:    点位位置, 取值范围: 0-31
    '           value:      用于存储获取的点位状态, 1 代表有效; 0 代表无效
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetDIBit Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal channel As UShort, ByRef value As UShort) As Short

	' 函数名称: NIO_GetADC
    ' 功能说明: 获取设备模拟量输入
	'入口参数: devHandle:  设备操作句柄
    '          adcStart:   起始通道号, 取值范围(0-3)
    '          adcCount:   要获取的通道数量, 取值范围(1-4)
    '          value:      用于存储模拟量输入值缓冲
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetADC Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal adcStart As UShort, ByVal adcCount As UShort, ByRef value As UShort) As Short

	' 函数名称: NIO_SetDAC
    ' 功能说明: 设置设备模拟量输出
	' 入口参数: devHandle:  设备操作句柄
    '           dacStart:   起始通道号, 取值范围(0-3)
    '           dacCount:   要获取的通道数量, 取值范围(1-4)
    '           value:      要设置的端口模拟量输出值缓冲
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_SetDAC Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal dacStart As UShort, ByVal dacCount As UShort, ByRef value As UShort) As Short

    ' 函数名称: NIO_GetTime
    ' 功能说明: 获取设备时期及时间
    ' 入口参数: devHandle:  设备操作句柄
    '           pdate:       用于存储日期时间的缓冲
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetTime Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef pdate As CALENDAR) As Short

    ' 函数名称: NIO_WriteID
    ' 功能说明: 修改SIO 设备在系统中名称
    ' 入口参数: devHandle:  操作句柄
    '           idStr:      新的设备名称, 最长16字节包括末尾'\0'字符
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_WriteID Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal idStr As String) As Short

    ' 函数名称: NIO_ReadID
    ' 功能说明: 读取SIO 设备名称
    ' 入口参数: devHandle:  设备操作句柄
    '           idStr:  用于存放设备名称缓冲区, 最长16字节
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_ReadID Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal idStr As String) As Short

    ' 函数名称: NIO_WriteDevID
    ' 功能说明: 修改SIO 设备ID序号（用于Modbus通讯的设备ID）
    ' 入口参数: devHandle:  操作句柄
    '           devId:      新的设备序号
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_WriteDevID Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal devId As Byte) As Short

    ' 函数名称: NIO_ReadDevID
    ' 功能说明: 读取SIO 设备ID序号（用于Modbus通讯的设备ID）
    ' 入口参数: devHandle:  设备操作句柄
    '           devId:  用于存放设备ID序号
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_ReadDevID Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef devId As Byte) As Short

    ' 函数名称: NIO_ReadProductID
    ' 功能说明: 获取产品唯一ID
    ' 入口参数: devHandle:  设备操作句柄
    '            productId:  用于存放设备ID的缓冲(12字节共96位)
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_ReadProductID Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef productId As UShort) As Short

    ' 函数名称: NIO_ReadUserData
    ' 功能说明: 获取用户数据
    ' 入口参数: devHandle:  设备操作句柄
    '            userData:   用于存放用户数据的缓冲(84字节)
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_ReadUserData Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef userData As Byte) As Short

    ' 函数名称: NIO_WriteUserData
    ' 功能说明: 存储用户数据
    ' 入口参数: devHandle:  设备操作句柄
    '            userData:   用于存放用户数据的缓冲(最多存储84字节, 可用于存储加密)
    '						注意：数据一次性读出和写入，超出部分将忽略
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_WriteUserData Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef userData As Byte) As Short

    ' 函数名称: NIO_GetIOLogic
    ' 功能说明: 获取设备IO口逻辑
    ' 入口参数: devHandle:  设备操作句柄
    '            value:      用于存储IO逻辑状态
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_GetIOLogic Lib "scio32.dll" (ByVal devHandle As IntPtr, ByRef value As UShort) As Short

    ' 函数名称: NIO_SetIOLogic
    ' 功能说明: 设置设备IO口逻辑
    ' 入口参数: devHandle:  设备操作句柄
    '            value:      要设置的IO逻辑状态（1，正逻辑；0，负逻辑）
    ' 出口参数: 指令执行状态

    Public Declare Function NIO_SetIOLogic Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal value As UShort) As Short

    ' 函数名称: NIO_GetError
    ' 功能说明: SC设备操作过程中，最后出现的错误，以字符串的形式提供
    ' 入口参数: handle:     设备句柄
    '            str:        用于存储错误信息的缓冲
    '            len:        缓冲区大小
    ' 出口参数: 成功返回错误字符串，失败返回NULL

    Public Declare Function NIO_GetError Lib "scio32.dll" (ByVal devHandle As IntPtr, ByVal str As String, ByVal len As UShort) As Short

End Module
