#csv文件需要为utf-8的编码格式 #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #导入pyads软件包 import pyads #通讯地址,端口,在amsnetid处填写目标netid plc = pyads.Connection('10.42.133.15.1.1', 851) # 打开端口 plc.open() #读取需要用的ADS变量 #按列读取所用参数 Columnneo= plc.read_by_name('MAIN.Columnneo', pyads.PLCTYPE_INT) print(Columnneo) #按列头名称读取所用参数 Columnname= plc.read_by_name('MAIN.Columnname', pyads.PLCTYPE_STRING) print(Columnname) #按行读取所用参数 Rowneo= plc.read_by_name('MAIN.Rowneo', pyads.PLCTYPE_INT) print(Rowneo) #按行头读取所用参数 RowID=plc.read_by_name('MAIN.RowID', pyads.PLCTYPE_INT) print(RowID) #按单元格读取所用参数 Columnnumber= plc.read_by_name('MAIN.Columnnumber', pyads.PLCTYPE_INT) print(Columnnumber) Rownumber= plc.read_by_name('MAIN.Rownumber', pyads.PLCTYPE_INT) print(Rownumber) print() #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #导入CSV软件包 import csv #读取指定列 Columnneo_values =[]#创建一个存储列值的列表,为后续传回TC进行使用 with open("F:\\PythonCSV.csv","r") as file:#打开csv文件并缓存进file中,python中路径要打双斜杠\\ #调用reader函数 reader = csv.reader(file) #指定列数进行读取 for Column in reader: Columnneo_values.append(Column[Columnneo])#拼接读取结果到创建的列表中 print(f"第{Columnneo}列的结果为") print(Columnneo_values) #显示读取结果 print() #返回读取到的结果 Columnneolist=[f"\'{item}\'"for item in Columnneo_values]#对要传回的数据进行处理,当然数据处理部分也可def成自定义函数 Columnneolist_Number=len(Columnneolist)#获取元素个数 #print(Columnneolist) #可print出查看和原来的列表数组有什么区别 #轮询写入 for i in range(Columnneolist_Number): #生成要执行的代码,储存在CodeColumnneo中 CodeColumnneo='plc.write_by_name(\'MAIN.ReadByColumnneo[{}]\', {}, pyads.PLCTYPE_STRING)'.format(i,Columnneolist[i]) #print(CodeColumnneo) #可Print查看代码 eval(CodeColumnneo) #执行代码将数据传回TC #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #读取指定列头 Columnname_values =[]#创建一个存储列值的列表,为后续传回TC进行使用 with open("F:\\PythonCSV.csv","r") as dictfile:#打开csv文件并缓存进dictfile中 # 调用dictreader函数 dictreader = csv.DictReader(dictfile) # 指定列头进行读取 for dictColumn in dictreader: Columnname_values.append(dictColumn[Columnname]) print(f"{Columnname}列的结果为") print(Columnname_values) # 显示读取结果 print() #返回读取到的结果 Columnnamelist=[f"\'{item}\'"for item in Columnname_values]#对要传回的数据进行处理,当然数据处理部分也可def成自定义函数 Columnnamelist_Number=len(Columnnamelist)#获取元素个数 #print(Columnnamelist) #可print出查看和原来的列表数组有什么区别 #轮询 for i in range(Columnnamelist_Number): #生成要执行的代码,储存在CodeColumnname中 CodeColumnname='plc.write_by_name(\'MAIN.ReadByColumnname[{}]\', {}, pyads.PLCTYPE_STRING)'.format(i,Columnnamelist[i]) #print(CodeColumnneo) #可Print查看代码 eval(CodeColumnname) #执行代码将数据传回TC #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #读取指定行,读取可以使用python函数库自带的linecache功能,但需要将CSV文件放入项目以缓存(根目录即可) #导入linecache函数包 import linecache # 获取文件指定行内容 #用这种方式获取的结果行数据储存在了一个String变量类型中,因此传回后可以在TC中进行字符串分割处理 Row = linecache.getline('PythonCSV.csv', Rowneo) print(f"第{Rowneo}行的结果为") print(Row.strip())#显示结果,去除分隔符 print() #将读取的数据传回TC, plc.write_by_name('MAIN.ReadByRowneo', Row.strip(), pyads.PLCTYPE_STRING) #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #导入Pandas函数包,该函数包功能非常多,可以按指定的行数或列数单独读取,也可以指定单元格或进行范围查找,需在解释器中进行安装,也需要将CSV文件放入项目以缓存(根目录即可) #但相对的资源占用较多 import pandas #按行头进行读取 #读取CSV文件 readfile_rowname=pandas.read_csv("PythonCSV.csv") #将Name这一列作为索引行 readfile_rowname = readfile_rowname.set_index('Name') #print("索引类型:", readfile_rowname.index.dtype) #可先检查行头的数据类型,本文档中为int,因此后续loc函数中也要索引int类型变量 #按RowID进行参数索引 Rownamelist=readfile_rowname.loc[RowID] print(f"行头{RowID}的结果为") print(Rownamelist)#显示索引结果,该结果为一个pandas series类型,包含了该行的所有列值,索引是列名,值是单元格内容,因此要穿回PLC需要处理 #print(type(Rownamelist)) #若不确定python中获取的数据是什么数据类型,可以用type()函数来得知 print() #导入json功能,用于将series变为一整个String import json # 将 Series 转换为字典列表 rowname_dict = Rownamelist.to_dict() #print(rowname_dict) # 转换为 JSON 字符串 json_str = (json.dumps(rowname_dict)).strip('{}') #print(json_str) #可查看转换出的json_str #注意json_str的字节长度,若超出PLC默认的80,TC处要在声明String时加()来扩展字节长度 byte_length = len(json_str.encode('utf-8')) #print(byte_length)#显示字节长度 #将结果传回PLC plc.write_by_name('MAIN.ReadByRowname', json_str, pyads.PLCTYPE_STRING) #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #读取指定单元格数据,可使用pandas中的iloc变量来进行索引 #读取CSV文件 readfile_iloc=pandas.read_csv("PythonCSV.csv") #使用iloc函数读取指定单元格数据,前者为行索引,后者为列索引 value=readfile_iloc.iloc[Rownumber,Columnnumber] #读出的值为PLC无法识别的类型,需要转化,这边将其转化为String ilocvalue=str(value) print("指定单元格的结果为") print(ilocvalue)#显示结果 print() #将数据传回TC plc.write_by_name('MAIN.ReadByiloc', ilocvalue, pyads.PLCTYPE_STRING) #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #关闭端口 plc.close() #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\