我有DWM-156 GSM modem。下面您可以看到将此GSM调制解调器插入USB端口后添加到计算机的设备列表:
请注意,每次将调制解调器连接到计算机时,都会使用不同的COM端口号。
现在我想使用Python或任何其他语言向此调制解调器发送一些AT命令。实际上我想回拨/拨打电话拨打电话并记录在通讯期间转移的原始数据。在搜索之后,我在SO中找到了this个问题。其中一位回答者提出了以下代码:
import serial
serialPort = serial.Serial(port=PORT_NUMBER,baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
def sendatcmd(cmd):
serialPort.write('at'+cmd+'\r')
print 'Loading profile...',
sendatcmd('+npsda=0,2')
我将 PORT_NUMBER 替换为9,10和12.这些是结果:
>>> ================================ RESTART ================================
>>>
Loading profile...
>>> #for port = 9
>>> ================================ RESTART ================================
>>>
Loading profile...
>>> #for port = 10
>>> ================================ RESTART ================================
>>>
Traceback (most recent call last):
File "C:\Users\ghasemi.IT\Desktop\testGSMModem.py", line 3, in <module>
serialPort = serial.Serial(port=12,baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 38, in __init__
SerialBase.__init__(self, *args, **kwargs)
File "C:\Python27\lib\site-packages\serial\serialutil.py", line 282, in __init__
self.open()
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 66, in open
raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError()))
SerialException: could not open port 'COM13': WindowsError(2, 'The system cannot find the file specified.')
>>> #for port = 12
>>>
我的问题:
答案 0 :(得分:1)
- 虽然我没有收到任何回复?
醇>
您永远不会致电serialPort.read()
阅读任何回复。
- 为什么在第三个程序中它无法打开端口&#39; COM13&#39;我正在尝试连接到COM12?
醇>
Serial
类来自lib\site-packages\serial\serialwin32.py
,是Win32Serial
类的包装。
Win32Serial
继承自SerialBase
中的lib\site-packages\serial\serialutil.py
,并通过调用SerialBase
初始化来初始化自己。
SerialBase
通过为port
属性分配您提供的端口值来设置其端口值,该属性调用SerialBase.setPort(port)
。
setPort(port)
检查传入的值是字符串还是数字。它是一个数字,因此它会在makeDeviceName(port)
类中调用Win32Serial
。
makeDeviceName(port)
来电device(port)
。
device(port)
是一个函数,它将1加到一个数字上并将COM
放在它前面:
def device(portnum):
"""Turn a port number into a device name"""
return 'COM%d' % (portnum+1) # numbers are transformed to a string
为什么呢?我不知道。但是如果你传递一个字符串,它就不会改变它。请尝试给它一个字符串:serial.Serial(port="COM12"...
而不是serial.Serial(port=12
- 但我怀疑这是背景分散注意力,并且它与设备管理器屏幕截图中描述为&#39;调试&#39;端口,也许它无法正常打开。
- 是否有更有效和更好的方式使用GSM调制解调器来嗅探电话? (我想使用拨号电话设备拨打我在GSM调制解调器中插入的SIM卡,并记录在此通信过程中传输的原始数据。)
醇>
我不明白这一点。 &#34;拨打SIM卡&#34;是什么意思?什么原始数据?您无法使用串行链接录制电话呼叫音频数据......您可能无法记录其他内容发送的调制解调器数据,因为Python将打开串行端口另一个程序无法打开它。