1.请问如何利用电脑串口接受电路开关信号?
(就是将一个开关接在串口上,开合和关闭时软件系统能接收到信号并做出相应处理,另:串口有9根线,要怎么接?)2.请问如何利用电脑串口发送电路开关信号?
(就是将一个小灯泡接在串口上,通过软件系统的运行能控制灯泡的亮与灭,另:串口有9根线,要怎么接?)求大虾帮手,搞不定就要卷铺盖了,555555555555555555555555555555555分不是问题,我能给多少都愿意,只要能帮我搞定,多谢各位了!!!!!
(就是将一个开关接在串口上,开合和关闭时软件系统能接收到信号并做出相应处理,另:串口有9根线,要怎么接?)2.请问如何利用电脑串口发送电路开关信号?
(就是将一个小灯泡接在串口上,通过软件系统的运行能控制灯泡的亮与灭,另:串口有9根线,要怎么接?)求大虾帮手,搞不定就要卷铺盖了,555555555555555555555555555555555分不是问题,我能给多少都愿意,只要能帮我搞定,多谢各位了!!!!!
解决方案 »
- vb中怎样取得像“%Windir%”、“%UserProfile%”这样的系统变量的实际路径?
- 我送分的!:)
- 想要crystal 4.6的相关文档
- 用CreateFontIndirect创建的字体赋给textbox或richtextbox后能否使原有文本按该字体显示?
- listview报错380ListView1.ListItems.Item(m).SubItems(n) = rs.Fields(n).Value
- 诚聘软件工程师
- 各位大侠,在这里向你们请教一个问题,有分赠送
- vb6+ado的问题。谢谢
- 想学编程不知道从哪里开头,哪位师傅指导一下
- 向大家请教了:怎样设置打印机来配合Me.PrintForm代码,打印出当前窗体内容,谢谢谢谢。我只有19分了,所以只能给大家10分了:(
- CSDN这几天怎么了....
- 如果更改用New新建的窗体的名称
至于控制,mscomm1发送的是串行信号,还是需要串并转换问题,这个回到2)或1)上了,所以……附:9针接法:一般232只接3线(235,注意交叉) 458 2线(23,并连)
1 数据载波检测 DCD
2 接收数据 RXD
3 发送数据 TXD
4 数据终端准备 DTR
5 信号地 GND
6 数据设备准备好 DSR
7 请求发送 RTS
8 清除发送 CTS
9 振铃指示 DELL
1.接线是串口2和3号线接开关。
2.实现方法,因为2和3脚分别是发送和接收端(不去考虑哪个发哪个收了),程序每隔0.2秒发送一个数据,我选择发 "T",只要OnComm()事件接受到数据"T"即判定用户按下了按钮,执行相应语句.第二问实现复杂点,需要一个数模转换电路,将数字信号转换成模拟信号,通过放大电路驱动灯泡发亮.
你说的方法我试了,好像不行,能不能给你以前的代码参考一下,谢谢!!
有 8 个输出引脚
bit Pin 名称
0 Pin2 D0
1 Pin3 D1
2 Pin4 D2
3 Pin5 D3
4 Pin6 D4
5 Pin7 D5
6 Pin8 D6
7 Pin9 D7 5 个输入引脚
bit Pin 名称
3 Pin15 nError(nFault)
4 Pin13 Select
5 Pin12 PaperEnd
6 Pin10 nAck
7 Pin11 Busy 下载一个 WinIO.DLL 动态链接库,照例子编程很容易。
例子:http://www.vckbase.com/code/downcode.asp?id=2548
库:http://www.vckbase.com/tools/downtools.asp?id=134
转载一篇水木清华的文章
用普通UPS实现停电监测 Chen Dong [本站会员] 我们单位使用的服务器是一台LINUX服务器,由于经费有限,无法购买昂贵的在线式UPS.而只是
购买了一台APC BACK 500(RMB 500). 在外电源切断时,其说明书称可以维持电源供应约15分钟。
如果在15分钟内无法来电,而该服务器又无法正常关闭,轻则丢失数据,重则导致系统崩溃,无
法启动。这是我们所不希望出现的情况。
为解决上述问题,我们考虑了用廉价的UPS开发自己适用的UPS系统,该系统的唯一要求是:
在停电时自动关闭计算机,确保系统的安全。要解决上述问题,必须解决两个关键性的技术问题:
1)硬件上如何检测停电,并将停电信号传给计算机?
2)在Linux 系统中如何用守护程序来完成对停电信号的响应,自动关闭计算机?我们知道,在计算机的串行口中有一些输入/输出脚,例如,DCD(载波检测)(25针8脚,
9针1脚)。我们的基本思路是通过DCD脚信号的变化来检测是否停电。具体做法如下:
从市面上采购一个6V-12V/100mA-500mA的稳压电源作为停电检测传感器,把其输出的电压调整到
9V,在其输出的线缆上串接一个3K的电阻(阻抗匹配用)后与一串口线的DCD脚相连接,其地线
与串口的数字地(25针7脚,9针5脚)相连接。将该稳压电源与UPS输入端接在同一个接线板上,
平时正常供电时,DCD脚的电平将也为高(9V),而一旦停电时,DCD脚的电平将发生变化,通过
检测这种变化,我们就可以实现停电自动关机。电路连结示意图如下: PC< --->UPS<--->POWER
| |
|<-- 稳压电源<---|
Linux 下停电监测守护程序power.c如下:
#include〈sys/ioctl.h>
#include〈fcntl.h>
int main(int argc, char *argv[])
{
int fd;
int flags;
/*打开串行口*/
if((fd=open(argv[1],O_RDWR |O_NDELAY))<0)
{
printf("usage: power /dev/cua0 or power /dev/cua1\n");
exit(1);
}
/*两次调用fork()&setsid()系统调用,使程序成为守护进程*/
if(fork()) exit(0);
if(setsid()==-1) exit(1);
if(fork()) exit(0);
if(setsid()==-1) exit(1);
for(;;)
{
ioctl(fd,TIOCMGET, &flags);/*从串行口读入DCD信号*/
flags=flags & 0x0040;
if(flags == 0)/*检测flags低字节的第7位如果不为1,则关机*/
system("/sbin/shutdown -h now");
sleep(300);/*每5分钟检测一次*/
}
}在Linux系统中执行如下命令序列:gcc power.c -o power
mv power /sbin/.vi /etc/rc.local 在rc.local中加入 :
power /dev/cua0 (com1作监测口) 或
power /dev/cua1(com2作监测口)重新启动计算机,即启动了该守护程序。该系统投入使用后经多次停电的检验均正常工作,保证了服务器的安全。[注]:本系统参考了:
《用普通UPS实现计算机停电自动关机》,严军勇,《电脑爱好者》1999年17期
并加以改进。在此对严军勇先生表示感谢。
中国Linux论坛 版权所有 --------------------------------------------------------------------------------
Copyright 1999,2000 China Linux Forum--※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 202.112.26.39]
收回我上面说的串口不能做这个应用需求的话。可以将 DCD(第8脚)连接到开关一端,开关另一端连接 5 — 15V Vcc。
将 RTS(第4脚)连接到灯,灯的另一端接地。注意灯的负载电流不要超过 500 毫安(可以用 LED 串电阻)。用一个 msComm 控件,正常打开。Private Sub Timer1_Timer()
msComm1.RTSEnable = msComm1.CDHolding
End SubCDHolding 属性设计时无效,请编译后执行。
注意不要捕获 msComm comEventCDTO 错误事件,因为当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时,MSComm 控件设置CommEvent 属性为 comEventCDTO(Carrier Detect 超时错误),并产生 OnComm 事件。
Dim XH As Long Private Sub Form_Load()
On Error Resume Next
If App.PrevInstance Then End
Timer1.Interval = 150
Timer2.Interval = 1500
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
Timer1.Enabled = True
Timer2.Enabled = False
End SubPrivate Sub Form_Resize() If Me.WindowState = 2 Or Me.WindowState = 1 Then Me.HideEnd SubPrivate Sub MSComm1_OnComm()
XH = XH + 1
Label1.BackColor = &HFF&
Label1.Caption = XH
Timer1.Enabled = 0 '停止1秒发送数据(防抖)
SendKeys "{F6}" '发送热键或进入处理程序
Timer2.Enabled = 1
End SubPrivate Sub Timer1_Timer()
Label1.BackColor = &H8000000F
MSComm1.InputMode = 0
MSComm1.Output = "T"
End SubPrivate Sub Timer2_Timer()
Timer1.Enabled = 1
Timer2.Enabled = 0
End Sub
你给的例子是VC++的,我不懂,有没有VB的?谢谢!!!!
我尽快照你说的去试,有的元件要去买,不过我还是不懂怎么判断开关的状态,怎么让灯亮?如果可以,写些简单的代码给我好吗?谢谢你了@mzguanglin(逍遥王子)
谢谢你的文章@yjukh(小虫)
如果可以请邮给我,谢谢!!! [email protected]@Athoncj(阿龙)
你的这段代码,针脚要如何接?
对不起,刚才没注意是你。
我试了你给的代码,好像不行,开关关闭和开启都接收不到“T”
我是用RXD\TXD两条线接开关的,问题出在哪?
这个程序是在实用的,肯定没问题的,要不把源程序给你,其实也就这么多代码。
端口号对吗?或把发送数据改成1试试。
MSComm1.Output = "1"
邮件还没收到。
你的方法测试成功了,谢谢!!!现在在等第2个问题的解决。
RS232串口完全可以不依赖外部设备做数字输入输出;
先看输出: 串口中的两个脚位可以由程序来控制状态,分别是DTR和RTS,这两只脚位被用来做握手
都是由计算机来控制的,这当然就是一种数字输出了.突然有事,回头再继续啊,:)
你说的是怎么弄?详细说一下好吗?谢谢
谢谢,我已经有研华公司联系了!!!