怎么判断服务器电脑当前是UPS供电呢?

hurryboylqs 2013-12-31 03:02:33
服务器一般都配一个UPS,如果是UPS供电 我就把电脑给关闭,免得非法关机损坏硬盘,但是好像UPS断电后还是用交流供电,GetSystemPowerStatus无能为力??请问有什么其他好的方法吗
...全文
840 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2014-01-01
  • 打赏
  • 举报
回复
想适合所有厂家的UPS,那自己做个检测模块,由这个模块和你的软件通信,反正当UPS断电时也是你的软件进行关机,不会是操作系统自动关机。这个模块成本不高,就是检测UPS输入端是否有电压或电流,然后再通过通信端口(USB、串口、网口、USB转串口等)进行发到你的软件里,你的软件里不需要定时询问,只是被动的接收就行了
encoderlee 版主 2013-12-31
  • 打赏
  • 举报
回复
抓住一点共性:断电时UPS会发出报警声。 那么只需在主机上插个麦克风,实时分析传来的声音波形数据,进行模式匹配,如果和报警声匹配就关机。。。
zwfgdlc 2013-12-31
  • 打赏
  • 举报
回复
这个似乎没什么好办法,无法做到通用. 只能推荐智能型的UPS,山特的C1K,才1000左右.
hurryboylqs 2013-12-31
  • 打赏
  • 举报
回复
引用 11 楼 oyljerry 的回复:
[quote=引用 9 楼 hurryboylqs 的回复:] 不行我就只有判断网关,路由是否断电了,定时ping网关,但是感觉这样性能不是很好
回到问题本质,看上去更应该是管理问题等,UPS应该避免损坏硬盘[/quote] 一般的UPS断电的时候只会报警(发出报警声),不能自动关闭计算机,所以需要额外的软件来处理,高级点的UPS是可以通知计算机关闭的
oyljerry 2013-12-31
  • 打赏
  • 举报
回复
引用 9 楼 hurryboylqs 的回复:
不行我就只有判断网关,路由是否断电了,定时ping网关,但是感觉这样性能不是很好
回到问题本质,看上去更应该是管理问题等,UPS应该避免损坏硬盘
worldy 2013-12-31
  • 打赏
  • 举报
回复
单纯的将ups插入电源口,电脑是无法区别供电是市电还是ups,要区别是市电还是ups,则需要使用附加电缆连接电脑和ups,不同的品牌似乎是使用自己的驱动,window好像没有统一的驱动接口 挂接到文件服务器的UPS通常需要一个附加电缆,用于在UPS使用后备电源时警告文件服务器,服务器于是将进行关机程序。请记住查问UPS供应商,确保用户的操作系统可以使用此功能。 某些供应商已经为他们的电源保护设备开发出某些高级功能。American Power Conversion的Smart-UPS系列通过一种称为PowerChute的软件控制程序为网络管理员提供诊断信息。该软件安装在服务器上并通过电缆与UPS通信,这样,管理员可以跟踪电源质量、UPS工作温度、线路频率、UPS输出电压、最大和最小线路功率、电池功率强度、线路电压和UPS负荷。
hurryboylqs 2013-12-31
  • 打赏
  • 举报
回复
不行我就只有判断网关,路由是否断电了,定时ping网关,但是感觉这样性能不是很好
hurryboylqs 2013-12-31
  • 打赏
  • 举报
回复
引用 5 楼 zyj_604 的回复:
估计得ups提供一个接口吧。高级的ups应该有接口的,可以问问厂家
不能问厂家了,我这个功能是通用的,不可能每个厂家都去问,太多了,
encoderlee 版主 2013-12-31
  • 打赏
  • 举报
回复
[quote=引用 4 楼 hurryboylqs 的回复:][quote] 确实,UPS断电后还是交流,无法直接通过API判断。 不过笔记本这个问题,是直流还是交流,电池还剩多少电量,这些数据肯定是硬件获取的,操作系统通过驱动从硬件获得数据。而台式服务器主板是否有这种获取交直流状态,电池电量数据的硬件模块就不得而知了。我估计是没有的,为什么这么说呢,因为台式机的机箱打开后,主板和电源的连接线都是只有正负极的24PIN 4PIN电源线。这些线都是12V 5V 3.3V的直流正负极电源线,主板获取不到任何关于电源的信息数据。
弱水垂钓 2013-12-31
  • 打赏
  • 举报
回复
以前做监控的时候接触过,厂家提供sdk
zyj_604 2013-12-31
  • 打赏
  • 举报
回复
估计得ups提供一个接口吧。高级的ups应该有接口的,可以问问厂家
hurryboylqs 2013-12-31
  • 打赏
  • 举报
回复
引用 3 楼 CharlesSimonyi 的回复:
笔记本电脑之所以可通过WindowsAPI来检测是否在用电池,是因为笔记本主板上的电源模块已经实现了该功能,windows系统可以通过驱动来从电源模块获取信息,而服务器主机上并没有此类硬件模块。
不是这个原因吧?笔记本之所以能用API应该它确实是通过直流供电,但是UPS在断电后还是交流? 我现在是这样:

	SYSTEM_POWER_STATUS sps;
	ZeroMemory(&sps,sizeof(SYSTEM_POWER_STATUS));
	if(GetSystemPowerStatus(&sps))
	{
            if (sps.ACLineStatus == 0)//AC==1是交流
            {
	       MessageBox(_T("直流"),_T("诊断工具"),MB_OK);//直流
            }
	}
encoderlee 版主 2013-12-31
  • 打赏
  • 举报
回复
笔记本电脑之所以可通过WindowsAPI来检测是否在用电池,是因为笔记本主板上的电源模块已经实现了该功能,windows系统可以通过驱动来从电源模块获取信息,而服务器主机上并没有此类硬件模块。
encoderlee 版主 2013-12-31
  • 打赏
  • 举报
回复
没有硬件支持,只靠软件是不行的。 一般稍微好一点的UPS都有这个功能,UPS上有一个通信口可以通过USB或串口连接电脑主机,可以通知主机电网已断电,正在使用UPS。 也可以自己动手,加一个硬件模块来实现。
oyljerry 2013-12-31
  • 打赏
  • 举报
回复
http://social.msdn.microsoft.com/Forums/vstudio/en-US/b19bc85b-c145-4fd2-8c5f-9d3cf37a2968/windows-7-reading-backup-ups-battery-status?forum=netfxbcl

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧