电子皮带秤的防雷击解决方案.docx
- 文档编号:6877529
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:18
- 大小:255.72KB
电子皮带秤的防雷击解决方案.docx
《电子皮带秤的防雷击解决方案.docx》由会员分享,可在线阅读,更多相关《电子皮带秤的防雷击解决方案.docx(18页珍藏版)》请在冰点文库上搜索。
电子皮带秤的防雷击解决方案
电子皮带秤的防雷击及与MOXA串口服务器的串口通讯
自动化部计算机室刘艳舒绪琪
皮带秤仪表的通讯及其抗干扰行能差是长期以来屡遭雷击的主要原因,因此我们给仪表加装中继器,他又增强信号及防雷击的功能,并为计算机的串口通讯加装了转换器,它也具有防雷击的功能,这样就可以解决皮带秤仪表的防雷击,减少给生产带来的影响。
1.2105系列称重控制仪表串口发送的指令:
焦化厂和烧结厂皮带秤采用的是徐州衡器的BL2105型电子皮带秤积算器,它采用的8051主从式多站通讯方式,主机主动查询从站,从站根据不同的指令响应。
1.1通讯的命令格式:
要实现仪表的通讯,主要分两步发送控制命令字。
然后通过通讯中断处理仪表响应数据。
(1)先把通讯协议设置为:
Baud_Rate,m,8,1
通过串口发送地址到仪表
延时0.01s
(2)接着把通讯协议设置为Baud_Rate,m,8,1
通过串口发送以下数据到仪表:
CommandCodeFunCodeData0Data1Data2Data3Data4
其中:
Baud_Rate为通讯波特率,
CommandCode为指令代码:
01H–写指令
02H–读指令
03H–仪表键盘命令
FunCode为功能代码
Data0-Data3:
发送写指令时:
为四字节浮点数
发送读指令时:
所有字节为零
发送键盘指令时:
所有字节为零
Data4:
为前7个数据(含地址)的和取第字节
1.2数据响应
发送指令,仪表返回的是92字节数据
Data0-Data3为顺时流量Data10-Data15为主累计Data80-Data83为皮带速度
数据计算:
瞬时流量:
当Data3的最高位为0时:
瞬时流量=(Data2×16^4+Data1×16^2+Data0×16^0)×2[(Data3-256)-23]
当Data3的最高位为1时:
瞬时流量=-1×[(Data2-128)×16^4+Data1×16^2+Data0×16^0]×2[(Data3-256)-23]
主累计:
当Data15的最高位为0时:
主累计=Data15×16^6+Data14×16^4+Data13×16^2+Data12×16^0+Data11×16^(-2)+Data10×16^(-4)
当Data15的最高位为1时:
主累计=-1[(Data15-258)×16^6+Data14×16^4+Data13×16^2+Data12×16^0+Data11×16^(-2)+Data10×16^(-4)]
2设计思路
在自动化工业领域、有成千上万的感应器、检测器、PLC、读卡器或其他设备,互相连接形成一个控制网络,作为信息系统中管理数据的工具。
而最常用来连接这些设备的通讯界面就是RS-232和RS-422/485总线.近几年来,以太网/互联网等网络架构已逐渐在自动化产业内被广泛的采用,取代传统的串口通讯而成为自动化系统通讯的主流。
为了防雷击我们使用的是MOXA公司的串口设备服务器Nport-5232I,传统的SCADA系统和数据采集系统依赖串口(RS-232/422/485)来采集不同种类仪器的数据。
有了NPort串口设备联网服务器,您的SCADA系统和数据采集系统能够存取任何与标准TCP/IP网络连接的设备,不论设备是位于近处或位于远程。
Nport-5232I可让工业串口设备立即连上网络,它里面有个RealCOM/TTY驱动程序,用于COM/TTY口的软件现在可以随时用于TCP/IP网络。
这项特点不但让您不需要更换软件,更可以让串口设备立即连网。
2.1PComFunctions(PCom函数)
使用这套函数可以完成RS-485或RS-232到TCP-IP的转换。
PortControl:
sio_open打开串口
代码:
DimportAsLong
port=2
ret=sio_open(port)
Ifret<>SIO_OKThen
‘Openfail
EndIf
sio_close关闭串口
代码:
DimportAsLong
port=2
ret=sio_close(port)
Ifret<>SIO_OKThen
‘Openfail
EndIf
InputData
sio_read从设备的输入缓存区读取数据
代码:
Dimbuf(0To9)AsByte
DimlenAsLong
len=sio_read(2,buf(0),10)
Iflen<0Then
‘fail
EndIf
OutputData
sio_write写入数据
代码:
Dimbuf(0To9)AsByte
DimlenAsLong
len=sio_write(2,buf(0),10)
Iflen<0Then
‘fail
EndIf
2.2窗体设计
左边的文本框显示从皮带秤仪表中读取的82个16进制数
右边的第一个文本框显示累计值
右边的第而个文本框显示瞬时值
begin按钮用来循环采集数据
stop按钮用开关闭串口
2.3程序设计
打开串口
PrivateFunctionOpenPort()AsBoolean
DimretAsInteger
DimsyserrAsInteger
Term.Text=""
OpenPort=False
ret=sio_open(GCommData.port)
Ifret<>SIO_OKThen
sio_close(GCommData.port)
ExitFunction
EndIf
IfPortSet()=FalseThen
sio_close(GCommData.port)
ExitFunction
EndIf
OpenPort=True
GbOpen=True
EndFunction
关闭串口
PrivateFunctionClosePort()AsObject
sio_close(GCommData.port)
EndFunction
发送读的指令
PrivateFunctionPortSet()AsBoolean
DimportAsInteger
DimmodeAsInteger
DimHw,SwAsInteger
DimretAsInteger
DimtoutAsInteger
port=GCommData.port
PortSet=False
mode=BIT_8OrSTOP_1OrP_MRK
ret=sio_ioctl(port,B4800,mode)
Ifret<>SIO_OKThen
ExitFunction
EndIf
Dimadress1
(1)AsByte
adress1(0)=1
DimaAsInteger
a=sio_write(port,adress1(0),1)
mode=BIT_8OrSTOP_1OrP_SPC
ret=sio_ioctl(port,B4800,mode)
Ifret<>SIO_OKThen
ExitFunction
EndIf
Dimb(6)AsByte
b(0)=&H2s
b
(1)=0
b
(2)=0
b(3)=0
b(4)=0
b(5)=0
b(6)=&H3s
a=sio_write(port,b(0),7)
Callsio_SetWriteTimeouts(GCommData.port,3000)
Sleep(1000)
DimrlenAsInteger
Dimbuf(511)AsByte
Term.Text="beginread"
rlen=sio_read(GCommData.port,buf(0),512)
Ifrlen>0Then
CallShowData(buf,rlen)
Else
Ifrlen=0Then
EndIf
EndIf
EndFunction
计算瞬时流量和累计值
PrivateSubCalaLJZ(Dta()AsByte,rlenAsLong)
Dimt1,t2,t3,t4,t5,tAsDouble
IfDta(15)<128Then
t1=CDbl(Dta(14))*16*16*16*16
t2=CDbl(Dta(13))*16*16
t3=CDbl(Dta(12))
t4=CDbl(Dta(11))/256
t5=CDbl(Dta(10))/65536
t=t1+t2+t3+t4+t5
Text1.Text=t
Else
Text1.Text=(-1)*(Dta(15)-128)*16*16*16*16*16*16+Dta(14)*16*16*16*16+Dta(13)*16*16+Dta(12)+Dta(11)/(16*16)+Dta(10)/(16*16*16*16)
EndIf
IfDta(3)<128Then
t1=(CDbl(Dta
(2))-128)*16*16*16*16
t2=CDbl(Dta
(1))*16*16
t3=CDbl(Dta(0))
t4=(t1+t2+t3)*2*(Dta(3)-256-23)
Text2.Text=t4
EndIf
3网页实时数据刷新,历史查询,历史曲线
3.1网页实时数据刷新
网页实时数据刷新是为了满足生产单位可以实时的看数据,该数据每5秒刷新一次。
这部分使用的是的webservice技术,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
例如,笔者创建一个WebService,它的作用是查询某公司某员工的基本信息。
界面如下:
代码如下:
publicstringNeng_Shc()
{
stringstrIn="server=190.168.0.9;database=皮带秤;userid=sa;password=1228;";
SqlConnectioncn=newSqlConnection(strIn);
stringstrSQL,strOut=strOut=" strSQL="selecttop6ssz,ljz,sj,tablenamefrom皮带秤表orderbysjdesc"; SqlCommandcomm=newSqlCommand(strSQL,cn); comm.CommandType=CommandType.Text; try { cn.Open(); SqlDataReadermyReader=comm.ExecuteReader(); if(myReader.HasRows) while(myReader.Read()) { strOut=strOut+" strOut=strOut+" strOut=strOut+" strOut=strOut+" myReader.Close(); } catch(Exceptione) { Console.WriteLine(e.Message); } finally { cn.Close(); } returnstrOut; } functionLoopz() { service.useService("http: //127.0.0.1/WebServiceForElect/Service1.asmx? wsdl","TimeService"); service.TimeService.callService(callback1,"Neng_Shc"); setTimeout("Loopz()",100); } functioncallback1(res){ if(! res.error) { a=res.value; label3.innerHTML=a; //label4.innerHTML=a; //label5.innerHTML=a; } } functiontimer() { Loopz(); } 3.2历史曲线 这部分可以更直观的查询某一阶段的历史趋势图 界面如下: 代码如下: privatevoidPage_Load(objectsender,System.EventArgse) { stringpath=@"C: \Inetpub\wwwroot\WebApplication1\tempgif"; //目录存在,就删除目录 if(Directory.Exists(path)) { Directory.Delete(path,true); } if(! Directory.Exists(path)) { Directory.CreateDirectory(path); } if(! IsPostBack) { stringCommandText="SELECTport,tablenamefrom仪表的端口"; stringconstr="DataSource=(local);userid=sa;password=1228;InitialCatalog=皮带秤"; SqlConnectionconn=newSqlConnection(constr); SqlCommandcmd=newSqlCommand(CommandText,conn); conn.Open(); SqlDataReaderreader=cmd.ExecuteReader(); while(reader.Read()) DropDownList1.Items.Add(reader["tablename"].ToString()); reader.Close(); conn.Close();} } #regionWeb窗体设计器生成的代码 overrideprotectedvoidOnInit(EventArgse) { InitializeComponent(); base.OnInit(e); } privatevoidInitializeComponent() { this.Button1.Click+=newSystem.EventHandler(this.Button1_Click); this.Button2.Click+=newSystem.EventHandler(this.Button2_Click); this.Load+=newSystem.EventHandler(this.Page_Load); } #endregion privatevoidButton1_Click(objectsender,System.EventArgse) { stringbegin; stringend; stringsql; DateTimedt=DateTime.Now; begin=DropDownList2.SelectedValue+'-'+DropDownList6.SelectedValue+'-'+DropDownList5.SelectedValue; end=DropDownList8.SelectedValue+'-'+DropDownList9.SelectedValue+'-'+DropDownList11.SelectedValue; stringtablename="a"+DropDownList2.SelectedValue+DropDownList6.SelectedValue; stringconstr="DataSource=(local);userid=sa;password=1228;InitialCatalog=皮带秤"; if(DropDownList6.SelectedValue==dt.Month.ToString()) sql="SELECTljz,sjFROM皮带秤表wheresj>'"+begin+"'andsj<'"+end+"'andtablename='"+DropDownList1.SelectedValue+"'andtimer%60=0orderbysj"; else sql="SELECTljz,sjFROM"+tablename+"wheresj>'"+begin+"'andsj<'"+end+"'andtablename='"+DropDownList1.SelectedValue+"'andtimer%60=0orderbysj"; SqlConnectionconn=newSqlConnection(constr); SqlCommandcmd=newSqlCommand(sql,conn); conn.Open(); SqlDataReaderreader=cmd.ExecuteReader(); stringstrValue="",strCategory="",strSeriesName="皮带秤瞬时值图"; inti=0; while(reader.Read()) { strCategory+=reader["sj"].ToString()+'\t'; strValue+=reader["ljz"].ToString()+'\t'; i++; } reader.Close(); conn.Close(); OWC10.ChChartSpaceobjCSpace=newOWC10.ChartSpaceClass(); OWC10.ChChartobjChart=objCSpace.Charts.Add(0); objChart.Type=OWC10.ChartChartTypeEnum.chChartTypeSmoothLine; objChart.ChartDepth=10; objChart.HasLegend=false; intresult=Int32.Parse(TextBox3.Text.Trim()); objChart.Axes[0].HasTickLabels=true; objChart.Axes[0].TickLabelSpacing=result;//每隔5个标一个数值 objChart.Axes[0].HasTitle=true; objChart.Axes[0].Title.Caption="时间"; objChart.Axes[0].Title.Font.Size=9; objChart.Axes[1].HasTitle=true; objChart.Axes[1].Title.Caption="吨"; objChart.Axes[1].Title.Font.Size=9; objChart.HasTitle=true; objChart.Title.Font.Size=10; objChart.SeriesCollection.Add(0); objChart.SeriesCollection[0].SetData(OWC10.ChartDimensionsEnum.chDimSeriesNames, (int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral,strSeriesName); //给定分类 objChart.SeriesCollection[0].SetData(OWC10.ChartDimensionsEnum.chDimCategories, (int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral,strCategory); //给定值 objChart.SeriesCollection[ 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。";