import ctypes
C4PY_VERSION = "3"
#C语言接口函数名称
global_init = None #全局资源初始化
global_release = None #全局资源释放
clog_info = None #打印clog日志
get_tag_value = None #根据测点名称,取得测点实时值
get_tag_desc = None #根据测点名称,取得测点物模型标识
get_chl_param = None #根据通道名称,取得通道参数
get_dev_count = None #根据通道名称,取得设备数量
get_dev_array = None #根据通道名称,取得设备信息数组
get_tag_count = None #根据设备名称,取得测点数量
get_tag_array = None #根据设备名称,取得测点信息数组
set_tag_value = None #根据测点名称,设置测点实时值
dset_tag_value1 = None #根据设备名称+测点物模型标识,设置测点实时值
dset_tag_value2 = None #根据设备名称+测点寄存器地址,设置测点实时值
set_chl_status = None #设置通道状态
set_dev_status = None #设置设备状态
msleep = None #休眠,单位ms
dset_tag_qos1 = None #根据设备名称+测点物模型标识,设置测点质量戳
dset_tag_qos2 = None #根据设备名称+测点寄存器地址,设置测点质量戳
#结构体
#通道的串口参数结构体
class UartInfo(ctypes.Structure):
_fields_ = [
("uart", ctypes.c_char * 16), #串口名称,例如COM1
("baud", ctypes.c_int), #波特率
("data_bit", ctypes.c_int), #数据位,5、6、7、8
("stop_bit", ctypes.c_int), #停止位,1、2
("check", ctypes.c_int), #校验位,0无1奇2偶,3 MARK校验,4 SPACE校验
("timeout", ctypes.c_int), #超时ms
("time_space", ctypes.c_int), #帧间隔
("rev0", ctypes.c_char * 64), #保留0
("rev1", ctypes.c_char * 64), #保留1
("rev", ctypes.c_char * 344) #保留
]
#通道的TCP参数结构体
class TCPInfo(ctypes.Structure):
_fields_ = [
("role", ctypes.c_int), #角色,0:客户端(主动连接),1:服务端(等待接入)
("port", ctypes.c_int), #端口
("timeout", ctypes.c_int), #超时ms
("ip_addr", ctypes.c_char * 128), #ip地址/域名
("rev0", ctypes.c_char * 64), #保留0
("rev1", ctypes.c_char * 64), #保留1
("rev2", ctypes.c_char * 64), #保留2
("rev3", ctypes.c_char * 64), #保留3
("rev", ctypes.c_char * 116) #保留
]
#设备信息结构体
class DeviceInfo(ctypes.Structure):
_fields_ = [
("dev_name", ctypes.c_char * 64), #设备名称
("dev_desc", ctypes.c_char * 64), #设备描述
("dev_comm_addr", ctypes.c_char * 64), #设备通讯地址
("dev_public_addr", ctypes.c_char * 64), #设备公共地址
("dev_manu", ctypes.c_int), #兼容平台
("dev_model", ctypes.c_int), #型号
("rev0", ctypes.c_char * 40), #保留0
("rev1", ctypes.c_char * 32) #保留1
]
#测点基础信息结构体
class TagBaseProp(ctypes.Structure):
_fields_ = [
("tag_name", ctypes.c_char * 64), #测点名称
("tag_desc", ctypes.c_char * 64), #测点描述(物模型标识)
("tag_id", ctypes.c_int), #测点id
("dev_id", ctypes.c_int), #测点所属设备的id
("tag_type", ctypes.c_ushort), #测点类型
("tag_rw", ctypes.c_ushort), #测点读写属性
("init_value", ctypes.c_float), #测点初始值
("tag_source", ctypes.c_ubyte), #测点来源,0采集点,1中间点,2转发点,3系统点
("reserve", ctypes.c_char * 7) #保留
]
#测点采集信息结构体
class TagCltProp(ctypes.Structure):
_fields_ = [
("tag_k", ctypes.c_float), #测点系数
("tag_b", ctypes.c_float), #测点偏移
("collect_type", ctypes.c_int), #采集功能码
("obj_addr", ctypes.c_char * 88), #寄存器地址
("assist_param", ctypes.c_char * 8), #辅助参数
("data_type", ctypes.c_int), #数据类型
("data_format", ctypes.c_int), #数据格式
("tag_group_index", ctypes.c_int), #测点分组
("bit_get_value", ctypes.c_int), #是否按位取值
("start_bit", ctypes.c_ushort), #取值起始位
("end_bit", ctypes.c_ushort), #取值终止位
("enable_trans", ctypes.c_int), #是否开启数值转换
("org_read_value", ctypes.c_int), #转换前的原始值
("trans_value", ctypes.c_int), #转换后的值
("is_upload", ctypes.c_int), #是否上传
("upload_pv_tag", ctypes.c_int), #上传pv标识
("tag_k2", ctypes.c_float) #上传pv系数
]
#测点报警信息结构体
class TagAlarmProp(ctypes.Structure):
_fields_ = [
("enable_alarm", ctypes.c_int), #报警总开关
("hh_enable_alarm", ctypes.c_int), #开启高高报警
("h_enable_alarm", ctypes.c_int), #开启高报警
("l_enable_alarm", ctypes.c_int), #开启低报警
("ll_enable_alarm", ctypes.c_int), #开启低低报警
("hh_alarm_value", ctypes.c_float), #高高报警限值
("h_alarm_value", ctypes.c_float), #高报警限值
("l_alarm_value", ctypes.c_float), #低报警限值
("ll_alarm_value", ctypes.c_float), #低低报警限值
("hh_alarm_msg", ctypes.c_char * 32), #高高报警消息
("h_alarm_msg", ctypes.c_char * 32), #高报警消息
("l_alarm_msg", ctypes.c_char * 32), #低报警消息
("ll_alarm_msg", ctypes.c_char * 32), #低低报警消息
("dead_area_value", ctypes.c_float), #报警死区
("alarm_level", ctypes.c_ushort), #报警等级
("kg_change_mode", ctypes.c_ushort), #开关量报警
("kg_alarm_msg", ctypes.c_char * 32) #开关报警消息
]
#测点历史信息结构体
class TagHisProp(ctypes.Structure):
_fields_ = [
("enable_his_save", ctypes.c_int), #开启历史存储
("save_type", ctypes.c_int), #存储方式,0周期存储1压缩存储
("his_save_interval", ctypes.c_int), #存储间隔,秒
("comp_perc", ctypes.c_float) #压缩精度
]
#测点汇总信息结构体
class TagInfo(ctypes.Structure):
_fields_ = [
("base", TagBaseProp), #测点基本信息结构体
("clt", TagCltProp), #测点采集信息结构体
("alarm", TagAlarmProp), #测点报警信息结构体
("his", TagHisProp), #测点历史信息结构体
("p_tag_value", ctypes.POINTER(ctypes.c_float)), #测点实时数据指针
("p_tag_quality", ctypes.POINTER(ctypes.c_int)), #测点实时质量指针
("p_tag_str_value", ctypes.POINTER(ctypes.c_char)), #测点字符串类型实时值指针
("p_collect_time", ctypes.POINTER(ctypes.c_longlong)) #测点采集到数据的时间指针
]
#通道、设备状态
RUN_STAT_INIT = 0 #正在初始化中,网关刚启动时的默认状态
RUN_STAT_NORMAL = 1 #正常工作状态
RUN_STAT_FAULT = 2 #异常状态
RUN_STAT_STOP = 3 #正常停止状态(例如其它进程打开了串口调试,那么本通道会临时暂停)
RUN_STAT_UPDATE = 4 #正在升级中(本通道正在对下属子设备进行固件升级)
#测点质量
TAG_QUALITY_GOOD = 0 #测点质量戳好
TAG_QUALITY_BAD = 100 #测点质量戳坏
TAG_QUALITY_SET = 49 #测点质量戳为人工置数
TAG_QUALITY_INVALID = 50 #测点质量戳无效,即没有初始化过
#测点读写属性
TAG_RO = 0 #只读
TAG_RW = 1 #读写
TAG_WO = 2 #只写
#测点类型
TAG_YC = 0 #遥测,模拟量
TAG_YX = 1 #遥信,开关量
TAG_YM = 2 #遥脉
TAG_YK = 3 #遥控
TAG_YT = 4 #遥调
#测点数据类型
TAG_DATA_TYPE_BIT = 0 #位
TAG_DATA_TYPE_UCHAR = 1 #8位无符号
TAG_DATA_TYPE_CHAR = 2 #8位有符号
TAG_DATA_TYPE_UINT = 3 #16位无符号
TAG_DATA_TYPE_INT = 4 #16位有符号
TAG_DATA_TYPE_ULONG = 5 #32位无符号
TAG_DATA_TYPE_LONG = 6 #32位有符号
TAG_DATA_TYPE_BCD = 7 #16位BCD
TAG_DATA_TYPE_LONGBCD = 8 #32位BCD
TAG_DATA_TYPE_FLOAT = 9 #单精度浮点数
TAG_DATA_TYPE_DOUBLE = 10 #双精度浮点数
TAG_DATA_TYPE_STRING = 11 #字符串
TAG_DATA_TYPE_UINT64 = 12 #64位无符号
TAG_DATA_TYPE_INT64 = 13 #64位有符号
#测点数据格式
TAG_DATA_FORMAT_V0 = 0 #HL,12
TAG_DATA_FORMAT_V1 = 1 #LH,21
TAG_DATA_FORMAT_V2 = 2 #HLhl,1234
TAG_DATA_FORMAT_V3 = 3 #LHlh,2143
TAG_DATA_FORMAT_V4 = 4 #hlHL,3412
TAG_DATA_FORMAT_V5 = 5 #lhLH,4321
#测点报警类型
TAG_ALARM_NO = 0 #无报警
TAG_ALARM_HH = 1 #高高报警
TAG_ALARM_H = 2 #高报警
TAG_ALARM_L = 3 #低报警
TAG_ALARM_LL = 4 #低低报警
TAG_ALARM_KG_K = 5 #开报警
TAG_ALARM_KG_G = 6 #关报警
TAG_ALARM_KG_B = 7 #开关变位报警