# PythonTerminal **Repository Path**: dingliangPython/PythonTerminal ## Basic Information - **Project Name**: PythonTerminal - **Description**: 运行python脚本的终端程序 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-16 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **程序目录结构** xx.exe : 框架主程序 xx.dll : 框架动态库 xx.lib : 框架静态库,基本用不到静态 config : 配置文件夹 gcl_sdk : 框架和bus通信配置文件夹 log : 日志目录 modules : 自定义的模块 scripts :调试脚本目录 **调度脚本** 1.脚本路径 scripts 2.模块路径 2.脚本命名规则 xx.ns.py或xx.ns.txt xx:脚本名称 n: 调试周期,单位秒 **配置文件** config.ini 详细解释,配置文件内有注释 **调度脚本详解** 1.直接使用库,模块,变量 #python内置函数、变量,模块 os,time,sys,re,csv,snap7,queue,threading,struct 官方或第三方模块 Get_info :代替help 查看类,函数,方法的doc说明 configInfo :配置文件信息 类型是dict writeLog : 日志类封装 ToTime : 时间模块封装 xml : xml模块封装 wcf : web server clinet 封装 Global : 全局dict dbConnect: 数据库连接封装 PLC : PLC连接封装 sdk : ICS bus通信封装 2.封装类或方法 2.1 数据库类 2.1.1 数据库连接 #配置文件只要填写有access,mysql,mssql,oracle,sqlite 的节点,框架启动时会自动连接到数据库 #如连接多个同类数据,节点名称=数据库类型+xx 例如 多个Mysql [MysqlOne] xx=xx [MysqlTwo] xx=xx ..... #脚本内获取连接对象 connect=dbConnect['Mysql'][id] id :为配置文件设置的id字符串 2.1.2 查询数据 1.返回数据为list #返回 数据列表tuple 或 0 没有数据 data=connect.loadSqlList(sql) 2.返回数据为dict #返回 数据列表ditc 或 0 没有数据 data=connect.loadSqlDict(sql) 2.1.3 执行数据 1.单条执行 #返回执行成功条数 或 0 rec=connect.execSql(sql) 2.多条执行 #返回执行成功条数 或 0 rec=connect.execSqlList(sql,values) sql :sql语句带占位符 values: 数值列表、元组 #access占位符?,所有占位符不加'/",不管是不是字符串类型 2.2 PLC类 2.2.1 PLC连接 #配置文件,只要填写PLC节点,框架启动时会自动连接到PLC #节点命名规则 PLCxx 例如 多个PLC [PLCOne] xx=xx [PLCTwo] xx=xx ..... connect=PLC[plcName] plcName: 配置文件节点名称 2.2.2 读取PLC 1.直接解析数据 #返回数据 data=connect[节点名称].S7Parser.read(address,size=None,dataType=None) address: PLC 地址 如 I1.0|DB1.0|V1.0 size : 占用字节 dataType :数据类型 #size 和 dataType 只对占用多个字节地址有效果 例如: 读 2个字节I data=connect[节点名称].S7Parser.read('I0',2,'bool') >data= [[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1]] #默认转换 False=1,True=2 data=connect[节点名称].S7Parser.read('I0.0') >data= 1 读 8个字节DB1.0 类型 short data=connect[节点名称].S7Parser.read('DB1.0',8,'short') >data=[0,0,0,0] 2.原始数据 #返回字节数组 data=connect[节点名称].S7Parser.read_v2('I0',2') >data=bytearray(b'\x00\x00') 2.2.3 写入PLC 1.单个数据写入 #写入成功返回True rec=connect[节点名称].S7Parser.write(address,data,dataType) address: PLC 地址 如 I1.0|DB1.0|V1.0 data: 写入数据 dataType :数据类型 例如: #写入I0的第0位为真 rec=connect[节点名称].S7Parser.write('I0.0',2,'bool') >rec=True 2.多个连续数据写入 #写入成功返回True rec=connect[节点名称].S7Parser.write(address,data,dataType) address: PLC 地址 如 I1.0|DB1.0|V1.0 data: 写入数据为 list或tuple dataType :数据类型 例如: #写入DB1.0-DB1.3 类型 short 数据:123,234 rec=connect[节点名称].S7Parser.write('DB1.0',[123,234],'short') >rec=True 2.3 BUS_SDK类 2.3.1 连接 #配置文件.\gcl_sdk\config\apps.config.ini 框架配置文件,启用SDK,[SDK] on-off=True ,默认是开启的 connect=sdk 2.3.1 读取数据 #返回 tuple 或 None ,读取需要bus配置推送到本终端 data=sdk.get_measure(measureID) measureID: mid 2.3.2 写入数据 #返回发送字节长度或False data=sdk.set_measure(mid,value,q,t) mid:measureID value:数据 q :质量 可省略,为 1 t :时间 可省略,为当前时间 例如 遥信发送 sdk.set_measure(16777216,2) 遥测发送 sdk.set_measure(33554432,12.12) 遥文发送 sdk.set_measure(50331648,'测试遥文') 2.4 webPostRT(web查询bus3遥) 2.4.1 依赖关系 依赖,nginx,ygct_svr_fastcgi 2.4.2 post_measure(mid) mid:单个或列表、元组 返回 dict或list 例如:1, post_measure(16777216) >{'url': '', 'mid': 16777216, 'v': '1', 'q': 1, 't': 1545378144025, 'srcid': 604045705, 'state': 1} 2, post_measure([16777216,16777217]) >[{'url': '', 'mid': 16777216, 'v': '1', 'q': 1, 't': 1545378144025, 'srcid': 604045705, 'state': 1}, {'url': '', 'mid': 16777217, 'v': '1', 'q': 1, 't': 1545378144554, 'srcid': 25363457, 'state': 1}] 2.5 网络测试 2.5.1 ping(ip/list,number,timeout=3,ping_timeout=1) ip/list/tuple:ip地址,地址列表或元组 number:ip数量,ip为单个地址时有效 timeout: 线程超时,默认3秒 ping_timeout:ping次数,默认1次 返回:dict 例如: 1,ping('172.31.2.1') >{'172.31.2.1': None} 网络不通 2,ping(['172.31.2.1','172.31.2.2']) >{'172.31.2.2': 0.002772901663497862, '172.31.2.1': None} 172.31.2.2:网络延时约28毫秒,172.31,2,1:网络不通 3,ping('172.31.2.1',5) >{'172.31.2.2': 0.003025757229480952, '172.31.2.3': 0.005027125242928143, '172.31.2.4': 0.00476981228715978, '172.31.2.5': 0.002905407705287466, '172.31.2.1': None} 从172.31.2.1开始5个IP结果 2.5.2 pingFile(file='./config/IP_Address.csv') file:存储IP地址的文件,默认config文件文件夹,IP_Address.csv ip地址文件格式: 序号,IP地址,开始,设备名称,MeasureID 1,192.168.3.1,无线网关1,16777216 2,192.168.3.2,无线网关2,16777217 返回 dict