什么是正相有功无功视在功率,正相无功,反相有功无功视在功率,反相无功

无功功率计算 无功功率、有功功率_牛bb阅读网
什么是无功功率?在交流电路中,由电源供给负载的电功率有两种;一种是有功功率,一种是无功功率。有功功率是保持用电设备正常运行所需的电功率,也就是将电能转换为其他形式能量(机械能、光能、热能)的电功率。比如:5.5千瓦的电动机就是把5.5千瓦的电能转换为机械能,带动水泵抽水或脱粒机脱粒;各种照明设备将电能转换为光能,供人们生活和工作照明。有功功率的符号用P表示,单位有瓦(W)、千瓦(kW)、兆瓦(MW)。无功功率比较抽象,它是用于电路内电场与磁场的交换,并用来在电气设备中建立和维持磁场的电功率。它不对外作功,而是转变为其他形式的能量。凡是有电磁线圈的电气设备,要建立磁场,就要消耗无功功率。比如40瓦的日光灯,除需40多瓦有功功率(镇流器也需消耗一部分有功功率)来发光外,还需80乏左右的无功功率供镇流器的线圈建立交变磁场用。由于它不对外做功,才被称之为“无功”。无功功率的符号用Q表示,单位为乏(Var)或千乏(kVar)。无功功率决不是无用功率,它的用处很大。电动机需要建立和维持旋转磁场,使转子转动,从而带动机械运动,电动机的转子磁场就是靠从电源取得无功功率建立的。变压器也同样需要无功功率,才能使变压器的一次线圈产生磁场,在二次线圈感应出电压。因此,没有无功功率,电动机就不会转动,变压器也不能变压,交流接触器不会吸合。为了形象地说明这个问题,现举一个例子:农村修水利需要开挖土方运土,运土时用竹筐装满土,挑走的土好比是有功功率,挑空竹筐就好比是无功功率,竹筐并不是没用,没有竹筐泥土怎么运到堤上呢?在正常情况下,用电设备不但要从电源取得有功功率,同时还需要从电源取得无功功率。如果电网中的无功功率供不应求,用电设备就没有足够的无功功率来建立正常的电磁场,那么,这些用电设备就不能维持在额定情况下工作,用电设备的端电压就要下降,从而影响用电设备的正常运行。无功功率对供、用电产生一定的不良影响,主要表现在:(1)降低发电机有功功率的输出。(2)降低输、变电设备的供电能力。(3)造成线路电压损失增大和电能损耗的增加。(4)造成低功率因数运行和电压下降,使电气设备容量得不到充分发挥。从发电机和高压输电线供给的无功功率,远远满足不了负荷的需要,所以在电网中要设置一些无功补偿装置来补充无功功率,以保证用户对无功功率的需要,这样用电设备才能在额定电压下工作。这就是电网需要装设无功补偿装置的道理。有功功率:在交流电路中,电源在一个周期内发出瞬时功率的平均值(或负载电阻所消耗的功率),称为"有功功率"。在交流电路中,从相位上看,电感上的电流超前于电压,电容上的电压超前于电流,于是有功功率无功功率:在具有电感或电容的电路中,在每半个周期内,把电源能量变成磁场(或电场)能量贮存起来,然后,再释放,又把贮存的磁场(或电场)能量再返回给电源,只是进行这种能量的交换,并没有真正消耗能量,我们把这个交换的功率值,称为"无功功率"。它主要反应在电感电路和电容电路中,造成电流和电压的变化周期不同步,有相位角差,才有无功功率,在电热电路中没有无功功率。无功功率只是储能元件与电源之间能量的转换。那在宏观的时间尺度来看,无功功率的进和出应该是相等的。这样真正做功的还是有功功率由于交流电的电压和电流存在着一定要相位差,所以不能简单的使用电压乘以电流来计算感性或容性负载的功率。对于感性负载来说,由于电感有阻碍电流变化的特性,所以电流的相位总是滞后于电压相位的;电容则有储能的特性,故电压相位滞后于电流相位。在这种情况下,假设存在最极端的例子,即两者有二分之派(也就是90度)相位差时,在0度,90度,180度和360度上得到的两者乘积是0,就是说,没有功率,所以说,无法使用电压乘以电流计算功率。只能使用两者实时的电压电流乘积做平均值得到其有效的功率,实际上相当于是积分,这样得出来的就应该是有功功率。那么,电压或电流高出来的部分,会形成一个虚的空间,这部分就是无功功率,两者相加,才是测量中电流和电压平均值的乘积。就是说,用电压表和电流表量出来的数值相乘,得到的是视在功率。只有积分出来的才是有功功率。无功功率没有在正确的理想的时间耗电,实际上是对电网质量的破坏和干扰,如果无法对这部分能量有效的加以补偿和回收利用,则会造成浪费。所以功率因数是很重要的。无功功率降低或升高时,有功功率不变.但无功功率降低时,电流要降低,线路损耗降低,反之,线路损耗要升高.无功功率本身不耗电。但无功电流流动要带来线路损耗.所以要减少他的流动。而且带来负载上电压的波动。在交流电路中,从相位上看,电感上的电流超前于电压,电容上的电压超前于电流,于是有功功率,无功功率和视在功率就形成直角三角形关系,其中,有功功率,无功功率是两个直角边,视在功率为斜边.计算方式:(单相)Q(无功功率)=U*I*SINΦ(三相)Q=根号3*U*I*SINΦtg&O=P/Q中的tg&O是指的什么:它是个功率因素角Φ的正切值,利用有功功率和无功功率的比值算出它,再求出功率因素角Φ,则可计算出Q。无功功率就是没有功的功率。电能没有直接做有用的功.例如:电动机,变压器等电器设备工作时自身产生电磁场所消耗的电能.因为无功功率多是由感性元件或设备产生的,加入电容元件可以补偿它的损失.有功功率是保持用电设备正常运行所需的电功率,也就是将电能转换为其他形式能量(机械能、光能、热能)的电功率。有功功率过低导致线损增加、容量下降、设备使用率下降,从而导致电能浪费加大。无功功率:电网中的感性负载(如电机,扼流圈,变压器,感应式加热器及电焊机等)都会产生不同程度的电滞,即所谓的电感。感性负载具有这样一种特性-----即使所加电压改变方向,感性负载的这种滞后仍能将电流的方向(如正向)保持一段时间。一旦存在了这种电流与电压之间的相位差,就会产生负功率,并被反馈到电网中。电流电压再次相位相同时,又需要相同大小的电能在感性负载中建立磁场,这种磁场反向电能就被称作无功功率。无功功率比较抽象,它是用于电路内电场与磁场的交换,并用来在电气设备中建立和维持磁场的电功率。它不对外做功,而是转变为其他形式的能量。凡是有电磁线圈的电气设备,要建立磁场,就要消耗无功功率。无功功率过高1)无功功率会导致电流增大和视在功率增加,导致系统容量下降;2)无功功率增加,会使总电流增加,从而使设备和线路的损耗增加;3)使线路的压降增大,冲击性无功负载还会使电压剧烈波动。变频之后的三相有功功率的计算公式?有功的计算不涉及频率,所以公式依然是P=根号3*U*I*功率因数,电压为相间有效值,电流为线电流有效值。无功的电抗随频率的变化而变化。三相三线的功率和三相四线的功率计算有什么不同?⑴有功功率三相交流电路的功率与单相电路一样,分为有功功率、无功功率和视在功率。不论负载怎样连接,三相有功功率等于各相有功功率之和,即:当三相负载三角形连接时:当对称负载为星形连接时因UL=Up,IL=Ip所以P== ULILcosφ当对称负载为三角形连接时因UL=Up,IL=Ip所以P== ULILcosφ对于三相对称负载,无论负载是星形接法还是三角形接法,三相有功功率的计算公式相同,因此,三相总功率的计算公式如下。P=ULILcosφ⑵三相无功功率:Q=ULILsinφ(3)三相视在功率S=ULIL三相四线制星形不平衡负载供电,它题目会告诉线电压,一般是Ul=380V,这样的话,相电压就是380除以根号3,是220V.相电流计算时是这样的分别看成3个单相电路考虑,根据欧姆定律求得电流=220/R.中线电流要根据矢量计算,IN=IA+IB+IC.反向有功:因为你是单相负荷,根椐电工原理有一相要反转是正常的.正向无功:是说明无功补偿不够,功率因数不达标。反向无功:电容器过补,造成向电网倒送无功,引起电网振荡。一般来说,从系统(电网)向用户(用电设备)传送的有功功率被称为是“正向有功”;而从用户侧向系统(电网)传送的有功功率被称为是“反向有功”,这种情况大多是内部有发电机等情况;同理,从系统(电网)向用户(用电设备)传送的无功率被称为是“正向无功”;而从用户侧向系统(电网)传送的无功功率被称为是“反向无功”,这种情况大多是内部有电力电容器投多了等情况引起。现代的全电子式电能表可以方便地在表上读出这些数值,有功功率的指向可以通过表上的箭头来分辩正向和反向,一般显示从左到右的箭头,就是正向的,显示从右互左的箭头就是反向的;对传统的机械式电能表,可通过观察表盘的转动方向来判断正反相,当电能表接线没有错误的情况下,表盘正转时是正相,表盘反转时是反相。无功电能表有正向与反向之分:能发出无功的设备除发电机外,还有电容器、同步电机、调相机等。因此每个用电单位,既能从网上取无功,也能自己发无功向网上送;受电用户无功电能表记录的正向无功是该用户消耗的无功电量,即是从网上买的无功电量,记录的反向无功是该用户电容器等投多了,向网上反送的无功电量。从电能表来说,早期的无功电能表是机械表,当从网上取无功时,无功电能表“表园盘”正转,表读字窗口“示数”增加;当向网上送无功时,无功电能表“表园盘”反转,表读字窗口“示数”减少;这在计费中,相当于从电费上,奖励了帮助电力系统解决无功短缺的用户;但后来,用户的功率因数大多达到了国家标准,电力系统不再需要用户帮助解决无功,就将无功电能表改为“止逆”式,当用户从网上取无功时,无功电能表“表园盘”正转,表读字窗口“示数”增加;当向网上送无功时,无功电能表“表园盘”反转,表读字窗口“示数”也增加;这就从经济上,鼓励了用户无功功率“就地平衡”政策。三相电度表只测有功功率吗?kWh有功/kvarh无功有功功率表----用指针指示当前设备消耗的有功功率的瞬时值。测P有功电度表----用度盘指示当前设备消耗的有功功率的累计值。测W(W=PT)有功功率表测得的是有功功率,它不同于把一个交流电压表和一个交流电流表并串在负载上得出的总功率之值,它一定要小于等于总功率之值,这个比值就叫做功率因数,用V表和A表测得的总功率减去用有功功率表测得的有功功率就是当前线路上的无功功率值。比如你把一个几uF电容串在220V电路里(耐压要超过300V哦)用有功功率表测得的功率值应基本为零,而用V表和A表测得的总功率却不可能为零,因为有电流流过且有电压,但因其相位偏差电容并不耗电,所以有功功率为零,剩下的全是无功功率,所以你家里的电表(有功电度表)应该不转。(如果缓慢转动是因为线路电阻损耗了功率)用有功功率比上总功率即可得功率因数。电度表测量的不是功率,是有功功率乘以使用时间电度表是测用电量的,也就是物理学上所说电能所做的功。电度是功率的时间积分,它们测量的量值都是测量点的能量,电度表记录的是能量的总量功率的概念是单位时间内所做的功,功率表显示的是能量的瞬时值无功功率、无功电量情况与上述情况类似三相视在功率是三相电的总的功率,它包含有功功率和无功功率。有功电度应该称为有功功率,就是设备实际消耗的功率。无功电度应该称为无功功率,就是被设备占用但并未消耗的功率。他们的关系为:有功功率=视在功率*功率因素。无功功率=视在功率-有功功率。视在功率=有功功率+无功功率这个说法是错误的视在功率S有功功率P无功功率Q关系式是S平方=P平方+Q平方三相电路中有功功率和功率因数会不会为负值?会啊,比如以发电机的角度来说,发出有功为正,那么当吸收有功时就为负联络变电站,也会有这种情况实际上负号就是输入或者输出的问题,正号为吸收功率,负号为发出功率.无功有功都是这样功率因数表有大于1和小于1的指示,说明系统的无功功率和有功功率的状态,即各占的百分比.纯电阻负载指示为1.否则都小于1.正常情况下,功率因数和有功功率不会为负值过补了别的都是正值那表示你的供电系统线路三相不平衡,要进行分相补偿可以解决视在功率,有功功率,和无功功率应该怎么理解?有功功率是保持用电设备正常运行所需的电功率,也就是将电能转换为其他形式能量(机械能、光能、热能)的电功率。比如:5.5千瓦的电动机就是把5.5千瓦的电能转换为机械能,带动水泵抽水或脱粒机脱粒;各种照明设备将电能转换为光能,供人们生活和工作照明。有功功率的符号用P表示,单位有瓦(W)、千瓦(kW)、兆瓦(MW)。无功功率比较抽象,它是用于电路内电场与磁场的交换,并用来在电气设备中建立和维持磁场的电功率。它不对外作功,而是转变为其他形式的能量。凡是有电磁线圈的电气设备,要建立磁场,就要消耗无功功率。比如40瓦的日光灯,除需40多瓦有功功率(镇流器也需消耗一部分有功功率)来发光外,还需80乏左右的无功功率供镇流器的线圈建立交变磁场用。由于它不对外做功,才被称之为“无功”。无功功率的符号用Q表示,单位为乏(Var)或千乏(kVar)。配电网中的电感性电气设备如变压器、电动机、电焊机、空调器、洗衣机、电冰箱、钠灯、日光灯等投入运行后,不仅要从电力网中吸收有功功率用于做功,而且还要吸收无功功率建立磁场,这样就导致电力客户的自然功率因数一般都比较低。我国对电力客户的用电,规定了必须达到的功率因数标准。他们就是一个功率三角形j=√3UIcosjP=S&cosj=√3UIsinjQ=S&sinS=√3UI有功功率常用单位为瓦或千瓦,无功功率为乏或千乏,视在功率为伏安或千伏为有功功率与视在功率的夹j安,相位角表示j角,称为力率角或功率因数角,cos有功功率P和视在功率S的比值,称为力率或功率因数。j在感性电路中,电流落后于电压,&j0,Q为正值,而在容性电路中,电流超前于电压,&0,Q为负值。视在功率是指发电机发出的总功率,其中可以分为有功部分和无功部分。有功部分是通过导线发热损失掉或纯电阻负载消耗的功率,这部分功率由于做了功而被称为有功功率。而无功功率则是损失在非纯电阻负载上的功率。可认为是电压与电流相位差变化的损耗。无功功率不做功,但是要保证有功功率的传导必须先满足电网的无功功率。单相照明电与三相四线的照明用电收费一样吗?单相照明电与三相四线的照明用电收费一样吗,如单相照明0.6元/度,三相四线三相用电0.9元/度,如用三相四线的一根火线和零线作为照明,这个照明电与家用照明电收费一样吗?那么,同一功率的设备用在三相四线的照明电上及用在家用照明电上在同一时间内电表度数是不是一样?用电计价与所用相数无关,而只与耗用的电量(即电度数,Kwh)有关,你用了几度电按单计算即可,无需扯上单相或三线火线零线什么的那么,"同一功率的设备用在三相四线的照明电上及用在家用照明电上在同一时间内电表度数是不是一样?"i当然一样了,同一功率的设备用在那里其用电量都是一样的,当然电压等级要相符合,不符合就会损坏用电设备的,至于费用是否一样就不好说了,因为照明用的单相电一般都是单相入户的,而三相一般都是工业或都其它设备使用,很多时候居民照明用电的计价标准是不一样的。产品分享:无功补偿控制器滤波补偿柜来源:新浪博客欢迎您转载分享:以下试题来自:
判断题具有正、反向送电的计量点应装设计量正向和反向有功电能表和正向和反向无功电能表。 错
为您推荐的考试题库
您可能感兴趣的试卷
你可能感兴趣的试题
1.判断题 对2.判断题 对3.判断题 对4.判断题 对5.判断题 对/ iGR_Access
项目语言:None
权限:read-only(如需更高权限请先加入项目)
iGR_Access/
Index: cWriteDB.cls
===================================================================
--- cWriteDB.cls (revision 0)
+++ cWriteDB.cls (revision 2)
@@ -0,0 +1,705 @@
+VERSION 1.0 CLASS
MultiUse = -1
Persistable = 0
'NotPersistable
DataBindingBehavior = 0
'vbNone
DataSourceBehavior
'vbNone
MTSTransactionMode
'NotAnMTSObject
+Attribute VB_Name = &cInstan&
+Attribute VB_GlobalNameSpace = False
+Attribute VB_Creatable = True
+Attribute VB_PredeclaredId = False
+Attribute VB_Exposed = False
+Option Explicit
+Private m_AryNo() As Long
+Private m_AryName() As String
+Private m_AryAddress() As String
+Private m_UnitNO() As Integer
+Private m_PIpt() As Long
'测点pointid
+Private m_PIVal() As Single
+Private gloValue As GolbalValue
+Private m_CurNum As Long
+Private m_IPAddress As String
+Private m_ComputerNo As Long
+Private m_Comno As Long
+Private m_PIUser As String
'=====================================pi用户名
+Private m_PIpwd As String
'=====================================pi密码
+Private m_AutoRunFlag As Boolean
+Private m_ReciveStr As Variant
+Private m_ErrorCode As Long
'接收数据错误号
+Private m_ErrorMSG As String
'错误信息
+Private m_StatusNo As Long
+Private m_RunStatus As String
+Private m_DoneNum As Long
'本次循环 已完成的通讯次数
+Private m_RecordNum As Long
+Private m_isCircle As Boolean
'是否正在循环采集数据
+Private m_AmmeterAddress As String
'当前表号
+Private m_AmmeterNo As Long
'当前表的号码
+Private m_AmmeterName As String
+Private sndStr As QueryInstanStr
+Private m_pData As PackageData
+Private CmdArray(13) As Byte
+Private sendData As Variant
+Private m_Value() As Byte '收到的数据域
+Private m_isRecive As Boolean
+Private m_ComIndex As Integer
+Private m_CommandIndex As Integer
+Property Let CommandIndex(ByVal newValue As Integer)
m_CommandIndex = newValue
+End Property
+Property Get CommandIndex() As Integer
CommandIndex = m_CommandIndex
+End Property
+Property Let recivestr(ByVal newValue As Variant)
m_ReciveStr = newValue
m_isRecive = True
+End Property
+Property Let RunStatus(ByVal newValue As Long)
m_RunStatus = newValue
+End Property
+Property Get RunStatus() As Long
RunStatus = m_isCircle
+End Property
+Property Let ErrorCode(ByVal newValue As Long)
m_ErrorCode = newValue
+End Property
+Property Get ErrorCode() As Long
ErrorCode = m_ErrorCode
+End Property
+Property Get AmmeterAddress() As String
AmmeterAddress = m_AmmeterAddress
+End Property
+Property Get AmmeterName() As String
AmmeterName = m_AmmeterName
+End Property
+Property Let IPaddress(ByVal newValue As String)
m_IPAddress = Trim(newValue)
+End Property
+Property Let ComputerNo(ByVal newValue As String)
m_ComputerNo = CInt(newValue)
+End Property
+Property Get ComNo() As String
ComNo = m_Comno
+End Property
+Property Let ComNo(ByVal newValue As String)
m_Comno = CInt(newValue)
+End Property
+Property Get ComIndex() As Integer
ComIndex = m_ComIndex
+End Property
+Property Let ComIndex(ByVal newValue As Integer)
m_ComIndex = newValue
+End Property
+Property Get PIUser() As String
PIUser = m_PIUser
+End Property
+Property Get RecordCount() As Integer
RecordCount = m_RecordNum
+End Property
+Property Let PIUser(ByVal newValue As String)
SaveSetting &iGRsoft&, &iGR&, &PIUser&, newValue
m_PIUser = Trim(newValue)
+End Property
+Property Get PIpwd() As String
PIpwd = m_PIpwd
+End Property
+Property Let PIpwd(ByVal newValue As String)
SaveSetting &iGRsoft&, &iGR&, &PIpwd&, newValue
m_PIpwd = Trim(newValue)
+End Property
+Property Get AutoRunFlag() As String
AutoRunFlag = m_AutoRunFlag
+End Property
+Property Let AutoRunFlag(ByVal newValue As String)
SaveSetting &iGRsoft&, &iGR&, &AutoRunFlag&, newValue
m_AutoRunFlag = Trim(newValue)
+End Property
+Property Get ErrorMSG() As String
ErrorMSG = m_ErrorMSG
+End Property
+Public Sub InitParam()
+'表信息从配置文件中读取
On Error GoTo OnErr1
Dim strtemp As String
m_RecordNum = GetIniStr(App.Path & &\Ammeter.ini&, &Com& & Trim(Str$(m_Comno)), &AmmeterCount& & Trim(Str$(m_Comno)), &0&)
ReDim m_AryNo(m_RecordNum) As Long
ReDim m_AryName(m_RecordNum) As String
ReDim m_AryAddress(m_RecordNum) As String
ReDim m_Arytest(m_RecordNum) As String
ReDim m_PIpt(m_RecordNum * 6) As Long
ReDim m_PIVal(m_RecordNum * 6) As Single
ReDim m_UnitNO(m_RecordNum) As Integer
On Error GoTo OnErr
Dim i As Integer
For i = 0 To m_RecordNum - 1
m_AryNo(i) = GetIniStr(App.Path & &\Ammeter.ini&, &Com& & Trim(Str$(m_Comno)), &Ammeter_no& & Trim(Str$(i + 1)), &0&)
m_AryName(i) = GetIniStr(App.Path & &\Ammeter.ini&, &Com& & Trim(Str$(m_Comno)), &Ammeter_Name& & Trim(Str$(i + 1)), &0&)
m_AryAddress(i) = GetIniStr(App.Path & &\Ammeter.ini&, &Com& & Trim(Str$(m_Comno)), &Ammeter_Address& & Trim(Str$(i + 1)), &&)
m_UnitNO(i) = GetIniStr(App.Path & &\Ammeter.ini&, &Com& & Trim(Str$(m_Comno)), &Ammeter_UnitNO& & Trim(Str$(i + 1)), &0&)
m_Arytest(i) = Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &1&
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &1&, pt)
' ret = pipt_findpoint(&04cyd4011&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 0) = pt
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &2&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 1) = pt
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &3&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 2) = pt
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &4&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 3) = pt
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &5&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 4) = pt
ret = pipt_findpoint(Format(m_UnitNO(i), &00&) & &CYD& & m_Comno & Format(m_AryNo(i), &00&) & &6&, pt)
If ret = 0 Then
m_PIpt(i * 6 + 5) = pt
If m_RecordNum & 0 Then
bo1.Text = Str$(m_Comno) Then
For i = 0 To m_RecordNum - 1
frmMain.MSFlexGrid1.TextMatrix(i + 1, 0) = m_AryNo(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 1) = m_AryAddress(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 2) = m_AryName(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 3) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 4) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 5) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 6) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 7) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 8) = &&
m_CurNum = 0
End If 'm_rsInstan.MoveFirst
m_DoneNum = 0
MsgBox &端口& & &Com& & Trim(Str$(m_Comno)) & Err.Description, vbCritical, &提示!! &
' Exit Sub
MsgBox &获取电表参数出错& & Err.Description, vbCritical, &获取电表参数出错!! &
+Public Sub setFrmContent()
+ Dim i As Integer
+ Dim rowcount As Integer
+If bo1.Text) = Trim(Str$(m_Comno)) Then
+frmMain.MSFlexGrid1.Clear
frmMain.MSFlexGrid1.Cols = 9
frmMain.MSFlexGrid1.TextMatrix(0, 0) = &序号&
frmMain.MSFlexGrid1.TextMatrix(0, 1) = &表地址&
frmMain.MSFlexGrid1.TextMatrix(0, 2) = &表名称&
frmMain.MSFlexGrid1.TextMatrix(0, 3) = &有功功率&
frmMain.MSFlexGrid1.TextMatrix(0, 4) = &无功功率&
frmMain.MSFlexGrid1.TextMatrix(0, 5) = &正相有功&
frmMain.MSFlexGrid1.TextMatrix(0, 6) = &反相无功&
frmMain.MSFlexGrid1.TextMatrix(0, 7) = &正相无功&
frmMain.MSFlexGrid1.TextMatrix(0, 8) = &反相有功&
frmMain.MSFlexGrid1.ColWidth(0) = frmMain.MSFlexGrid1.Width / 8 - 900
frmMain.MSFlexGrid1.ColWidth(1) = frmMain.MSFlexGrid1.Width / 8 + 100
frmMain.MSFlexGrid1.ColWidth(2) = frmMain.MSFlexGrid1.Width / 8 + 500
frmMain.MSFlexGrid1.ColWidth(3) = frmMain.MSFlexGrid1.Width / 8 - 200
frmMain.MSFlexGrid1.ColWidth(4) = frmMain.MSFlexGrid1.Width / 8 - 200
frmMain.MSFlexGrid1.ColWidth(5) = frmMain.MSFlexGrid1.Width / 8 - 200
frmMain.MSFlexGrid1.ColWidth(6) = frmMain.MSFlexGrid1.Width / 8 - 200
frmMain.MSFlexGrid1.ColWidth(7) = frmMain.MSFlexGrid1.Width / 8 - 200
frmMain.MSFlexGrid1.ColAlignment(0) = 1
frmMain.MSFlexGrid1.ColAlignment(1) = 1
frmMain.MSFlexGrid1.ColAlignment(2) = 1
If m_RecordNum & 0 Then
frmMain.MSFlexGrid1.Rows = m_RecordNum + 1
For i = 0 To m_RecordNum - 1
frmMain.MSFlexGrid1.Rows = frmMain.MSFlexGrid1.Rows + 1
frmMain.MSFlexGrid1.TextMatrix(i + 1, 0) = m_AryNo(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 1) = m_AryAddress(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 2) = m_AryName(i)
frmMain.MSFlexGrid1.TextMatrix(i + 1, 3) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 4) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 5) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 6) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 7) = &&
frmMain.MSFlexGrid1.TextMatrix(i + 1, 8) = &&
End If 'm_rsInst
+Public Sub StartCircle()
m_isCircle = True
+Public Function CircleStatus() As Long
If m_isCircle Then
CircleStatus = 1
CircleStatus = 0
+End Function
+Private Sub CheckRecive()
Dim i As Long
Dim AddCheckNum As Integer
Dim XorCheckNum As Byte
AddCheckNum = 0
m_ErrorCode = 0
'错误代码
m_ErrorMSG = &正确&
If m_ReciveStr(0) && &H68 Then
m_ErrorCode = 1002
m_ErrorMSG = &起始位标志不等于&H68&
If UBound(m_ReciveStr) &= 7 Then
If m_ReciveStr(7) && &H68 Then
m_ErrorCode = 1003
m_ErrorMSG = &中间位标志不等于&H68&
If m_ReciveStr(UBound(m_ReciveStr)) && &H16 Then
m_ErrorCode = 1004
m_ErrorMSG = &结束位标志不等于&H16&
For i = 0 To UBound(m_ReciveStr) - 2
XorCheckNum = XorCheckNum Xor m_ReciveStr(i)
AddCheckNum = AddCheckNum + m_ReciveStr(i)
If UBound(m_ReciveStr) & 0 Then
If (AddCheckNum And &HFF) && m_ReciveStr(UBound(m_ReciveStr) - 1) Then
m_ErrorCode = 1005
m_ErrorMSG = &累加校验和不正确&
+Public Sub TransRecive()
Dim sGather_Time As String
Dim localVar(6) As Single
sGather_Time = &'& & Format(Now(), &yyyy-mm-dd hh:mm:ss&) & &'&
m_StatusNo = 0
m_ErrorCode = 0
If m_DoneNum & 0 Then
If m_isRecive Then
Call CheckRecive
If m_ErrorCode & 0 Then m_StatusNo = 50
m_StatusNo = 10
If m_StatusNo = 0 Then
Call MakePackage
m_ErrorMSG = &收到数据& & &:& & mandName & &:&
Dim ix As Integer
For ix = 0 To UBound(m_ReciveStr)
m_ErrorMSG = m_ErrorMSG & & & & Right(&0& & Hex(m_ReciveStr(ix)), 2)
frmMain.MsgBoxShow (Str$(Now()) & &
& & m_ErrorMSG)
Dim outpt(1) As Long
Dim outvl(1) As Single
'输出表格
If mandName = &有功功率& Then
localVar(0) = m_pData.Value / 10 '修改前是10000
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 3) = Format(localVar(0), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 0)
outvl(0) = localVar(0)
If mandName = &无功功率& Then
localVar(1) = m_pData.Value / 0.1
'修改前100
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 4) = Format(localVar(1), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 1)
outvl(0) = localVar(1)
If mandName = &正相有功& Then
localVar(2) = m_pData.Value / 100
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 5) = Format(localVar(2), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 2)
outvl(0) = localVar(2)
If mandName = &反相无功& Then
localVar(3) = m_pData.Value / 100
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 6) = Format(localVar(3), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 3)
outvl(0) = localVar(3)
If mandName = &正相无功& Then
localVar(4) = m_pData.Value / 100
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 7) = Format(localVar(4), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 4)
outvl(0) = localVar(4)
If mandName = &反相有功& Then
localVar(5) = m_pData.Value / 100
If Trim(Str$(bo1.Text)) = Trim(Str$(m_Comno)) Then
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 8) = Format(localVar(5), &0.00&)
outpt(0) = m_PIpt((m_DoneNum - 1) * 6 + 5)
outvl(0) = localVar(5)
'输出PI
Dim istats(1) As Long
Dim errs(1) As Long
Dim ret As Long
Dim datetimes(1) As Long
Dim i As Integer
On Error Resume Next
'处理时间
istats(0) = 0
datetimes(0) = 0
ret = pisn_putsnapshots(outpt(0), outvl(0), istats(0), datetimes(0), errs(0), 1)
Set m_ReciveStr = Nothing
m_isRecive = False
+AmmeterErr:
m_ErrorMSG = Err.Description
' frmMsg.Text1.Text = CDate(Now()) & &修改实时数据出错
& & Err.Description
+'68 36 00 00 41 89 22 68 01 02 43 C3 FB 16 ...
+'68 36 00 00 41 89 22 68 81 06 43 C3 63 4A 34 33 93 16
+'68 36 00 00 41 89 22 68 01 02 53 C3 0B 16 ...
+'68 36 00 00 41 89 22 68 81 06 53 C3 33 33 33 33 5B 16
+'68 36 00 00 41 89 22 68 01 02 43 C4 FC 16 ...
+'68 36 00 00 41 89 22 68 81 06 43 C4 A6 C9 33 33 55 16
+'68 36 00 00 41 89 22 68 01 02 53 C4 0C 16 ...
+'68 36 00 00 41 89 22 68 81 06 53 C4 33 33 33 33 5C 16
+'68 36 00 00 41 89 22 68 01 02 63 E9 41 16 ...
+'68 36 00 00 41 89 22 68 81 05 63 E9 94 65 33 F0 16
+'68 36 00 00 41 89 22 68 01 02 73 E9 51 16 ...
+'68 36 00 00 41 89 22 68 81 04 73 E9 59 33 5F 16
+Public Sub SendInstan()
m_ErrorMSG = m_ErrorMSG & &send to & & m_AmmeterName
If m_AmmeterAddress = && Or Len(m_AmmeterAddress) && 12 Then
sndStr.AmmeterAddres1 = Mid(m_AmmeterAddress, 11, 2) '表地址第1位
sndStr.AmmeterAddres2 = Mid(m_AmmeterAddress, 9, 2) '表地址第2位
sndStr.AmmeterAddres3 = Mid(m_AmmeterAddress, 7, 2) '表地址第3位
sndStr.AmmeterAddres4 = Mid(m_AmmeterAddress, 5, 2) '表地址第4位
sndStr.AmmeterAddres5 = Mid(m_AmmeterAddress, 3, 2) '表地址第5位
sndStr.AmmeterAddres6 = Mid(m_AmmeterAddress, 1, 2) '表地址第6位
sndStr.Flag1 = &H68 '起始位
sndStr.Flag2 = &H68
sndStr.Flag3 = &H1
'读取数据 &H01
sndStr.Flag4 = &H2
'数据长度 &H02
sndStr.EndCode = &H16 '结束位
'--------------------------------------------------------------
If m_CommandIndex = 0 Then
sndStr.FlagDI0 = &H43
sndStr.FlagDI1 = &HC3
mandName = &正相有功&
SendInstanOneCmd '执行发送指令:正相有功
ElseIf m_CommandIndex = 1 Then
sndStr.FlagDI0 = &H53
sndStr.FlagDI1 = &HC3
mandName = &反相有功&
SendInstanOneCmd '执行发送指令:反相有功
ElseIf m_CommandIndex = 2 Then
sndStr.FlagDI0 = &H43
sndStr.FlagDI1 = &HC4
mandName = &正相无功&
SendInstanOneCmd '执行发送指令:正相无功
ElseIf m_CommandIndex = 3 Then
sndStr.FlagDI0 = &H53
sndStr.FlagDI1 = &HC4
mandName = &反相无功&
SendInstanOneCmd '执行发送指令:反相无功
ElseIf m_CommandIndex = 4 Then
sndStr.FlagDI0 = &H63
sndStr.FlagDI1 = &HE9
mandName = &有功功率&
SendInstanOneCmd '执行发送指令:有功功率
ElseIf m_CommandIndex = 5 Then
sndStr.FlagDI0 = &H73
sndStr.FlagDI1 = &HE9
mandName = &无功功率&
SendInstanOneCmd '执行发送指令:无功功率
'--------------------------------------------------------------
+Private Sub SendInstanOneCmd()
Dim XorCheckNum As Byte '异或校验和
Dim AddCheckNum As Integer '累加校验和
Dim iIndex As Integer
sendData = frmMain.MSComm1(m_ComIndex - 1).Input '清空缓冲区
Set sendData = Nothing
iIndex = 0
CmdArray(iIndex) = sndStr.Flag1
AddCheckNum = CmdArray(iIndex)
XorCheckNum = CmdArray(iIndex)
iIndex = 1
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres1)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 2
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres2)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 3
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres3)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 4
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres4)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 5
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres5)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 6
CmdArray(iIndex) = CByte(&&H& & sndStr.AmmeterAddres6)
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 7
CmdArray(iIndex) = sndStr.Flag2
'起始位
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 8
CmdArray(iIndex) = sndStr.Flag3
'控制位
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 9
CmdArray(iIndex) = sndStr.Flag4
'数据长度
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 10
CmdArray(iIndex) = sndStr.FlagDI0
'命令位0
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
iIndex = 11
CmdArray(iIndex) = sndStr.FlagDI1
'命令位1
AddCheckNum = AddCheckNum + CmdArray(iIndex)
XorCheckNum = XorCheckNum Xor CmdArray(iIndex)
AddCheckNum = AddCheckNum And &HFF
iIndex = 12
CmdArray(iIndex) = AddCheckNum
iIndex = 13
CmdArray(iIndex) = sndStr.EndCode
sendData = CmdArray()
frmMain.MSComm1(m_ComIndex - 1).OutBufferCount = 0
frmMain.MSComm1(m_ComIndex - 1).Output = sendData
m_ErrorMSG = &发送数据& & &:& & mandName & &:&
Dim ix As Integer
For ix = 0 To UBound(sendData)
m_ErrorMSG = m_ErrorMSG & & & & Right(&0& & Hex(sendData(ix)), 2)
frmMain.MsgBoxShow (Str$(Now()) & &
& & m_ErrorMSG)
Set sendData = Nothing
+Private Sub GetNext()
If m_CurNum &= 0 And m_CurNum &= m_RecordNum - 1 Then
m_AmmeterName = m_AryName(m_CurNum)
m_AmmeterNo = m_AryNo(m_CurNum)
m_AmmeterAddress = m_AryAddress(m_CurNum)
m_CurNum = m_CurNum + 1
+Public Sub addCount()
If m_isCircle Then
m_ErrorMSG = &&
If m_DoneNum = m_RecordNum Then '当前端口下所有表遍历完毕,从头开始!
m_isCircle = False
m_CurNum = 0
'm_rsInstan.MoveFirst
m_DoneNum = 0
m_ErrorMSG = &机器:& & Trim(Str(m_ComputerNo)) & & 端口COM:& & Trim(Str(m_Comno)) & &
电量采集循环完毕!&
'改用MSComm1接受数据
'Call TransRecive
Call GetNext
'开始采集
frmMain.MsgBoxShow (Str$(Now()) & &
端口COM:& & Str$(m_Comno) & & 序号:& & m_DoneNum & & 地址:& & m_AmmeterAddress)
'改用Timer2发送指令
'Call SendInstan
frmMain.MSFlexGrid1.Row = m_DoneNum
frmMain.MSFlexGrid1.CellFontBold = False
m_DoneNum = m_DoneNum + 1
If m_AmmeterAddress = && Or Len(m_AmmeterAddress) & 12 Then '跳过没有表地址的测点
'初始化表格数据
frmMain.MSFlexGrid1.Row = m_DoneNum
frmMain.MSFlexGrid1.CellFontBold = True
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 3) = &&
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 4) = &&
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 5) = &&
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 6) = &&
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 7) = &&
frmMain.MSFlexGrid1.TextMatrix(m_DoneNum, 8) = &&
+Private Function rcvByte2Number(Data_Long As Double, Data_Length As Byte)
Dim i As Long
Dim str_Hex As String
Dim myChr(4) As String * 2
str_Hex = &&
For i = 0 To Data_Length - 1
str_Hex = str_Hex & Right(&0& & Hex(m_Value(Data_Length - 1 - i)), 2)
Data_Long = CDbl(str_Hex)
+End Function
+Private Sub MakePackage()
On Error Resume Next
Dim i As Long
m_pData.Flag1 = m_ReciveStr(0)
m_pData.AmmeterAddres1 = m_ReciveStr(1)
m_pData.AmmeterAddres2 = m_ReciveStr(2)
m_pData.AmmeterAddres3 = m_ReciveStr(3)
m_pData.AmmeterAddres4 = m_ReciveStr(4)
m_pData.AmmeterAddres5 = m_ReciveStr(5)
m_pData.AmmeterAddres6 = m_ReciveStr(6)
m_pData.Flag2 = m_ReciveStr(7)
m_pData.Flag3 = m_ReciveStr(8)
m_pData.Flag4 = m_ReciveStr(9) - 2 '数据长度
m_pData.FlagDI0 = m_ReciveStr(10)
m_pData.FlagDI1 = m_ReciveStr(11)
If m_pData.FlagDI0 = &H43 And m_pData.FlagDI1 = &HC3 Then
mandName = &正相有功&
ElseIf m_pData.FlagDI0 = &H53 And m_pData.FlagDI1 = &HC3 Then
mandName = &反相有功&
ElseIf m_pData.FlagDI0 = &H43 And m_pData.FlagDI1 = &HC4 Then
mandName = &正相无功&
ElseIf m_pData.FlagDI0 = &H53 And m_pData.FlagDI1 = &HC4 Then
mandName = &反相无功&
ElseIf m_pData.FlagDI0 = &H63 And m_pData.FlagDI1 = &HE9 Then
mandName = &有功功率&
ElseIf m_pData.FlagDI0 = &H73 And m_pData.FlagDI1 = &HE9 Then
mandName = &无功功率&
'数据域
ReDim m_Value(m_pData.Flag4) As Byte
Dim ix As Integer
For ix = 0 To m_pData.Flag4 - 1
m_Value(ix) = m_ReciveStr(12 + ix) - &H33
Call rcvByte2Number(m_pData.Value, m_pData.Flag4)
m_pData.Add_Check = m_ReciveStr(UBound(m_ReciveStr) - 1)
m_pData.End_Code = m_ReciveStr(UBound(m_ReciveStr))
(C)&&2013&&Alibaba&&Inc.&&All&&rights&&resvered.
Powered by

我要回帖

更多关于 有功功率 无功功率 的文章

 

随机推荐