El controlador VB pcAnyWhere transfiere archivos.
Hay una aplicación especial en uno de mis proyectos. Hay cinco computadoras en diferentes lugares con archivos de recolección de datos en tiempo real. Necesito marcar el número con regularidad y descargar el archivo de datos anterior. Estos archivos de datos varían con el tiempo, por lo que no hay forma de realizar transferencias automáticas de archivos fijas. Así que investigué el software que proporciona scripts y documentos técnicos de OLE respectivamente, y finalmente decidí elegir OLE.
Primero, use OLE para conexión remota
En el documento técnico de OLE, el controlador OLE está escrito muy claramente. Sólo necesito pegar mi código de conexión y debería ser fácil de entender.
1. Verifique si el módem está en uso, porque el programa ya no puede controlar PCAnyWhere después de iniciarlo. Debemos verificar si el módem está inactivo para garantizar una marcación exitosa. Verifique si el módem está inactivo abriendo el puerto serie donde se encuentra el módem.
2. Generar objeto RemoteDataManager.
3. Ingrese C:DocumentsSandSettingSallusersApplicationDatasymantecPCAnyWhere. Dado que todos los archivos de configuración se colocan en este directorio al instalar PCAnywhere, cambiamos la ruta de ejecución a este directorio para que sea más conveniente de usar.
4. Genere un objeto RemoteData, que requiere un archivo CHF correspondiente en la ruta del archivo de configuración y configúrelo en PCAnyWhere, siempre que el nombre y el método de conexión sean los mismos.
5. Configure el número de teléfono marcado, el nombre de usuario y la contraseña de inicio de sesión, el archivo ATF transmitido automáticamente y configure RunOnConnect en TRUE para guardar la modificación de la configuración.
6. Comience a marcar y transfiera archivos automáticamente.
7. Retraso para determinar si el módem está inactivo. Si está inactivo, esta vez se completa la marcación y la transferencia de archivos (también puede fallar). Determinar los archivos descargados. Si se ha actualizado la hora de modificación, esta vez tiene éxito. De lo contrario es un fracaso.
8. Libere los objetos RemoteData y RemoteDataManager.
9. Desenchufar un punto.
IfcheckMODEMIdleThen
ShowBeginNota: muestra la información de inicio.
Nota: CreateCRemoteDataManagerobject
SetRemoteDataManager = CreateObject(" WINAWSVR.RemoteDataManager")
RemoteDataManager. cambiar directorio " C:DocumentsandSettingsAllUsersApplicationDataSymantecpcAnywhere "
S=RemoteDataManager. Directorio actual()
archivo ch = x perfil. getvalue(punto de observación(ahora rund), "archivo CHF")Observaciones: Configuración de acceso telefónico.
SetRemoteData = administrador de datos remoto. RetrieveObject(CHFile, 2, 0)
Datos remotos. número de teléfono = x perfil. GetValue(punto de observación(nowRunID), "PHONENUM")
Datos remotos.
AutoXferFile=nombre de archivo
Datos remotos. AutoLoginName=xPerfil. GetValue(punto de observación(nowRunID), "nombre de usuario")
Datos remotos. AutoLoginPassword=xPerfil. GetValue(ObservationPoint(nowRunID), " PSW ")
Datos remotos. RunOnConnect=True
Datos remotos. WriteObject(0)
S=RemoteData. Número de teléfono
Datos remotos. Iniciar
Dormir 30000
Hacer
IfcheckMODEMIdleThenExitDo
Actividades múltiples
Dormir 5000
Ring
Nota: Después de obtener el archivo, debe exportarlo.
moveDBFDatalocalpath
SetRemoteData =Ninguno
SetRemoteDataManager =Ninguno
nowRunID=nowRunID 1
EndIf
Nota: Los objetos RemoteData y RemoteDataManager deben liberarse una vez; de lo contrario, se producirá confusión.
Bueno, se ha implementado la transferencia automática de archivos por acceso telefónico, pero esta transferencia de archivos es una transferencia automática constante de archivos configurada en PCANYWHERE, que no puede cumplir con mis requisitos de descargar diferentes archivos según diferentes momentos.
En segundo lugar, generar dinámicamente archivos de transferencia automática de archivos
Para generar dinámicamente archivos de transferencia automática de archivos, es natural modificar la configuración de los archivos de transferencia automática de archivos, pero esta función no es proporcionado en OLE tuve que encontrar otra manera.
Cuando abrí el archivo ATF (archivo de transferencia automática de archivos) con un editor de texto, descubrí que estaba todo confuso y solo podía identificar la ruta. Tuve una idea y la abrí con UltraEdit-32 y la abrí con hexadecimal. Ja, todos los secretos están ahí.
El formato de archivo del sistema de ATF es el siguiente:
044041544 6010010010101010001 Nota: El octavo lugar: 00 significa descarga incremental, 065438.
00000000000000000000100 fff 000110043 Nota: El octavo dígito: 00 significa no colgar después de la transferencia de archivos, 01 significa no colgar después de la transferencia de archivos.
4175746 f 586665725 f 436 f 6 d6d 616e 64 auto xfer _ Command
0113453 a5c 5534242414b 5c 32303033 El primer bit es el modo de transmisión: 00 al host 01 y recibe 02 del host sincrónicamente. El segundo dígito es la longitud de la ruta del archivo local, seguido de la ruta del archivo local.
312e 646261443 a5c 7174641746131 Nota: La longitud de la sexta ruta del archivo host va seguida de la ruta del archivo host.
5C32303033312E646266
Con el formato de síntesis de archivos, generar dicho archivo no es un problema. Siempre que el archivo sea binario, todo está bien.
publicsubakautffile(ByVallocalpathAsString, ByValremotepathAsString, ByValfilenameAsString)
Dimtx()AsByte
dimias entero
Dimlen1, len2AsInteger
len1=Len (ruta local)
len2=Len (ruta remota)
ReDimtx(0 a 48 len1 len2 2)
Nota: 044041544 6010010010101010001 Nota: El octavo dígito: 00 indica descarga incremental.
Nota: 00000000000000100 fff 000110043 c.
Observaciones: 4175746 f 58665725 f 436 f 6d 616e 64 auto xfer _ comando.
Nota: 0113453 a5c 55342414 b5 c 32303033 El primer dígito es el modo de transmisión: 00 al host 01 y recibe 02 del host sincrónicamente, y el segundo dígito es la longitud de la ruta del archivo local.
Nota: 312e 646261443 a5c 7174641746131Nota: La longitud de la ruta del sexto archivo host.
Nota: 5C32303033312E646266
tx(0)=H4
tx(1)=H40
tx(2)=H41
tx(3)=H54
tx(4)=H46
tx(5)=H1
tx(6)= H0
tx(7)=H1
tx(8)=H1
tx(9)=H0
tx(10 )=H1
tx(11)=H1
tx(12)=H1
tx(13)=H1
tx (14)=H0
tx(15)=H1
tx(16)=H0
tx(17)=H0
tx(18)=H0
tx(19)=H0
tx(20)=H0
tx(21)=H0
tx(22)=H0
tx(23)=H1
tx(24)=H0
tx(25)=HFF p>
tx(26)=HFF
tx(27)=H0
tx(28)=H0
tx(29)=H11
tx(30)=H0
tx(31)=H43
Observaciones: 4175746 f 58665725 f 436 f 6d 616e 64 auto xfer _ comando.
tx(32)=H41
tx(33)=H75
tx(34)=H74
tx(35) =H6F
tx(36)=H58
tx(37)=H66
tx(38)=H65
tx( 39)=H72
tx(40)=H5F
tx(41)=H43
tx(42)=H6F
tx(43)=H6D
tx(44)=H6D
tx(45)=H61
tx(46)=H6E
tx(47)=H64
Nota: 0113453 a5c 55342414b 5c 32303033 El primero es el método de transmisión: 00 al host 01 desde el host.
tx(48)=H1
tx(49)=len1
forii = 1 tolen1
tx(49 ii )= Asc(Mid(localpath, ii, 1))
Nextii
tx(49 len1 1)=len2
Forii=1Tolen2
tx(49 ii len 1 1)= Asc(Mid(ruta remota, ii, 1))
Nextii
Nota: el archivo binario está abierto.
OnErrorResumeNext
OpenfilenameForBinaryAs # 1
Forii = to 48 len1 len2 2
Coloque #1,,tx(ii) p> p>
Siguienteii
Cerrar1
Conector final
Ingrese la ruta del archivo local, la ruta del archivo del host y el nombre del archivo ATF para generar dicho archivo. y luego configure RemoteData. AutoXferFile funciona como un archivo ATF recién generado, por lo que puedes transferir cualquier archivo que desees. Sin embargo, hay una cosa a tener en cuenta: ambas rutas de archivo deben existir; de lo contrario, se producirá un error.
Conclusión:
Usar VB para manejar pcAnyWhere es algo muy simple, pero no muy bueno. En primer lugar, no puede ser controlado por un programa. Hay una interfaz de operación durante el acceso telefónico y la transferencia de archivos. No se puede configurar como un programa en segundo plano. La intervención manual es demasiado fácil. Sin embargo, es una muy buena opción para solucionar mi problema actual.