first commit

This commit is contained in:
lihansani
2026-07-13 13:22:37 +08:00
commit 48c8933b16
624 changed files with 271895 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
/mvnw text eol=lf
*.cmd text eol=crlf

33
.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

19
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip

BIN
doc/ArtDAQ.chm Normal file

Binary file not shown.

Binary file not shown.

391
hs_err_pid3540.log Normal file
View File

@@ -0,0 +1,391 @@
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (javaCalls.cpp:51), pid=3540, tid=0x00000000000022b0
# guarantee(thread->is_Java_thread()) failed: crucial check - the VM thread cannot and must not escape to Java code
#
# JRE version: Java(TM) SE Runtime Environment (8.0_411) (build 1.8.0_411-b09)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.411-b09 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x0000019efd055800): VMThread [stack: 0x0000006790b00000,0x0000006790c00000] [id=8880]
Stack: [0x0000006790b00000,0x0000006790c00000]
[error occurred during error reporting (printing stack bounds), id 0xc0000005]
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x3540d9]
V [jvm.dll+0x291062]
V [jvm.dll+0x291c2d]
V [jvm.dll+0x2afbd6]
V [jvm.dll+0x2b08c0]
V [jvm.dll+0x353d38]
C [ntdll.dll+0xa296f]
C [ntdll.dll+0x52554]
C [ntdll.dll+0xa147e]
C 0x0000019edf2f0b4a
VM_Operation (0x00000067910ff750): GetOrSetLocal, mode: safepoint, requested by thread 0x0000019efe29e000
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x0000019e881c9800 JavaThread "XDMA Receive-Thread-0-1" [_thread_blocked, id=4956, stack(0x0000006792100000,0x0000006792200000)]
0x0000019e881c5000 JavaThread "XDMA Receive-Thread-0-0" [_thread_blocked, id=6192, stack(0x0000006790000000,0x0000006790100000)]
0x0000019e881c1000 JavaThread "nioEventLoopGroup-3-4" [_thread_in_native, id=9732, stack(0x0000006791b00000,0x0000006791c00000)]
0x0000019e881c2000 JavaThread "nioEventLoopGroup-3-3" [_thread_in_native, id=2540, stack(0x0000006790100000,0x0000006790200000)]
0x0000019e881c0800 JavaThread "nioEventLoopGroup-3-2" [_thread_in_native, id=7340, stack(0x000000678ff00000,0x0000006790000000)]
0x0000019e86c3b000 JavaThread "nioEventLoopGroup-3-1" [_thread_in_native, id=9564, stack(0x0000006793900000,0x0000006793a00000)]
0x0000019e86c2e800 JavaThread "DestroyJavaVM" [_thread_blocked, id=10064, stack(0x0000006790200000,0x0000006790300000)]
0x0000019e86c30000 JavaThread "http-nio-8082-Acceptor" daemon [_thread_in_native, id=5144, stack(0x0000006793600000,0x0000006793700000)]
0x0000019e86c33000 JavaThread "http-nio-8082-ClientPoller" daemon [_thread_in_native, id=12128, stack(0x0000006793500000,0x0000006793600000)]
0x0000019e86c34800 JavaThread "http-nio-8082-exec-10" daemon [_thread_blocked, id=11556, stack(0x0000006793400000,0x0000006793500000)]
0x0000019e86c32000 JavaThread "http-nio-8082-exec-9" daemon [_thread_blocked, id=5344, stack(0x0000006793300000,0x0000006793400000)]
0x0000019e86c33800 JavaThread "http-nio-8082-exec-8" daemon [_thread_blocked, id=4696, stack(0x0000006793200000,0x0000006793300000)]
0x0000019e86c31800 JavaThread "http-nio-8082-exec-7" daemon [_thread_blocked, id=7248, stack(0x0000006793100000,0x0000006793200000)]
0x0000019e81fab000 JavaThread "http-nio-8082-exec-6" daemon [_thread_blocked, id=2856, stack(0x0000006793000000,0x0000006793100000)]
0x0000019e81faa000 JavaThread "http-nio-8082-exec-5" daemon [_thread_blocked, id=11636, stack(0x0000006792f00000,0x0000006793000000)]
0x0000019e81fa8800 JavaThread "http-nio-8082-exec-4" daemon [_thread_blocked, id=8300, stack(0x0000006792e00000,0x0000006792f00000)]
0x0000019e81fa8000 JavaThread "http-nio-8082-exec-3" daemon [_thread_blocked, id=6420, stack(0x0000006792d00000,0x0000006792e00000)]
0x0000019e81fa0800 JavaThread "http-nio-8082-exec-2" daemon [_thread_blocked, id=10124, stack(0x0000006792c00000,0x0000006792d00000)]
0x0000019e81fa7000 JavaThread "http-nio-8082-exec-1" daemon [_thread_blocked, id=4816, stack(0x0000006792b00000,0x0000006792c00000)]
0x0000019e81f9c800 JavaThread "http-nio-8082-BlockPoller" daemon [_thread_in_native, id=11212, stack(0x0000006792a00000,0x0000006792b00000)]
0x0000019e81fa3800 JavaThread "Thread-26" [_thread_blocked, id=7516, stack(0x0000006792900000,0x0000006792a00000)]
0x0000019e81f9c000 JavaThread "nioEventLoopGroup-2-1" [_thread_in_native, id=1736, stack(0x0000006792800000,0x0000006792900000)]
0x0000019e81fa1000 JavaThread "Thread-23" [_thread_blocked, id=4908, stack(0x0000006792600000,0x0000006792700000)]
0x0000019e80b1d000 JavaThread "Thread-22" [_thread_blocked, id=6072, stack(0x0000006792500000,0x0000006792600000)]
0x0000019effa1b000 JavaThread "JNA Cleaner" daemon [_thread_blocked, id=10264, stack(0x0000006792400000,0x0000006792500000)]
0x0000019effa17800 JavaThread "Druid-ConnectionPool-Destroy-621373425" daemon [_thread_blocked, id=4832, stack(0x0000006792300000,0x0000006792400000)]
0x0000019effa19800 JavaThread "Druid-ConnectionPool-Create-621373425" daemon [_thread_blocked, id=5852, stack(0x0000006792200000,0x0000006792300000)]
0x0000019effa16800 JavaThread "mysql-cj-abandoned-connection-cleanup" daemon [_thread_blocked, id=9180, stack(0x0000006792000000,0x0000006792100000)]
0x0000019effa0c800 JavaThread "container-0" [_thread_blocked, id=10548, stack(0x0000006791f00000,0x0000006792000000)]
0x0000019effa0d800 JavaThread "Catalina-utility-2" [_thread_blocked, id=6760, stack(0x0000006791e00000,0x0000006791f00000)]
0x0000019effa13800 JavaThread "Catalina-utility-1" [_thread_blocked, id=8860, stack(0x0000006791d00000,0x0000006791e00000)]
0x0000019e806bc800 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=10728, stack(0x0000006791c00000,0x0000006791d00000)]
0x0000019e80132800 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=9340, stack(0x0000006791900000,0x0000006791a00000)]
0x0000019efe3cd000 JavaThread "Service Thread" daemon [_thread_blocked, id=520, stack(0x0000006791800000,0x0000006791900000)]
0x0000019efe34f800 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=5264, stack(0x0000006791700000,0x0000006791800000)]
0x0000019efe34d000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=10880, stack(0x0000006791600000,0x0000006791700000)]
0x0000019efe32f000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=2256, stack(0x0000006791500000,0x0000006791600000)]
0x0000019efe348000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=10924, stack(0x0000006791400000,0x0000006791500000)]
0x0000019efe306000 JavaThread "IntelliJ Suspend Helper" daemon [_thread_blocked, id=11372, stack(0x0000006791300000,0x0000006791400000)]
0x0000019efe2ab000 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=6408, stack(0x0000006791200000,0x0000006791300000)]
0x0000019efe2a3800 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=7060, stack(0x0000006791100000,0x0000006791200000)]
0x0000019efe29e000 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=2380, stack(0x0000006791000000,0x0000006791100000)]
0x0000019efe26c800 JavaThread "Attach Listener" daemon [_thread_blocked, id=7808, stack(0x0000006790f00000,0x0000006791000000)]
0x0000019efe280000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=6644, stack(0x0000006790e00000,0x0000006790f00000)]
0x0000019efe1f7800 JavaThread "Finalizer" daemon [_thread_blocked, id=6344, stack(0x0000006790d00000,0x0000006790e00000)]
0x0000019efe1e6800 JavaThread "Reference Handler" daemon [_thread_blocked, id=5916, stack(0x0000006790c00000,0x0000006790d00000)]
Other Threads:
=>0x0000019efd055800 VMThread [stack: 0x0000006790b00000,0x0000006790c00000] [id=8880]
0x0000019e801d6000 WatcherThread [stack: 0x0000006791a00000,0x0000006791b00000] [id=6912]
VM state:at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
[0x0000019edf24cf50] Threads_lock - owner thread: 0x0000019efd055800
heap address: 0x0000000641a00000, size: 6118 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
Compressed class space size: 1073741824 Address: 0x00000007c0000000
Heap:
PSYoungGen total 274944K, used 79084K [0x0000000740900000, 0x0000000752d80000, 0x00000007c0000000)
eden space 257536K, 24% used [0x0000000740900000,0x00000007445a3810,0x0000000750480000)
from space 17408K, 97% used [0x0000000750a00000,0x0000000751a97a18,0x0000000751b00000)
to space 18944K, 0% used [0x0000000751b00000,0x0000000751b00000,0x0000000752d80000)
ParOldGen total 366592K, used 29495K [0x0000000641a00000, 0x0000000658000000, 0x0000000740900000)
object space 366592K, 8% used [0x0000000641a00000,0x00000006436cdde0,0x0000000658000000)
Metaspace used 65497K, capacity 70543K, committed 70704K, reserved 1110016K
class space used 8355K, capacity 9235K, committed 9264K, reserved 1048576K
Card table byte_map: [0x0000019eee6b0000,0x0000019eef2b0000] byte_map_base: 0x0000019eeb4a3000
Marking Bits: (ParMarkBitMap*) 0x00007ffe4bcd70d0
Begin Bits: [0x0000019eefab0000, 0x0000019ef5a48000)
End Bits: [0x0000019ef5a48000, 0x0000019efb9e0000)
Polling page: 0x0000019edcf90000
CodeCache: size=245760Kb used=20372Kb max_used=20372Kb free=225387Kb
bounds [0x0000019edf2f0000, 0x0000019ee06e0000, 0x0000019eee2f0000]
total_blobs=9670 nmethods=9017 adapters=571
compilation: enabled
Compilation events (10 events):
Event: 6557.567 Thread 0x0000019efe34f800 9168 1 com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$XdmaPathObject::getXdma_handle (5 bytes)
Event: 6557.567 Thread 0x0000019efe34f800 nmethod 9168 0x0000019ee06d1fd0 code [0x0000019ee06d2120, 0x0000019ee06d2238]
Event: 6560.952 Thread 0x0000019efe34f800 9169 1 com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy::calculateRxTargetAddress (12 bytes)
Event: 6560.952 Thread 0x0000019efe34f800 nmethod 9169 0x0000019ee06d22d0 code [0x0000019ee06d2420, 0x0000019ee06d2558]
Event: 6567.726 Thread 0x0000019efe34f800 9170 ! 1 com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy::readFpgaReg (75 bytes)
Event: 6567.728 Thread 0x0000019efe34f800 nmethod 9170 0x0000019ee06d25d0 code [0x0000019ee06d27c0, 0x0000019ee06d3060]
Event: 6567.729 Thread 0x0000019efe34f800 9171 1 com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy::readFromXdma (170 bytes)
Event: 6567.731 Thread 0x0000019efe34f800 nmethod 9171 0x0000019ee06d3850 code [0x0000019ee06d3b60, 0x0000019ee06d48c0]
Event: 6568.165 Thread 0x0000019efe34f800 9172 1 com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy::receiveDataFromFpga (342 bytes)
Event: 6568.170 Thread 0x0000019efe34f800 nmethod 9172 0x0000019ee06d5990 code [0x0000019ee06d5d40, 0x0000019ee06d7410]
GC Heap History (10 events):
Event: 7.361 GC heap before
{Heap before GC invocations=8 (full 2):
PSYoungGen total 162304K, used 145920K [0x0000000740900000, 0x000000074ff00000, 0x00000007c0000000)
eden space 145920K, 100% used [0x0000000740900000,0x0000000749780000,0x0000000749780000)
from space 16384K, 0% used [0x0000000749780000,0x0000000749780000,0x000000074a780000)
to space 13312K, 0% used [0x000000074f200000,0x000000074f200000,0x000000074ff00000)
ParOldGen total 255488K, used 16502K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 6% used [0x0000000641a00000,0x0000000642a1db78,0x0000000651380000)
Metaspace used 45145K, capacity 47354K, committed 47408K, reserved 1091584K
class space used 5724K, capacity 6151K, committed 6192K, reserved 1048576K
Event: 7.369 GC heap after
Heap after GC invocations=8 (full 2):
PSYoungGen total 213504K, used 12821K [0x0000000740900000, 0x000000074ff00000, 0x00000007c0000000)
eden space 200192K, 0% used [0x0000000740900000,0x0000000740900000,0x000000074cc80000)
from space 13312K, 96% used [0x000000074f200000,0x000000074fe85748,0x000000074ff00000)
to space 14336K, 0% used [0x000000074e300000,0x000000074e300000,0x000000074f100000)
ParOldGen total 255488K, used 16510K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 6% used [0x0000000641a00000,0x0000000642a1fb78,0x0000000651380000)
Metaspace used 45145K, capacity 47354K, committed 47408K, reserved 1091584K
class space used 5724K, capacity 6151K, committed 6192K, reserved 1048576K
}
Event: 14.390 GC heap before
{Heap before GC invocations=9 (full 2):
PSYoungGen total 213504K, used 213013K [0x0000000740900000, 0x000000074ff00000, 0x00000007c0000000)
eden space 200192K, 100% used [0x0000000740900000,0x000000074cc80000,0x000000074cc80000)
from space 13312K, 96% used [0x000000074f200000,0x000000074fe85748,0x000000074ff00000)
to space 14336K, 0% used [0x000000074e300000,0x000000074e300000,0x000000074f100000)
ParOldGen total 255488K, used 16510K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 6% used [0x0000000641a00000,0x0000000642a1fb78,0x0000000651380000)
Metaspace used 53527K, capacity 56346K, committed 56496K, reserved 1097728K
class space used 6776K, capacity 7291K, committed 7344K, reserved 1048576K
Event: 14.402 GC heap after
Heap after GC invocations=9 (full 2):
PSYoungGen total 237568K, used 14326K [0x0000000740900000, 0x0000000752f80000, 0x00000007c0000000)
eden space 223232K, 0% used [0x0000000740900000,0x0000000740900000,0x000000074e300000)
from space 14336K, 99% used [0x000000074e300000,0x000000074f0fda90,0x000000074f100000)
to space 18432K, 0% used [0x0000000751d80000,0x0000000751d80000,0x0000000752f80000)
ParOldGen total 255488K, used 21568K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 8% used [0x0000000641a00000,0x0000000642f10270,0x0000000651380000)
Metaspace used 53527K, capacity 56346K, committed 56496K, reserved 1097728K
class space used 6776K, capacity 7291K, committed 7344K, reserved 1048576K
}
Event: 16.234 GC heap before
{Heap before GC invocations=10 (full 2):
PSYoungGen total 237568K, used 60794K [0x0000000740900000, 0x0000000752f80000, 0x00000007c0000000)
eden space 223232K, 20% used [0x0000000740900000,0x0000000743661080,0x000000074e300000)
from space 14336K, 99% used [0x000000074e300000,0x000000074f0fda90,0x000000074f100000)
to space 18432K, 0% used [0x0000000751d80000,0x0000000751d80000,0x0000000752f80000)
ParOldGen total 255488K, used 21568K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 8% used [0x0000000641a00000,0x0000000642f10270,0x0000000651380000)
Metaspace used 55873K, capacity 59060K, committed 59160K, reserved 1101824K
class space used 7125K, capacity 7687K, committed 7728K, reserved 1048576K
Event: 16.249 GC heap after
Heap after GC invocations=10 (full 2):
PSYoungGen total 281600K, used 17627K [0x0000000740900000, 0x0000000755380000, 0x00000007c0000000)
eden space 263168K, 0% used [0x0000000740900000,0x0000000740900000,0x0000000750a00000)
from space 18432K, 95% used [0x0000000751d80000,0x0000000752eb6ff8,0x0000000752f80000)
to space 19968K, 0% used [0x0000000750a00000,0x0000000750a00000,0x0000000751d80000)
ParOldGen total 255488K, used 21595K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 8% used [0x0000000641a00000,0x0000000642f16ec0,0x0000000651380000)
Metaspace used 55873K, capacity 59060K, committed 59160K, reserved 1101824K
class space used 7125K, capacity 7687K, committed 7728K, reserved 1048576K
}
Event: 16.249 GC heap before
{Heap before GC invocations=11 (full 3):
PSYoungGen total 281600K, used 17627K [0x0000000740900000, 0x0000000755380000, 0x00000007c0000000)
eden space 263168K, 0% used [0x0000000740900000,0x0000000740900000,0x0000000750a00000)
from space 18432K, 95% used [0x0000000751d80000,0x0000000752eb6ff8,0x0000000752f80000)
to space 19968K, 0% used [0x0000000750a00000,0x0000000750a00000,0x0000000751d80000)
ParOldGen total 255488K, used 21595K [0x0000000641a00000, 0x0000000651380000, 0x0000000740900000)
object space 255488K, 8% used [0x0000000641a00000,0x0000000642f16ec0,0x0000000651380000)
Metaspace used 55873K, capacity 59060K, committed 59160K, reserved 1101824K
class space used 7125K, capacity 7687K, committed 7728K, reserved 1048576K
Event: 16.414 GC heap after
Heap after GC invocations=11 (full 3):
PSYoungGen total 281600K, used 0K [0x0000000740900000, 0x0000000755380000, 0x00000007c0000000)
eden space 263168K, 0% used [0x0000000740900000,0x0000000740900000,0x0000000750a00000)
from space 18432K, 0% used [0x0000000751d80000,0x0000000751d80000,0x0000000752f80000)
to space 19968K, 0% used [0x0000000750a00000,0x0000000750a00000,0x0000000751d80000)
ParOldGen total 366592K, used 29479K [0x0000000641a00000, 0x0000000658000000, 0x0000000740900000)
object space 366592K, 8% used [0x0000000641a00000,0x00000006436c9de0,0x0000000658000000)
Metaspace used 55873K, capacity 59060K, committed 59160K, reserved 1101824K
class space used 7125K, capacity 7687K, committed 7728K, reserved 1048576K
}
Event: 3171.293 GC heap before
{Heap before GC invocations=12 (full 3):
PSYoungGen total 281600K, used 263168K [0x0000000740900000, 0x0000000755380000, 0x00000007c0000000)
eden space 263168K, 100% used [0x0000000740900000,0x0000000750a00000,0x0000000750a00000)
from space 18432K, 0% used [0x0000000751d80000,0x0000000751d80000,0x0000000752f80000)
to space 19968K, 0% used [0x0000000750a00000,0x0000000750a00000,0x0000000751d80000)
ParOldGen total 366592K, used 29479K [0x0000000641a00000, 0x0000000658000000, 0x0000000740900000)
object space 366592K, 8% used [0x0000000641a00000,0x00000006436c9de0,0x0000000658000000)
Metaspace used 64970K, capacity 69905K, committed 70192K, reserved 1110016K
class space used 8299K, capacity 9166K, committed 9264K, reserved 1048576K
Event: 3171.312 GC heap after
Heap after GC invocations=12 (full 3):
PSYoungGen total 274944K, used 16990K [0x0000000740900000, 0x0000000752d80000, 0x00000007c0000000)
eden space 257536K, 0% used [0x0000000740900000,0x0000000740900000,0x0000000750480000)
from space 17408K, 97% used [0x0000000750a00000,0x0000000751a97a18,0x0000000751b00000)
to space 18944K, 0% used [0x0000000751b00000,0x0000000751b00000,0x0000000752d80000)
ParOldGen total 366592K, used 29495K [0x0000000641a00000, 0x0000000658000000, 0x0000000740900000)
object space 366592K, 8% used [0x0000000641a00000,0x00000006436cdde0,0x0000000658000000)
Metaspace used 64970K, capacity 69905K, committed 70192K, reserved 1110016K
class space used 8299K, capacity 9166K, committed 9264K, reserved 1048576K
}
Deoptimization events (0 events):
No events
Classes redefined (10 events):
Event: 4983.874 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$4, count=3
Event: 6553.625 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$6, count=4
Event: 6553.655 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy, count=4
Event: 6553.682 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$REGISTER_FUNCTION_TYPE, count=4
Event: 6553.708 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$1, count=4
Event: 6553.735 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$XdmaPathObject, count=4
Event: 6553.762 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$2, count=4
Event: 6553.788 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$ReceiveRunnable, count=4
Event: 6553.815 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$3, count=4
Event: 6553.841 Thread 0x0000019efd055800 redefined class name=com.cbsd.universaltestsoftwareserver.dllserviceproxy.XdmaDllServiceProxy$4, count=4
Internal exceptions (10 events):
Event: 18.073 Thread 0x0000019edf24e000 Exception <a 'java/lang/ClassNotFoundException': > (0x00000007476cfcd8) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\prims\jni.cpp, line 737]
Event: 83.869 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': java/lang/ObjectCustomizer> (0x000000074c0026b8) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 213]
Event: 83.870 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': com/cbsd/universaltestsoftwareserver/vo/BoardListVoCustomizer> (0x000000074c8f5588) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\systemDi
Event: 83.871 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': java/lang/ObjectCustomizer> (0x000000074c919458) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 213]
Event: 83.872 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': com/cbsd/universaltestsoftwareserver/module/manage/entity/BoardCustomizer> (0x000000074c93f558) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classf
Event: 83.894 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': java/lang/ObjectCustomizer> (0x000000074c9e6d40) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 213]
Event: 83.895 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': com/cbsd/universaltestsoftwareserver/vo/ChannelListVoCustomizer> (0x000000074ca09af0) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\system
Event: 83.896 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': java/lang/ObjectCustomizer> (0x000000074ca1fde8) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 213]
Event: 83.896 Thread 0x0000019e81faa000 Exception <a 'java/lang/ClassNotFoundException': com/cbsd/universaltestsoftwareserver/module/manage/entity/ChannelCustomizer> (0x000000074ca47380) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\clas
Event: 3763.133 Thread 0x0000019e881c7000 Exception <a 'java/lang/InterruptedException': sleep interrupted> (0x00000007413c6ad0) thrown at [C:\jenkins\workspace\8-2-build-windows-x64-cygwin-sans-NAS\jdk8u411\893\hotspot\src\share\vm\prims\jvm.cpp, line 3359]
Events (10 events):
Event: 6735.224 Executing VM operation: GetFrameCount done
Event: 6735.224 Executing VM operation: GetFrameLocation
Event: 6735.224 Executing VM operation: GetFrameLocation done
Event: 6735.224 Executing VM operation: GetFrameLocation
Event: 6735.224 Executing VM operation: GetFrameLocation done
Event: 6735.224 Executing VM operation: GetFrameLocation
Event: 6735.225 Executing VM operation: GetFrameLocation done
Event: 6735.233 Executing VM operation: GetFrameLocation
Event: 6735.233 Executing VM operation: GetFrameLocation done
Event: 6735.233 Executing VM operation: GetOrSetLocal
Dynamic libraries:
0x00007ff60fd30000 - 0x00007ff60fd7a000 C:\Program Files\Java\jdk-1.8\bin\java.exe
0x00007ffec1dd0000 - 0x00007ffec1fc8000 C:\Windows\SYSTEM32\ntdll.dll
0x00007ffec0150000 - 0x00007ffec0212000 C:\Windows\System32\KERNEL32.DLL
0x00007ffebf5f0000 - 0x00007ffebf8e6000 C:\Windows\System32\KERNELBASE.dll
0x00007ffec1820000 - 0x00007ffec18d1000 C:\Windows\System32\ADVAPI32.dll
0x00007ffec1af0000 - 0x00007ffec1b8e000 C:\Windows\System32\msvcrt.dll
0x00007ffec1570000 - 0x00007ffec160f000 C:\Windows\System32\sechost.dll
0x00007ffec1360000 - 0x00007ffec1480000 C:\Windows\System32\RPCRT4.dll
0x00007ffebfd90000 - 0x00007ffebfdb7000 C:\Windows\System32\bcrypt.dll
0x00007ffec18e0000 - 0x00007ffec1a81000 C:\Windows\System32\USER32.dll
0x00007ffebfdc0000 - 0x00007ffebfde2000 C:\Windows\System32\win32u.dll
0x00007ffec1540000 - 0x00007ffec156b000 C:\Windows\System32\GDI32.dll
0x00007ffebfaf0000 - 0x00007ffebfc09000 C:\Windows\System32\gdi32full.dll
0x00007ffebf8f0000 - 0x00007ffebf98d000 C:\Windows\System32\msvcp_win.dll
0x00007ffebfc10000 - 0x00007ffebfd10000 C:\Windows\System32\ucrtbase.dll
0x00007ffeadd10000 - 0x00007ffeadfab000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.6456_none_60b8a6cb71f64256\COMCTL32.dll
0x00007ffec0280000 - 0x00007ffec02af000 C:\Windows\System32\IMM32.DLL
0x00007ffe93010000 - 0x00007ffe9302b000 C:\Program Files\Java\jdk-1.8\jre\bin\vcruntime140.dll
0x00007ffeba9c0000 - 0x00007ffeba9cc000 C:\Program Files\Java\jdk-1.8\jre\bin\vcruntime140_1.dll
0x00007ffe4bd60000 - 0x00007ffe4bdee000 C:\Program Files\Java\jdk-1.8\jre\bin\msvcp140.dll
0x00007ffe4b4a0000 - 0x00007ffe4bd51000 C:\Program Files\Java\jdk-1.8\jre\bin\server\jvm.dll
0x00007ffec04f0000 - 0x00007ffec04f8000 C:\Windows\System32\PSAPI.DLL
0x00007ffe93220000 - 0x00007ffe93229000 C:\Windows\SYSTEM32\WSOCK32.dll
0x00007ffeb8f20000 - 0x00007ffeb8f2a000 C:\Windows\SYSTEM32\VERSION.dll
0x00007ffead7d0000 - 0x00007ffead7f7000 C:\Windows\SYSTEM32\WINMM.dll
0x00007ffec0e80000 - 0x00007ffec0eeb000 C:\Windows\System32\WS2_32.dll
0x00007ffebd2f0000 - 0x00007ffebd302000 C:\Windows\SYSTEM32\kernel.appcore.dll
0x00007ffe93000000 - 0x00007ffe93010000 C:\Program Files\Java\jdk-1.8\jre\bin\verify.dll
0x00007ffe8eaa0000 - 0x00007ffe8eacb000 C:\Program Files\Java\jdk-1.8\jre\bin\java.dll
0x00007ffea22e0000 - 0x00007ffea2316000 C:\Program Files\Java\jdk-1.8\jre\bin\jdwp.dll
0x00007ffeba130000 - 0x00007ffeba139000 C:\Program Files\Java\jdk-1.8\jre\bin\npt.dll
0x00007ffea22a0000 - 0x00007ffea22d4000 C:\Program Files\Java\jdk-1.8\jre\bin\instrument.dll
0x00007ffe90f00000 - 0x00007ffe91111000 C:\Users\le\AppData\Local\Temp\idea_libasyncProfiler_dll_temp_folder5340\libasyncProfiler.dll
0x00007ffe8e790000 - 0x00007ffe8e7a8000 C:\Program Files\Java\jdk-1.8\jre\bin\zip.dll
0x00007ffec0500000 - 0x00007ffec0c70000 C:\Windows\System32\SHELL32.dll
0x00007ffebd4f0000 - 0x00007ffebdc95000 C:\Windows\SYSTEM32\windows.storage.dll
0x00007ffebfdf0000 - 0x00007ffec0144000 C:\Windows\System32\combase.dll
0x00007ffebedb0000 - 0x00007ffebeddb000 C:\Windows\SYSTEM32\Wldp.dll
0x00007ffec1cc0000 - 0x00007ffec1d8d000 C:\Windows\System32\OLEAUT32.dll
0x00007ffec03c0000 - 0x00007ffec046d000 C:\Windows\System32\SHCORE.dll
0x00007ffec0220000 - 0x00007ffec027b000 C:\Windows\System32\shlwapi.dll
0x00007ffebf390000 - 0x00007ffebf3b4000 C:\Windows\SYSTEM32\profapi.dll
0x00007ffeba120000 - 0x00007ffeba12a000 C:\Program Files\Java\jdk-1.8\jre\bin\dt_socket.dll
0x00007ffebeb10000 - 0x00007ffebeb7a000 C:\Windows\system32\mswsock.dll
0x00007ffe8dac0000 - 0x00007ffe8dadc000 C:\Program Files\Java\jdk-1.8\jre\bin\net.dll
0x00007ffebe830000 - 0x00007ffebe8fa000 C:\Windows\SYSTEM32\DNSAPI.dll
0x00007ffebe7f0000 - 0x00007ffebe82b000 C:\Windows\SYSTEM32\IPHLPAPI.DLL
0x00007ffec1810000 - 0x00007ffec1818000 C:\Windows\System32\NSI.dll
0x00007ffeb40b0000 - 0x00007ffeb40ba000 C:\Windows\System32\rasadhlp.dll
0x00007ffeb54b0000 - 0x00007ffeb5530000 C:\Windows\System32\fwpuclnt.dll
0x00007ffeba110000 - 0x00007ffeba11d000 C:\Program Files\Java\jdk-1.8\jre\bin\management.dll
0x00007ffe5aea0000 - 0x00007ffe5aeb3000 C:\Program Files\Java\jdk-1.8\jre\bin\nio.dll
0x00007ffebed10000 - 0x00007ffebed28000 C:\Windows\SYSTEM32\CRYPTSP.dll
0x00007ffebe430000 - 0x00007ffebe468000 C:\Windows\system32\rsaenh.dll
0x00007ffebf310000 - 0x00007ffebf33e000 C:\Windows\SYSTEM32\USERENV.dll
0x00007ffebf560000 - 0x00007ffebf5e2000 C:\Windows\System32\bcryptprimitives.dll
0x00007ffebed00000 - 0x00007ffebed0c000 C:\Windows\SYSTEM32\CRYPTBASE.dll
0x00007ffeb8900000 - 0x00007ffeb8917000 C:\Windows\SYSTEM32\dhcpcsvc6.DLL
0x00007ffeb8dd0000 - 0x00007ffeb8ded000 C:\Windows\SYSTEM32\dhcpcsvc.DLL
0x00007ffe9c7d0000 - 0x00007ffe9c7e7000 C:\Windows\system32\napinsp.dll
0x00007ffe9c790000 - 0x00007ffe9c7ab000 C:\Windows\system32\pnrpnsp.dll
0x00007ffe9c770000 - 0x00007ffe9c78d000 C:\Windows\system32\wshbth.dll
0x00007ffeba7f0000 - 0x00007ffeba80d000 C:\Windows\system32\NLAapi.dll
0x00007ffe9c750000 - 0x00007ffe9c762000 C:\Windows\System32\winrnr.dll
0x00007ffea2140000 - 0x00007ffea222f000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\1553B\x64\msvcr120.dll
0x00007ffe4b080000 - 0x00007ffe4b291000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\1553B\x64\msvcr120d.dll
0x00007ffe9a440000 - 0x00007ffe9a509000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\1553B\x64\wtapi_n_lowlevel_x64.dll
0x00007ffec0ef0000 - 0x00007ffec1360000 C:\Windows\System32\SETUPAPI.dll
0x00007ffebf510000 - 0x00007ffebf55e000 C:\Windows\System32\cfgmgr32.dll
0x00007ffe45500000 - 0x00007ffe471df000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\1553B\x64\busapi64.dll
0x00007ffea2250000 - 0x00007ffea2295000 C:\Users\le\AppData\Local\Temp\jna-3449\jna2451642715359515288.dll
0x00007ffea2120000 - 0x00007ffea2134000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\boardList.dll
0x00007ffea2100000 - 0x00007ffea211e000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\1553B\x64\Java_1553B.dll
0x00007ffea20e0000 - 0x00007ffea20f5000 C:\Users\le\AppData\Local\Temp\universal-test-dlls-1776649476936\xdma\java_xdma_rw_dll.dll
0x00007ffe9a400000 - 0x00007ffe9a434000 C:\Users\le\AppData\Local\Temp\jSerialComm\2.9.2\jSerialComm.dll
0x00007ffebf1f0000 - 0x00007ffebf223000 C:\Windows\SYSTEM32\DEVOBJ.dll
0x00007ffebfd10000 - 0x00007ffebfd83000 C:\Windows\System32\WINTRUST.dll
0x00007ffebf990000 - 0x00007ffebfaed000 C:\Windows\System32\CRYPT32.dll
0x00007ffebefb0000 - 0x00007ffebefc2000 C:\Windows\SYSTEM32\MSASN1.dll
0x00007ffebc630000 - 0x00007ffebc831000 C:\Windows\SYSTEM32\dbghelp.dll
VM Arguments:
jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:62108,suspend=y,server=n -javaagent:C:\Users\le\AppData\Local\JetBrains\IntelliJIdea2025.1\captureAgent\debugger-agent.jar=file:///C:/Users/le/AppData/Local/Temp/capture2519121953456631934.props -agentpath:C:\Users\le\AppData\Local\Temp\idea_libasyncProfiler_dll_temp_folder5340\libasyncProfiler.dll=version,jfr,event=wall,interval=10ms,cstack=no,file=C:\Users\le\IdeaSnapshots\UniversaltestsoftwareServerApiApplication_2026_04_20_094435.jfr,dbghelppath=C:\Users\le\AppData\Local\Temp\idea_dbghelp_dll_temp_folder1887\dbghelp.dll,log=C:\Users\le\AppData\Local\Temp\UniversaltestsoftwareServerApiApplication_2026_04_20_094435.jfr.log.txt,logLevel=DEBUG -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8
java_command: com.cbsd.universaltestsoftwareserver.UniversaltestsoftwareServerApiApplication
java_class_path (initial): C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar;C:\Program Files\Java\jdk-1.8\jre\lib\deploy.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk-1.8\jre\lib\javaws.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar;C:\Program Files\Java\jdk-1.8\jre\lib\management-agent.jar;C:\Program Files\Java\jdk-1.8\jre\lib\plugin.jar;C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar;C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar;C:\Users\le\Desktop\universaltestsoftware_server_api\target\classes;C:\Users\le\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.4.5\spring-boot-starter-web-2.4.5.jar;C:\Users\le\.m2\repository\org\springframework\boot\spring-boot-starter\2.4.5\spring-boot-starter-2.4.5.jar;C:\Users\le\.m2\repository\org\springframework\boot\spring-boot\2.4.5\spring-boot-2.4.5.jar;C:\Users\le\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\le\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.4.5\spring-boot-starter-json-2.4.5.jar;C:\Users\le\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.4\jackson-datatype-jdk8-2.11.4.jar;C:\Users\le\.m2\repository\com\fas
Launcher Type: SUN_STANDARD
Environment Variables:
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-1.8\bin;C:\mingw64\bin;C:\node-v14.21.3-win-x64;C:\Users\le\AppData\Local\Programs\Python\Python313\Scripts\;C:\Users\le\AppData\Local\Programs\Python\Python313\;C:\Users\le\AppData\Local\Programs\Python\Launcher\;C:\Users\le\AppData\Local\Microsoft\WindowsApps;C:\Users\le\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\JetBrains\IntelliJ IDEA 2025.1.3\bin;
USERNAME=le
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows 10 , 64 bit Build 19041 (10.0.19041.5915)
CPU:total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 94 stepping 3, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, rtm, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx
Memory: 4k page, physical 25052896k(15767476k free), swap 34490080k(24616944k free)
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.411-b09) for windows-amd64 JRE (1.8.0_411-b09), built on Mar 13 2024 07:26:13 by "java_re" with MS VC++ 17.1 (VS2022)
time: Mon Apr 20 11:36:51 2026
timezone: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
elapsed time: 6735.268324 seconds (0d 1h 52m 15s)

259
mvnw vendored Normal file
View File

@@ -0,0 +1,259 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
mvnw.cmd vendored Normal file
View File

@@ -0,0 +1,149 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

257
pom.xml Normal file
View File

@@ -0,0 +1,257 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cbsd</groupId>
<artifactId>universaltestsoftwareserver_api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>universaltestsoftwareserver_api</name>
<description>universaltestsoftwareserver_api</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>1.8</java.version>
<!-- 显式指定 Spring Integration 版本(与 Spring Boot 2.4.5 兼容) -->
<!-- <spring-integration.version>5.4.6</spring-integration.version> -->
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.1</version>
</dependency>
<!-- Jackson Annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.17.1</version>
</dependency>
<!-- Jackson YAML 数据格式支持 (对应 YAMLMapper) -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.17.1</version>
</dependency>
<!-- Jackson Java Properties 数据格式支持 (对应 JavaPropsMapper) -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-properties</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>io.reactivex.rxjava3</groupId>
<artifactId>rxjava</artifactId>
<version>3.1.6</version> <!-- 确保版本与 jaxb-core 兼容 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 官方UI包 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version> <!-- 根据需要选择合适版本 -->
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-runtime</artifactId>
<version>3.0.11</version> <!-- 确保版本与 jaxb-core 兼容 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- JNA 依赖:核心用于调用 DLL -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.14.0</version> <!-- 推荐使用最新稳定版 -->
</dependency>
<dependency>
<groupId>com.fazecast</groupId>
<artifactId>jSerialComm</artifactId>
<version>2.9.2</version>
</dependency>
<!-- Netty -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 可以使用当前最新版本 -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 配置资源复制插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<!-- 在package阶段执行复制操作 -->
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 目标目录项目的target目录 -->
<outputDirectory>${project.build.directory}</outputDirectory>
<!-- 配置源文件目录与pom.xml同级的目录 -->
<resources>
<resource>
<!-- 源目录路径(.表示与pom.xml同级 -->
<directory>.</directory>
<!-- 包含的文件模式(根据需要修改) -->
<includes>
<!-- 示例:复制所有.properties文件 -->
<include>*.rbf</include>
<!-- 示例:复制所有.txt文件 -->
<include>*.bin</include>
</includes>
<!-- 排除的文件模式(可选) -->
<excludes>
<!-- 示例:排除.gitignore文件 -->
<exclude>.gitignore</exclude>
<!-- 示例排除src目录如果需要 -->
<exclude>src/**/*</exclude>
</excludes>
<!-- 是否过滤资源文件替换变量这里设置为false -->
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

822
src/main/c/1553B.c Normal file
View File

@@ -0,0 +1,822 @@
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "1553B/busapi.h"
#include "1553B/target_defines.h"
// 用extern "C"包裹所有导出函数C++编译器需要C编译器也兼容
#ifdef __cplusplus
extern "C" {
#endif
// 在DLL初始化时打开日志文件
FILE* logFile = NULL;
// 可选在DLL加载时初始化日志文件
__declspec(dllexport) void initLog() {
logFile = fopen("c:\\dll_log.txt", "w");
if (logFile == NULL) {
// 打开失败时仍用stdout
logFile = stdout;
}
}
/**
* @cardType (BT_UINT) 1553设备类型如PCI-1553、CPCI-1553、PCCD-1553等。
* @wInstance 当前系统中要查找的设备类型实例号 如果系统中装有两张PCI1553板卡可以通过以下方式分别获取两张板卡的设备号第一张 wInstance=1 第二张 wInstance = 2
* return 返回值 设备号(0 - 8)。 -1(失败)
*/
__declspec(dllexport) BT_INT busTools_FindDevice(BT_UINT cardType,BT_INT wInstance){
BT_INT wStatus = BusTools_FindDevice( cardType, wInstance );
return wStatus;
}
//__declspec(dllexport) BT_INT busTools_GetSerialNumber(BT_UINT cardnum, BT_U16BIT *serial_number){
//
// BT_INT wStatus = BusTools_GetSerialNumber(cardnum,serial_number);
// return wStatus;
//}
/**
*该函数初始化指定设备的一个MIL-STD-1553通道。在调用其他包含输入参数wCardnum 的API函数之前需要首先对通道进行初始化以获取通道句柄。该函数支持的板卡包括PCI-1553、CPCI-1553、PCCD-1553、USB-1553等能在Windows、Linux、VxWorks等操作系统下完成对上述类型的板卡通道初始化工作。
* 输入参数pwCardnum是指向一个无符号整数的指针这个整数即是返回的打开的卡号。
* 在调用该函数前首先需要确定设备号如果系统中只有一张板卡设备号即为0如果有多张板卡则需要调用BusTools_FindDevice()函数来获取设备号即wDevice参数
* @param pwCardnum (BT_UINT *)无符号整型变量指针输出获取的板卡号。该值作为其他需要板卡号的API函数的输入参数。
* @param wMode (BT_UINT) 默认输入 API_B_MODE | API_HW_INTERRUPT。
* @param wDevice (BT_UINT) 需要初始化的通道所在的设备号由BusTools_FindDevice()函数返回。
* @param wChannel (BT_UINT) 需要初始化的通道: CHANNEL_1=0, CHANNEL_2=1, CHANNEL_3=2, or CHANNEL_4=3.
*/
__declspec(dllexport) BT_INT busTools_API_OpenChannel(BT_UINT *pwCardnum, BT_UINT wMode, BT_INT wDevice, BT_UINT wChannel){
BT_INT wStatus = BusTools_API_OpenChannel( pwCardnum, wMode, wDevice, wChannel );
return wStatus;
}
/**
*初始化总线监视器同时初始化并重置硬件内存空间恢复至缺省状态。对于单功能或多功能板卡在使用BC、RT、BM功能前默认调用该函数。
* @param wCardnum (BT_UINT) 板卡号(0开始)。
* @param wEnableA (BT_UINT) BM是否监控A总线标识(默认输入1)
* 0 -> 不监控A总线。
* 1 -> 监控A总线。
* @param wEnableB (BT_UINT) BM是否监控B总线标识(默认输入1)
* 0 -> 不监控B总线。
* 1 -> 监控B总线。
* @return wStatus (BT_INT) 该函数的返回状态(返回0表示成功)。 API_BUSTOOLS_BADCARDNUM 错误的板卡号
*/
__declspec(dllexport) BT_INT busTools_BM_Init(BT_UINT wCardnum, BT_UINT enable_a,BT_UINT enable_b){
BT_INT wStatus = BusTools_BM_Init( wCardnum, enable_a, enable_b);
return wStatus;
}
/**
*选择内部模拟或者是外部真实总线。
* @param cardnum
* 变量类型 unsigned int
* 变量说明 (输入参数)板卡号0开始
* @return wStatus (BT_INT) 该函数的返回状态(返回0表示成功)。 API_BUSTOOLS_BADCARDNUM 错误的板卡号
*/
__declspec(dllexport) BT_INT busTools_SetInternalBus(BT_UINT wCardnum){
//busflag 1表示内部模拟该功能暂不支持0表示外部真实总线。 所以这里写死0
BT_INT wStatus =BusTools_SetInternalBus(wCardnum,0);
return wStatus;
}
/*
* 功能描述 该函数初始化BC控制器功能。在调用其他与BC相关的函数或使用BC结构体之前需要调用该函数。在BC未运行时可以多次调用来修改BC参数。用户需要指定以下参数
* 中断使能标志位参数”dwIntEnable”设置BC中断产生的条件。当使能中断的情况出现时API层调用BusTools_RegisterFunction()函数注册的中断回调函数。
* 消息重试使能位:参数” wRetry”设置当总线出现指定错误时BC重新发送消息的条件。详见BusTools_BC_RetryInit()函数设置多次重试方法。
* 无响应错误时间间隔:参数” wTimeout1”指定无响应超时时间(以毫秒为单位)。如果BC命令字发送后在设置的时间间隔内RT未响应则BC标记该消息出现无响应错误。该值的范围为4-61msMIL-STD-1553B取值平均为14ms。
* 迟响应错误时间间隔:参数” wTimeout2”指定延迟响应的时间间隔(以毫秒为单位)。如果BC命令字中的RT的响应时间在该值和无响应时间间隔之间则BC标记该消息出现迟响应错误。该值的范围为4-31ms但必须小于无响应时间间隔MIL-STD-1553B取值平均为12ms。
* 最小帧周期:参数” dFrame”指定最小的帧周期(以毫秒为单位)。BC以该周期时间发送消息链表中的每一帧数据。范围为1000-1638375ms(即0.61-1000.0Hz)。如果发送完一帧所需要的时间大于设置的最小帧周期,则会出现最小帧溢出的错误。
* BC数据缓冲区个数参数” num_buffers” 决定BC使用的数据缓冲区个数。可设置该值为1或2。如果设置为1API层每条消息仅使用一个BC数据缓冲区并且BC消息结构体的两个指针均指向同一个数据缓冲区。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())函数。
*
* @param wCardnum (BT_UINT) 板卡号(0开始)。
* @param wChannel (BT_UINT)BC输出通道(未使用默认填1)。
* @param dwIntEnable (BT_U32BIT)中断使能位元。
* @param wRetry (BT_U16BIT)重试可用位元。
* @param wTimeout1 (BT_UINT) “无响应”错误的时间间隔必须在4-61毫秒之间
* @param wTimeout2 (BT_UINT) “迟响应”错误的时间间隔必须在4-31毫秒之间
* @param dFrame (BT_U32BIT) 最小帧周期必须在5毫秒到1638375毫秒之间(0.61-4000.0Hz)。
* @param num_buffers (BT_UINT)与每个BC 信息有关的数据缓冲区的数目1或者2。
*/
__declspec(dllexport) BT_INT busTools_BC_Init(BT_UINT wCardnum, BT_UINT wChannel, BT_U32BIT dwIntEnable,BT_U16BIT wRetry, BT_UINT wTimeout1,BT_UINT wTimeout2,BT_U32BIT dFrame,BT_UINT num_buffers){
BT_INT wStatus = BusTools_BC_Init(wCardnum, wChannel, dwIntEnable, wRetry, wTimeout1, wTimeout2, dFrame, num_buffers);
return wStatus;
}
static API_BC_MBUF *bc_wr_msg_array;
/**
*该函数为BC分配指定输入参数” wCount”个消息缓冲区(最大支持分配8192个)。通过调用BusTools_BC_MessageWrite()函数来初始化BC消息链表。
* 如果需要发送非周期消息确保为周期和非周期消息链表分配足够多的缓冲区。通过调用BusTools_BC_MessageWrite()函数来构建BC周期消息链表周期消息链表后未用到的消息缓冲区用来构建非周期消息。在构建非周期消息时消息号从周期消息的最后一条消息号开始依次指向下一条消息号直到链接所有的非周期消息确保最后一条非周期消息的下一条消息指向为0xFFFF(见BusTools_BC_AperiodicRun())。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_BC_Init()函数。
* @param wCardnum (BT_UINT) 板卡号(0开始)。
* @param wCount (BT_UINT) 要申请的BC消息缓冲区个数。
*/
__declspec(dllexport) BT_INT busTools_BC_MessageAlloc(BT_UINT wCardnum, BT_UINT wCount){
if(bc_wr_msg_array!=NULL){
free(bc_wr_msg_array);
bc_wr_msg_array = NULL; // 避免野指针
}
bc_wr_msg_array = (API_BC_MBUF*)malloc(sizeof(API_BC_MBUF) * wCount);
BT_INT wStatus = BusTools_BC_MessageAlloc(wCardnum, wCount);
if(bc_wr_msg_array==NULL){
return -1;
}
return wStatus;
}
//API_BC_MBUF bc_wr_msg_array[1024]; // Structures to define BC messages
/**
* 该函数往总线板卡上写入指定的BC消息。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_BC_Init()函数。
* 利用该函数创建包括有效控制或1553数据的消息包括方式代码、RT->BC、BC->RT、RT->RT和广播消息。另外通过该函数指定小帧链表的起始消息号。
* 消息时间间隔(gap time)是消息起始时刻与上一条消息发送完成时刻之间的间隔时间
*/
__declspec(dllexport) BT_INT busTools_BC_MessageWrite(
BT_UINT wCardnum,BT_UINT mblock,
BT_UINT messageType,BT_UINT messno, BT_UINT messno_next,
BT_UINT cmd1rtaddr, BT_UINT cmd1subaddr,BT_UINT cmd1wcount,
BT_UINT cmd2rtaddr, BT_UINT cmd2subaddr,BT_UINT cmd2wcount,
BT_UINT isReTry,//是否重试
BT_UINT location,//0,开始 1,中间 2,结束
BT_UINT gap_time,
BT_U16BIT* dataBuffer
){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 输出到文件
fprintf(logFile, "wCardnum: %d mblock: %d messageType: %d messno: %d messno_next: %d cmd1rtaddr: %d cmd1subaddr: %d cmd1wcount: %d cmd2rtaddr: %d cmd2subaddr: %d cmd2wcount: %d \n",
wCardnum, mblock, messageType, messno, messno_next , cmd1rtaddr , cmd1subaddr , cmd1wcount , cmd2rtaddr , cmd2subaddr, cmd2wcount );
fprintf(logFile, " isReTry: %d location: %d gap_time: %d \n",
isReTry, location, gap_time );
fflush(logFile); // 刷新文件
memset(&bc_wr_msg_array[messno], 0, sizeof(bc_wr_msg_array[messno])); // Clear all fields.
bc_wr_msg_array[messno].messno = messno; // Message number
bc_wr_msg_array[messno].control = BC_CONTROL_MESSAGE; // This is a standard BC message.
bc_wr_msg_array[messno].control |= BC_CONTROL_CHANNELA; // Send message on bus A (primary).
// bc_wr_msg_array[messno].control |= BC_CONTROL_CHANNELB; // Send message on bus B.
bc_wr_msg_array[messno].control |= BC_CONTROL_BUFFERA; // using one buffer, buffer A
bc_wr_msg_array[messno].control |= BC_CONTROL_INTERRUPT;
// bc_wr_msg_array[messno].control |= BC_CONTROL_BUFFERB; // using one buffer, buffer B
bc_wr_msg_array[messno].messno_next = messno_next; // Next message number, go to msg #1
bc_wr_msg_array[messno].mess_command1.rtaddr = cmd1rtaddr; // Command word 1, RT address
bc_wr_msg_array[messno].mess_command1.subaddr = cmd1subaddr; // Command word 1, Subaddress
bc_wr_msg_array[messno].mess_command1.wcount = cmd1wcount; // Command word 1, word count, 0-31, 0=32 words
bc_wr_msg_array[messno].errorid = 0; // Error injection buffer ID, no err inj
bc_wr_msg_array[messno].gap_time = gap_time; // Intermessage gap time in microseconds
bc_wr_msg_array[messno].status = 0; // Message error status (hardware will control this)
if(location==0){
bc_wr_msg_array[messno].control |= BC_CONTROL_MFRAME_BEG; // start of minor frame.
}else if(location==1){
}else if(location==2){
bc_wr_msg_array[messno].control |= BC_CONTROL_MFRAME_END; // end of minor frame.
}
if(isReTry==1){
bc_wr_msg_array[messno].control |= BC_CONTROL_RETRY; // Enable BC RETRY on this message.
}
// Fill data buffer
// for (int i=0; i<32; i++) bc_wr_msg_array[messno].data[0][i] = *(dataBuffer++) ;
if(messageType==0){
//BC-> RT
bc_wr_msg_array[messno].mess_command1.tran_rec = 0; // Command word 1, transmit (1) or receive (0)
int i=0;
for (i=0; i<cmd1wcount; i++)
{
BT_U16BIT temp = *(dataBuffer++);
fprintf(logFile, "fprintf temp: %d\n", temp);
fflush(logFile); // 刷新文件
bc_wr_msg_array[messno].data[0][i] = temp ;
}
}else if(messageType==1){
//RT-> RT
bc_wr_msg_array[messno].control |= BC_CONTROL_RTRTFORMAT; // rt to rt format 1553 message
bc_wr_msg_array[messno].mess_command1.tran_rec = 0; // Command word 1, transmit (1) or receive (0)
bc_wr_msg_array[messno].mess_command2.rtaddr =cmd2rtaddr; // Command word 2, RT address
bc_wr_msg_array[messno].mess_command2.subaddr =cmd2subaddr; // Command word 2, Subaddress
bc_wr_msg_array[messno].mess_command2.tran_rec = 1; // Command word 2, transmit (1) or receive (0)
bc_wr_msg_array[messno].mess_command2.wcount = cmd2wcount; // Command word 2, word count, 0-31, 0=32 words
int j=0;
for (j=0; j<32; j++) bc_wr_msg_array[messno].data[0][j] = 0;
}else if(messageType==2){
//RT-> BC
bc_wr_msg_array[messno].mess_command1.tran_rec = 1; // Command word 1, transmit (1) or receive (0)
// 强制启用缓冲区A覆盖其他配置
bc_wr_msg_array[messno].control &= ~BC_CONTROL_BUFFERB; // 禁用缓冲区B
bc_wr_msg_array[messno].control |= BC_CONTROL_BUFFERA; // 启用缓冲区A
bc_wr_msg_array[messno].mess_command1.wcount = cmd1wcount; // 关键设置要读取的字数0=32字1-31=对应字数)
// 初始化BC接收缓冲区避免残留随机值未读取成功时也不会乱码
for (int i=0; i<32; i++) {
bc_wr_msg_array[messno].data[0][i] = 0xFFFF; // 用非0值初始化便于区分“未读取”和“读取到0”
}
}
BT_INT wStatus = BusTools_BC_MessageWrite(wCardnum, mblock ,&bc_wr_msg_array[messno] );
return wStatus;
}
/**
*功能描述 该函数启用或停用BC控制器功能。参数” wFlag”决定启用或停用状态。在停用BC功能的时刻该函数会等到最后一帧BC消息发送完后清除BC运行标志位。但如果2s时间内最后一帧还未发送完成会强制停止BC功能。这可能会导致1553总线出现不可预知的状态。
*在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_BC_Init()函数。
*wCardnum (BT_UINT) 板卡号(0开始)。
* wFlag (BT_UINT) BC的请求状态
* 0 ->停止BC功能.。
* 1 ->启动BC功能。
*/
__declspec(dllexport) BT_INT busTools_BC_StartStop(BT_UINT wCardnum,BT_UINT wFlag ){
BT_INT wStatus = BusTools_BC_StartStop( wCardnum, wFlag );
return wStatus;
}
/*
* 该函数初始化板卡的RT(远程终端)功能,主要完成以下操作:
* 初始化RT地址1-31的地址缓冲区默认关闭所有RT。
* 初始化RT地址1-31的所有子地址控制缓冲区收发各分配1个数据缓冲。 参数”wFlag”默认设置为0。
* wCardnum (BT_UINT) 板卡号(0开始)。
* wFlag (BT_UINT) 测试标志默认输入0。
*/
__declspec(dllexport) BT_INT busTools_RT_Init( BT_UINT wCardnum,BT_UINT wFlag){
BT_INT wStatus = BusTools_RT_Init( wCardnum, wFlag );
return wStatus;
}
/**
*该函数设置指定RT的地址缓冲区(即API_RT_ABUF结构体)内容,该结构体的"enables"项控制RT是否分别在A/B总线在线。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_RT_Init()函数。
* API_RT_ABUF结构体说明
* A总线使能enable_a = 1使能反之enable_a = 0
* B总线使能enable_b = 1使能反之enable_b = 0
* 禁止终端标志 inhibit_term_flag未使用。
* RT状态字status该函数仅是初始化RT状态字它可能随时由软件更改硬件也可能根据MIL-STD-1553B协议设置某些状态位。状态字初始化必须将除RT地址位的其他位置0。在调用该函数时API自动填充正确的RT地址位。
* 上一命令字command当RT检测到总线上有命令字的时候保存到该变量中用于"发送上一命令字"的方式代码。这是一个硬件内部用到的字,但是必须有软件首先进行初始化。
* BIT字bit_word未使用。
* wStatus (BT_INT) 该函数的返回状态(返回0表示成功)。
* wCardnum (BT_UINT) 板卡号(0开始)。
* wRtaddr (BT_UINT) RT 地址 (0 - 31)。
* pAbuf (API_RT_ABUF*)指向发送到内存空间的RT地址缓冲区的指针。
*/
__declspec(dllexport) BT_INT busTools_RT_AbufWrite(BT_UINT wCardnum,BT_UINT wRtaddr,BT_UINT enable_a,BT_UINT enable_b, BT_UINT status ){
API_RT_ABUF Abuf_RT1; // RT address buffer structure.
// Setup RT address buffer for our RT (RT1)
Abuf_RT1.enable_a = enable_a; // Respond on bus A
Abuf_RT1.enable_b = enable_b; // Respond on bus B
Abuf_RT1.inhibit_term_flag = 1; // Inhibit terminal flag in status word
//Abuf_RT1.status = 0x0800; // Set status word
//Abuf_RT1.status = wRtaddr<<11; // Set status word
Abuf_RT1.status = status;
Abuf_RT1.bit_word = 0x0000; // Set BIT word (for mode code 19)
BT_INT wStatus = BusTools_RT_AbufWrite( wCardnum, wRtaddr, &Abuf_RT1);
return wStatus;
}
/**
*对每个RT地址而言在收、发方向上各定义了32个子地址。这样的每一个RT地址/子地址/收发方向的组合称之为一个RT子单元。API_RT_CBUF结构体为每个子单元定义一个指定合法数据字个数的控制缓冲区(默认0-32个数据字均合法)。
* 该函数指定一个子单元分配指定数目的RT消息缓冲区并设置控制缓冲区内容。默认设置控制缓冲区的所有数据字个数均合法初始化消息缓冲区数据全0。对于RT发送的消息需要调用BusTools_RT_MessageWrite()函数将发送的数据写入其缓冲区。
* 当参数 "wCount"设置为0时(即分配的消息缓冲区个数为0),代表该子单元消息缓冲区为循环缓冲,即该子地址接收和发送共用一个缓冲区。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_RT_Init()函数。
*
*/
__declspec(dllexport) BT_INT busTools_RT_CbufWrite( BT_UINT wCardnum, // (i) card number (0 - based)
BT_UINT rtaddr, // (i) RT address (0 - based)
BT_UINT subaddr, // (i) RT subaddress (0 - based)
BT_UINT tr, // (i) Transmit/Receive flag (1->rt transmit)
BT_INT mbuf_count ){
API_RT_CBUF Cbuf_RT1SA1R; // RT control buffer structures.
Cbuf_RT1SA1R.legal_wordcount = 0xFFFFFFFF; // any word count is legal.
BT_INT wStatus = BusTools_RT_CbufWrite( wCardnum, rtaddr,subaddr, tr,mbuf_count, &Cbuf_RT1SA1R);
return wStatus;
}
__declspec(dllexport) BT_INT busTools_RT_MessageRead(
BT_UINT cardNum,
BT_UINT rtAddress,
BT_UINT subAddress,
BT_UINT trans,
BT_UINT bufferID,
short* dataBuf
) {
API_RT_MBUF_READ msg_buffer_read;
BT_INT readStatus = BusTools_RT_MessageRead(
cardNum, // 板卡号
rtAddress, // RT 地址
subAddress, // 子地址
trans, // 收发类型RT_RCV
bufferID, // 动态传入当前中断的缓冲区 ID修复点
&msg_buffer_read // 接收数据的结构体
);
if(readStatus == API_SUCCESS) {
for(int i=0; i<32; i++){ // 1553B 最大 32 字
dataBuf[i] = msg_buffer_read.mess_data[i];
}
}
return readStatus;
}
/**
*该函数向指定的RT消息缓冲区写入指定信息。在写RT消息之前需要调用BusTools_RT_CbufWrite()函数为指定的RT子单元分配消息缓冲区。
* 写入的消息主要内容包括中断使能标志、数据字等。API_RT_MBUF_WRITE结构体的enable字段设置为”BT1553_INT_END_OF_MESS”则中断使能设置为0则不产生中断。mess_data字段设置RT消息数据缓冲区。
* error_inj_id错误注入字段未使用(默认输入0)。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_RT_Init()函数。
*/
__declspec(dllexport) BT_INT busTools_RT_MessageWrite(
BT_UINT wCardnum, // 卡号
BT_UINT wRtaddr, // RT远程终端地址
BT_UINT wSubaddr, // 子地址
BT_UINT wTrans, // 传输类型
BT_UINT wMessageid, // 消息ID原代码中未使用该参数
BT_UINT all_buff_num, // 总缓冲区数量
BT_UINT wordcount, // 数据字数每个数据为16位短整型
short* dataBuf // 数据缓冲区指针
) {
// 输入参数校验
if (dataBuf == NULL || wordcount <= 0 || wordcount > 32) { // 假设1553B协议最大支持32字数据
if (logFile != NULL) { // 若日志文件指针有效
fprintf(logFile, "参数非法dataBuf=%pwordcount=%u\n",
dataBuf, wordcount);
fflush(logFile); // 强制刷新日志缓冲区
}
return -1; // 返回非法参数错误码
}
API_RT_MBUF_WRITE msg_buffer_write; // 1553B消息写缓冲区结构体
BT_INT overall_status = API_SUCCESS; // 记录整体执行状态(默认初始化为成功)
short* originalDataBuf = dataBuf; // 保存数据缓冲区原始指针,用于循环复用
// 初始化消息缓冲区结构体
msg_buffer_write.enable = BT1553_INT_END_OF_MESS; // 消息完成时触发中断
msg_buffer_write.error_inj_id = 0; // 不启用错误注入
// 遍历所有缓冲区,执行消息写入操作
for (BT_UINT buff_num = 0; buff_num < all_buff_num; buff_num++) {
// 重置消息数据缓冲区32字覆盖初始化
for (int i = 0; i < 32; i++) {
msg_buffer_write.mess_data[i] = 0;
}
// 将输入数据复制到消息缓冲区(按实际字数复制)
dataBuf = originalDataBuf; // 重置数据指针至起始位置(每个缓冲区重新读取原始数据)
for (int i = 0; i < wordcount; i++) {
msg_buffer_write.mess_data[i] = *(dataBuf++);
}
// 记录当前缓冲区的写入数据(日志)
// if (logFile != NULL) {
// fprintf(logFile, "========wordcount==================%d\n",wordcount);
// fflush(logFile);
// fprintf(logFile, "=================================\n");
// for (int i = 0; i < wordcount; i++) {
// fprintf(logFile, "BusTools_RT_MessageWrite[%u][%d] = %d\n",
// buff_num, i, msg_buffer_write.mess_data[i]); // 日志格式:[缓冲区编号][数据索引] = 数据值
// }
// fprintf(logFile, "=================================\n");
// fflush(logFile);
// }
// 调用底层API执行1553B消息写入
BT_INT status = BusTools_RT_MessageWrite(
wCardnum, wRtaddr, wSubaddr, wTrans, buff_num, &msg_buffer_write);
// 检查写入结果,若失败则记录错误日志
if (status != API_SUCCESS) {
if (logFile != NULL) {
fprintf(logFile, "缓冲区%d执行BusTools_RT_MessageWrite失败错误码%d\n",
buff_num, status);
fflush(logFile);
}
overall_status = status; // 更新整体状态为错误码(保留首次错误码)
}
}
// 记录最终执行结果日志
if (logFile != NULL) {
if (overall_status == API_SUCCESS) {
fprintf(logFile, "BusTools_RT_MessageWrite执行完成所有%d个缓冲区均写入成功\n",
all_buff_num);
} else {
fprintf(logFile, "BusTools_RT_MessageWrite执行完成存在错误。最终错误码%d\n",
overall_status);
}
fflush(logFile);
}
return overall_status; // 返回整体执行状态(成功/错误码)
}
/**
*该函数读取保存在指定RT的地址缓冲区中的信息。该缓冲区控制着指定RT在线与否。
* 函数返回RT地址缓冲区的以下信息
* RT是否在线、动态总线控制和禁止终端标志、RT状态字、上一命令字、BIT字。RT地址缓冲区的详细参数说明见BusTools_RT_AbufWrite函数。
*在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_RT_Init()函数。
*/
//__declspec(dllexport) BT_INT busTools_RT_AbufRead(BT_UINT wCardnum,BT_UINT wRtaddr){
// API_RT_ABUF Abuf_RT1; // RT address buffer structure.
//
// BT_INT wStatus = BusTools_RT_AbufRead( wCardnum, wRtaddr, &Abuf_RT1);
// return wStatus;
//}
//
/**
*功能描述 该函数通过指定参数“wFlag”的值来启动或停止RT功能。
*启动的RT地址是所有使能的RT。通过设置地址缓冲区来使能或禁止具体的RT地址见BusTools_RT_AbufWrite()函数设置控制缓冲区来使能或禁止一些RT子地址、收发方向以及数据字个数的组合见BusTools_RT_CbufWrite()函数。
*在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChanne()l)以及BusTools_RT_Init()函数。
*wCardnum (BT_UINT) 板卡号(0开始)。
* wFlag (BT_UINT) RT的请求状态
* 0 ->停止RT功能.。
* 1 ->启动RT功能。
*/
__declspec(dllexport) BT_INT busTools_RT_StartStop(BT_UINT wCardnum,BT_UINT wFlag ){
BT_INT wStatus = BusTools_RT_StartStop( wCardnum, wFlag );
return wStatus;
}
/**
* 设置RT状态字。
*/
__declspec(dllexport) BT_INT busTools_RT_MessageWriteStatusWord(BT_UINT wCardnum,BT_UINT rtaddr,BT_UINT subaddr,BT_UINT tr,BT_UINT mbuf_id,BT_UINT wStatusWord ){
BT_INT wStatus = BusTools_RT_MessageWriteStatusWord(wCardnum, rtaddr, subaddr, tr, mbuf_id, wStatusWord, 1);
return wStatus;
}
// 步骤1声明与 Java 回调接口匹配的函数指针类型
// g_javaCallback(BT_UINT rt,BT_UINT tr,BT_UINT sa,BT_UINT bufferID, BT_UINT wordcount, short* data);
// 注意:参数、返回值必须与 Java 的 InterruptCallback.onInterrupt 完全一致
typedef void (*InterruptCallbackFunc)(BT_UINT cardnum,BT_UINT interruptType,BT_UINT rt,BT_UINT tr,BT_UINT sa,BT_UINT bufferID, BT_UINT wordcount, short* data);
// 步骤2全局变量保存 Java 传递的回调函数指针C 需持有该指针才能调用)
static InterruptCallbackFunc g_javaCallback0 = NULL;
static InterruptCallbackFunc g_javaCallback1 = NULL;
// Prototype for event handler function
BT_INT _stdcall my_event_handler0(BT_UINT cardnum, struct api_int_fifo *pFIFO);
BT_INT _stdcall my_event_handler1(BT_UINT cardnum, struct api_int_fifo *pFIFO);
BT_INT _stdcall IntFun( BT_UINT cardnum,struct api_int_fifo *sIntFIFO,UINT thisCardNum,BT_UINT intChannelPath);
#define DATA_SIZE 1000 // Size (in 16-bit words) of data to transfer.
BT_U16BIT load_data[DATA_SIZE]; // Array of data to transfer.
BT_U32BIT data_index = 0; // Index into our load_data array.
#define WC 32 // Word count
#define MAX_CH_NUM 2*6 //6张板卡总的通道数
API_INT_FIFO sIntFIFO0; // 新仅用于通道0
API_INT_FIFO sIntFIFO1; // 新仅用于通道1
//当前注册回调函数的cardnum
BT_UINT currentRegisterCardnum0 ;
BT_UINT currentRegisterCardnum1 ;
BT_UINT currentIntChannelPath0;
BT_UINT currentIntChannelPath1;
/**
* 注册/注销中断回调函数
* @param wCardnum 板卡号0开始BT_UINT
* @param sIntFIFO API_INT_FIFO 结构体指针ByReference 表示指针传递)
* @param wFlag 注册/注销标志REGISTER_FUNCTION/UNREGISTER_FUNCTION
* @param intChannelPath 中断通道路径 实际物理通道 0 和 1
* @return 状态码API_SUCCESS 表示成功)
*/
__declspec(dllexport) BT_INT busTools_RegisterFunction(
BT_UINT wCardnum,
InterruptCallbackFunc callback,
BT_UINT wFlag,
BT_UINT intChannelPath
){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
fprintf(logFile, "注册请求intChannelPath=%d, wCardnum=%d, wFlag=%d\n",
intChannelPath, wCardnum, wFlag);
fflush(logFile);
// 关键按通道选择对应的sIntFIFO实例不再复用一个
API_INT_FIFO *pIntFIFO = NULL;
if(intChannelPath == 0){
pIntFIFO = &sIntFIFO0; // 通道0用sIntFIFO0
pIntFIFO->function = my_event_handler0;
currentRegisterCardnum0 = wCardnum;
currentIntChannelPath0 = intChannelPath;
g_javaCallback0 = callback;
}else if(intChannelPath == 1){
pIntFIFO = &sIntFIFO1; // 通道1用sIntFIFO1
pIntFIFO->function = my_event_handler1;
currentRegisterCardnum1 = wCardnum;
currentIntChannelPath1 = intChannelPath;
g_javaCallback1 = callback;
}else{
fprintf(logFile, "错误:不支持的通道路径=%d\n", intChannelPath);
return -1;
}
// 仅在“注册REGISTER_FUNCTION”时初始化配置注销时不需要
if (wFlag == REGISTER_FUNCTION) {
memset(pIntFIFO, 0, sizeof(API_INT_FIFO)); // 清空当前通道的实例(不影响另一个)
pIntFIFO->function = (intChannelPath == 0) ? my_event_handler0 : my_event_handler1;
pIntFIFO->iPriority = THREAD_PRIORITY_BELOW_NORMAL;
pIntFIFO->dwMilliseconds = INFINITE;
pIntFIFO->iNotification = 0;
pIntFIFO->FilterType = EVENT_BC_MESSAGE | EVENT_RT_MESSAGE;
// 配置FilterMask启用所有消息
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
pIntFIFO->FilterMask[i][1][j] = 0xFFFFFFFF;
pIntFIFO->FilterMask[i][0][j] = 0xFFFFFFFF;
}
}
}
// 注册/注销当前通道对应的sIntFIFO实例
BT_INT wStatus = BusTools_RegisterFunction(wCardnum, pIntFIFO, wFlag);
fprintf(logFile, "注册/注销结果wStatus=%d, 通道=%d, 卡号=%d\n",
wStatus, intChannelPath, wCardnum);
fflush(logFile);
return wStatus;
}
//* 这个函数的第一个cardnum这个参数没用千万不要用这个否则会出错。
BT_INT _stdcall my_event_handler0(BT_UINT cardnum, struct api_int_fifo *sIntFIFO)
{
fprintf(logFile, "handler0取到卡号=%d, 通道路径=%d\n", currentRegisterCardnum0, currentIntChannelPath0);
return IntFun(cardnum,sIntFIFO,currentRegisterCardnum0,currentIntChannelPath0);
}
//* 这个函数的第一个cardnum这个参数没用千万不要用这个否则会出错。
BT_INT _stdcall my_event_handler1(BT_UINT cardnum, struct api_int_fifo *sIntFIFO)
{
fprintf(logFile, "handler1取到卡号=%d, 通道路径=%d\n", currentRegisterCardnum1, currentIntChannelPath1);
return IntFun(cardnum,sIntFIFO, currentRegisterCardnum1,currentIntChannelPath1);
}
/****************************************************************************
*
* Function: IntFun
* thisCardNum 这个才是当前回调的cardNum
*
****************************************************************************/
BT_INT _stdcall IntFun(BT_UINT cardnum, struct api_int_fifo *sIntFIFO,UINT thisCardNum,BT_UINT intChannelPath)
{
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
BT_INT tail; // FIFO Tail index
BT_INT status, i;
API_BC_MBUF bc_msg;
API_RT_MBUF_READ msg_buffer_read;
// Loop through all entries in the FIFO
// Fetch entries from the FIFO: Get the tail pointer and extract the entry
// it points to. When (head == tail) then FIFO is empty.
tail = sIntFIFO->tail_index;
while ( tail != sIntFIFO->head_index )
{
BT_INT event_type = sIntFIFO->fifo[tail].event_type;
BT_INT rt = sIntFIFO->fifo[tail].rtaddress; // 当前中断的 RT 地址
BT_INT tr = sIntFIFO->fifo[tail].transrec; // 收发类型RT_RCV
BT_INT sa = sIntFIFO->fifo[tail].subaddress; // 当前中断的子地址
BT_INT bufferID = sIntFIFO->fifo[tail].bufferID; // 当前中断的缓冲区 ID关键
BT_INT wordcount = sIntFIFO->fifo[tail].wordcount;// 当前中断的理论数据长度
fprintf(logFile, "中断cardnum=%d, thisCardNum=%d, rt=%d, tr=%d, sa=%d, bufferID=%d, wordcount=%d,event_type= %d,intChannelPath= %d\n",
cardnum, thisCardNum, rt, tr, sa, bufferID, wordcount,event_type,intChannelPath);
fflush(logFile);
if ( sIntFIFO->fifo[tail].event_type & EVENT_BC_MESSAGE )
{
// 输出到文件
// g_javaCallback(cardnum,);
// Process a BC interrupt:
//sIntFIFO->fifo[tail].buffer_off // Byte address of buffer
// 每个变量声明单独一行并以分号结束
if(tr==1){
fprintf(logFile, "BC 收到RT的消息了\n");
fflush(logFile); // 刷新文件
//// 关键单缓冲区场景下缓冲区A的ID=0直接传入0而非fifo中的bufferID
int status = BusTools_BC_MessageRead(thisCardNum, bufferID, &bc_msg);
if (status == API_SUCCESS) {
if(intChannelPath == 0){
g_javaCallback0(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, bc_msg.data[0]);
} else if(intChannelPath == 1){
g_javaCallback1(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, bc_msg.data[0]);
}
}
else printf("ERROR READING BC MESSAGE!\n");
}else if(tr==0){
printf("bc 发送消息出去了!\n");
fflush(logFile); // 刷新文件
//这里是bc 发送消息出去了,暂时感觉不需要回调
}
// }
}else if ( sIntFIFO->fifo[tail].event_type & EVENT_RT_MESSAGE ){
// 新增日志:打印当前中断的关键参数,确认 bufferID 和 wordcount 正确性
// #define RT_RCV 0 // RT Receive data
// #define RT_XMT 1 // RT Transmit data
if(tr==RT_XMT){
// rt完成发送数据
fprintf(logFile, "RT_XMT: %d\n",RT_XMT);
fflush(logFile); // 刷新文件
if(intChannelPath == 0){
g_javaCallback0(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, msg_buffer_read.mess_data);
} else if(intChannelPath == 1){
g_javaCallback1(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, msg_buffer_read.mess_data);
}
}else if(tr==RT_RCV){
// 关键修复:传入当前中断的 bufferID而非固定值
BT_INT readStatus = BusTools_RT_MessageRead(
thisCardNum, // 板卡号
rt, // RT 地址
sa, // 子地址
tr, // 收发类型RT_RCV
bufferID, // 动态传入当前中断的缓冲区 ID修复点
&msg_buffer_read // 接收数据的结构体
);
if(readStatus == API_SUCCESS) {
// 打印读取到的前 N 个数据(根据 wordcount 调整)
fprintf(logFile, "RT读取到 BC发来的数据");
for(int i=0; i<wordcount && i<32; i++){ // 1553B 最大 32 字
fprintf(logFile, "%d ", msg_buffer_read.mess_data[i]);
}
fprintf(logFile, "\n");
fflush(logFile);
// 传递数据给 Java 回调时,确保 wordcount 非 0避免 Java 层补 32
if(wordcount <= 0) wordcount = 32; // 与 Java 层默认逻辑对齐
// 根据通道路径调用对应的 Java 回调
if(intChannelPath == 0){
g_javaCallback0(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, msg_buffer_read.mess_data);
} else if(intChannelPath == 1){
g_javaCallback1(thisCardNum, event_type, rt, tr, sa, bufferID, wordcount, msg_buffer_read.mess_data);
}
} else {
fprintf(logFile, "BusTools_RT_MessageRead 失败readStatus=%d\n", readStatus);
}
fflush(logFile);
}
}
// Now update and store the tail pointer.
tail++; // Next entry
tail &= sIntFIFO->mask_index; // Wrap the index
sIntFIFO->tail_index = tail; // Save the index
}
return( API_SUCCESS );
}
/**
*PCI-1553、CPCI-1553等类型的板卡可以通过直接耦合或变压器耦合的方式来驱动1553总线可以通过该函数来设置可变的电平值。
* 如果是直接耦合方式电平值范围为0.0V-6.5V。如果是变压器耦合方式电平值范围为0.0V-19.8V。目前该兼容函数仅支持设置变压器耦合方式的电平值。对于两种类型的耦合方式最小有效的电平值单位为0.1V。
* 该函数电平值输入参数类型为整形调用时需要先将实际电平值乘以100再作为输入参数传递。
* wCardnum (BT_UINT) 板卡号(0开始)。
* wVoltage (BT_UINT) 输出电压 - 电压值*100。
* wCoupling (BT_UINT) 耦合方式:(仅支持变压器耦合方式)
* 0 -> 直接耦合
* 1 -> 变压器耦合
*/
__declspec(dllexport) BT_INT busTools_SetVoltage(BT_UINT wCardnum,BT_UINT wVoltage,BT_UINT wCoupling ){
BT_INT wStatus = BusTools_SetVoltage( wCardnum, wVoltage, wCoupling );
return wStatus;
}
/**
* 1553类型板卡支持非周期消息的发送。非周期消息可以在周期消息发送过程中插入也可以不发送周期消息单独调用该函数来发送这些非周期消息 BC非周期消息优先级参数” wHipriority”默认设置为0低优先级。
* 注意在周期消息发送过程中插入非周期消息的情况,非周期消息是在周期消息一帧结束到下一帧开始的时间间隔内发送的,如果没有发送完成,将在下一次间隔时间内发送余下的非周期消息。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_BC_Init()函数此外还需要调用BusTools_BC_MessageWrite()函数来设置这些非周期消息。
* wCardnum (BT_UINT) 板卡号(0开始)。
* wMessageid (BT_UINT) 指定发送的非周期消息ID号。
* priority (BT_UINT) 默认输入0。 优先级 0 = Low Priority 1 = High Priority
* wWaitFlag (BT_UINT) 未使用参数,忽略。
* wWaitTime (BT_UINT) 未使用参数,忽略。
*/
__declspec(dllexport) BT_INT busTools_BC_AperiodicRun(BT_UINT wCardnum,BT_UINT wMessageid ,BT_UINT priority ){
// First make sure that we have completed any previous aperiodic msg.
while (BusTools_BC_AperiodicTest(wCardnum, priority) == API_BC_APERIODIC_RUNNING);
// Then send our aperiodic message.
BT_INT wStatus = BusTools_BC_AperiodicRun(wCardnum, wMessageid , priority, 1, 20);
return wStatus;
}
/**
*
* 功能描述 该函数启动或停止指定的BC消息。在BC周期消息发送过程中可能会启动或停止发送某条消息时用到。在调用该函数之前需要调用BusTools_BC_MessageWrite()函数来设置指定的消息为一条普通的1553消息。
* 该函数可以启动或停止任何一条包括条件跳转的BC消息但它并不能修改指定的消息。
* 在调用该函数之前必须先调用查找设备函数设备(BusTools_FindDevice())、初始化通道(BusTools_API_OpenChannel())以及BusTools_BC_Init()、BusTools_BC_MessageAlloc()函数。
* wCardnum (BT_UINT) 板卡号(0开始)。
* wMessageid (BT_UINT) 指定的BC消息ID号。
* NoopFlag (BT_UINT) 启动/停止标志:
* 0=启动1=停止。
* WaitFlag (BT_UINT) API执行启动或停止操作是否等待BC通过该条消息
* 1=是0=否。
**/
__declspec(dllexport) BT_INT busTools_BC_MessageNoop(BT_UINT wCardnum,BT_UINT wMessageid ,BT_UINT NoopFlag,BT_UINT WaitFlag ){
BT_INT wStatus = BusTools_BC_MessageNoop ( wCardnum, wMessageid, NoopFlag, WaitFlag );
return wStatus;
}
/**
*
*功能描述 该函数更新指定BC消息第一个缓冲区的数据(即API_BC_MBUF结构体data[0])。指定的消息号由输入参数” wMblock_id”决定更新的数据字个数是指定消息第一个命令字中的数据个数。
*/
__declspec(dllexport) BT_INT busTools_BC_MessageUpdate(BT_UINT wCardnum,BT_UINT wMessageid , short* dataBuf)
{
BT_U16BIT* pBuffer;
pBuffer = (BT_U16BIT*)dataBuf;
BT_INT wStatus = BusTools_BC_MessageUpdate( wCardnum, wMessageid, pBuffer );
return wStatus;
}
/**
* 通过调用该函数释放分配的资源终止中断服务程序关闭1553板卡功能。用户需要确保在退出应用程序前调用该函数。如果没有正确调用可能会出现不可预知的异常。允许对其进行多次调用。
* @param wCardnum 板卡号(从0开始)。
* @return 函数返回值 (0表示成功)。
*/
__declspec(dllexport) BT_INT busTools_API_Close(BT_UINT wCardnum){
free(bc_wr_msg_array);
bc_wr_msg_array = NULL; // 避免野指针
BT_INT wStatus = BusTools_API_Close( wCardnum );
return wStatus;
}
//请在src/main/c 目录执行编译
//gcc -shared -fPIC -m64 -L ./1553B/x64 -l busapi64 1553B.c -o ../resources/native/1553B/x64/Java_1553B.dll
#ifdef __cplusplus
}
#endif

2586
src/main/c/1553B/busapi.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,763 @@
/*============================================================================*
* FILE: T A R G E T _ D E F I N E S . H
*============================================================================*
*
* COPYRIGHT (C) 1994 - 2004 BY
* CONDOR ENGINEERING, INC., SANTA BARBARA, CALIFORNIA
* ALL RIGHTS RESERVED.
*
* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND
* COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH
* THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY
* OTHER COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE
* AVAILABLE TO ANY OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE
* SOFTWARE IS HEREBY TRANSFERRED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
* NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY CONDOR
* ENGINEERING.
*
*===========================================================================*
*
* FUNCTION: Targer specific header file for BusTools API structures.
* Busapi.h includes this file. Use this file to customize the
* installation for new targets.
*
*===========================================================================*/
/* $Revision: 5.05 Release $
Date Revision
---------- ---------------------------------------------------------------
09/12/2001 Target_def.h added to the Busapi.h file
01/31/2002 Update for modular API
06/05/2002 Update for v4.52 release
******************************************************************************/
#define MAX_BTA 16 /* 16 1553 Channel on up to 16 boards are supported */
// Set common definition for Windows 32 bit environment
// Microsoft uses WIN32, Borland uses __WIN32__
#if defined(_WIN32) || defined(WIN32) /* MSVC for 32-bit WINDOWS PM */
#ifndef __WIN32__
#define __WIN32__ /* This label is used in the API source code */
#endif
#ifndef _Windows
#define _Windows
#endif
#endif
/************************************************************************************
* Target defines for 32-Bit Windows for all supported 1553 boards *
* *
*************************************************************************************/
#if defined(__WIN32__) /* */
#include <windows.h> /* */
#define WIN32_LEAN_AND_MEAN /* */
#define INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#define HW_INTERRUPTS /* Include HW interrupt code in 32-bit Windows */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#define DEMO_CODE /* Include the DEMO version of the API */
#undef ADD_TRACE /* Include the function call trace code */
#define DO_BUS_LOADING /* Include the bus loading code */
#define _USER_INIT_ /* */
#define _LABVIEW_ /* */
#undef _LVRT_ /* */
#define _USER_DLL_ /* */
#define _PLAYBACK_ /* */
#define INCLUDE_IP_1553 /* */
#define INCLUDE_VME_1553/* */
#define INCLUDE_VXI_1553/* */
#define INCLUDE_PCCD /* Include the dual channel PCCard-D1553 */
#define __uint64 unsigned __int64 /* */
#define LocalMalloc GlobalAlloc /* */
#define LocalFree GlobalFree /* */
#define CCONV _stdcall /* */
#define NOMANGLE /* */
#define PACKED /* */
#define PRAGMA_PACK /* local pack directive */
#endif /* */
/************************************************************************************/
/************************************************************************************
* Target defines for Linux running for the PCI-1553, PMC-1553 and the cPCI-1553. *
* Also use this for the PCI-1553-IP. */
/************************************************************************************/
#if defined(_LINUX_X86_) /* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _LINUXBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#undef _PLAYBACK_ /* */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#undef _USER_INIT_ /* */
#undef _LABVIEW_ /* */
#undef _USER_DLL_ /* */
#define _PLAYBACK_ /* */
#undef INCLUDE_VME_1553 /* */
#define INCLUDE_PCCD /* */
#include <unistd.h> /* */
#include <string.h> /* */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
int linux_irq_setup(unsigned int,int,int);/* */
#endif /* end _LINUX_X86_ */
/************************************************************************************/
/************************************************************************************
* Target defines for Linux running for the PCI-1553, PMC-1553 and the cPCI-1553. *
* Also use this for the PCI-1553-IP. */
/************************************************************************************/
#if defined(_LINUX_X86_VME_) /* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _LINUXVMEBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#undef HW_INTERRUPTS /* Exclude HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#undef _USER_INIT_ /* */
#undef _LABVIEW_ /* */
#undef _USER_DLL_ /* */
#undef _PLAYBACK_ /* */
#define INCLUDE_VME_1553/* */
#undef INCLUDE_PCCD /* */
#include <unistd.h> /* */
#include <string.h> /* */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
int linux_irq_setup(unsigned int,int,int);/* */
#endif /* end _LINUX_X86_ */
/************************************************************************************/
/************************************************************************************
* Target defines for Solaris SPARC running for the PCI-1553, PMC-1553 and the *
* cPCI-1553. */
/************************************************************************************/
#if defined(_SOLARIS_SPARC_)/* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _SOLARISBOARDSETUP/* */
#undef INCLUDE_IP_1553 /* Exclude IP-1553 support */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* */
#undef _PLAYBACK_ /* */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
#endif /* end _SOLARIS_SPARC_ */
/************************************************************************************/
/************************************************************************************
* Target defines for Solaris SPARC running for the PCI-1553, PMC-1553 and the *
* cPCI-1553. FORTE COMPILER (NATIVE SUN) */
/************************************************************************************/
#if defined(_SOLARIS_FORTE_)/* */
#pragma pack(2) /* Two byte alignment */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _FORTE_ /* Using FORTE compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _SOLARISBOARDSETUP/* */
#undef INCLUDE_IP_1553 /* Exclude IP-1553 support */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
#endif /* end _SOLARIS_SPARC_ */
/************************************************************************************/
/************************************************************************************
* Target defines for Solaris x86 running for the PCI-1553, PMC-1553 and the *
* cPCI-1553. */
/************************************************************************************/
#if defined(_SOLARIS_X86_)/* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#include <pthread.h> /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _SOLARISBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
#endif /* end _SOLARIS_X86_ */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks x86 BSP for the PCI-1553, PMC-1553 and the cPCI-1553. *
* Also use this for the PCI-1553-IP. *
************************************************************************************/
#if defined (VXW_PCI_X86) || defined (VXW_QPCI_X86) || defined (VXW_QCP_X86) || defined (VXW_Q104_X86)
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _X86BOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#undef REGISTERFUNCTION /* */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef INCLUDE_IP_1553 /* */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) taskDelay(p1/10+1) /* define the Sleep function */
#endif /* end VXW-PCI-X86 */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks x86 BSP for the VME-1553 and VME-1553-IP. *
************************************************************************************/
#if defined (VXW_VME_X86) /* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _VMEBOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define INCLUDE_IP_1553 /* */
#define INCLUDE_VME_1553/* */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) taskDelay(p1/10+1) /* define the Sleep function */
#endif /* end VXW-PCI-X86 */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks PowerPC BSP for the VME-1553 and *
* VME-1553-IP on either the ACROMAG or GreenSpring carrier. */
/************************************************************************************/
#if defined (VXW_VME_PPC) /* For use with MVME-2xxx and related processor with the */
#define _UNIX_ /* VME Bus. */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _VMEBOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#define INCLUDE_VME_1553/* Include the support for the VME-1553 */
#define INCLUDE_IP_1553/* Include the support for the VME-1553 */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) sysUsDelay(p1*1000) /* Define the Sleep function */
#endif /* end VXW-VME-PPC */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks PowerPC BSP for the VME-1553 and *
* VME-1553-IP on either the ACROMAG or GreenSpring carrier. */
/************************************************************************************/
#if defined (INTEGRITY_VME_PPC) /* For use with PPC and related processor with the */
#define _UNIX_ /* VME Bus. */
#undef _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _VMEBOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#undef HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#define INCLUDE_VME_1553/* Include the support for the VME-1553 */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define the Sleep function */
#endif /* end VXW-VME-PPC */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks PowerPC BSP for the VME-1553 and *
* VME-1553-IP on either the ACROMAG or GreenSpring carrier. */
/************************************************************************************/
#if defined (VXW_VME_SYNERGY) /* For use with Synergy PowerPC processor with the */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _VMEBOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#define INCLUDE_VME_1553/* Include the support for the VME-1553 */
#define INCLUDE_IP_1553/* Include the support for the VME-1553 */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) taskDelay(p1/10+1) /* Define the Sleep function */
#endif /* end VXW-VME-PPC */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks Motorola 68K BSP for the VME-1553 and *
* VME-1553-IP on either the ARCROMAG or GreenSpring carrier. */
/************************************************************************************/
#if defined (VXW_VME_68K) /* Use for Motorola 68K with VMEbus */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _VMEBOARDSETUP /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#undef HW_INTERRUPTS /* Exclude HW interrupt code */
#undef REGISTERFUNCTION /* Exclude Register Function interrupts */
#undef _WIN16_INTERRUPTS_/* Exclude Windowss 3.1 interrupts */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define INCLUDE_VME_1553/* Include the support for the VME-1553 */
#define INCLUDE_IP_1553 /* Include the support for the VME-1553 */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) taskDelay(p1/10+1) /* Define the Sleep function */
#endif /* end VXW-VME-68K */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks PowerPC or QPMC-1553 PMC-1553 or cPCI-1553 *
/************************************************************************************/
#if defined(VXW_PCI_PPC) || defined (VXW_PCI_THALES) /* */
#ifndef VXW_PCI_PPC /* */
#define VXW_PCI_PPC /* */
#endif /* */
#define _UNIX_ /* For use with the PMC or PCI bus */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _PCIBOARDSETUP /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VME_1553 /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#define WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) sysUsDelay(p1*1000) /* Define the Sleep function */
#endif /* end VXW-PCI-PPC or VXW_PCI_THALES */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks for MCP-750 QcP-1553 *
/************************************************************************************/
#if defined(VXW_MCP750_PPC) /* Use this for the MCP-750 */
#define VXW_PCI_PPC /* */
#define _UNIX_ /* For use with the PMC or PCI bus */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _PCIBOARDSETUP /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VME_1553 /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#define WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) sysMsDelay(p1) /* Define the Sleep function */
#endif /* end VXW_MCP750_PPC */
/************************************************************************************/
/************************************************************************************
* Target Defines for VxWorks for MCP-750 QcP-1553 *
/************************************************************************************/
#if defined(VXW_DY4_PCI_PPC) /* Use this for the Dy4 PowerPC */
#define VXW_PCI_PPC /* */
#define _UNIX_ /* For use with the PMC or PCI bus */
#define _GCC_ /* Using GCC compiler */
#define VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _PCIBOARDSETUP /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VME_1553 /* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#undef HW_INTERRUPTS /* Exclude HW interrupt code */
#undef FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#define WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) taskDelay(p1/10+1) /* Define the Sleep function */
#endif /* end VXW_DY4_PCI_PPC */
/************************************************************************************/
/************************************************************************************
* Target defines for QNX Neutrino for the PCI *
* */
/************************************************************************************/
#if defined(_QNXNTO_PCI_X86_) /* */
#define _QNXNTO_ /* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _LINUXBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#define HW_INTERRUPTS /* Include HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#undef _USER_INIT_ /* */
#undef _LABVIEW_ /* */
#undef _USER_DLL_ /* */
#undef _PLAYBACK_ /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VME_1553 /* */
#include <unistd.h> /* */
#include <string.h> /* */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
int linux_irq_setup(unsigned int,int,int);/* */
#endif /* end _QNXNTO_ */
/************************************************************************************/
/************************************************************************************
* Target defines for QNX Neutrino for the QPMC-1553 on PowerPC *
* */
/************************************************************************************/
#if defined(_QNXNTO_PCI_PPC_) /* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _QNXNTO_ /* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _LINUXBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#define HW_INTERRUPTS /* Include HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Non Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Non Intel Word Ordering (Little Endian) */
#define WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#undef _USER_INIT_ /* */
#undef _LABVIEW_ /* */
#undef _USER_DLL_ /* */
#undef _PLAYBACK_ /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VME_1553 /* */
#include <unistd.h> /* */
#include <string.h> /* */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
int linux_irq_setup(unsigned int,int,int);/* */
#endif /* end _QNXNTO_PCI_PPC_ */
/************************************************************************************/
/************************************************************************************
* Target defines for QNX Neutrino for the QPMC-1553 on PowerPC *
* */
/************************************************************************************/
#if defined(_QNXNTO_VME_PPC_) /* */
#define _QNXNTO_ /* */
#include <pthread.h> /* pthread for H/W Interrupts */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#undef _Windows /* */
#undef __WIN32__ /* */
#define _LINUXBOARDSETUP/* */
#undef INCLUDE_VMIC /* 32-bit Windows code supports the VMIC VME */
#define REGISTERFUNCTION/* Use the RegisterFunction Interrupt Handling */
#define HW_INTERRUPTS /* Include HW interrupt code */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define NON_INTEL_BIT_FIELDS /* Non Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Non Intel Word Ordering (Little Endian) */
#undef WORD_SWAP /* define the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#undef _USER_INIT_ /* */
#undef _LABVIEW_ /* */
#undef _USER_DLL_ /* */
#define _PLAYBACK_ /* */
#undef INCLUDE_IP_1553 /* */
#define INCLUDE_VME_1553/* */
#include <unistd.h> /* */
#include <string.h> /* */
#define Sleep(p1) usleep(p1*1000) /* Define Sleep marcro */
#undef _PLAYBACK_ /* */
int linux_irq_setup(unsigned int,int,int);/* */
#endif /* end _QNXNTO_VME_PPC_ */
/************************************************************************************/
/************************************************************************************
* Target Defines on LynxOS PowerPC for the QVME-1553 and VME-1553 */
/************************************************************************************/
#if defined(LYNXOS_VME_PPC) /* */
#define LYNXOS /* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define INCLUDE_VME_1553 /* */
#define REGISTERFUNCTION /* Include/Exclude Register Function interrupts */
#define HW_INTERRUPTS /* Include/Exclude HW interrupt code */
#define _LYNXOSBOARDSETUP /* */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VMIC /* */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef WORD_SWAP /* undefine the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define the Sleep function */
#include <pthread.h> /* pthread for H/W Interrupts */
#endif /* end (LYNXOS_VME_PPC) */
/************************************************************************************/
/************************************************************************************
* Target Defines on LynxOS PowerPC for the QPMC-1553 and PMC-1553 */
/************************************************************************************/
#if defined(LYNXOS_PMC_PPC) /* */
#define LYNXOS /* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define REGISTERFUNCTION /* Include/Exclude Register Function interrupts */
#define HW_INTERRUPTS /* Include/Exclude HW interrupt code */
#define _LYNXOSBOARDSETUP /* */
#define NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#define NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef INCLUDE_VME_1553 /* */
#undef VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VMIC /* */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#define WORD_SWAP /* undefine the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define the Sleep function */
#include <pthread.h> /* pthread for H/W Interrupts */
#endif /* end (LYNXOS_PMC_PPC) */
/************************************************************************************/
/************************************************************************************
* Target Defines on LynxOS x86 for the Q104-1553P, QPCI-1553, and PCI-1553 */
/************************************************************************************/
#if defined(LYNXOS_X86) /* */
#define LYNXOS /* */
#define _UNIX_ /* */
#define _GCC_ /* Using GCC compiler */
#define REGISTERFUNCTION /* Include/Exclude Register Function interrupts */
#define HW_INTERRUPTS /* Include/Exclude HW interrupt code */
#define _LYNXOSBOARDSETUP /* */
#define FILE_SYSTEM /* Include Dump and memory test output functions */
#undef INCLUDE_VME_1553 /* */
#undef NON_INTEL_BIT_FIELDS /* Intel Bit Ordering */
#undef NON_INTEL_WORD_ORDER /* Intel Word Ordering (Little Endian) */
#undef VXWORKS /* */
#undef _Windows /* */
#undef __WIN32__ /* */
#undef INCLUDE_IP_1553 /* */
#undef INCLUDE_VMIC /* */
#undef DEMO_CODE /* Exclude the DEMO version of the API */
#undef WORD_SWAP /* undefine the flipw macro */
#undef ADD_TRACE /* Exclude the function call trace code */
#undef DO_BUS_LOADING /* Exclude the bus loading code */
#define Sleep(p1) usleep(p1*1000) /* Define the Sleep function */
#include <pthread.h> /* pthread for H/W Interrupts */
#endif /* end (LYNXOS_X86) */
/************************************************************************************/
/************************************************************************************
* CVI use the __WIN32__ Block above. These are modifications to that block to *
* allow CVI to compile. *
*************************************************************************************/
#if defined(_CVI_)
#define NO_ASSEMBLY
#undef ADD_TRACE
#define HW_INTERRUPTS
#define REGISTERFUNCTION
#undef _WIN16_INTERRUPTS_
#undef _INTERRUPTS
#undef _USER_DLL_
#define _PLAYBACK_
#undef INCLUDE_VMIC
#undef _USER_INIT_
#define __int64 double long
#endif
/***********************************************************************************/
#if defined(__BORLANDC__) || defined(_UNIX_)
#define _ftime ftime
#define _timeb timeb
#endif
#if defined(__BORLANDC__)
#undef PRAGMA_PACK
#pragma pack(2)
#endif
/************************************************************************
* Create the standard WINDOWS typedef's if compiling for _UNIX_.
************************************************************************/
#ifdef _UNIX_
#ifdef _GCC_
#define PACKED __attribute__ ((aligned(2),packed)) /* GCC Compiler Only */
#else
#define PACKED
#endif
#define INFINITE 0
#define NO_ASSEMBLY
#define HANDLE int
#define THREAD_PRIORITY_NORMAL 0
#define THREAD_PRIORITY_BELOW_NORMAL 0
#define THREAD_PRIORITY_CRITICAL 0
#define LocalMalloc malloc
#define LocalFree free
typedef unsigned short WORD;
typedef unsigned long DWORD;
#ifndef VXWORKS
typedef unsigned int UINT;
#endif
typedef int HWND;
typedef char * LPSTR;
typedef int * LPINT;
typedef WORD * LPWORD;
typedef long * LPLONG;
typedef DWORD * LPDWORD;
typedef void * LPVOID;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define VOID void
#define CALLBACK
#define _stdcall
#define CCONV
#define NOMANGLE
#if defined (VXWORKS) | defined (_SOLARIS_SPARC_) | defined (_SOLARIS_X86_) || defined (_SOLARIS_FORTE_) || defined(_QNXNTO_)
#define __int64 long long
#define __uint64 unsigned long long
#else
#define __int64 int64_t // Is this a long long?
#define __uint64 u_int64_t
#endif
extern DWORD timeGetTime();
#define LARGE_INTEGER __int64
#undef PRAGMA_PACK
#endif
#ifdef DEMO_CODE
#ifdef __WIN32__
#define MY_GlobalAllocPtr(a,b) GlobalAlloc(a,b)
#define MY_GlobalFreePtr(a) GlobalFree(a)
#else
#define MY_GlobalAllocPtr(a,b) malloc(b)
#define MY_GlobalFreePtr(a) free(a)
#endif
#endif
/**********************************************************************
* Record the build options for the resource file:
**********************************************************************/
#if defined(HW_INTERRUPTS)
#define BUILD_OPTIONS_INT "Hardware Interrupts"
#else
#define BUILD_OPTIONS_INT "No HW Interrupts"
#endif
#if defined(ADD_TRACE) && defined(FILE_SYSTEM)
#define BUILD_OPTIONS "TRACE and DUMP enabled"
#elif defined(FILE_SYSTEM)
#define BUILD_OPTIONS "DUMP enabled, TRACE disabled"
#elif defined(ADD_TRACE)
#define BUILD_OPTIONS "Diagnostic TRACE enabled, DUMP disabled"
#else
#define BUILD_OPTIONS "No Trace or Dump enabled"
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

392
src/main/c/ZLGJNA.c Normal file
View File

@@ -0,0 +1,392 @@
#include <windows.h>
#include <stdio.h>
#include "zlgcan/x64/zlgcan/zlgcan.h"
// 用extern "C"包裹所有导出函数C++编译器需要C编译器也兼容
#ifdef __cplusplus
extern "C" {
#endif
// 在DLL初始化时打开日志文件
FILE* logFile = NULL;
// 可选在DLL加载时初始化日志文件
__declspec(dllexport) void initLog() {
logFile = fopen("d:\\dll_log.txt", "w");
if (logFile == NULL) {
// 打开失败时仍用stdout
logFile = stdout;
}
}
//打开设备
__declspec(dllexport) DEVICE_HANDLE openDevice(int device_type, int device_index){
DEVICE_HANDLE dhandle = ZCAN_OpenDevice(device_type, device_index, 0);
if (INVALID_DEVICE_HANDLE == dhandle){
//打开设备失败
return 0;
}else{
//打开设备成功
return dhandle;
}
}
/**
* 关闭设备
*/
__declspec(dllexport) int closeDevice(DEVICE_HANDLE device_handle){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 输出到文件
fprintf(logFile, "关闭传入的句柄: %p\n", device_handle);
fflush(logFile); // 刷新文件
ZCAN_RET_STATUS result = ZCAN_CloseDevice( device_handle);
return result;
}
/**
* 获取设备信息
*/
__declspec(dllexport) int getDeviceInfo(DEVICE_HANDLE device_handle, ZCAN_DEVICE_INFO* pInfo) {
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 输出到文件
fprintf(logFile, "device_handle: %p\n", device_handle);
ZCAN_RET_STATUS result = ZCAN_GetDeviceInf(device_handle, pInfo);
// 打印模拟信息(验证数据)
fprintf(logFile,"=== 模拟设备信息 ===\n");
fprintf(logFile,"硬件版本: 0x%X\n", pInfo->hw_Version);
fprintf(logFile,"固件版本: 0x%X\n", pInfo->fw_Version);
fprintf(logFile,"序列号: %s\n", pInfo->str_Serial_Num);
fprintf(logFile,"硬件类型: %s\n", pInfo->str_hw_Type);
fprintf(logFile,"===================\n");
fprintf(logFile, "ZCAN_GetDeviceInf返回值: %d\n", 0);
fflush(logFile);
return result;
}
/**
* 该函数用于检测设备是否在线仅支持USB系列设备。
* #define STATUS_ONLINE 2
* #define STATUS_OFFLINE 3
*/
__declspec(dllexport) int isDeviceOnLine(DEVICE_HANDLE device_handle) {
ZCAN_RET_STATUS result = ZCAN_IsDeviceOnLine( device_handle);
return result;
}
/**
* 该函数设置设备属性。
* STATUS_OK 表示设置成功STATUS_ERR表示设置失败。
*/
__declspec(dllexport) int setValue(DEVICE_HANDLE device_handle,char* path,const void* value) {
ZCAN_RET_STATUS result = ZCAN_SetValue( device_handle, path, value);
return result;
}
__declspec(dllexport) const void* getValue(DEVICE_HANDLE device_handle,char* path) {
const void* result = ZCAN_GetValue( device_handle, path);
return result;
}
/**
* 该函数用于初始化CAN。
*/
__declspec(dllexport) CHANNEL_HANDLE initCAN(DEVICE_HANDLE device_handle, UINT can_index, ZCAN_CHANNEL_INIT_CONFIG* pInitConfig) {
CHANNEL_HANDLE result = ZCAN_InitCAN( device_handle, can_index, pInitConfig);
return result;
}
/**
* 该函数用于初始化CAN。
*/
__declspec(dllexport) CHANNEL_HANDLE initCAN_v2(DEVICE_HANDLE device_handle, UINT can_index,BYTE mode) {
// 初始化通道
ZCAN_CHANNEL_INIT_CONFIG config; // 通道结构体
memset(&config, 0, sizeof(config));
config.can_type = 1; // 1 = CANFDCANFD设备必须是初始化CANFD!!
config.canfd.mode = mode; // 0-正常模式1-只听模式
CHANNEL_HANDLE result = ZCAN_InitCAN( device_handle, can_index, &config);
return result;
}
/**
* 该函数用于启动CAN通道。
*/
__declspec(dllexport) int startCan(CHANNEL_HANDLE channel_handle){
ZCAN_RET_STATUS result = ZCAN_StartCAN( channel_handle);
return result;
}
/**
*该函数用于复位CAN通道可通过ZCAN_StartCAN恢复
*/
__declspec(dllexport) int resetCan(CHANNEL_HANDLE channel_handle){
ZCAN_RET_STATUS result = ZCAN_ResetCAN( channel_handle);
return result;
}
// 发送CAN FD数据
__declspec(dllexport) int transmitFD(CHANNEL_HANDLE channel_handle, ZCAN_TransmitFD_Data* pTransmit, int len ){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 输出到文件
fprintf(logFile, "channel_handle: %p\n", channel_handle);
// 打印模拟信息(验证数据)
fprintf(logFile,"=== 发送信息 ===\n");
fprintf(logFile,"transmit_type: %d\n", pTransmit->transmit_type);
fprintf(logFile,"can_id: 0x%X\n", pTransmit->frame.can_id);
fprintf(logFile,"数据长度: 0x%X\n", pTransmit->frame.len);
// 写入数据内容16进制格式每行8字节
fprintf(logFile, " 数据内容: ");
for (int i = 0; i < pTransmit->frame.len; i++) {
fprintf(logFile, "%02X ", pTransmit->frame.data[i]);
if ((i + 1) % 8 == 0) { // 每行8字节方便查看
fprintf(logFile, "\n ");
}
}
fprintf(logFile, "\n----------------------------------------\n");
ZCAN_RET_STATUS result = ZCAN_TransmitFD( channel_handle, pTransmit, len);
fprintf(logFile, "ZCAN_GetDeviceInf返回值: %d\n",result);
fflush(logFile);
return result;
}
// 发送CAN FD数据
__declspec(dllexport) int transmitFD_V2(CHANNEL_HANDLE channel_handle, int id, int len , byte* dataBuffer ){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
fprintf(logFile, "\n----------------------------------------\n");
ZCAN_TransmitFD_Data canfdData;
memset(&canfdData, 0, sizeof(canfdData));
canfdData.frame.can_id = id;
canfdData.frame.len = len; // 数据长度
canfdData.transmit_type = 0; // 正常发送
canfdData.frame.flags |= CANFD_BRS; // CANFD加速 0x1
// canfd_data.frame.flags |= TX_ECHO_FLAG; // 发送回显 0x20
for (int i = 0; i < len; ++i) {
canfdData.frame.data[i] = *(dataBuffer++);
}
ZCAN_RET_STATUS result = ZCAN_TransmitFD(channel_handle, &canfdData, 1);
fprintf(logFile, "transmitFD_V2成功条数: %d\n",result);
fflush(logFile);
return result;
}
//
//__declspec(dllexport) int transmitMerge(CHANNEL_HANDLE channel_handle, bool is_fd, int id, int len , byte* dataBuffer){
// ZCANDataObj data;
// memset(&data, 0, sizeof(data));
// data.dataType = ZCAN_DT_ZCAN_CAN_CANFD_DATA;
// if (logFile == NULL) {
// initLog(); // 确保日志文件已打开
// }
//
// int chn_idx = (unsigned int)channel_handle & 0x000000FF; // 通道号
// data.chnl = chn_idx;
// // 输出到文件
// fprintf(logFile, "chn_idx: %d\n", chn_idx);
// ZCANCANFDData can_data = data.data.zcanCANFDData;
// //can_data.frame.can_id = MAKE_CAN_ID(id, 0, 0, 0);
// can_data.frame.can_id = id;
// can_data.frame.len = len;
// can_data.flag.unionVal.transmitType = 0; // 正常发送
// // can_data.flag.unionVal.txEchoRequest = 1; // 设置发送回显
// can_data.flag.unionVal.frameType = is_fd ? 1 : 0;
// can_data.flag.unionVal.txDelay = ZCAN_TX_DELAY_UNIT_MS; // 队列发送延时单位 ms
// can_data.timeStamp = 0; // 队列延时时间,最大值 65535
// for (int i = 0; i < can_data.frame.len; i++){
// can_data.frame.data[i] = *(dataBuffer++);
// }
// fprintf(logFile,"=== 发送信息 ===\n");
//
//
// fprintf(logFile,"can_id: 0x%X\n", can_data.frame.can_id);
// fprintf(logFile,"数据长度: 0x%X\n", can_data.frame.len);
//
// fprintf(logFile, " 数据内容: ");
// for (int i = 0; i < can_data.frame.len; i++) {
// fprintf(logFile, "%02X ", can_data.frame.data[i]);
// if ((i + 1) % 8 == 0) { // 每行8字节方便查看
// fprintf(logFile, "\n ");
// }
// }
// fprintf(logFile, "\n----------------------------------------\n");
// int ret_count = ZCAN_TransmitData(channel_handle, &data, 1);
// fprintf(logFile, "transmitMerge成功条数: %d\n",ret_count);
// return ret_count;
//}
// 发送CAN数据
__declspec(dllexport) int transmit(CHANNEL_HANDLE channel_handle, ZCAN_Transmit_Data* pTransmit, int len) {
// 1. 参数合法性检查
if (channel_handle == NULL || pTransmit == NULL || len <= 0) {
// 记录无效参数错误(即使日志未初始化也输出到控制台)
fprintf(stderr, "错误:无效参数 - channel_handle=%p, pTransmit=%p, len=%d\n",
channel_handle, pTransmit, len);
return -1; // 返回错误码
}
// 2. 确保日志初始化
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 3. 日志输出(支持多帧发送)
for (int frameIdx = 0; frameIdx < len; frameIdx++) {
ZCAN_Transmit_Data* frame = &pTransmit[frameIdx]; // 当前帧
// 输出通道信息和帧序号
if (logFile != NULL) {
fprintf(logFile, "===== 通道句柄: %p 第%d/%d帧 =====",
channel_handle, frameIdx + 1, len);
} else {
printf("===== 通道句柄: %p 第%d/%d帧 =====\n",
channel_handle, frameIdx + 1, len);
}
// 基本信息日志
if (logFile != NULL) {
fprintf(logFile, "\n=== 发送信息 ===\n");
fprintf(logFile, "transmit_type: %d (", frame->transmit_type);
// 根据transmit_type添加文字说明示例
switch (frame->transmit_type) {
case 0: fprintf(logFile, "正常发送"); break;
case 1: fprintf(logFile, "单次发送"); break;
case 2: fprintf(logFile, "循环发送"); break;
default: fprintf(logFile, "未知类型");
}
fprintf(logFile, ")\n");
// 解析CAN ID类型标准帧/扩展帧)
fprintf(logFile, "can_id: 0x%X (", frame->frame.can_id);
if (frame->frame.can_id & CAN_EFF_FLAG) {
fprintf(logFile, "扩展帧)");
} else {
fprintf(logFile, "标准帧)");
}
fprintf(logFile, "\n");
// 数据长度(十进制+十六进制)
fprintf(logFile, "数据长度: %d字节 (0x%X)\n",
frame->frame.can_dlc, frame->frame.can_dlc);
// 数据内容16进制每行8字节
fprintf(logFile, "数据内容: ");
for (int i = 0; i < frame->frame.can_dlc; i++) {
fprintf(logFile, "%02X ", frame->frame.data[i]);
if ((i + 1) % 8 == 0 && i != frame->frame.can_dlc - 1) {
fprintf(logFile, "\n ");
}
}
fprintf(logFile, "\n----------------------------------------\n");
}
}
// 4. 执行发送操作
ZCAN_RET_STATUS result = ZCAN_Transmit(channel_handle, pTransmit, len);
if (logFile != NULL) {
fprintf(logFile, "ZCAN_Transmit 成功发送发送条数: %d\n", result);
fflush(logFile); // 强制刷新日志
} else {
printf("ZCAN_Transmit 成功发送发送条数: %d (%s)\n", result);
}
return result;
}
/**
* 接收can_fd数据函数映射
*
*/
__declspec(dllexport) int receiveFD(CHANNEL_HANDLE channel_handle, ZCAN_ReceiveFD_Data* pReceive, int len, int timeout ){
ZCAN_RET_STATUS result = ZCAN_ReceiveFD( channel_handle, pReceive, len, timeout);
return result;
}
/**
* 接收can数据函数映射
*/
__declspec(dllexport) int receive(CHANNEL_HANDLE channel_handle, ZCAN_Receive_Data* pReceive, int len, int timeout ){
ZCAN_RET_STATUS result = ZCAN_Receive( channel_handle, pReceive, len, timeout);
return result;
}
/**
* 查看结束数据数量
* type 0=CAN1=CANFD2=合并接收。设
*/
__declspec(dllexport) int getReceiveNum(CHANNEL_HANDLE channel_handle, BYTE type ){
UINT dataNumber = ZCAN_GetReceiveNum( channel_handle, type);
return dataNumber;
}
// 导出字符串函数:返回欢迎信息
// __declspec(dllexport) char* getHelloMsg(char* name) {
// static char msg[100]; // 静态数组,避免栈内存释放导致乱码
// DEVICE_HANDLE dhandle = ZCAN_OpenDevice(ZCAN_USBCANFD_200U, 0, 0);
// if (INVALID_DEVICE_HANDLE == dhandle){
// sprintf(msg, "open device fail %s", name);
// }else{
// sprintf(msg, "open device success %s", name);
// }
// // sprintf(msg, "Hello, %s! (From GCC-compiled DLL)", name);
// return msg;
// }
//请在src/main/c 目录执行编译
//gcc -shared -fPIC -m64 -IC:/jdk-17.0.16/include -IC:/jdk-17.0.16/include/win32 -L ./zlgcan/x64 -lzlgcan ZLGJNA.c -o ../resources/native/zlgjna.dll
//gcc -shared -fPIC -m64 -L ./zlgcan/x64 -lzlgcan ZLGJNA.c -o ../resources/native/zlgcan/x64/java_zlgjna.dll
#ifdef __cplusplus
}
#endif

332
src/main/c/artdaqs.c Normal file
View File

@@ -0,0 +1,332 @@
#include <windows.h>
#include <stdio.h>
#include "artdaqs/Art_DAQ.h"
// 用extern "C"包裹所有导出函数C++编译器需要C编译器也兼容
#ifdef __cplusplus
extern "C" {
#endif
// 在DLL初始化时打开日志文件
FILE* logFile = NULL;
// 可选在DLL加载时初始化日志文件
__declspec(dllexport) void initLog() {
logFile = fopen("d:\\dll_log.txt", "w");
if (logFile == NULL) {
// 打开失败时仍用stdout
logFile = stdout;
}
}
//创建数据采集任务。
//数据采集任务是一项数据采集工作所需所有软硬件资源的集合。
__declspec(dllexport) int __stdcall createTask(const char taskName[], TaskHandle *taskHandle){
// 1. 先初始化为 NULL 或 0
// TaskHandle local = NULL; // 推荐使用 NULL更符合句柄的空值语义
int32 result =ArtDAQ_CreateTask (taskName, taskHandle);
// *taskHandle=local;
return result;
}
//启动任务。任务启动之后将执行之前对任务所有的配置除非遇到配置中的停止条件或者调用stopTask。
__declspec(dllexport) int __stdcall startTask( TaskHandle *taskHandle){
int32 result =ArtDAQ_StartTask (taskHandle );
return result;
}
// 停止任务。任务停止之后将不再执行之前对任务的配置。
__declspec(dllexport) int __stdcall stopTask( TaskHandle *taskHandle){
int32 result =ArtDAQ_StopTask (taskHandle );
return result;
}
//清空任务在完成所有任务的功能之后,退出程序之前,应该清空任务。执行该动作会释放所有任务所占用的资源。
__declspec(dllexport) int __stdcall clearTask( TaskHandle *taskHandle){
int32 result =ArtDAQ_ClearTask(taskHandle );
return result;
}
//根据您指定的操作更改任务的状态。 例如为了最小化启动任务所需的时间ArtDAQ_TaskControl 可以在启动之前提交任务。
/**
*指定如何更改任务状态。
* 参考值如下:
* #define ArtDAQ_Val_Task_Start 0 // Start 开始执行任务;
* #define ArtDAQ_Val_Task_Stop 1 // Stop 停止任务执行;
* #define ArtDAQ_Val_Task_Verify 2 // Verify 验证所有任务参数对硬件是否有效;
* #define ArtDAQ_Val_Task_Commit 3 // Commit 根据任务配置对硬件进行编程;
* #define ArtDAQ_Val_Task_Reserve 4 // Reserve 保留任务所需的硬件资源。 没有其他任务可以保留这些相同的资源;
* #define ArtDAQ_Val_Task_Unreserve 5 // Unreserve 释放所有以前保留的资源;
* #define ArtDAQ_Val_Task_Abort 6 // Abort 中止用于停止当前处于活动状态的操作,例如读取或写入。 Abort 将任务置于不稳定但可恢复的状态。 要恢复任务,请调用 Start 重新启动任务或调用 Stop 重置任务而不启动它;
*/
__declspec(dllexport) int __stdcall taskControl( TaskHandle *taskHandle,int32 action){
int32 result =ArtDAQ_TaskControl(taskHandle ,action);
return result;
}
//获取任务属性。
__declspec(dllexport) int __stdcall getTaskAttribute( TaskHandle taskHandle, int32 attributeType, void* attribute, int32 size){
int32 result =ArtDAQ_GetTaskAttribute(taskHandle ,attributeType,attribute,size);
return result;
}
//加载任务名称。
//加载阿尔泰设备管理器服务中存在的任务名称。
__declspec(dllexport) int __stdcall loadTask(const char taskName[], TaskHandle *taskHandle){
TaskHandle *local = (TaskHandle *)malloc(sizeof(TaskHandle));
int32 result =ArtDAQ_LoadTask (taskName, local);
taskHandle=local;
return result;
}
//等待任务完成
//taskHandle 任务句柄。
//timeToWait 等待的时间,单位秒。
__declspec(dllexport) int __stdcall waitUntilTaskDone( TaskHandle *taskHandle,float64 timeToWait){
int32 result =ArtDAQ_WaitUntilTaskDone(taskHandle, timeToWait);
return result;
}
//任务是否完成。
__declspec(dllexport) int __stdcall isTaskDone( TaskHandle *taskHandle, bool32 *isTaskDone){
int32 result =ArtDAQ_IsTaskDone(taskHandle, isTaskDone);
return result;
}
/**
*设置通道的终端配置。
*taskHandle 任务句柄。
*channel 通道。
*data 终端配置。
*参考值如下:
* ArtDAQ_Val_RSE10083 参考单端。
* ArtDAQ_Val_NRSE10078 非参考单端。
* ArtDAQ_Val_Diff10106 差分。
* ArtDAQ_Val_PseudoDiff12529 非差分。
*/
__declspec(dllexport) int __stdcall setAITermCfg(TaskHandle taskHandle, const char channel[], int32 data){
int32 result = ArtDAQ_SetAITermCfg( taskHandle, channel, data);
return result;
}
/**
*创建AO电压通道。
*physicalChannel 物理通道,进行采集或生成任务的物理通道名称。 命名格式如下设备名/ao0。ao0为物理通道详见物理通道语法。
*nameToAssignToChannel 分配名称。
*minVal 指定需要测量的最小值。
*maxVal 指定需要测量的最大值。
*units 单位默认单位为V伏特 默认值ArtDAQ_Val_Volts。
*customScaleName 通道的自定义换算名称。
*/
__declspec(dllexport) int __stdcall createAOVoltageChan( TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, const char customScaleName[]){
int32 result =ArtDAQ_CreateAOVoltageChan( taskHandle, physicalChannel, nameToAssignToChannel, minVal, maxVal, ArtDAQ_Val_Volts, customScaleName);
return result;
}
/**
*创建AI电压通道。
*physicalChannel 物理通道,进行采集或生成任务的物理通道名称。 命名格式如下设备名/ao0。ao0为物理通道详见物理通道语法。
*nameToAssignToChannel 分配名称。
*terminalConfig 接线端配置,指定通道的输入接线端配置; 参考值如下ArtDAQ_Val_Cfg_DefaultArtDAQ_Val_RSEArtDAQ_Val_NRSEArtDAQ_Val_DiffArtDAQ_Val_PseudoDiff。
*minVal 指定需要测量的最小值。
*maxVal 指定需要测量的最大值。
*units 单位默认单位为V伏特 默认值ArtDAQ_Val_Volts。
*customScaleName 通道的自定义换算名称。
*/
__declspec(dllexport) int __stdcall createAIVoltageChan(TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, const char customScaleName[]){
if (logFile == NULL) {
initLog(); // 确保日志文件已打开
}
// 输出到文件
fprintf(logFile, "taskHandle: %p\n", taskHandle);
fprintf(logFile, "physicalChannel: %s\n", physicalChannel);
fprintf(logFile, "nameToAssignToChannel: %s\n", nameToAssignToChannel);
fprintf(logFile, "terminalConfig: %d\n", terminalConfig);
fprintf(logFile, "minVal: %f\n", minVal);
fprintf(logFile, "maxVal: %f\n", maxVal);
fprintf(logFile, "customScaleName: %s\n", customScaleName);
fflush(logFile);
int32 result =ArtDAQ_CreateAIVoltageChan( taskHandle, physicalChannel, nameToAssignToChannel, terminalConfig, minVal, maxVal, ArtDAQ_Val_Volts, customScaleName);
return result;
}
/**
*创建数字量输入通道。
* lines 物理通道描述,设定该虚拟通道所操作的物理通道。
* 命名格式如下:
* 设备名/port0/line1或 设备名 /port0。详见物理通道语法
* nameToAssignToLines 分配名称。
* lineGrouping 通道的自定义换算名称。
* 线分组,指定将数字线编组为一个或多个通道的方法。
* 参考值如下:
* ArtDAQ_Val_ChanPerLine0 为每个数字线创建一个单独的采集通道;
* ArtDAQ_Val_ChanForAllLines1 在一个采集通道中包含全部使能的数字线。
*/
__declspec(dllexport) int __stdcall createDIChan(TaskHandle taskHandle, const char lines[], const char nameToAssignToLines[], int32 lineGrouping){
int32 result = ArtDAQ_CreateDIChan( taskHandle, lines,nameToAssignToLines, lineGrouping);
return result;
}
/**
*创建生成数字量的通道,可根据线分组的设置,将数字线组合为单个或多个通道。
* lines 物理通道描述,设定该虚拟通道所操作的物理通道。
* 命名格式如下:
* 设备名/port0/line1或 设备名 /port0。详见物理通道语法
* nameToAssignToLines 分配名称。
* lineGrouping 通道的自定义换算名称。
* 线分组,指定将数字线编组为一个或多个通道的方法。
* 参考值如下:
* ArtDAQ_Val_ChanPerLine0 每个数字线创建一个单独的生成通道;
* ArtDAQ_Val_ChanForAllLines1 在一个生成通道中包含全部使能的数字线。
*/
__declspec(dllexport) int __stdcall createDOChan(TaskHandle taskHandle, const char lines[], const char nameToAssignToLines[], int32 lineGrouping){
int32 result = ArtDAQ_CreateDOChan( taskHandle, lines, nameToAssignToLines, lineGrouping);
return result;
}
/**
*向包含一个或多个模拟输出通道的任务写入64位浮点数据。
*taskHandle 任务句柄。
*numSampsPerChan 每个通道要写入的采样点数。
*autoStart 指定如果任务未启动,该函数是否自动启动该任务。
*timeout 超时指写入全部采样的时间以s为单位待到时间还没有完成写入任务将会出现超时错误。
*dataLayout 数据填充模式。
* 参考值如下:
* ArtDAQ_Val_GroupByChannel非交织采样将写入数据按通道排序先将第一个通道的所有写入数据排列在数组中然后是第二个通道的写入数据直到最后一个通道
* ArtDAQ_Val_GroupByScanNumber交织式采样将写入数据按通道排列先将各个通道的第一个写入数据排在数组中然后是各个通道的第二个写入数据直到最后一个数据。
*dataWriteArray 写入数据缓冲区。每个元素对应于通道中的每一个采样。具体数据的顺序对应于交织和非交织的设置。用户需要建立一定大小的内存,不能传入空指针;
*sampsPerChanWritten 实际写入的每通道采样点数。
*reserved 保留。
*/
__declspec(dllexport) int __stdcall writeAnalogF64(TaskHandle taskHandle, int32 numSampsPerChan, bool32 autoStart, float64 timeout, bool32 dataLayout, float64 writeArray[], int32 *sampsPerChanWritten, bool32 *reserved){
int32 result = ArtDAQ_WriteAnalogF64( taskHandle, numSampsPerChan, autoStart, timeout, dataLayout, writeArray, sampsPerChanWritten, reserved);
return result;
}
/**
*从包含一个或多个模拟采集的通道中,读取浮点型的采样数据。
*numSampsPerChan 每个通道要读取的采样点数。默认值-1 (ArtDAQ_Val_Auto)读取所有可用的示例。如果readArray没有包含足够的空间这个函数将返回与readArray匹配的所有样本。 DAQ根据任务是连续获取样本还是有限数量的样本来确定要读取多少样本。如果任务连续获取样本并且将此参数设置为-1则此函数将读取缓冲区中当前可用的所有样本。如果任务获得有限数量的样本并且将此参数设置为-1则该函数将等待任务获取所有请求的样本然后读取这些样本。
*timeout 超时规定等待时间内未能读取到需要读取的数据量则返回错误。如果设置为0则立即返回。如果设置为-1则无限期等待
*fillMode 数据填充模式; 参考值如下:
* ArtDAQ_Val_GroupByChannel非交织采样将采样数据按通道排序先将第一个通道的所有采样数据排列在数组中然后是第二个通道的采样数据直到最后一个通道
* ArtDAQ_Val_GroupByScanNumber交织式采样将采样按通道排列先将各个通道的第一个采样排在数组中然后是各个通道的第二个采样直到最后一个采样
*readArray 存储采样数据的数组数据按fillMode排列。
*arraySizeInSamps readArray的大小。
*sampsPerChanRead 返回每个通道实际读取的采样数据长度。
*reserved 保留参数。
*/
__declspec(dllexport) int __stdcall readAnalogF64(TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, float64 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved){
int32 result =ArtDAQ_ReadAnalogF64( taskHandle, numSampsPerChan, timeout, fillMode, readArray, arraySizeInSamps, sampsPerChanRead,reserved);
return result;
}
/**
*从具有一个或多个数字输入通道的任务中读取多个8位整数样本。对于每个端口最多有8条线的设备可以使用此功能。采样数据以无符号字节格式返回。
*numSampsPerChan 每个通道要读取的采样点数。默认值-1 (ArtDAQ_Val_Auto)读取所有可用的示例。如果readArray没有包含足够的空间这个函数将返回与readArray匹配的所有样本。 DAQ根据任务是连续获取样本还是有限数量的样本来确定要读取多少样本。如果任务连续获取样本并且将此参数设置为-1则此函数将读取缓冲区中当前可用的所有样本。如果任务获得有限数量的样本并且将此参数设置为-1则该函数将等待任务获取所有请求的样本然后读取这些样本。
*timeout 超时规定等待时间内未能读取到需要读取的数据量则返回错误。如果设置为0则立即返回。如果设置为-1则无限期等待
*fillMode 数据填充模式; 参考值如下:
* ArtDAQ_Val_GroupByChannel非交织采样将采样数据按通道排序先将第一个通道的所有采样数据排列在数组中然后是第二个通道的采样数据直到最后一个通道
* ArtDAQ_Val_GroupByScanNumber交织式采样将采样按通道排列先将各个通道的第一个采样排在数组中然后是各个通道的第二个采样直到最后一个采样
*readArray 读取数据缓冲区。每个元素对应于通道中的每一个采样。具体数据的顺序对应于交织和非交织的设置。用户需要建立一定大小的内存,不能传入空指针。
*arraySizeInSamps readArray的大小。
*sampsPerChanRead 返回每个通道实际读取的采样数据长度。
*reserved 保留参数。
*/
__declspec(dllexport) int __stdcall readDigitalU8(TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, uInt8 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved){
int32 result = ArtDAQ_ReadDigitalU8( taskHandle, numSampsPerChan, timeout, fillMode, readArray, arraySizeInSamps, sampsPerChanRead, reserved);
return result;
}
/**
*将多个8位无符号整数数据写入包含一个或多个数字输出通道的任务。对于每个端口最多8线的设备可以使用这种格式。
*taskHandle 任务句柄。
*numSampsPerChan 每个通道要写入的采样点数。
*autoStart 指定如果任务未启动,该函数是否自动启动该任务。
*timeout 超时指写入全部采样的时间以s为单位待到时间还没有完成写入任务将会出现超时错误。
*dataLayout 数据填充模式。
* 参考值如下:
* ArtDAQ_Val_GroupByChannel非交织采样将写入数据按通道排序先将第一个通道的所有写入数据排列在数组中然后是第二个通道的写入数据直到最后一个通道
* ArtDAQ_Val_GroupByScanNumber交织式采样将写入数据按通道排列先将各个通道的第一个写入数据排在数组中然后是各个通道的第二个写入数据直到最后一个数据。
*dataWriteArray 写入数据缓冲区。每个元素对应于通道中的每一个采样。具体数据的顺序对应于交织和非交织的设置。用户需要建立一定大小的内存,不能传入空指针。
*sampsPerChanWritten 实际写入的每通道采样点数。
*reserved 保留。
*/
__declspec(dllexport) int __stdcall writeDigitalU8(TaskHandle taskHandle, int32 numSampsPerChan, bool32 autoStart, float64 timeout, bool32 dataLayout, uInt8 writeArray[], int32 *sampsPerChanWritten, bool32 *reserved){
int32 result = ArtDAQ_WriteDigitalU8( taskHandle, numSampsPerChan, autoStart, timeout, dataLayout, writeArray, sampsPerChanWritten, reserved);
return result;
}
/**
*获取设备的指定参数;
*attributeType 参考值,如下:
* ArtDAQ_Dev_ProductType设备名称 0x0631
* ArtDAQ_Dev_SerialNum设备序列号 0x0632
* ArtDAQ_Dev_AI_PhysicalChans模拟输入的通道数 0x231E
* ArtDAQ_Dev_AI_SampModes模拟输入的采样模式 0x2FDC
* ArtDAQ_PhysicalChan_AI_InputSrcs模拟输入通道中可以用做输入信号源的通道 0x2FD8
* ArtDAQ_Dev_AI_MaxSingleChanRate模拟输入任务中单通道的最大采样频率
* ArtDAQ_Dev_AI_MaxMultiChanRate模拟输入任务中多通道的最大采样频率
* ArtDAQ_Dev_AI_MinRate模拟输入任务中最小采样频率
* ArtDAQ_Dev_AO_PhysicalChans模拟输出的通道数 0x231F
* ArtDAQ_Dev_AO_SampModes模拟输出的采样模式
* ArtDAQ_Dev_AO_MaxRate模拟输出的最大采样频率
* ArtDAQ_Dev_AO_MinRate模拟输出的最小采样频率
* ArtDAQ_Dev_DIO_LinesPerPort数字通道中每个端口包含的线通道数
* ArtDAQ_Dev_DIO_Ports数字通道中端口数
* ArtDAQ_Dev_CI_PhysicalChans计数器输入通道数
* ArtDAQ_Dev_CO_PhysicalChans计数器输出通道数
* ArtDAQ_Dev_CI_SampModes计数器输入的采样模式
* ArtDAQ_Dev_CO_SampModes计数器输出的通道模式
* ArtDAQ_Dev_CI_CountEdges_Term计数器输入的边沿计数端
*/
__declspec(dllexport) int __stdcall getDeviceAttribute(const char deviceName[], int32 attributeType, void* attribute, TaskHandle taskHandle){
int32 result = ArtDAQ_GetDeviceAttribute( deviceName, attributeType, attribute, taskHandle);
return result;
}
/**
*获取系统的指定参数。
*@attributeType 参数类型,参数值参考设备属性。
*@attribute 根据设置的参数类型,返回相应的查询结果。
*@ bufferSize 缓冲区大小。
*/
__declspec(dllexport) int __stdcall getSystemAttribute (int32 attributeType, void* attribute, uInt32 bufferSize){
int32 result = ArtDAQ_GetSystemAttribute( attributeType, attribute, bufferSize);
return result;
}
//请在src/main/c 目录执行编译
//gcc -shared -fPIC -m64 -L ./artdaqs/x64 -lArt_DAQ_64 artdaqs.c -o ../resources/native/artdaqs/x64/Java_artdaqs.dll
#ifdef __cplusplus
}
#endif

1643
src/main/c/artdaqs/Art_DAQ.h Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

224
src/main/c/boardList.c Normal file
View File

@@ -0,0 +1,224 @@
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#ifdef __cplusplus
extern "C" {
#endif
// 定义GUID结构
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
// 所有要搜索的设备类GUID列表
const GUID deviceClasses[] = {
// 传感器设备类
{0xa3a4c1ce, 0x5a80, 0x452c, {0x9b, 0x51, 0xa9, 0x8e, 0xdd, 0x33, 0x78, 0xd1}},
// 人体学输入设备类
{0x88bae032, 0x5a81, 0x49f0, {0xbc, 0x3d, 0xa4, 0xff, 0x13, 0x82, 0x16, 0xd6}},
// 端口设备类
{0x50906cb8, 0xba12, 0x11d1, {0xbf, 0x5d, 0x00, 0x00, 0xf8, 0x05, 0xf5, 0x30}},
// USB 相关子类别设备
{0xa6fc9e61, 0xc465, 0x11cf, {0x80, 0x56, 0x44, 0x45, 0x53, 0x41, 0x52, 0x54}}
};
// 设备类名称(用于输出信息)
const char* deviceClassNames[] = {
"传感器设备",
"人体学输入设备",
"端口设备",
"USB相关设备"
};
// 设备类数量
#define DEVICE_CLASS_COUNT (sizeof(deviceClasses) / sizeof(deviceClasses[0]))
#pragma comment(lib, "setupapi.lib")
// 不区分大小写的字符串查找
char* stristr(const char* str1, const char* str2) {
if (!*str2) return (char*)str1;
for (; *str1; str1++) {
if (toupper((unsigned char)*str1) == toupper((unsigned char)*str2)) {
const char* p1 = str1;
const char* p2 = str2;
while (*p1 && *p2 && toupper((unsigned char)*p1) == toupper((unsigned char)*p2)) {
p1++;
p2++;
}
if (!*p2) return (char*)str1;
}
}
return NULL;
}
// 在单个设备类中搜索匹配名称的设备
int SearchInDeviceClass(const GUID* deviceClass, const char* searchName) {
HDEVINFO hDevInfo;
SP_DEVINFO_DATA deviceInfoData = {0};
DWORD i;
int matchCount = 0;
char szDeviceName[256] = {0}; // 使用ANSI字符数组
// 获取设备信息列表 - 明确使用ANSI版本
hDevInfo = SetupDiGetClassDevsA(deviceClass, NULL, NULL, DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE) {
return 0; // 获取设备列表失败返回0个匹配
}
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
// 枚举设备
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &deviceInfoData); i++) {
// 获取设备描述
if (SetupDiGetDeviceRegistryPropertyA(
hDevInfo, &deviceInfoData, SPDRP_FRIENDLYNAME, // 改用SPDRP_FRIENDLYNAME
NULL, (PBYTE)szDeviceName, sizeof(szDeviceName), NULL)) {
// 检查名称是否包含搜索字符串
if (stristr(szDeviceName, searchName) != NULL) {
matchCount++;
}
}
// 如果没有友好名称, fallback 到设备描述
else if (SetupDiGetDeviceRegistryPropertyA(
hDevInfo, &deviceInfoData, SPDRP_DEVICEDESC,
NULL, (PBYTE)szDeviceName, sizeof(szDeviceName), NULL)) {
if (stristr(szDeviceName, searchName) != NULL) {
matchCount++;
}
}
}
// 清理资源
SetupDiDestroyDeviceInfoList(hDevInfo);
return matchCount;
}
// 列出单个设备类中的所有设备
int ListDevicesInClass(const GUID* deviceClass, const char* className) {
HDEVINFO hDevInfo;
SP_DEVINFO_DATA deviceInfoData = {0};
DWORD i;
int deviceCount = 0;
char szDeviceName[256] = {0}; // 使用ANSI字符数组
// 获取设备信息列表 - 明确使用ANSI版本
hDevInfo = SetupDiGetClassDevsA(deviceClass, NULL, NULL, DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE) {
printf("无法获取 %s 类的设备列表\n", className);
return 0;
}
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
printf("\n--- %s 类设备清单 ---\n", className);
// 枚举设备
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &deviceInfoData); i++) {
int gotName = 0;
// 获取设备友好名称
if (SetupDiGetDeviceRegistryPropertyA(
hDevInfo, &deviceInfoData, SPDRP_FRIENDLYNAME,
NULL, (PBYTE)szDeviceName, sizeof(szDeviceName), NULL)) {
printf("设备 %d: %s\n", i + 1, szDeviceName);
gotName = 1;
}
// 如果没有友好名称,尝试获取设备描述
if (!gotName && SetupDiGetDeviceRegistryPropertyA(
hDevInfo, &deviceInfoData, SPDRP_DEVICEDESC,
NULL, (PBYTE)szDeviceName, sizeof(szDeviceName), NULL)) {
printf("设备 %d: %s\n", i + 1, szDeviceName);
gotName = 1;
}
// 如果无法获取名称,显示未知设备
if (!gotName) {
printf("设备 %d: 未知设备\n", i + 1);
}
deviceCount++;
}
if (deviceCount == 0) {
printf("未找到任何 %s 类设备\n", className);
} else {
printf("共找到 %d 个 %s 类设备\n", deviceCount, className);
}
// 清理资源
SetupDiDestroyDeviceInfoList(hDevInfo);
return deviceCount;
}
// 列出所有设备类中的所有设备
void ListAllDevices() {
int totalDevices = 0;
printf("\n===== 所有设备类设备清单 =====");
// 遍历所有设备类并列出设备
for (int i = 0; i < DEVICE_CLASS_COUNT; i++) {
totalDevices += ListDevicesInClass(&deviceClasses[i], deviceClassNames[i]);
}
printf("\n===== 设备清单结束 =====");
printf("\n总共找到 %d 个设备\n", totalDevices);
}
// 在所有设备类型中搜索匹配名称的设备,返回总数量
__declspec(dllexport) int __stdcall searchAllDeviceTypes(const char searchName[]) {
int totalCount = 0;
int classCount;
// 遍历所有设备类
for (int i = 0; i < DEVICE_CLASS_COUNT; i++) {
classCount = SearchInDeviceClass(&deviceClasses[i], searchName);
totalCount += classCount;
// 输出每个设备类中的匹配数量
if (classCount > 0) {
printf("%s中找到 %d 个匹配设备\n", deviceClassNames[i], classCount);
}
}
return totalCount;
}
// 测试主函数
int main() {
const char* searchName = "USBCANFD-200U"; // 要搜索的设备名称
int totalMatches;
printf("设备名称搜索与清单工具\n");
printf("======================\n");
// 首先列出所有设备
ListAllDevices();
// 然后搜索指定设备
printf("\n\n搜索名称: '%s'\n", searchName);
totalMatches = searchAllDeviceTypes(searchName);
printf("\n搜索完成 - 总匹配数量: %d\n", totalMatches);
system("pause");
return 0;
}
// 编译命令:
// gcc -shared -fPIC -m64 -o ../resources/native/boardList.dll boardList.c -lsetupapi
// gcc -o boardList.exe boardList.c -lsetupapi
#ifdef __cplusplus
}
#endif

BIN
src/main/c/boardList.exe Normal file

Binary file not shown.

512
src/main/c/xdma_rw_dll.c Normal file
View File

@@ -0,0 +1,512 @@
#include <windows.h>
#include <setupapi.h>
#include <INITGUID.H>
#include <WinIoCtl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <synchapi.h>
#ifdef __cplusplus
extern "C" {
#endif
// ==================== 配置和常量定义 ====================
#define MAX_XDMA_DEVICES 16
#define MAX_DEVICE_PATH 256
#define DEFAULT_BUFFER_SIZE (4 * 1024) // 4KB 默认缓冲区
// 日志级别
typedef enum {
LOG_LEVEL_ERROR = 0,
LOG_LEVEL_WARNING = 1,
LOG_LEVEL_INFO = 2,
LOG_LEVEL_DEBUG = 3
} LogLevel;
// 错误代码定义
typedef enum {
XDMA_SUCCESS = 0,
XDMA_ERROR_INVALID_PARAM = 1,
XDMA_ERROR_DEVICE_NOT_FOUND = 2,
XDMA_ERROR_DEVICE_OPEN_FAILED = 3,
XDMA_ERROR_IO_FAILED = 4,
XDMA_ERROR_BUFFER_ALLOCATION_FAILED = 5,
XDMA_ERROR_INVALID_CONTEXT = 6,
XDMA_ERROR_ENUM_FAILED = 7
} XDMA_ErrorCode;
// 传输方向
#define XDMA_READ 0
#define XDMA_WRITE 1
// ==================== 全局变量 ====================
static FILE* g_logFile = NULL;
static LogLevel g_logLevel = LOG_LEVEL_INFO;
static char g_logPath[MAX_PATH] = "C:\\XDMA_DLL_Log.txt";
static CRITICAL_SECTION g_cs; // 用于线程安全
static BOOL g_initialized = FALSE;
// 设备列表
static char g_devicePaths[MAX_XDMA_DEVICES][MAX_DEVICE_PATH] = {0};
static int g_deviceCount = 0;
static BOOL g_devicesEnumerated = FALSE;
// XDMA GUID 定义
#ifndef GUID_DEVINTERFACE_XDMA
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
const GUID GUID_DEVINTERFACE_XDMA = {
0x74c7e4a9, 0x6d5d, 0x4a70,
{ 0xbc, 0x0d, 0x20, 0x69, 0x1d, 0xff, 0x9e, 0x9d}
};
#endif
// 设备上下文结构体
typedef struct {
HANDLE deviceHandle;
char devicePath[MAX_DEVICE_PATH];
BYTE* buffer;
size_t bufferSize;
int deviceIndex;
BOOL isInitialized;
} XDMA_Context;
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "kernel32.lib")
// ==================== 内部函数 ====================
// 初始化日志系统
static BOOL init_log_system() {
if (g_logFile != NULL) return TRUE;
g_logFile = fopen(g_logPath, "a");
if (g_logFile == NULL) {
// 尝试使用默认路径
g_logFile = fopen("C:\\XDMA_Log.txt", "a");
if (g_logFile == NULL) {
// 最后尝试 stdout
g_logFile = stdout;
return FALSE;
}
}
// 设置日志缓冲区
setvbuf(g_logFile, NULL, _IOLBF, 4096);
return TRUE;
}
// 日志记录函数
static void log_message(LogLevel level, const char* fmt, ...) {
if (level > g_logLevel) return;
EnterCriticalSection(&g_cs);
if (g_logFile == NULL) {
init_log_system();
}
if (g_logFile != NULL) {
SYSTEMTIME st;
GetSystemTime(&st);
fprintf(g_logFile, "[%02d:%02d:%02d.%03d] ",
st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
switch (level) {
case LOG_LEVEL_ERROR: fprintf(g_logFile, "[ERROR] "); break;
case LOG_LEVEL_WARNING: fprintf(g_logFile, "[WARN] "); break;
case LOG_LEVEL_INFO: fprintf(g_logFile, "[INFO] "); break;
case LOG_LEVEL_DEBUG: fprintf(g_logFile, "[DEBUG] "); break;
}
va_list args;
va_start(args, fmt);
vfprintf(g_logFile, fmt, args);
va_end(args);
fprintf(g_logFile, "\n");
fflush(g_logFile);
}
LeaveCriticalSection(&g_cs);
}
// 安全字符串复制
static void safe_strncpy(char* dest, const char* src, size_t dest_size) {
if (dest == NULL || src == NULL || dest_size == 0) return;
strncpy(dest, src, dest_size - 1);
dest[dest_size - 1] = '\0';
}
// 安全字符串拼接
static void safe_strncat(char* dest, const char* src, size_t dest_size) {
if (dest == NULL || src == NULL || dest_size == 0) return;
size_t current_len = strlen(dest);
if (current_len >= dest_size - 1) return;
strncat(dest, src, dest_size - current_len - 1);
}
// 枚举所有 XDMA 设备
static int enum_xdma_devices() {
EnterCriticalSection(&g_cs);
// 如果已经枚举过,直接返回缓存结果
if (g_devicesEnumerated) {
LeaveCriticalSection(&g_cs);
return g_deviceCount;
}
g_deviceCount = 0;
memset(g_devicePaths, 0, sizeof(g_devicePaths));
HDEVINFO h_dev_info = SetupDiGetClassDevsA(&GUID_DEVINTERFACE_XDMA, NULL, NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (h_dev_info == INVALID_HANDLE_VALUE) {
log_message(LOG_LEVEL_ERROR, "SetupDiGetClassDevsA failed: 0x%08X", GetLastError());
LeaveCriticalSection(&g_cs);
return 0;
}
SP_DEVICE_INTERFACE_DATA dev_interface = {sizeof(SP_DEVICE_INTERFACE_DATA)};
DWORD index = 0;
while (SetupDiEnumDeviceInterfaces(h_dev_info, NULL, &GUID_DEVINTERFACE_XDMA,
index, &dev_interface)) {
if (g_deviceCount >= MAX_XDMA_DEVICES) {
log_message(LOG_LEVEL_WARNING, "Reached maximum device limit (%d)", MAX_XDMA_DEVICES);
break;
}
DWORD detail_len = 0;
SetupDiGetDeviceInterfaceDetailA(h_dev_info, &dev_interface, NULL, 0, &detail_len, NULL);
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
log_message(LOG_LEVEL_ERROR, "Failed to get device detail length: 0x%08X", GetLastError());
break;
}
PSP_DEVICE_INTERFACE_DETAIL_DATA_A dev_detail =
(PSP_DEVICE_INTERFACE_DETAIL_DATA_A)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, detail_len);
if (!dev_detail) {
log_message(LOG_LEVEL_ERROR, "Failed to allocate memory for device detail");
break;
}
dev_detail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);
if (SetupDiGetDeviceInterfaceDetailA(h_dev_info, &dev_interface, dev_detail,
detail_len, NULL, NULL)) {
safe_strncpy(g_devicePaths[g_deviceCount], dev_detail->DevicePath, MAX_DEVICE_PATH);
log_message(LOG_LEVEL_INFO, "Found XDMA device %d: %s", g_deviceCount, g_devicePaths[g_deviceCount]);
g_deviceCount++;
} else {
log_message(LOG_LEVEL_ERROR, "SetupDiGetDeviceInterfaceDetailA failed: 0x%08X", GetLastError());
}
HeapFree(GetProcessHeap(), 0, dev_detail);
index++;
}
SetupDiDestroyDeviceInfoList(h_dev_info);
g_devicesEnumerated = TRUE;
log_message(LOG_LEVEL_INFO, "Total XDMA devices found: %d", g_deviceCount);
LeaveCriticalSection(&g_cs);
return g_deviceCount;
}
// 分配对齐缓冲区
static BYTE* allocate_aligned_buffer(size_t size, size_t alignment) {
if (size == 0) size = DEFAULT_BUFFER_SIZE;
if (alignment == 0) {
SYSTEM_INFO sys_info;
GetSystemInfo(&sys_info);
alignment = sys_info.dwPageSize;
}
return (BYTE*)_aligned_malloc(size, alignment);
}
// ==================== 导出函数 ====================
// DLL 入口点
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
InitializeCriticalSection(&g_cs);
g_initialized = TRUE;
break;
case DLL_PROCESS_DETACH:
if (g_logFile != NULL && g_logFile != stdout) {
fclose(g_logFile);
g_logFile = NULL;
}
DeleteCriticalSection(&g_cs);
g_initialized = FALSE;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
// 设置日志级别
__declspec(dllexport) void __stdcall XDMA_SetLogLevel(LogLevel level) {
EnterCriticalSection(&g_cs);
g_logLevel = level;
log_message(LOG_LEVEL_INFO, "Log level set to: %d", level);
LeaveCriticalSection(&g_cs);
}
// 设置日志文件路径
__declspec(dllexport) void __stdcall XDMA_SetLogPath(const char* path) {
if (path == NULL) return;
EnterCriticalSection(&g_cs);
safe_strncpy(g_logPath, path, MAX_PATH);
// 重新打开日志文件
if (g_logFile != NULL && g_logFile != stdout) {
fclose(g_logFile);
g_logFile = NULL;
}
init_log_system();
log_message(LOG_LEVEL_INFO, "Log path set to: %s", g_logPath);
LeaveCriticalSection(&g_cs);
}
// 获取设备数量
__declspec(dllexport) int __stdcall XDMA_GetDeviceCount() {
if (!g_initialized) {
return 0;
}
return enum_xdma_devices();
}
// 获取设备路径
__declspec(dllexport) int __stdcall XDMA_GetDevicePath(int index, char* out_path, size_t max_len) {
if (!g_initialized || out_path == NULL || max_len == 0) {
return XDMA_ERROR_INVALID_PARAM;
}
EnterCriticalSection(&g_cs);
if (index < 0 || index >= g_deviceCount) {
log_message(LOG_LEVEL_ERROR, "Invalid device index: %d (total: %d)", index, g_deviceCount);
LeaveCriticalSection(&g_cs);
return XDMA_ERROR_DEVICE_NOT_FOUND;
}
safe_strncpy(out_path, g_devicePaths[index], max_len);
LeaveCriticalSection(&g_cs);
return XDMA_SUCCESS;
}
// 初始化设备
__declspec(dllexport) XDMA_Context* __stdcall XDMA_Init(int device_index, const char* device_node) {
if (!g_initialized) {
return NULL;
}
if (device_node == NULL || strlen(device_node) == 0) {
log_message(LOG_LEVEL_ERROR, "Invalid device node");
return NULL;
}
// 确保设备已枚举
if (g_deviceCount == 0) {
enum_xdma_devices();
}
EnterCriticalSection(&g_cs);
if (device_index < 0 || device_index >= g_deviceCount) {
log_message(LOG_LEVEL_ERROR, "Invalid device index: %d", device_index);
LeaveCriticalSection(&g_cs);
return NULL;
}
// 创建上下文
XDMA_Context* ctx = (XDMA_Context*)malloc(sizeof(XDMA_Context));
if (ctx == NULL) {
log_message(LOG_LEVEL_ERROR, "Failed to allocate context");
LeaveCriticalSection(&g_cs);
return NULL;
}
memset(ctx, 0, sizeof(XDMA_Context));
ctx->deviceIndex = device_index;
ctx->isInitialized = FALSE;
// 构建设备路径
char full_path[MAX_DEVICE_PATH] = {0};
safe_strncpy(full_path, g_devicePaths[device_index], MAX_DEVICE_PATH);
safe_strncat(full_path, "\\", MAX_DEVICE_PATH);
safe_strncat(full_path, device_node, MAX_DEVICE_PATH);
safe_strncpy(ctx->devicePath, full_path, MAX_DEVICE_PATH);
// 打开设备
ctx->deviceHandle = CreateFileA(ctx->devicePath,
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if (ctx->deviceHandle == INVALID_HANDLE_VALUE) {
DWORD err = GetLastError();
log_message(LOG_LEVEL_ERROR, "Failed to open device (0x%08X): %s", err, ctx->devicePath);
free(ctx);
LeaveCriticalSection(&g_cs);
return NULL;
}
// 分配默认缓冲区
ctx->buffer = allocate_aligned_buffer(DEFAULT_BUFFER_SIZE, 0);
if (ctx->buffer == NULL) {
log_message(LOG_LEVEL_ERROR, "Failed to allocate buffer");
CloseHandle(ctx->deviceHandle);
free(ctx);
LeaveCriticalSection(&g_cs);
return NULL;
}
ctx->bufferSize = DEFAULT_BUFFER_SIZE;
ctx->isInitialized = TRUE;
log_message(LOG_LEVEL_INFO, "Device initialized: %s", ctx->devicePath);
LeaveCriticalSection(&g_cs);
return ctx;
}
// 数据传输
__declspec(dllexport) int __stdcall XDMA_Transfer(XDMA_Context* ctx, int direction,
unsigned long address, char* data,
int* data_len, size_t alignment) {
if (ctx == NULL || !ctx->isInitialized || ctx->deviceHandle == INVALID_HANDLE_VALUE) {
return XDMA_ERROR_INVALID_CONTEXT;
}
if (data == NULL || data_len == NULL || *data_len == 0) {
return XDMA_ERROR_INVALID_PARAM;
}
EnterCriticalSection(&g_cs);
// 设置文件指针
LARGE_INTEGER addr = {0};
addr.QuadPart = address;
if (INVALID_SET_FILE_POINTER == SetFilePointerEx(ctx->deviceHandle, addr, NULL, FILE_BEGIN)) {
DWORD err = GetLastError();
log_message(LOG_LEVEL_ERROR, "SetFilePointerEx failed: 0x%08X", err);
LeaveCriticalSection(&g_cs);
return XDMA_ERROR_IO_FAILED;
}
DWORD bytes_transferred = 0;
BOOL success = FALSE;
int result = XDMA_SUCCESS;
if (direction == XDMA_READ) {
// 确保缓冲区足够大
if (ctx->bufferSize < (size_t)*data_len) {
if (ctx->buffer) {
_aligned_free(ctx->buffer);
}
ctx->buffer = allocate_aligned_buffer(*data_len, alignment);
if (ctx->buffer == NULL) {
log_message(LOG_LEVEL_ERROR, "Failed to reallocate buffer");
LeaveCriticalSection(&g_cs);
return XDMA_ERROR_BUFFER_ALLOCATION_FAILED;
}
ctx->bufferSize = *data_len;
}
// 执行读取
success = ReadFile(ctx->deviceHandle, ctx->buffer, *data_len, &bytes_transferred, NULL);
if (success) {
memcpy(data, ctx->buffer, bytes_transferred);
*data_len = bytes_transferred;
} else {
DWORD err = GetLastError();
log_message(LOG_LEVEL_ERROR, "ReadFile failed: 0x%08X", err);
result = XDMA_ERROR_IO_FAILED;
}
} else if (direction == XDMA_WRITE) {
// 执行写入
success = WriteFile(ctx->deviceHandle, data, *data_len, &bytes_transferred, NULL);
if (success) {
*data_len = bytes_transferred;
} else {
DWORD err = GetLastError();
log_message(LOG_LEVEL_ERROR, "WriteFile failed: 0x%08X", err);
result = XDMA_ERROR_IO_FAILED;
}
} else {
log_message(LOG_LEVEL_ERROR, "Invalid direction: %d", direction);
result = XDMA_ERROR_INVALID_PARAM;
}
LeaveCriticalSection(&g_cs);
return result;
}
// 释放设备资源
__declspec(dllexport) int __stdcall XDMA_Deinit(XDMA_Context* ctx) {
if (ctx == NULL) {
return XDMA_ERROR_INVALID_PARAM;
}
EnterCriticalSection(&g_cs);
if (ctx->deviceHandle != INVALID_HANDLE_VALUE) {
CloseHandle(ctx->deviceHandle);
log_message(LOG_LEVEL_INFO, "Closed device %d: %s", ctx->deviceIndex, ctx->devicePath);
}
if (ctx->buffer != NULL) {
_aligned_free(ctx->buffer);
}
ctx->isInitialized = FALSE;
free(ctx);
log_message(LOG_LEVEL_INFO, "Context destroyed");
LeaveCriticalSection(&g_cs);
return XDMA_SUCCESS;
}
// 刷新设备列表
__declspec(dllexport) int __stdcall XDMA_RefreshDevices() {
if (!g_initialized) {
return XDMA_ERROR_INVALID_CONTEXT;
}
EnterCriticalSection(&g_cs);
g_devicesEnumerated = FALSE;
int count = enum_xdma_devices();
LeaveCriticalSection(&g_cs);
return count;
}
#ifdef __cplusplus
}
#endif
// 编译命令
// gcc -shared -fPIC -m64 -o ../resources/native/xdma/java_xdma_rw_dll.dll xdma_rw_dll.c -lsetupapi -lkernel32

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,198 @@
<?xml version="1.0"?>
<info locale="device_locale_strings.xml">
<DeviceType>
<value>99</value>
<meta>
<type>options.int32</type>
<desc>device type</desc>
<options>
<option type="int32" value="1" desc="VCI_PCI5121" />
<option type="int32" value="2" desc="VCI_PCI9810" />
<option type="int32" value="3" desc="VCI_USBCAN1" />
<option type="int32" value="99" desc="VCI_USBCAN2" />
<option type="int32" value="5" desc="VCI_PCI9820" />
<option type="int32" value="6" desc="VCI_CAN232" />
</options>
</meta>
<VCI_PCI5121 stream="VCI_PCI5121" case="parent-value=1">
<include_file>
<value>VCI_PCI5121.xml</value>
<meta>
<type>string</type>
<desc>VCI_PCI5121 config file</desc>
</meta>
</include_file>
</VCI_PCI5121>
<VCI_PCI9810 stream="VCI_PCI9810" case="parent-value=2">
<include_file>
<value>VCI_PCI9810.xml</value>
<meta>
<type>string</type>
<desc>VCI_PCI9810 config file</desc>
</meta>
</include_file>
</VCI_PCI9810>
<VCI_USBCAN1 stream="VCI_USBCAN1" case="parent-value=3">
<include_file>
<value>VCI_USBCAN1.xml</value>
<meta>
<type>string</type>
<desc>VCI_USBCAN1 config file</desc>
</meta>
</include_file>
</VCI_USBCAN1>
<VCI_USBCAN2 stream="VCI_USBCAN2" case="parent-value=99">
<include_file>
<value>VCI_USBCAN2.xml</value>
<meta>
<type>string</type>
<desc>VCI_USBCAN2 config file</desc>
</meta>
</include_file>
</VCI_USBCAN2>
<VCI_PCI9820 stream="VCI_PCI9820" case="parent-value=5">
<include_file>
<value>VCI_PCI9820.xml</value>
<meta>
<type>string</type>
<desc>VCI_PCI9820 config file</desc>
</meta>
</include_file>
</VCI_PCI9820>
<VCI_CAN232 stream="VCI_CAN232" case="parent-value=6">
<include_file>
<value>VCI_CAN232.xml</value>
<meta>
<type>string</type>
<desc>VCI_CAN232 config file</desc>
</meta>
</include_file>
</VCI_CAN232>
</DeviceType>
<Frame>
<can_frame>
<can_id>
<value>123456</value>
<meta>
<type>uint32</type>
<desc>32 bit CAN_ID + EFF/RTR/ERR flags</desc>
</meta>
</can_id>
<can_dlc>
<value>8</value>
<meta>
<type>uchar</type>
<desc>frame payload length in byte (0 .. CAN_MAX_DLEN)</desc>
</meta>
</can_dlc>
<__pad>
<value>0</value>
<meta>
<type>uchar</type>
<desc>padding</desc>
</meta>
</__pad>
<__res0>
<value>0</value>
<meta>
<type>uchar</type>
<desc>reserved / padding</desc>
</meta>
</__res0>
<__res1>
<value>0</value>
<meta>
<type>uchar</type>
<desc>reserved / padding</desc>
</meta>
</__res1>
<data>
<value>01234567</value>
<meta>
<type>string</type>
<desc>CAN frame payload (up to 8 byte)</desc>
</meta>
</data>
</can_frame>
<canfd_frame>
<can_id>
<value>123456</value>
<meta>
<type>uint32</type>
<desc>32 bit CAN_ID + EFF/RTR/ERR flags</desc>
</meta>
</can_id>
<len>
<value>64</value>
<meta>
<type>uchar</type>
<desc>frame payload length in byte (0 .. CANFD_MAX_DLEN)</desc>
</meta>
</len>
<flags>
<value>0</value>
<meta>
<type>uchar</type>
<desc>additional flags for CAN FD</desc>
</meta>
</flags>
<__res0>
<value>0</value>
<meta>
<type>uchar</type>
<desc>reserved / padding</desc>
</meta>
</__res0>
<__res1>
<value>0</value>
<meta>
<type>uchar</type>
<desc>reserved / padding</desc>
</meta>
</__res1>
<data>
<value>01234567</value>
<meta>
<type>string</type>
<desc>CAN FD frame payload (up to CANFD_MAX_DLEN byte)</desc>
</meta>
</data>
</canfd_frame>
</Frame>
<Generate>
<Timer>
<value>500</value>
<meta>
<type>uint32</type>
<desc>生成帧数据的频率,单位毫秒</desc>
</meta>
</Timer>
<BufferNumber>
<value>50</value>
<meta>
<type>uint32</type>
<desc>生成帧的个数缓冲区大小ZCAN_Receive_Data或ZCAN_ReceiveFD_Data的个数</desc>
</meta>
</BufferNumber>
</Generate>
</info>

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,42 @@
<?xml version="1.0"?>
<info locale="device_locale_strings.xml">
<Channel>
<value>0</value>
<meta>
<type>options.int32</type>
<desc>Channel id</desc>
<options>
<option type="int32" value="0" desc="Channel 0"></option>
<option type="int32" value="1" desc="Channel 1"></option>
</options>
</meta>
<Channel_0 stream="Channel_0" case="parent-value=0">
<baud_rate>
<value>115200</value>
<meta>
<type>options.int32</type>
<desc>baud rate</desc>
<options>
<option type="int32" value="4800" desc="baud rate 4800"></option>
<option type="int32" value="9600" desc="baud rate 9600"></option>
<option type="int32" value="115200" desc="baud rate 115200"></option>
</options>
</meta>
</baud_rate>
</Channel_0>
<Channel_1 stream="Channel_1" case="parent-value=1">
<baud_rate>
<value>115200</value>
<meta>
<type>options.int32</type>
<desc>baud rate</desc>
<options>
<option type="int32" value="4800" desc="baud rate 4800"></option>
<option type="int32" value="9600" desc="baud rate 9600"></option>
<option type="int32" value="115200" desc="baud rate 115200"></option>
</options>
</meta>
</baud_rate>
</Channel_1>
</Channel>
</info>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,32 @@
<cmds>
<!--AIO业务-->
<cmd id="SetAISwitch" param="UINT32:chNum,RUN_STOP_BOOL_TYPE:value" send_str=":AI:CHANnel{chNum}:{value}" visible="false" ch="ch0"/>
<cmd id="GetAISwitch" param="UINT32:chNum,RUN_STOP_BOOL_TYPE&amp;:value" send_str=":AI:CHANnel{chNum}:RUN?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="SetAIChannelRun" param="INT32:NUM" send_str=":AI:CHANnel{NUM}:RUN" visible="false" ch="ch0"/>
<cmd id="GetAIChannelRun" param="INT32:NUM,STRING&amp;:A" send_str=":AI:CHANnel{NUM}:RUN?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAIChannelStop" param="INT32:NUM" send_str=":AI:CHANnel{NUM}:STOP" visible="false" ch="ch0"/>
<cmd id="SetAIChannelScope" param="INT32:NUM,STRING:A" send_str=":AI:CHANnel{NUM}:SCOPe {A}" visible="false" ch="ch0"/>
<cmd id="GetAIChannelScope" param="INT32:NUM,STRING&amp;:A" send_str=":AI:CHANnel{NUM}:SCOPe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetAIChannelData" param="INT32:NUM,FLOAT&amp;:A" send_str=":AI:CHANnel{NUM}:DATA?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAISampleRate" param="FLOAT:A" send_str=":AI:SAMPrate {A}" visible="false" ch="ch0"/>
<cmd id="GetAISampleRate" param="FLOAT&amp;:A" send_str=":AI:SAMPrate?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAOChannelBindData" param="INT32:NUM,IBASECTR:A" send_str=":AO:CHANnel{NUM}:BINData {b:A}" visible="false" ch="ch0" comment="{b:A}发的不带@"/>
<cmd id="SetAOChannelRawData" param="INT32:NUM,INT32:A" send_str=":AO:CHANnel{NUM}:RAWData {A}" visible="false" ch="ch0"/>
<cmd id="SetAOConfig" param="INT32:NUM,aoParaConfig:A" send_str=":AO:CHANnel{NUM}:STRUct:CONFig ${A}$" visible="false" ch="ch0"/>
<cmd id="GetAOConfig" param="INT32:NUM,aoParaConfig&amp;:A" send_str=":AO:CHANnel{NUM}:STRUct:CONFig?" recv_str="{b:@A}" visible="false" ch="ch0" comment="{b:A}收的带@"/>
<cmd id="SetAOEnable" param="INT32:NUM" send_str=":AO:CHANnel{NUM}:ENABle 1" visible="false" ch="ch0"/>
<cmd id="SetAODisable" param="INT32:NUM" send_str=":AO:CHANnel{NUM}:ENABle 0" visible="false" ch="ch0"/>
<cmd id="GetAOEnable" param="INT32:NUM,TRUE_FALSE_BOOL_FORMAT&amp;:A" send_str=":AI:CHANnel{NUM}:ENABle?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAOFreq" param="INT32:NUM,FLOAT:value" send_str=":AI:CHANnel{NUM}:FREQuency {value}" visible="false" ch="ch0"/>
<cmd id="GetAOFreq" param="INT32:NUM,FLOAT&amp;:value" send_str=":AI:CHANnel{NUM}:FREQuency?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="SetAOPhase" param="INT32:NUM,FLOAT:value" send_str=":AI:CHANnel{NUM}:PHASe {value}" visible="false" ch="ch0"/>
<cmd id="GetAOPhase" param="INT32:NUM,FLOAT&amp;:value" send_str=":AI:CHANnel{NUM}:PHASe?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="GetAIMemoryLength" param="INT32:NUM,INT32&amp;:A" send_str=":AI:CHANnel{NUM}:MEMory:LENgth?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetAIMemorySampRate" param="INT32:NUM,FLOAT&amp;:A" send_str=":AI:CHANnel{NUM}:MEMory:SAMPrate?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetAIMemoryData" param="INT32:NUM,INT32:COUNT,UINT8_POINT&amp;:A" send_str=":AI:CHANnel{NUM}:MEMory:DATA? {COUNT}" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="GetAIMemoryTimeStamp" param="INT32:NUM,UINT64&amp;:A" send_str=":AI:CHANnel{NUM}:MEMory:TIMEStamp?" recv_str="{A}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,19 @@
<cmds>
<!--异步通讯-->
<!-- <cmd id="SUNCEN" param="" send_str=":NSYNC:ENABLE tcp,1" visible="false" ch="ch0"/> -->
<cmd id="SYNCEN" param="STRING:A" send_str=":NSYNC:ENABLE {A},1" visible="false" ch="ch0" comment="A:ubs||tcp"/>
<cmd id="SYNCDIS" param="STRING:A" send_str=":NSYNC:ENABLE {A},0" visible="false" ch="ch0"/>
<cmd id="CANSYNCEN" param="" send_str=":NSYNC:MODULE:ENABLE CAN,1" visible="false" ch="ch0"/>
<cmd id="CANSYNCDIS" param="" send_str=":NSYNC:MODULE:ENABLE CAN,0" visible="false" ch="ch0"/>
<cmd id="ASYNCSetting" param="ASYNC_MODULE_TYPE:type,UINT8:value" send_str=":NSYNC:MODULE:ENABLE {type},{value}" visible="false" ch="ch0"/>
<!-- <cmd id="SUNCDIS" param="" send_str=":NSYNC:ENABLE tcp,0" visible="false" ch="ch0"/> -->
<cmd id="ASyncFun" param="" send_str=":NSYNC:SPEED:TEST 64" visible="false" ch="ch0"/>
<cmd id="StopSyncFun" param="" send_str=":NSYNC:SPEED:TEST 0" visible="false" ch="ch0"/>
<cmd id="DsoRun" param="" send_str=":DSO:STOP" visible="false" ch="ch0"/>
<cmd id="DsoRunrst" param="STRING&amp;:A" send_str=":DSO:RUN?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysRun" param="" send_str=":RUN" visible="false" ch="ch0"/>
<cmd id="SetSysStop" param="" send_str=":STOP" visible="false" ch="ch0"/>
<cmd id="sysRunrst" param="STRING&amp;:A" send_str=":RUN?" recv_str="{A}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,53 @@
<cmds>
<!--报文业务-->
<cmd id="SetCANSwitch" param="UINT32:chNum,RUN_STOP_BOOL_TYPE:value" send_str=":CANFD{chNum}:{value}" visible="false" ch="ch0"/>
<cmd id="GetCANSwitch" param="UINT32:chNum,RUN_STOP_BOOL_TYPE&amp;:value" send_str=":CANFD{chNum}:RUN?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="GetRunStatus" param="RUN_STOP_BOOL_TYPE&amp;:A" send_str=":RUN?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetCANABTBaudrate" param="UINT32:NUM,DOUBLE:A" send_str=":CANFD{NUM}:ABTBaud {A}" visible="false" ch="ch0"/>
<cmd id="GetCANABTBaudrate" param="UINT32:NUM,DOUBLE&amp;:A" send_str=":CANFD{NUM}:ABTBaud?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetEnableResistor" param="UINT32:NUM,BOOL:A" send_str=":CANFD{NUM}:END {A}" visible="false" ch="ch0"/>
<cmd id="GetEnableResistor" param="UINT32:NUM,BOOL&amp;:A" send_str=":CANFD{NUM}:END?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSendStrategyCount" param="UINT32:NUM,UINT32:A" send_str=":CANFD{NUM}:RETRan {A}" visible="false" ch="ch0"/>
<cmd id="GetSendStrategyCount" param="UINT32:NUM,UINT32&amp;:A" send_str=":CANFD{NUM}:RETRan?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetWorkMode" param="UINT32:NUM,UINT32:A" send_str=":CANFD{NUM}:SENDMODE {A}" visible="false" ch="ch0"/>
<cmd id="GetWorkMode" param="UINT32:NUM,UINT32&amp;:A" send_str=":CANFD{NUM}:SENDMODE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetBaudRateConfig" param="UINT32:NUM,CanfdBaudRateConfig&amp;:A" send_str=":CANFD{NUM}:BAUD:STRUct:CONFig?" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="SetBaudRateConfig" param="UINT32:NUM,CanfdBaudRateConfig:A" send_str=":CANFD{NUM}:BAUD:STRUct:CONFig ${A}$" visible="false" ch="ch0"/>
<cmd id="GetAbtBaud" param="UINT32:NUM,DOUBLE&amp;:A" send_str=":CANFD{NUM}:ABTBaud?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAbtBaud" param="UINT32:NUM,DOUBLE:A" send_str=":CANFD{NUM}:ABTBaud {A}" visible="false" ch="ch0"/>
<cmd id="GetAbtSPos" param="UINT32:NUM,DOUBLE&amp;:A" send_str=":CANFD{NUM}:ABTSPos?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetAbtSPos" param="UINT32:NUM,DOUBLE:A" send_str=":CANFD{NUM}:ABTSPos {A}" visible="false" ch="ch0"/>
<cmd id="GetDataBaud" param="UINT32:NUM,DOUBLE&amp;:A" send_str=":CANFD{NUM}:DATABaud?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDataBaud" param="UINT32:NUM,DOUBLE:A" send_str=":CANFD{NUM}:DATABaud {A}" visible="false" ch="ch0"/>
<cmd id="GetDataSPos" param="UINT32:NUM,DOUBLE&amp;:A" send_str=":CANFD{NUM}:DATASPos?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDataSPos" param="UINT32:NUM,DOUBLE:A" send_str=":CANFD{NUM}:DATASPos {A}" visible="false" ch="ch0"/>
<cmd id="GetMiscConfig" param="UINT32:NUM,CanfdMiscConfig&amp;:A" send_str=":CANFD{NUM}:MISC:STRUct:CONFig?" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="SetMiscConfig" param="UINT32:NUM,CanfdMiscConfig:A" send_str=":CANFD{NUM}:MISC:STRUct:CONFig ${A}$" visible="false" ch="ch0"/>
<!--phy-->
<cmd id="GetPhyConfig" param="PhyConfiguration&amp;:A" send_str=":PHY:CONFIG:STRUCT?" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="SetPhyConfig" param="PhyConfiguration:A" send_str=":PHY:CONFIG:STRUCT ${A}$" visible="false" ch="ch0"/>
<cmd id="GetSTATisticsData" param="UINT32:NUM,CanfdStatisticsData&amp;:A" send_str=":CANFD{NUM}:STATistics:DATA?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSortLength" param="UINT64&amp;:A" send_str=":CANFD:SORT:ARECV:length?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSortData" param="UINT32:COUNT,IBASECTR:A" send_str=":CANFD:SORT:ARECV? bin,{COUNT}" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="DisableSort" param="" send_str=":CANFD:SORT:ARECV:ENABLE 0" visible="false" ch="ch0" comment="异步默认启动"/>
<cmd id="EnableSort" param="" send_str=":CANFD:SORT:ARECV:ENABLE 1" visible="false" ch="ch0" comment="异步默认启动"/>
<cmd id="ClearFifo" param="" send_str=":CANFD:SORT:ARECV:CLEar" visible="false" ch="ch0"/>
<!--rxtx-->
<cmd id="SetRxTxEnable" param="UINT32:chNum,RXD_TXD_TYPE:type,UINT8:value" send_str=":CANFD{chNum}:LI:{type}:ENABle {value}" visible="false" ch="ch0"/>
<cmd id="GetRxTxEnable" param="UINT32:chNum,RXD_TXD_TYPE:type,UINT8&amp;:value" send_str=":CANFD{chNum}:LI:{type}:ENABle?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="GetRxTxTimeStamp" param="UINT32:chNum,RXD_TXD_TYPE:type,UINT64&amp;:value" send_str=":CANFD{chNum}:LI:{type}:TIMEStamp?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="GeRtxTxLength" param="UINT32:chNum,RXD_TXD_TYPE:type,UINT32&amp;:value" send_str=":CANFD{chNum}:LI:{type}:LENgth?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="GetWaveDiv" param="UINT32&amp;:A" send_str=":RECord:WAVE:DIV?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetWaveDiv" param="UINT32:A" send_str=":RECord:WAVE:DIV {A}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<doc>
<localsource>
<type type="z_comm:DeviceDataTypeCreator" id="diConfig_type" vtype="z_comm:DeviceVar" bindType="diParaConfig" AutoAsync="1" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDIConfig" get_func="GetDIConfig" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="doConfig_type" vtype="z_comm:DeviceVar" bindType="doParaConfig" AutoAsync="1" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDOConfig" get_func="GetDOConfig" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="can_div_type" vtype="z_comm:DeviceVar" bindType="UINT32" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetWaveDiv" get_func="GetWaveDiv" set_func_param="_base_" get_func_param="_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="can_switch_type" vtype="z_comm:DeviceVar" bindType="RUN_STOP_BOOL_TYPE" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetCANSwitch" get_func="GetCANSwitch" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="dio_switch_type" vtype="z_comm:DeviceVar" bindType="RUN_STOP_BOOL_TYPE" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDIOSwitch" get_func="GetDIOSwitch" set_func_param="_base_" get_func_param="_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="ai_switch_type" vtype="z_comm:DeviceVar" bindType="RUN_STOP_BOOL_TYPE" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetAISwitch" get_func="GetAISwitch" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="dso_soure_type" vtype="z_comm:DeviceVar" bindType="DSO_SOURCE_TYPE" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDsoSource" get_func="GetDsoSource" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_"/>
<type type="z_comm:DeviceDataTypeCreator" id="phycard_type" vtype="z_comm:DeviceVar" bindType="PhyConfiguration" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetPhyConfig" get_func="GetPhyConfig" set_func_param="_base_" get_func_param="_base_"/>
</localsource>
</doc>

View File

@@ -0,0 +1,49 @@
<cmds>
<!--DIO业务-->
<cmd id="SetDIOSwitch" param="RUN_STOP_BOOL_TYPE:value" send_str=":DI:{value}" visible="false" ch="ch0"/>
<cmd id="GetDIOSwitch" param="RUN_STOP_BOOL_TYPE&amp;:value" send_str=":DI:RUN?" recv_str="{value}" visible="false" ch="ch0"/>
<cmd id="SetDIRun" param="" send_str=":DI:RUN" visible="false" ch="ch0"/>
<cmd id="GetDIRun" param="RUN_STOP_BOOL_TYPE&amp;:A" send_str=":DI:RUN?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIRunSelf" param="STRING&amp;:A" send_str=":DI:RUN:SELF?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIStop" param="" send_str=":CANFD1:STOP" visible="false" ch="ch0"/>
<cmd id="SetDIConfig" param="INT32:NUM,diParaConfig:A" send_str=":DI:CHANnel{NUM}:STRUct:CONFig ${A}$" visible="false" ch="ch0"/>
<cmd id="GetDIConfig" param="INT32:NUM,diParaConfig&amp;:A" send_str=":DI:CHANnel{NUM}:STRUct:CONFig?" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="SetDOConfig" param="INT32:NUM,doParaConfig:A" send_str=":DO:CHANnel{NUM}:STRUct:CONFig ${A}$" visible="false" ch="ch0"/>
<cmd id="GetDOConfig" param="INT32:NUM,doParaConfig&amp;:A" send_str=":DO:CHANnel{NUM}:STRUct:CONFig?" recv_str="{b:@A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelEnable" param="INT32:NUM,ON_OFF_BOOL_TYPE:A" send_str=":DO:CHANnel{NUM}:ENABle {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelEnable" param="INT32:NUM,ON_OFF_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:ENABle?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIRefvolt" param="INT32:NUM,FLOAT:A" send_str=":DI:CHANn el{NUM}:REFVolt {A}" visible="false" ch="ch0"/>
<cmd id="GetDIRefvolt" param="INT32:NUM,FLOAT&amp;:A" send_str=":DI:CHANnel{NUM}:REFVolt?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIRequency" param="INT32:A" send_str=":DI:FREQuency {A}" visible="false" ch="ch0"/>
<cmd id="GetDIRequency" param="INT32&amp;:A" send_str=":DI:FREQuency?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEMoryLENgth" param="INT32&amp;:A" send_str=":DI:MEMory:LENgth?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEMorySAMPrate" param="FLOAT&amp;:A" send_str=":DI:MEMory:SAMPrate?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEMoryDATA" param="INT32&amp;:A" send_str=":DI:MEMory:DATA?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEMoryTIMEStamp" param="UINT64&amp;:A" send_str=":DI:MEMory:TIMEStamp?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIChannelData" param="INT32:NUM,ON_OFF_BOOL_TYPE&amp;:A" send_str=":DI:CHANnel{NUM}:DATA?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIMEASureEnable" param="INT32:NUM,ON_OFF_BOOL_TYPE:A" send_str=":DI:CHANnel{NUM}:MEASure:Enable {A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEASureEnable" param="INT32:NUM,ON_OFF_BOOL_TYPE&amp;:A" send_str=":DI:CHANnel{NUM}:MEASure:Enable?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIMEASureWindow" param="INT32:NUM,FLOAT:A" send_str=":DI:CHANnel{NUM}:MEASure:WINDow {A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEASureWindow" param="INT32:NUM,FLOAT&amp;:A" send_str=":DI:CHANnel{NUM}:MEASure:WINDow?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDIMEASureTimeout" param="INT32:NUM,FLOAT:A" send_str=":DI:CHANnel{NUM}:MEASure:TIMEout {A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEASureTimeout" param="INT32:NUM,FLOAT&amp;:A" send_str=":DI:CHANnel{NUM}:MEASure:TIMEout?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDIMEASureValue" param="INT32:NUM,FLOAT&amp;:A,FLOAT&amp;:B,INT32&amp;:C" send_str=":DI:CHANnel{NUM}:MEASure:VALUE?" recv_str="{A},{B},{C}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelMode" param="INT32:NUM,NORMAL_PWM_BOOL_TYPE:A" send_str=":DO:CHANnel{NUM}:Mode {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelMode" param="INT32:NUM,NORMAL_PWM_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:Mode?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelType" param="INT32:NUM,HIGH_PUSH_BOOL_TYPE:A" send_str=":DO:CHANnel{NUM}:Type {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelType" param="INT32:NUM,HIGH_PUSH_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:Type?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelType" param="INT32:NUM,LOW_HIGH_BOOL_TYPE:A" send_str=":DO:CHANnel{NUM}:VALUe {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelType" param="INT32:NUM,LOW_HIGH_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:VALUe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelPWMPOLArity" param="INT32:NUM,LOW_HIGH_BOOL_TYPE:A" send_str=":DO:CHANnel{NUM}:PWM:POLArity {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelPWMPOLArity" param="INT32:NUM,LOW_HIGH_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:PWM:POLArity?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelPWMWIDTh" param="INT32:NUM,FLOAT:A" send_str=":DO:CHANnel{NUM}:PWM:WIDTh {A}" visible="false" ch="ch0"/>
<cmd id="GetDOChannelPWMWIDTh" param="INT32:NUM,LOW_HIGH_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:PWM:WIDTh?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelPWMPERIod" param="INT32:NUM,FLOAT:A" send_str=":DO:CHANnel{NUM}:PWM:PERIod {A}" visible="false" ch="ch0" comment="Float = [8ns,34359738360ns] 单位为S" />
<cmd id="GetDOChannelPWMPERIod" param="INT32:NUM,LOW_HIGH_BOOL_TYPE&amp;:A" send_str=":DO:CHANnel{NUM}:PWM:PERIod?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelPWMTIMEs" param="INT32:NUM,INT32:A" send_str=":DO:CHANnel{NUM}:PWM:TIMEs {A}" visible="false" ch="ch0" />
<cmd id="GetDOChannelPWMTIMEs" param="INT32:NUM,INT32&amp;:A" send_str=":DO:CHANnel{NUM}:PWM:TIMEs?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDOChannelPWMCOUNt" param="INT32:NUM,INT32:A" send_str=":DO:CHANnel{NUM}:PWM:COUNt {A}" visible="false" ch="ch0" />
<cmd id="GetDOChannelPWMCOUNt" param="INT32:NUM,INT32&amp;:A" send_str=":DO:CHANnel{NUM}:PWM:COUNt?" recv_str="{A}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<doc>
<localsource>
<type type="z_comm:DeviceDataTypeCreator" id="diConfig" vtype="z_comm:DeviceVar" bindType="diParaConfig" AutoAsync="0" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDIConfig" get_func="GetDIConfig" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_">
<!-- <sub_data id="dac_ref_volt" var_type="config" /> -->
<!-- <sub_data id="measure_enable" var_type="config" /> -->
<!-- <sub_data id="measure_window" var_type="config" /> -->
<!-- <sub_data id="measure_time_out" var_type="config" /> -->
</type>
<type type="z_comm:DeviceDataTypeCreator" id="doConfig" vtype="z_comm:DeviceVar" bindType="doParaConfig" connect="" res="Comm" childs="_all_" local_init="" var_type="config" merge_type="0" set_func="SetDOConfig" get_func="GetDOConfig" set_func_param="channelnum,_base_" get_func_param="channelnum,_base_">
<sub_data id="pwm_level" var_type="config" />
<sub_data id="pwm_width" var_type="config" />
<sub_data id="pwm_period" var_type="config" />
<sub_data id="pwm_times" var_type="config" />
<sub_data id="out_mode" var_type="config" />
<sub_data id="out_type" var_type="config" />
<sub_data id="out_value" var_type="config" />
<sub_data id="out_enable_ch" var_type="config" />
</type>
</localsource>
<init_item>
<var id="DIEnable22" vtype="z_comm:DeviceVar" res="Comm" bindType="ON_OFF_BOOL_TYPE" channelnum="NEWITEM(UINT8:1)" var_type="config" set_func="SetDOChannelEnable" set_func_param="channelnum,_base_" get_func="GetDOChannelEnable" get_func_param="channelnum,_base_"/>
<var id="diTest" vtype="diParaConfig"/>
<var id="di1config" vtype="diConfig" channelnum="NEWITEM(UINT8:1)" />
<var id="di2config" vtype="diConfig" channelnum="NEWITEM(UINT8:2)" />
<var id="di3config" vtype="diConfig" channelnum="NEWITEM(UINT8:3)" />
<var id="di4config" vtype="diConfig" channelnum="NEWITEM(UINT8:4)" />
<var id="di5config" vtype="diConfig" channelnum="NEWITEM(UINT8:5)" />
<var id="di6config" vtype="diConfig" channelnum="NEWITEM(UINT8:6)" />
<var id="di7config" vtype="diConfig" channelnum="NEWITEM(UINT8:7)" />
<var id="di8config" vtype="diConfig" channelnum="NEWITEM(UINT8:8)" />
<var id="do1config" vtype="doConfig" channelnum="NEWITEM(UINT8:1)" />
<var id="do2config" vtype="doConfig" channelnum="NEWITEM(UINT8:2)" />
<var id="do3config" vtype="doConfig" channelnum="NEWITEM(UINT8:3)" />
<var id="do4config" vtype="doConfig" channelnum="NEWITEM(UINT8:4)" />
<var id="do5config" vtype="doConfig" channelnum="NEWITEM(UINT8:5)" />
<var id="do6config" vtype="doConfig" channelnum="NEWITEM(UINT8:6)" />
<var id="do7config" vtype="doConfig" channelnum="NEWITEM(UINT8:7)" />
<var id="do8config" vtype="doConfig" channelnum="NEWITEM(UINT8:8)" />
<init id="A" channelnum="NEWITEM(UINT8:8)" />
<var id="DIRun" vtype="z_comm:DeviceVar" bindType="STRING" channelnum="NEWITEM(UINT8:1)" var_type="config" set_func="SetDIRun" set_func_param="_base_" get_func="GetDIRun" get_func_param="_base_"/>
<var id="DIEnable" local_init="OFF" vtype="z_comm:DeviceVar" bindType="ON_OFF_BOOL_TYPE" channelnum="NEWITEM(UINT8:1)" var_type="config" set_func="SetDOChannelEnable" set_func_param="channelnum,_base_" get_func="GetDOChannelEnable" get_func_param="channelnum,_base_"/>
<var id="DI1Data" vtype="z_comm:DeviceVar" bindType="STRING" var_type="config" channelnum="NEWITEM(UINT8:1)" get_func="GetDIChannelData" get_func_param="channelnum,_base_"/>
<var id="DI1MeasureValue" vtype="z_comm:DeviceVar" bindType="diMeaSureValue" var_type="config" channelnum="NEWITEM(UINT8:1)" get_func="GetDIMEASureValue" get_func_param="channelnum,_base_.cycle,_base_.pwmratio,_base_.times,"/>
</init_item>
</doc>

View File

@@ -0,0 +1,94 @@
<cmds>
<!--DSO业务-->
<cmd id="SetDsoSource" param="INT32:NUM,DSO_SOURCE_TYPE:A" send_str=":DSO:CHANnel{NUM}:SOURce {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoSource" param="INT32:NUM,DSO_SOURCE_TYPE&amp;:A" send_str=":DSO:CHANnel{NUM}:SOURce?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoScale" param="INT32:NUM,FLOAT:A" send_str=":DSO:CHANnel{NUM}:SCALe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoScale" param="INT32:NUM,FLOAT&amp;:A" send_str=":DSO:CHANnel{NUM}:SCALe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoOffset" param="INT32:NUM,FLOAT:A" send_str=":DSO:CHANnel{NUM}:OFFSet {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoOffset" param="INT32:NUM,FLOAT&amp;:A" send_str=":DSO:CHANnel{NUM}:OFFSet?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoCoupling" param="INT32:NUM,DSO_COUPLING_TYPE:A" send_str=":DSO:CHANnel{NUM}:COUPling {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoCoupling" param="INT32:NUM,DSO_COUPLING_TYPE&amp;:A" send_str=":DSO:CHANnel{NUM}:COUPling ?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoUnits" param="INT32:NUM,DSO_UNITS_TYPE:A" send_str=":DSO:CHANnel{NUM}:UNITs {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoUnits" param="INT32:NUM,DSO_UNITS_TYPE&amp;:A" send_str=":DSO:CHANnel{NUM}:UNITs?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoProbe" param="INT32:NUM,FLOAT:A" send_str=":DSO:CHANnel{NUM}:PROBe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoProbe" param="INT32:NUM,FLOAT&amp;:A" send_str=":DSO:CHANnel{NUM}:PROBe ?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoFilter" param="INT32:NUM,DSO_FILTER_TYPE:A" send_str=":DSO:CHANnel{NUM}:Filter {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoFilter" param="INT32:NUM,DSO_FILTER_TYPE&amp;:A" send_str=":DSO:CHANnel{NUM}:Filter?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDsoOffsetScope" param="INT32:NUM,FLOAT&amp;:A,FLOAT&amp;:B" send_str=":DSO:CHANnel{NUM}:OFFSet:SCOPe?" recv_str="{A},{B}" visible="false" ch="ch0"/>
<cmd id="SetDsoRunType" param="DSO_RUNOPERATOR_TYPE:A" send_str=":DSO:RUNOperator:TYPE {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoRunType" param="DSO_RUNOPERATOR_TYPE&amp;:A" send_str=":DSO:RUNOperator:TYPE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoRunScale" param="FLOAT:A" send_str=":DSO:RUNOperator:SCALe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoRunScale" param="FLOAT&amp;:A" send_str=":DSO:RUNOperator:SCALe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoRunOffset" param="FLOAT:A" send_str=":DSO:RUNOperator:OFFSet {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoRunOffset" param="FLOAT&amp;:A" send_str=":DSO:RUNOperator:OFFSet?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoRunProbe" param="FLOAT:A" send_str=":DSO:RUNOperator:PROBe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoRunProbe" param="FLOAT&amp;:A" send_str=":DSO:RUNOperator:PROBe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoMathType" param="DSO_RUNOPERATOR_TYPE:A" send_str=":DSO:MATH:TYPE {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoMathType" param="DSO_RUNOPERATOR_TYPE&amp;:A" send_str=":DSO:MATH:TYPE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoMathScale" param="FLOAT:A" send_str=":DSO:MATH:SCALe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoMathScale" param="FLOAT&amp;:A" send_str=":DSO:MATH:SCALe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoMathOffset" param="FLOAT:A" send_str=":DSO:MATH:OFFSet {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoMathOffset" param="FLOAT&amp;:A" send_str=":DSO:MATH:OFFSet?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoMathProbe" param="FLOAT:A" send_str=":DSO:MATH:PROBe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoMathProbe" param="FLOAT&amp;:A" send_str=":DSO:MATH:PROBe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBMode" param="DSO_TIMEBASEMODE_TYPE:A" send_str=":DSO:TIMebase:MODE {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBMode" param="DSO_TIMEBASEMODE_TYPE&amp;:A" send_str=":DSO:TIMebase:MODE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBACQ" param="FLOAT:A" send_str=":DSO:TIMebase:ACQTime {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBACQ" param="FLOAT&amp;:A" send_str=":DSO:TIMebase:ACQTime?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBScale" param="FLOAT:A" send_str=":DSO:TIMebase:SCALe {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBScale" param="FLOAT&amp;:A" send_str=":DSO:TIMebase:SCALe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBOffset" param="FLOAT:A" send_str=":DSO:TIMebase:OFFSet {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBOffset" param="FLOAT&amp;:A" send_str=":DSO:TIMebase:OFFSet?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBOffScope" param="FLOAT&amp;:A,FLOAT&amp;:B" send_str=":DSO:TIMebase:OFFSet:SCOPe?" recv_str="{A},{B}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBDivType" param="DSO_TB_DIVTYPE_TYPE:A" send_str=":DSO:TIMebase:DIVType {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBDivType" param="DSO_TB_DIVTYPE_TYPE&amp;:A" send_str=":DSO:TIMebase:DIVType?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTBSamprate" param="FLOAT:A" send_str=":DSO:TIMebase:SAMPrate {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTBSamprate" param="FLOAT&amp;:A" send_str=":DSO:TIMebase:SAMPrate?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoAcqMdePth" param="INT32:A" send_str=":DSO:ACQuire:MDEPth {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoAcqMdePth" param="INT32&amp;:A" send_str=":DSO:ACQuire:MDEPth?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoAcqType" param="DSO_ACQ_TYPE_TYPE:A" send_str=":DSO:ACQuire:TYPE {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoAcqType" param="DSO_ACQ_TYPE_TYPE&amp;:A" send_str=":DSO:ACQuire:TYPE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigSweep" param="DSO_TRIG_SWEEP_TYPE:A" send_str=":DSO:TRIGger:SWEep {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigSweep" param="DSO_TRIG_SWEEP_TYPE&amp;:A" send_str=":DSO:TRIGger:SWEep?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigHold" param="FLOAT:A" send_str=":DSO:TRIGger:HOLDoff {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigHold" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:HOLDoff?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigAtse" param="UINT8:A" send_str=":DSO:TRIGger:ATSEnsitivity {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigAtse" param="UINT8&amp;:A" send_str=":DSO:TRIGger:ATSEnsitivity?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigSens" param="FLOAT:A" send_str=":DSO:TRIGger:SENSitivity {A}" visible="false" ch="ch0" comment="最小设到0V最大不要超过当前垂直档位*2"/>
<cmd id="GetDsoTrigSens" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:SENSitivity?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigMode" param="DSO_TRG_MODE_TYPE:A" send_str=":DSO:TRIGger:MODE {A}" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigMode" param="DSO_TRG_MODE_TYPE&amp;:A" send_str=":DSO:TRIGger:MODE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigEdge_source" param="DSO_TRG_SOURCE_TYPE:A" send_str=":DSO:TRIGger:EDGE &quot;source={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigEdge_source" param="DSO_TRG_SOURCE_TYPE&amp;:A" send_str=":DSO:TRIGger:EDGE? source" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigEdge_slope" param="DSO_TRG_SLOPE_TYPE:A" send_str=":DSO:TRIGger:EDGE &quot;slope={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigEdge_slope" param="DSO_TRG_SLOPE_TYPE&amp;:A" send_str=":DSO:TRIGger:EDGE? slope" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigEdge_level" param="FLOAT:A" send_str=":DSO:TRIGger:EDGE &quot;level={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigEdge_level" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:EDGE? level" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigPulse_source" param="DSO_TRG_SOURCE_TYPE:A" send_str=":DSO:TRIGger:EDGE &quot;source={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigPulse_source" param="DSO_TRG_SOURCE_TYPE&amp;:A" send_str=":DSO:TRIGger:EDGE? source" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigPulse_when" param="DSO_TRG_SLOPE_TYPE:A" send_str=":DSO:TRIGger:EDGE &quot;slope={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigPulse_when" param="DSO_TRG_SLOPE_TYPE&amp;:A" send_str=":DSO:TRIGger:EDGE? slope" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigPulse_uwidth" param="FLOAT:A" send_str=":DSO:TRIGger:EDGE &quot;level={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigPulse_uwidth" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:EDGE? level" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigPulse_lwidth" param="FLOAT:A" send_str=":DSO:TRIGger:EDGE &quot;level={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigPulse_lwidth" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:EDGE? level" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetDsoTrigPulse_level" param="FLOAT:A" send_str=":DSO:TRIGger:EDGE &quot;level={A}&quot;" visible="false" ch="ch0"/>
<cmd id="GetDsoTrigPulse_level" param="FLOAT&amp;:A" send_str=":DSO:TRIGger:EDGE? level" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="DSOAutoSetup" param="UINT8&amp;:A" send_str=":DSO:AUTO" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="DSODefault" param="" send_str=":DSO:DEFault" visible="false" ch="ch0"/>
<cmd id="SetDsoSwitch" param="RUN_STOP_BOOL_TYPE:value" send_str=":DSO:{value}" visible="false" ch="ch0"/>
<cmd id="GetDsoSwitch" param="RUN_STOP_BOOL_TYPE&amp;:value" send_str=":DSO:RUN?" recv_str="{value}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<import>
<import name="z_comm" />
<include path="#@ZPS_DEVICE_RES#/zps_type.xml" />
<!-- <include path="#@ZPS_DEVICE_RES#/devicevartype.xml" /> -->
<!-- <import name="zps_function" as="zps_function" /> -->
<!-- <import name="zps_device" as="zps_device" /> -->
</import>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<import>
<!-- <import name="z_comm" /> -->
<import name="zps_device" as="zps_device" />
<import name="zps_function" as="zps_function" />
</import>

View File

@@ -0,0 +1,19 @@
<cmds>
<cmd id="Passive_DisturbBus" param="STRING:A" send_str=":CANFD1:RITFR:SELect {A}" visible="false" ch="ch0"/>
<cmd id="Passive_DisturbMatchInfo" param="UIN64:A,UIN64:B,UIN64:C" send_str=":CANFD1:RITFR:MATch {A},{B},{C}" visible="false" ch="ch0"/>
<cmd id="Passive_MatchEnableON" param="" send_str=":CANFD1:RITFR:NORmal:ENAble 1" visible="false" ch="ch0"/>
<cmd id="Passive_MatchEnableOFF" param="" send_str=":CANFD1:RITFR:NORmal:ENAble 0" visible="false" ch="ch0"/>
<cmd id="Passive_MatchDisturbInfo" param="UIN64:A,UIN64:B" send_str=":CANFD1:RITFR:NORmal:SET {A},{B}" visible="false" ch="ch0"/>
<cmd id="Passive_FillBitEnableON" param="" send_str=":CANFD1:RITFR:STUFF:ENAble 1" visible="false" ch="ch0"/>
<cmd id="Passive_FillBitEnableOFF" param="" send_str=":CANFD1:RITFR:STUFF:ENAble 0" visible="false" ch="ch0"/>
<cmd id="Passive_FillBitDisturbInfo" param="UIN64:A" send_str=":CANFD1:RITFR:STUFF:SET {A}" visible="false" ch="ch0"/>
<cmd id="Passive_RitfrEnableON" param="" send_str=":CANFD1:RITFR:ENable 1" visible="false" ch="ch0"/>
<cmd id="Passive_RitfrEnableOFF" param="" send_str=":CANFD1:RITFR:ENable 0" visible="false" ch="ch0"/>
<cmd id="Passive_SetDelay" param="UINT32:A" send_str=":CANFD1:RITFR:DELAY {A}" visible="false" ch="ch0"/>
<cmd id="Passive_SetCycle" param="UINT32:A" send_str=":CANFD1:RITFR:CYCLE:FIXED {A}" visible="false" ch="ch0"/>
<cmd id="Passive_SetRandCycle" param="UINT32:A,UINT32:B" send_str=":CANFD1:RITFR:CYCLE:RANDom {A},{B}" visible="false" ch="ch0"/>
<cmd id="Passive_SetAlways" param="" send_str=":CANFD1:RITFR:CYCLE:ALWAYS" visible="false" ch="ch0"/>
<cmd id="Passive_SetStandTime" param="UINT32:A" send_str=":CANFD1:RITFR:DURAtion {A}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,34 @@
<cmds>
<cmd id="StartSend" param="UINT32:VirCH" send_str=":CANFD:SEND{VirCH}:RUN" visible="false" ch="ch0" comment="开始发送报文"/>
<cmd id="StopSend" param="UINT32:VirCH" send_str=":CANFD:SEND{VirCH}:STOP" visible="false" ch="ch0" comment="停止发送报文"/>
<cmd id="AddData" param="STRING:Name,UINT8_POINT:Buff" send_str=":CANFD:DATA:ADD {Name},{b:Buff}" visible="false" ch="ch0" comment="添加数据"/>
<cmd id="CheckData" param="STRING:Name,UINT32&amp;:Status" send_str=":CANFD:DATA:CHECk? {Name}" recv_str="{Status}" visible="false" ch="ch0"/>
<cmd id="DeleteData" param="STRING:Name" send_str=":CANFD:DATA:REMOve {Name}" visible="false" ch="ch0" comment="移除数据命令"/>
<cmd id="SetSendCycle" param="UINT32:VirCH,UINT32:Cycle" send_str=":CANFD:SEND{VirCH}:SET:CYCLE {Cycle}ms" visible="false" ch="ch0" comment="设置发送周期"/>
<cmd id="SetSendTimes" param="UINT32:VirCH,UINT32:Times" send_str=":CANFD:SEND{VirCH}:SET:TIMES {Times}" visible="false" ch="ch0" comment="设置周期发送次数"/>
<cmd id="SetSendDelay" param="UINT32:VirCH,DOUBLE:Delay" send_str=":CANFD:SEND{VirCH}:SET:Delay {Delay}" visible="false" ch="ch0" comment="设置发送延时"/>
<cmd id="CheckStatus" param="UINT32:VirCH,UINT32&amp;:Status" send_str=":CANFD:SEND{VirCH}:RUN?" recv_str="{Status}" visible="false" ch="ch0"/>
<cmd id="SendAll" param="" send_str=":CANFD:SEND:RUNALL" visible="false" ch="ch0" comment="发送全部"/>
<cmd id="StopAll" param="" send_str=":CANFD:SEND:STOPALL" visible="false" ch="ch0" comment="停止全部发送"/>
<cmd id="BindVirCHData" param="UINT32:VirCH,STRING:Name" send_str=":CANFD:SEND{VirCH}:SET:DATA {Name}" visible="false" ch="ch0" comment="设置通道数据"/>
<cmd id="UnBindVirCHData" param="UINT32:VirCH" send_str=":CANFD:SEND{VirCH}:RESET" visible="false" ch="ch0" comment="解绑通道中的发送数据,和发送全部相关"/>
<cmd id="GetVirCHCount" param="UINT32&amp;:Count" send_str=":CANFD:SEND:NUMBer?" recv_str="{Count}" visible="false" ch="ch0" comment="获取可使用通道资源个数,暂时没在使用"/>
<cmd id="AddLuaScript" param="STRING:Name,UINT8_POINT:Buff" send_str=":LUA:SCRIpt:APPEND {Name}_Receive,{b:Buff}" visible="false" ch="ch0" comment="添加lua脚本用于触发的脚本"/>
<cmd id="DeleteLuaScript" param="STRING:Name" send_str=":LUA:SCRIpt:REMOVE {Name}_Receive" visible="false" ch="ch0" comment="删除lua脚本用于触发的脚本"/>
<cmd id="BindScript" param="UINT32:VirCH,STRING:Name" send_str=":CANFD:SEND{VirCH}:LUA:BIND QEnd,{Name},test.MainFunc" visible="false" ch="ch0" comment="绑定脚本,目前暂时没有使用"/>
<cmd id="UnBindScript" param="UINT32:VirCH" send_str=":CANFD:SEND{VirCH}:LUA:UNBIND QEnd" visible="false" ch="ch0" comment="解绑脚本"/>
<cmd id="BindTriggerScript" param="UINT32:TriggerCH,STRING:Name" send_str=":CANFD{TriggerCH}:RECV:LUA:BIND {Name}_Name,{Name}_Receive,adv,TriggerLua{Name}" visible="false" ch="ch0" comment="触发脚本的绑定"/>
<cmd id="UnBindTriggerScript" param="UINT32:TriggerCH,STRING:Name" send_str=":CANFD{TriggerCH}:RECV:LUA:UNBIND {Name}_Name" visible="false" ch="ch0" comment="触发脚本的解绑"/>
<cmd id="TriggerADVBind" param="UINT32:TriggerCH,STRING:Name,UINT8_POINT:Buff" send_str=":CANFD{TriggerCH}:RECV:LUA:SET:FILTer:ADV {Name}_Name,{b:Buff}" visible="false" ch="ch0" comment="触发的高级过滤器绑定"/>
<!-- <scpi name="Connect" cmd=":CANFD:SEND#@CHNumber#:Connect #@SendChannel#" tips="已经没有在使用" /> -->
<!-- <scpi name="DisConnect" cmd=":CANFD:SEND:DISConnect" tips="已经没有在使用" /> -->
<!-- <scpi name="GetFreeCH" cmd=":CANFD:SEND:free?" tips="已经没有使用" /> -->
<!-- <scpi name="ChildLuaBindAFTER" cmd=":CANFD:DATA:BIND:LUA:EXP AFTER,#@Name#,#@Index#," tips="高级过滤器绑定,目前已经没有再使用"/> -->
<!-- <scpi name="ChildLuaBindBEFORE" cmd=":CANFD:DATA:BIND:LUA:EXP BEFORE,#@Name#,#@Index#," tips="高级过滤器绑定,目前已经没有再使用"/> -->
<!-- <scpi name="SendClear" cmd=":CANFD:SEND:CLEAR" tips="清除所有在底层发送队列中的数据"/> -->
</cmds>

View File

@@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<commenttype comment="数据集公共资源结构">
<axis id="m_CanTimeAxis" vtype="AXIS" basetype="UINT64" init="ratio=0.000000008;offset=0.000000004" comment="y=ax+(offset - ratio/2)" />
<numeric_formatter id="NormalTime" syms="H(D,#/3600,0);;m(D,#%3600/60,0);;s(F,#%60+$-0.0005-#,0);;u(D,(($-#)*1000000)%1000,0);;" out="HH:mm:ss.sss uuu" in="H*3600+m*60+s"/>
<numeric_formatter id="SysTime" syms="H(D,#/3600%24,0);;m(D,#%3600/60,0);;s(F,#%60+$-0.0005-#,0);;u(D,(($-#)*1000000)%1000,0);;" out="HH:mm:ss.sss uuu" in="H*3600+m*60+s"/>
<type type="num" id="FRAME_TIME" vtype="UINT64" format="NormalTime" translate="m_CanTimeAxis"/>
<type type="num" id="DELAY_TIME" vtype="UINT64" format="POSTFIX[3,-1,-1,s]" translate="m_CanTimeAxis"/>
<!-- <type type="num" id="TYPE_OCCUPANCYTIME" vtype="OccupancyTime" /> -->
<type type="struct" id="CANFD_Frame_Struct" comment="该结构用于界面显示" >
<member>
<bit id="structType" vtype="UINT64" comment="" bit="0;8" bitBegin="UINT64" />
<bit id="messageType" vtype="TYPE_CANFD_TYPE" comment="" bit="8;8" />
<bit id="channel" vtype="TYPE_CANFD_CHANNEL" comment="" bit="16;8" />
<bit id="frameIndex" vtype="UINT64" comment="" bit="24;40" />
<bit id="time" vtype="FRAME_TIME" comment="" bit="0;56" bitBegin="UINT64"/>
<bit id="checksum" vtype="TYPE_LIN_CHECKSUM" comment="LIN的校验和" bit="56;8" />
<bit id="timeDelay" vtype="DELAY_TIME" comment="发送报文延时时间" bit="0;32" bitBegin="UINT64"/>
<bit id="baud" vtype="UINT64" comment="LIN的波特率" bit="32;32" />
<bit id="waveInfo" vtype="UINT64" comment="波形信息" bit="0;16" bitBegin="UINT64"/>
<bit id="canhID" vtype="UINT64" comment="CANH波形ID" bit="16;48" />
<bit id="resvice2" vtype="UINT64" comment="" bit="0;16" bitBegin="UINT64"/>
<bit id="canlID" vtype="UINT64" comment="CANL波形ID" bit="16;48" />
<var id="canhOffset" vtype="UINT32" comment="canh偏移地址" />
<var id="canlOffset" vtype="UINT32" comment="canl偏移地址" />
<bit id="time_struct" vtype="TYPE_OCCUPANCYTIME" comment="报文占用时间时间值" bit="0;16" bitBegin="UINT64" />
<bit id="checkType" vtype="UINT64" comment="LIN校验和类型" bit="16;1" />
<bit id="resvice3" vtype="UINT64" comment="报文占用时间保留值" bit="17;1" />
<bit id="esi" vtype="UINT64" comment="esi位,在LIN报文中也是一个错误位" bit="18;1" />
<!--<bit id="occupancyTime" vtype="UINT64" comment="报文占用时间" bit="0;19" bitBegin="UINT64"/> -->
<bit id="errorPoint" vtype="TYPE_CANFD_ERRORNUM" comment="错误编码" bit="19;5" />
<bit id="Dir" vtype="TYPE_CANFD_DIR" comment="报文方向" bit="24;1" />
<bit id="errorType" vtype="TYPE_CANFD_ERRORTYPE" comment="错误类型" bit="25;2" />
<bit id="frameType" vtype="TYPE_CANFD_FRAME" comment="标识位4位" bit="27;4" />
<bit id="frameDLC" vtype="TYPE_CAN_DLC" comment="数据长度编码" bit="31;4" />
<bit id="frameID" vtype="UINT64" comment="帧ID" bit="35;29" />
<var id="Data" vtype="TYPE_CAN_DATA[64]" comment="数据" length="if @frameType&gt;= 7 &amp;&amp; @frameType&lt;=10 then DataLength else if @frameType&amp;1 then 0 else if @frameType&amp;0x4==0x4 then DataLength else if @frameDLC&gt;8 then 8 else DataLength" />
<!-- NOTE: 下面的fn已经废弃需要在 system/dataset2/canfd_zps/dataset.cpp 中维护 -->
<!-- <fn id="WaveFlag" vtype="UINT16" comment="暂时只判断通道1默认通道1有" data=":channel==1"/> -->
<fn id="WaveFlag" vtype="UINT16" comment="嵌入式提供的waveInfo中有波形的时候值为32896没有波形为0" data=":waveInfo==32896&amp;&amp;channel==1"/>
<fn id="DataLength" vtype="TYPE_CAN_LENGTH_DLC" comment="帧数据长度,非fd帧最大长度是8DLC是编码非FD帧可以16但是数据长度是实际长度" data=":IF (@frameType == 14 || @frameType == 12 || @frameType == 6 || @frameType == 4 || @frameType == 15) THEN (@frameDLC) ELSE (IF(@frameType==1||@frameType == 3) THEN (0) ELSE (IF(@frameDLC &gt; 8) THEN (8) ELSE (@frameDLC))) "/>
<fn id="HexFrameID" vtype="UINT32_HEX" comment="16进制ID" data=":frameID"/>
<fn id="frameTypeFormat" vtype="TYPE_CANFD_TYPE_EXT" comment="errorPoint右移 4位 + frameTypeerrorPoint等于0时表示正确帧应答位错误需要显示正常信息" data=":IF ((@errorPoint*16) &gt; 14) THEN 13 ELSE (@frameType)"/>
<!-- <fn id="frameTypeFormat" vtype="TYPE_CANFD_TYPE_EXT" comment=" errorPoint右移 4位 + frameTypeerrorPoint等于0时表示正确帧应答位错误需要显示正常信息" data=":IF (@errorPoint*16 + @frameType &gt; 14) THEN 15 ELSE (@frameType)"/> -->
<fn id="frameErrorTypeFormat" vtype="TYPE_CANFD_ERROR_TYPE_EXT" comment="" data=":IF (@errorType!=3) THEN @errorType ELSE (IF (@errorPoint==13) THEN 3 ELSE (IF (@errorPoint==15) THEN 4 ELSE 5))" />
<fn id="LINPidFormat" vtype="STRING" comment="" data="ZPS_LINPID_FORMAT(frameID)" />
<fn id="ErrorPointCombine" vtype="TYPE_FRAME_ERRORNUM_COMBINE" comment="LIN和CAN错误的集合" data="if @messageType==0 then @errorPoint else (@errorPoint + @esi*32)" />
<!--<func id="Update" auto="EventItemUpdated">
<ctr id="unionStruct.DATA" target="SetLength:${frameDLC}"/>
</func>-->
<!-- <fn id="occupancyTime" vtype="UINT64" comment="" data="(@timeValue &lt;&lt;@shiftValue)*12.5" /> -->
</member>
<localsource>
<publicproperty type="category" caption="CANFD Struct" ErrorInfo="DYNAMIC(#$ErrorPointCombine##$errorType#)" CsvInfo="DYNAMIC(frameType:#@frameType#)" AscInfo="DYNAMIC(resvice0:#$resvice0#,resvice1:#$resvice1#,resvice2:#$resvice2#,waveInfo:#$waveInfo#,canhID:#$canhID#,canlID:#$canlID#,canhOffset:#$canhOffset#,canlOffset:#$canlOffset#,timeDelay:#$timeDelay#,occupancyTime:#$occupancyTime#,errorPoint:#$errorPoint#,Dir:#@Dir#,errorType:#$errorType#,frameType:#@frameType#,frameDLC:#$frameDLC#,frameID:#$frameID#,Data:#$Data#,structType:#$structType#,messageType:#@messageType#,channel:#$channel#,frameIndex:#$frameIndex#,WaveFlag:#$WaveFlag#&#10;)">
</publicproperty>
</localsource>
</type>
<type type="struct" id="CANFD_Struct_Sort">
<space size="8" />
<bit id="time" vtype="UINT64" comment="" bit="0;56" bitBegin="UINT64" />
<space size="32" />
<fn id="nano_time" vtype="UINT64" data="time*8" />
</type>
<type type="struct" id="CANFD_Struct_Channel">
<bit id="id" vtype="UINT32" comment="" bit="16;8" bitBegin="UINT64" />
<space size="56" />
</type>
</commenttype>
<CanfdDataSet>
<var id="CANListCtr" vtype="DataSetListReadSource">
<local>
<var>
<var id="scrollModel" vtype="INT8" type="enum" value="0" caption="显示方式" tooltip="显示方式" option="自动滚屏;停止滚屏" />
<var id="addFilter" vtype="INT8" type="button" value="0" caption="添加过滤" tooltip="添加过滤" />
<var id="delFilter" vtype="INT8" type="button" value="0" caption="删除过滤" tooltip="删除过滤" />
<var id="enableFilter" vtype="INT8" type="button" value="0" caption="使能过滤" tooltip="使能过滤" />
<var id="editFilter" vtype="INT8" type="button" value="0" caption="编辑过滤" tooltip="编辑过滤" />
<postfix id="System" scale="1" lsd="0"/>
<postfix id="Relativ" scale="10" lsd="0"/>
<postfix id="Increment" scale="100" lsd="0"/>
<format id="SELF_ID_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="SELF_DATA_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<!-- <format id="SELF_DLC_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/> -->
<format id="SELF_TIME_FORMAT" options="系统时间:System;相对时间:Relativ;增量时间:Increment;系统传播延时:SystemreportDelaytime"/>
<property id="DataOpt" caption="DATA字段数据显示方式配置" type="category">
<item type="edit" id="DataIpInterval" vtype="UINT32" caption="间隔字节数" def="8" />
<item type="edit" id="DataIpText" vtype="STRING" caption="间隔符号" def=" "/>
</property>
</var>
<property id="ListParam" caption="数值格式显示">
<ptr id="m_IDFormat" type="enum" caption="ID" tooltip="CAN ID格式化方法" bind="SELF_ID_FORMAT.property"/>
<ptr id="m_DATAFormat" type="enum" caption="DATA" tooltip="CAN DATA格式化方法" bind="SELF_DATA_FORMAT.property"/>
<!-- <ptr id="m_DLCFormat" type="enum" caption="DLC" tooltip="CAN DLC格式化方法" bind="SELF_DLC_FORMAT.property"/> -->
<ptr id="m_TIMEFormat" type="enum" caption="TIME格式化" tooltip="CAN TIME格式化方法" bind="SELF_TIME_FORMAT.property"/>
</property>
</local>
<auto>
<item id="frameID" bind="format=SELF_ID_FORMAT"/>
<item id="Data" bind="format=SELF_DATA_FORMAT;interval=DataOpt.DataIpInterval;interpolation=DataOpt.DataIpText"/>
<!-- <item id="frameDLC" bind="format=SELF_DLC_FORMAT"/> -->
<item id="time" bind="format=SELF_TIME_FORMAT"/>
<!-- <item id="Data" bind="interval=DataOpt.DataIpInterval;interpolation=DataOpt.DataIpText" /> -->
</auto>
</var>
<var id="ElementType" vtype="TypeItem" value="CANFD_Frame_Struct" />
<var id="ElementSort" vtype="TypeItem" value="CANFD_Struct_Sort" />
<var id="ChannelId" vtype="TypeItem" value="CANFD_Struct_Channel" />
<var id="SystemBaseTime" vtype="UINT64" value="123456789"/>
</CanfdDataSet>
<WaveHeadDataSet>
<type type="struct" id="Wave_Head_Struct" comment="该结构用于界面显示" >
<bit id="HeadByte" vtype="UINT64" comment="包头" bit="0;8" bitBegin="UINT64" />
<bit id="Channel" vtype="UINT64" comment="通道" bit="8;8" />
<bit id="WaveID" vtype="UINT64" comment="块ID" bit="16;48" />
<var id="WaveStartTime" vtype="UINT64" comment="开始时间"/>
<var id="SampleRate" vtype="UINT16" comment="采样率"/>
<var id="CompressCode" vtype="UINT16" comment="压缩码"/>
<var id="Scale" vtype="FLOAT" comment="档位"/>
<var id="Offset" vtype="FLOAT" comment="偏移"/>
<var id="DataLengthInPage" vtype="UINT32" comment="包长度"/>
<var id="reservebyte1" vtype="UINT64" comment="保留字段"/>
<var id="reservebyte2" vtype="UINT64" comment="保留字段"/>
<bit id="WaveMin" vtype="UINT64" comment="最小值" bit="0;12" bitBegin="UINT64" />
<bit id="reserve1" vtype="UINT64" comment="保留位" bit="12;4" />
<bit id="WaveMax" vtype="UINT64" comment="最大值" bit="16;12" />
<bit id="reserve2" vtype="UINT64" comment="保留位" bit="28;36" />
<var id="reservebyte3" vtype="UINT64" comment="保留字段"/>
<!-- <func id="Update" auto="EventItemUpdated">
<ctr id="unionStruct.DATA" target="SetLength:${frameDLC}"/>
</func> -->
</type>
<var id="WaveHeadListCtr" vtype="DataSetListReadSource">
<columns BackColor="">
<column name="CWaveID" select="1" title="块ID" width="70" toolips="块ID" alignment = "AlignCenter" />
<column name="CWaveStartTime" select="1" title="开始时间" width="100" toolips="开始时间" alignment = "AlignCenter" />
<column name="CCompressCode" select="1" title="压缩码" width="70" toolips="压缩码" alignment = "AlignCenter" />
<column name="CSampleRate" select="1" title="采样率" width="70" toolips="采样率" alignment = "AlignCenter" />
<column name="CScale" select="1" title="档位" width="70" toolips="档位" alignment = "AlignCenter"/>
<column name="COffset" select="1" title="偏移" width="70" toolips="偏移" alignment = "AlignCenter" />
<column name="CDataLengthInPage" select="1" title="包长度" width="70" toolips="包长度" alignment = "AlignCenter"/>
<column name="CMax" select="1" title="最小值" width="70" toolips="最小值" alignment = "AlignCenter" />
<column name="CMin" select="1" title="最大值" width="70" toolips="最大值" alignment = "AlignCenter" />
</columns>
<defaultline>
<item type = "text" name = "CWaveID" value = "WaveID"/>
<item type = "text" name = "CWaveStartTime" value = "WaveStartTime"/>
<item type = "text" name = "CSampleRate" value = "SampleRate"/>
<item type = "text" name = "CCompressCode" value = "CompressCode"/>
<item type = "text" name = "CScale" value = "Scale" />
<item type = "text" name = "COffset" value = "Offset" />
<item type = "text" name = "CDataLengthInPage" value = "DataLengthInPage" />
<item type = "text" name = "CMin" value = "WaveMin" />
<item type = "text" name = "CMax" value = "WaveMax" />
</defaultline>
<lineinfos mainKey="HeadByte" BackColor="">
<line key="包头固定值" BackColor="" defaultline="1">
</line>
</lineinfos>
</var>
<var id="ElementType" vtype="TypeItem" value="Wave_Head_Struct" />
</WaveHeadDataSet>
<FilterIndexDataset>
<type type="struct" id="Filter_Index_Struct" comment="该结构用于存储" >
<var id="ChannelID" vtype="UINT8" comment="通道编号"/>
<var id="Index" vtype="UINT32" comment="单通道内的索引"/>
</type>
<var id="ElementType" vtype="TypeItem" value="Filter_Index_Struct" />
</FilterIndexDataset>
<ScanDataset>
<type type="struct" id="Scan_Index_Struct" comment="该结构用于存储" >
<var id="Index" vtype="UINT32" comment="单通道内的索引"/>
</type>
<var id="ElementType" vtype="TypeItem" value="CANFD_Frame_Struct" />
<var id="ElementSort" vtype="TypeItem" value="CANFD_Struct_Sort" />
<!-- <var id="ChannelId" vtype="TypeItem" value="CANFD_Struct_Channel" /> -->
</ScanDataset>
<LogcatDataSet>
<localsource>
<!-- spdlog::log_level -->
<alias id="LOG_TYPE" key="INT8" value="STRING">
<item name="TRACE" value="0" />
<item name="DEBUG" value="1" />
<item name="INFO" value="2" />
<item name="WARNING" value="3" />
<item name="ERROR" value="4" />
<item name="CRITICAL" value="5" />
</alias>
<type type="num" id="LogLevel" vtype="UINT8" translate="LOG_TYPE" />
<type type="struct" id="LogcatView">
<var id="time" vtype="CHAR[32]" />
<var id="level" vtype="LogLevel" />
<var id="tid" vtype="UINT32" />
<var id="msg" vtype="CHAR[512]" />
</type>
<var id="ElementType" vtype="TypeItem" value="LogcatView" />
</localsource>
</LogcatDataSet>
<SystemReportDataSet>
<type type="struct" id="SystemReport_Struct" comment="该结构用于界面显示" >
<var id="Head" vtype="UINT32" comment="包头" />
<var id="Delay" vtype="UINT32" comment="延迟时间" />
<var id="Times" vtype="UINT32" comment="次数" />
<var id="Channel" vtype="UINT8" comment="开始时间"/>
<var id="Res0" vtype="UINT8[3]" comment="保留位"/>
<var id="Reserve1" caption="保留位3" vtype="UINT8[4]" />
<var id="Index" caption="索引" vtype="UINT32" />
<bit id="Reserve1" vtype="UINT64" comment="保留位" bit="0;27" bitBegin="UINT64"/>
<bit id="frameType" vtype="TYPE_CANFD_FRAME" comment="标识位4位" bit="27;4" />
<bit id="frameDLC" vtype="TYPE_CAN_DLC" comment="数据长度编码" bit="31;4" />
<bit id="frameID" vtype="UINT64" comment="帧ID" bit="35;29" />
<var id="Data" vtype="TYPE_CAN_DATA[64]" comment="数据" length="if @frameType&gt;= 7 &amp;&amp; @frameType&lt;=10 then DataLength else if @frameType&amp;1 then 0 else if @frameType&amp;0x4==0x4 then DataLength else if @frameDLC&gt;8 then 8 else DataLength" />
<fn id="DataLength" vtype="TYPE_CAN_LENGTH_DLC" comment="帧数据长度,非fd帧最大长度是8DLC是编码非FD帧可以16但是数据长度是实际长度" data=":IF (@frameType == 14 || @frameType == 12 || @frameType == 6 || @frameType == 4 || @frameType == 15) THEN (@frameDLC) ELSE (IF(@frameType==1||@frameType == 3) THEN (0) ELSE (IF(@frameDLC &gt; 8) THEN (8) ELSE (@frameDLC))) "/>
</type>
<var id="ElementType" vtype="TypeItem" value="SystemReport_Struct" />
</SystemReportDataSet>
</root>

View File

@@ -0,0 +1,68 @@
<root>
<imports>
<import name="zps_device" as="zps_device" />
<import name="zps_function" as="zps_function" />
</imports>
<localsource>
<type type="z_comm:DeviceType" id="DevCom" path="#@ZPS_DEVICE_RES#/source/dev/pa_comm.ztdev" />
</localsource>
<cpp_funcs>
<!--<cpp_func id="ZPS_SampointTest">
<params>
<param comment="帧ID" data_type_value="INT32" default_value="" description="" edit_type_value="EDIT" editable="0" id="帧ID" type_value="IN" />
<param comment="帧DLC" data_type_value="INT32" default_value="" description="" edit_type_value="EDIT" editable="0" id="帧DLC" type_value="IN" />
<param comment="测试变速" data_type_value="INT32" default_value="" description="" edit_type_value="EDIT" editable="0" id="测试变速" type_value="IN" />
<param comment="Rx数据通道接在DSO1/DSO2" data_type_value="INT32" default_value="" description="" edit_type_value="EDIT" option="DSO1;DSO2" editable="0" id="Rx数据通道" type_value="IN" />
<param comment="采样点结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="采样点结果" type_value="OUT" />
</params>
</cpp_func>-->
<cpp_func id="ZPS_SampointTest">
<params>
<param comment="是否测试变速域" value="0" data_type_value="INT32" default_value="0" description="" edit_type_value="EDIT" editable="0" id="是否测试变速域" type_value="IN" />
<param comment="仲裁域采样点结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="仲裁域采样点结果" type_value="OUT" />
<param comment="数据域采样点结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="数据域采样点结果" type_value="OUT" />
</params>
</cpp_func>
<cpp_func id="ZPS_Can1Config">
<params>
<param comment="仲裁域波特率" value="1000000" data_type_value="DOUBLE" default_value="1000000" description="" edit_type_value="EDIT" editable="0" id="仲裁域波特率" type_value="IN" />
<param comment="仲裁域采样点位置" value="75" data_type_value="DOUBLE" default_value="75" description="" edit_type_value="EDIT" editable="0" id="仲裁域采样点位置" type_value="IN" />
<param comment="数据域波特率" value="1000000" data_type_value="DOUBLE" default_value="1000000" description="" edit_type_value="EDIT" editable="0" id="数据域波特率" type_value="IN" />
<param comment="数据域采样点位置" value="75" data_type_value="DOUBLE" default_value="75" description="" edit_type_value="EDIT" editable="0" id="数据域采样点位置" type_value="IN" />
<param comment="是否接入电阻" value="1" data_type_value="INT32" default_value="1" description="" edit_type_value="EDIT" editable="0" id="是否接入电阻" type_value="IN"/>
</params>
</cpp_func>
<cpp_func id="ZPS_SimpleSend">
<params>
<param comment="发送通道" value="1" data_type_value="INT32" default_value="1" description="" edit_type_value="EDIT" editable="0" id="发送通道" type_value="IN" />
<param comment="发送周期" value="1" data_type_value="INT32" default_value="1" description="" edit_type_value="EDIT" editable="0" id="发送周期" type_value="IN" />
<param comment="发送次数" value="1" data_type_value="INT32" default_value="1" description="" edit_type_value="EDIT" editable="0" id="发送次数" type_value="IN" />
<param comment="报文ID" value="1" data_type_value="INT32" default_value="1" description="" edit_type_value="EDIT" editable="0" id="报文ID" type_value="IN" />
<param comment="报文DLC" value="8" data_type_value="INT32" default_value="8" description="" edit_type_value="EDIT" editable="0" id="报文DLC" type_value="IN"/>
<param comment="是否为扩展帧" value="0" data_type_value="INT32" default_value="0" description="" edit_type_value="EDIT" editable="0" id="是否发送扩展帧" type_value="IN"/>
<param comment="是否为FD帧" value="0" data_type_value="INT32" default_value="0" description="" edit_type_value="EDIT" editable="0" id="是否发送FD帧" type_value="IN"/>
<param comment="是否为变速帧" value="0" data_type_value="INT32" default_value="0" description="" edit_type_value="EDIT" editable="0" id="是否发送变速帧" type_value="IN"/>
<param comment="帧数据" value="00 00 00 00 00 00 00 00" data_type_value="STRING" default_value="00 00 00 00 00 00 00 00" description="" edit_type_value="EDIT" editable="0" id="帧数据" type_value="IN"/>
</params>
</cpp_func>
<cpp_func id="ZPS_DomRecTest">
<params>
<!--->param comment="CANH显性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANH显性结果" type_value="OUT" />
<param comment="CANH隐性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANH隐性结果" type_value="OUT" />
<param comment="CANL显性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANL显性结果" type_value="OUT" />
<param comment="CANL隐性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANL隐性结果" type_value="OUT" /-->
<param comment="测试样本数量" value="1" data_type_value="INT32" default_value="" description="" edit_type_value="EDIT" editable="0" id="测试样本数量" type_value="IN"/>
<param comment="显性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANDIFF显性" type_value="OUT"/>
<param comment="隐性结果" data_type_value="DOUBLE" default_value="" description="" edit_type_value="EDIT" editable="0" id="CANDIFF隐性" type_value="OUT"/>
</params>
</cpp_func>
<cpp_func id="ZPS_Can1Open" >
<params>
</params>
</cpp_func>
<cpp_func id="ZPS_Can1Close" >
<params>
</params>
</cpp_func>
</cpp_funcs>
</root>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<device ztdev_version="1.0">
<baseinfo author="致远仪器" comment="" company="致远仪器" create_time="2024-05-22 15:09:38" device_name="ZPS" device_type_value="CANFD总线分析仪" modify_time="2024-05-22 15:33:20" version="1.0" />
<connect>
<links LinkPiror="" DefaultPort="5025" />
</connect>
<cmds protocal_type="SCPI" Eof="\r\n" />
</device>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<config>
<datamng temp="#@APP_DATA#/Temp/" minmemory="8" maxmemory="1024" block="8" cache="1"/>
<!-- <viewmng config="#@APP_PATH#/source/ui/ViewManager.xml"/> -->
<!-- <measure path="#@APP_PATH#/source/measure/measuremanager.xml"/> -->
</config>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<types>
<AppSettings>
<localsource>
<publicproperty id="Z" caption="系统属性设置" type="category">
<childgroup childs="cachePath;commMethods;ip;port">
<item id="cachePath" type="file" caption="文件路径" width="150" btn_text="..." btn_toolTip="选择文件" readonly="true" value="" isfolder="1"/>
</childgroup>
</publicproperty>
</localsource>
</AppSettings>
</types>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<doc version="20190709" UnitName="project">
<create_unit id="MTAUnit">
<!-- <type type="unit" id="ZDSUnitType" unitInit="\source\zds\device_zds.xml" unitType="\source\zds\type_zds.xml"/> -->
<type type="unit" id="MTAUnitType" unitInit="\source\mta\mta.xml" unitType="\source\mta\mta_type.xml"/>
</create_unit>
</doc>

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" ?>
<senddata version="20200219">
<outputdata>
<localsource>
<alias id="SEND_TYPE_ALIAS" key="UINT32">
<!-- <item name="立即" value="DIREct"/> -->
<item name="普通发送" value="2"/>
<item name="触发发送" value="6"/>
<!-- <item name="错误发送" value="ERROR"/> -->
</alias>
<alias id="SEND_STATUS_ALIAS">
<item name="发送" value="0"/>
<item name="停止" value="1"/>
</alias>
<memberfunc id="constructor" comment="在创建完成后进行初始化">
<!-- <ctr id="Channel" ctr="SubEvent ValueChange" callback="ChannlChange()"/> -->
<func name="ChannlChange"/>
</memberfunc>
<memberfunc id="release" comment="在析构时调用的函数">
<func name="StopSend"/>
</memberfunc>
<memberfunc id="ChannlChange" comment="在析构时调用的函数">
<setter data="SendType.option=AUTO(parent.Channel.bind.TriggerFactory.TriggerTypes)"/>
<!-- <setter data="SendDataType.option=AUTO(parent.Channel.bind.SendDataTypes)"/> -->
</memberfunc>
<!-- <publicproperty Info="DYNAMIC(通道:#@Channel.bind.caption#,发送类型:#$SendType#,数据类型:#$SendDataType#,#@TriggerInfo.Info#)"> -->
<publicproperty confirmbtn="1" canclebtn="1" Info="DYNAMIC(通道:#@Channel.bind.caption#,发送类型:#$SendType#,#@TriggerInfo.Info#)">
<!-- <childgroup id="aaa" caption="bbb" childs="Channel;SendType;Cycle;Times;TriggerInfo;SendData"> -->
<childgroup id="aaa" caption="bbb" childs="Channel;SendType;CHILD(TriggerInfo)">
<item id="Status" enabled="1"/>
<item id="Description" type="edit" />
<item id="Channel" type="enum_s" caption="发送通道" option="AUTO(OutputMng.SendChannel:caption)" tooltip="选择发送所需要的通道" on_BindChanged="parent.ChannlChange" />
<item id="SendType" type="enum_s" caption="发送类型" tooltip="选择发送类型" />
<!-- <item id="SendDataType" type="enum_s" caption="数据类型" tooltip="选择数据类型"/> -->
<!-- <item id="Cycle" type="edit" caption="发送周期" value_unit="ms" regexp="" -->
<!-- visible="INT8(IF @parent.SendType==`DIREct` THEN 0 ELSE 1)" /> -->
<!-- <item id="Times" type="edit" caption="发送次数" value_unit="次" regexp="" tooltip="" -->
<!-- visible="INT8(IF @parent.SendType==`DIREct` THEN 0 ELSE 1)" /> -->
</childgroup>
<triggers>
<trigger id="Channel">
<log text="channel11111111"/>
</trigger>
</triggers>
</publicproperty>
</localsource>
</outputdata>
<sendDataViewListConfig>
<!--
<columns BackColor="">
<column name="SendChannel" title="通道" width="70" toolips=""/>
<column name="SendType" title="发送类型" width="60" toolips=""/>
<column name="CycleDelay" title="延时(s)" width="70" toolips=""/>
<column name="CycleTime" title="周期(s)" width="70" toolips=""/>
<column name="SendTimes" title="次数(次)" width="70" toolips=""/>
<column name="Info" title="数据" width="400" toolips=""/>
<column name="SendStatus" title="状态" width="70" toolips=""/>
<column name="delete" title="操作" width="70" toolips=""/>
</columns>
<lineinfos BackColor="">
<line key="" BackColor="">
<item type="text" name="SendChannel" value="Channel.bind.bind.caption" comment="是否支持列表使用Channel.listenable"/>
<item type="text" name="SendType" value="SendType.value"/>
<item type="text" name="CycleTime" value="Cycle" />
<item type="text" name="SendTimes" value="Times" />
<item type="text" name="Info" value="SendData.Info" />
<item type="button" name="SendStatus" value="Status" eventName="SendMSG" />
<item type="image_button" name="delete" value="" eventName="Delete" />
</line>
</lineinfos>
-->
<columns BackColor="">
<!-- <column name="SendChannel" title="通道选择" width="60" toolips=""/> -->
<column name="SendInfo" title="发送信息" width="1000" toolips=""/>
<!-- <column name="moveup" title="操作" width="70" toolips=""/> -->
<!-- <column name="moveoff" title="操作" width="70" toolips=""/> -->
<!-- <column name="add" title="操作" width="70" toolips=""/> -->
<!-- <column name="delete" title="操作" width="70" toolips=""/> -->
<column name="Status" title="状态" width="70" toolips=""/>
</columns>
<lineinfos BackColor="">
<line key="default" child="SendItem.SendList" BackColor="">
<!-- <item type="text" name="SendChannel" value="Channel.bind.bind.caption" comment="是否支持列表使用Channel.listenable"/> -->
<item type="text" name="SendInfo" value="Info" comment=""/>
<item type="image_button" name="add" value="" eventName="Add" />
<item type="image_button" name="moveup" value="" eventName="Moveup" />
<item type="image_button" name="moveoff" value="" eventName="Moveoff" />
<item type="image_button" name="delete" value="" eventName="Delete" />
<item type="image_button" name="Status" value="Status" eventName="Status" />
</line>
<line key="StructSendData" BackColor="">
<item type="text" name="SendInfo" value="Info" comment="子数据信息"/>
<item type="image_button" name="moveup" value="" eventName="Moveup" />
<item type="image_button" name="moveoff" value="" eventName="Moveoff" />
<item type="image_button" name="delete" value="" eventName="Delete" />
</line>
<line key="DisturData" BackColor="">
<item type="text" name="SendInfo" value="Info" comment="子数据信息"/>
<item type="image_button" name="moveup" value="" eventName="Moveup" />
<item type="image_button" name="moveoff" value="" eventName="Moveoff" />
<item type="image_button" name="delete" value="" eventName="Delete" />
</line>
</lineinfos>
</sendDataViewListConfig>
</senddata>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,822 @@
<?xml version="1.0" encoding="UTF-8" ?>
<types version="20190709">
<alias id="FFT_AXISTYPE_FORMAT" key="UINT16">
<item name="相对线性" value="0"/>
<item name="对数" value="1"/>
</alias>
<alias id="FFT_SHOWTYPE_FORMAT" key="UINT16">
<item name="Ampl" value="0"/>
<item name="dBm" value="1"/>
<item name="Vrms" value="2"/>
<item name="PSD" value="3"/>
</alias>
<alias id="FFT_WINTYPE_FORMAT" key="UINT16">
<item name="矩形窗" value="0"/>
<item name="汉宁窗" value="1"/>
<item name="海明窗" value="2"/>
<item name="布莱克曼" value="3"/>
</alias>
<alias id="FFT_COUNT_FORMAT" key="UINT16">
<item name="1K" value="0"/>
<item name="2K" value="1"/>
<item name="4K" value="2"/>
<item name="1M" value="3"/>
<item name="2M" value="4"/>
</alias>
<alias id="CAN_FRAME_DIR_Format" key="UINT8" comment="这是can数据的方向">
<item name="T" value="0"/>
<item name="R" value="16"/>
</alias>
<alias id="CANFD_FRAME_DIR_Format" key="UINT8" comment="这是canfd数据的方向">
<item name="R" value="0"/>
<item name="T" value="1" />
</alias>
<alias id="CAN_FRAME_TYPE_Format" key="UINT8">
<item name="标准数据帧" value="0"/>
<item name="标准远程帧" value="1"/>
<item name="扩展数据帧" value="2"/>
<item name="扩展远程帧" value="3"/>
<item name="错误帧" value="4"/>
</alias>
<alias id="REVEICEDISTURB_TYPE_Format" key="UINT32">
<item name="显性干扰成隐性" value="0"/>
<item name="隐性干扰成显性" value="1"/>
</alias>
<alias id="REVEICEDISTURBBIT_TYPE_Format" key="UINT32">
<item name="非填充位" value="0"/>
<item name="填充位" value="1"/>
</alias>
<alias id="SEND_CANFD_FRAME_TYPE_Format" key="UINT8" comment="该格式转换用于界面发送列表显示">
<item name="标准数据帧" value="0"/>
<item name="标准远程帧" value="1"/>
<item name="扩展数据帧" value="2"/>
<item name="扩展远程帧" value="3"/>
<item name="标准CANFD帧" value="4"/>
<item name="扩展CANFD帧" value="6"/>
<item name="LIN主机请求帧" value="7"/>
<item name="LIN主机应答帧" value="8"/>
<item name="LIN从机应答帧" value="9"/>
<item name="LIN未知帧" value="10"/>
<item name="变速标准CANFD帧" value="12"/>
<item name="变速扩展CANFD帧" value="14"/>
</alias>
<alias id="SEND_FRAME_TYPE_Format" key="UINT8" comment="该格式转换用于界面发送列表显示">
<item name="标准帧" value="0"/>
<item name="扩展帧" value="1"/>
</alias>
<alias id="SEND_FRAME_CHANNEL_TYPE_Format" key="UINT8" comment="该格式转换用于界面发送列表显示">
<item name="CAN1" value="1"/>
<item name="CAN2" value="2"/>
<item name="CAN3" value="3"/>
</alias>
<alias id="SEND_FRAME_FORMAT_Format" key="UINT8" comment="该格式转换用于界面发送列表显示">
<item name="数据帧" value="0"/>
<item name="远程帧" value="1"/>
</alias>
<alias id="SEND_FRAME_DATATYPE_Format" key="STRING" comment="该格式转换用于界面发送列表显示">
<item name="自增" value="GENERAL" />
<item name="错误" value="ERROR" />
</alias>
<alias id="CANFD_FRAME_TYPE_Format" key="UINT16" comment="该格式转换用于界面报文列表显示">
<item name="标准数据帧" value="0"/>
<item name="标准远程帧" value="1"/>
<item name="扩展数据帧" value="2"/>
<item name="扩展远程帧" value="3"/>
<item name="标准CANFD帧" value="4"/>
<item name="扩展CANFD帧" value="6"/>
<item name="变速标准CANFD帧" value="12"/>
<item name="LIN主机请求帧" value="7"/>
<item name="LIN主机应答帧" value="8"/>
<item name="LIN从机应答帧" value="9"/>
<item name="LIN未知帧" value="10"/>
<item name="变速扩展CANFD帧" value="14"/>
<item name="错误帧" value="13" comment="该操作在dataset_type.xml的frameTypeFormat做处理"/>
</alias>
<alias id="CANFD_ERROR_TYPE_Format" key="UINT16" comment="该格式转换用于统计时的五大错误类型">
<item name="位错误" value="0"/>
<item name="格式错误" value="1"/>
<item name="填充错误" value="2"/>
<item name="CRC错误" value="3"/>
<item name="应答位错误" value="4"/>
<item name="正确帧" value="5"/>
</alias>
<alias id="REALTIMEBUSSTATUS_TYPE_Format" key="UINT8" comment="实时统计状态改变">
<item name="总线关闭" value="0"/>
<item name="正常通信" value="1"/>
<item name="总线无变化" value="2"/>
<item name="波特率错误" value="3"/>
<item name="电压错误" value="4"/>
</alias>
<alias id="ZPS_DEVICE_CONNECT_TYPE_Format" key="UINT8">
<item name="USB" value="0"/>
<item name="TCP" value="1"/>
</alias>
<alias id="ZPS_DEVICE_IPMODE_TYPE_Format" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="静态IP" value="STATic"/>
<item name="DHCP" value="DHCP"/>
</alias>
<alias id="ZPS_DEVICE_CONNECTSTATE_TYPE_Format" key="UINT8" comment="示波器捕获模式格式化">
<item name="未连接" value="0"/>
<item name="已连接" value="1"/>
</alias>
<alias id="CAN_DLC_LENGTH_ALIAS" key="UINT8" >
<item name="0" value="0"/>
<item name="1" value="1"/>
<item name="2" value="2"/>
<item name="3" value="3"/>
<item name="4" value="4"/>
<item name="5" value="5"/>
<item name="6" value="6"/>
<item name="7" value="7"/>
<item name="8" value="8"/>
<item name="12" value="9"/>
<item name="16" value="10"/>
<item name="20" value="11"/>
<item name="24" value="12"/>
<item name="32" value="13"/>
<item name="48" value="14"/>
<item name="64" value="15"/>
</alias>
<alias id="CAN_SEND_DLC_ALIAS" key="UINT8" >
<item name="00" value="0"/>
<item name="01" value="1"/>
<item name="02" value="2"/>
<item name="03" value="3"/>
<item name="04" value="4"/>
<item name="05" value="5"/>
<item name="06" value="6"/>
<item name="07" value="7"/>
<item name="08" value="8"/>
<item name="09" value="9"/>
<item name="0A" value="10"/>
<item name="0B" value="11"/>
<item name="0C" value="12"/>
<item name="0D" value="13"/>
<item name="0E" value="14"/>
<item name="0F" value="15"/>
</alias>
<alias id="CAN_SEARCH_DLC_ALIAS" key="UINT8" >
<item name="0x00" value="0"/>
<item name="0x01" value="1"/>
<item name="0x02" value="2"/>
<item name="0x03" value="3"/>
<item name="0x04" value="4"/>
<item name="0x05" value="5"/>
<item name="0x06" value="6"/>
<item name="0x07" value="7"/>
<item name="0x08" value="8"/>
<item name="0x09" value="9"/>
<item name="0x0A" value="10"/>
<item name="0x0B" value="11"/>
<item name="0x0C" value="12"/>
<item name="0x0D" value="13"/>
<item name="0x0E" value="14"/>
<item name="0x0F" value="15"/>
</alias>
<alias id="CANFD_CHANNEL_FORMAT" key="UINT8">
<item name="1" value="0"/>
<item name="2" value="1"/>
<item name="3" value="2"/>
</alias>
<alias id="CANFD_CONDITIONGROUP_FORMAT" key="UINT32">
<item name="And" value="0"/>
<item name="Or" value="1"/>
<item name="Not And" value="2"/>
<item name="Not Or" value="3"/>
</alias>
<alias id="PHY_WAVE_DIV" key="UINT32">
<item name="1" value="0"/>
<item name="2" value="1"/>
<item name="5" value="4"/>
<item name="10" value="9"/>
</alias>
<alias id="CANFD_TYPE_Format" >
<item name="CAN报文" value="53"/>
<item name="LIN报文" value="155"/>
<item name="格式错误" value="0"/>
</alias>
<alias id="DSO_ACQUIRETYPE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="标准" value="NORMal"/>
<item name="峰值" value="PEAK"/>
<item name="高分辨率" value="HRESolution"/>
</alias>
<alias id="DSO_TIMEBASEDIVTYPE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="采样时间" value="ACQTime"/>
<!-- <item name="采样率" value="SAMPrate"/> -->
</alias>
<alias id="PHY_ENABLE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="使能" value="ON"/>
<item name="禁能" value="OFF"/>
</alias>
<alias id="CAN_CHMODEL_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="LIN模式" value="LIN"/>
<item name="CAN模式" value="CAN"/>
</alias>
<alias id="LIN_PROTOCOL_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="1.x" value="1X"/>
<item name="2.x" value="2X"/>
</alias>
<alias id="LIN_MODEL_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="主机" value="MASter"/>
<item name="从机" value="SLAve"/>
</alias>
<alias id="LIN_NODE_MODEL_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="监听模式" value="MONitor"/>
<!-- <item name="正常模式" value="NORmal"/> -->
</alias>
<alias id="LIN_SOURCESELECT_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="外部电源" value="EXTernal"/>
<item name="内部电源" value="INTerior"/>
</alias>
<alias id="CAN_CHTERMINATOR_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="不接入电阻" value="OFF"/>
<item name="接入120Ω" value="ON"/>
</alias>
<alias id="PHY_INTERNALMODE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="静默模式" value="SILent"/>
<item name="正常模式" value="NORmal"/>
</alias>
<alias id="PHY_TRANINTERNAL_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="不接入" value="NONE"/>
<item name="外部CAN收发器" value="Extend"/>
<item name="内部CAN收发器" value="STAndard"/>
</alias>
<alias id="PHY_RECRODMODE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="帧触发" value="TRIG"/>
<!-- <item name="全采样" value="ALL"/> -->
<!-- <item name="触发采样" value="CAN1"/> -->
<!-- <item name="全采样" value="ANY"/> -->
<item name="正确帧触发" value="NORMAL"/>
<item name="错误帧触发" value="ERROR"/>
</alias>
<alias id="TRIGGER_TYPE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="完全触发" value="ANY" />
<item name="标准数据帧" value="DATA" />
<item name="标准远程帧" value="REMOTE" />
<item name="拓展数据帧" value="EXDATA" />
<item name="拓展远程帧" value="EXREMOTE" />
<item name="标准CANFD数据帧" value="DATA_F" />
<item name="拓展CANFD数据帧" value="EXDATA_F" />
<item name="变速标准CANFD数据帧" value="DATA_FS" />
<item name="变速拓展CANFD数据帧" value="EXDATA_FS" />
</alias>
<alias id="TRIGGER_FRAMETYPE_FORMAT" key="STRING" value="STRING" comment="帧类型格式化">
<item name="标准帧" value="" />
<item name="扩展帧" value="EX" />
</alias>
<alias id="TRIGGER_FRAMEFORMAT_FORMAT" key="STRING" value="STRING" comment="帧格式格式化">
<item name="数据帧" value="DATA" />
<item name="远程帧" value="REMOTE" />
</alias>
<alias id="TRIGGER_DIRECTION_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="双向" value="BOTH" />
<item name="发送" value="OUT" />
<item name="接收" value="IN" />
</alias>
<alias id="TRIGGER_LOGICCONDI_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="&amp;&amp;" value="AND" />
<item name="||" value="OR" />
</alias>
<alias id="TRIGGER_DLC_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="任意帧长度" value="ANY" />
<item name="0" value="0" />
<item name="1" value="1" />
<item name="2" value="2" />
<item name="3" value="3" />
<item name="4" value="4" />
<item name="5" value="5" />
<item name="6" value="6" />
<item name="7" value="7" />
<item name="8" value="8" />
<item name="9" value="9" />
<item name="10" value="10" />
<item name="11" value="11" />
<item name="12" value="12" />
<item name="13" value="13" />
<item name="14" value="14" />
<item name="15" value="15" />
</alias>
<alias id="DIOOUT_SIGNALTYPE_FORMAT" key="STRING" value="STRING" comment="数字逻辑IO输出信号类型格式化">
<item name="PWM" value="PWM" />
<item name="直流信号" value="NORmal" />
</alias>
<alias id="OUT_EFFECTIVE_LEVEL_FORMAT" key="STRING" value="STRING" comment="数字逻辑IO输出信号输出有效电平">
<item name="高电平" value="HIGH"/>
<item name="低电平" value="LOW "/>
</alias>
<alias id="LAOUT_SIGNALTYPE_FORMAT" key="STRING" value="STRING" comment="模拟IO输出信号类型格式化">
<item name="方波" value="SQUAre" />
<item name="正弦波" value="SIN" />
<item name="三角波" value="TRIAngle" />
<item name="锯齿波" value="SWATooth" />
<item name="直流信号" value="DC" />
</alias>
<alias id="PHY_VIDS_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="内部干扰源" value="INTernal"/>
<item name="外部干扰源" value="EXTernal"/>
</alias>
<alias id="PHY_CANPOLE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="负电池" value="NEGative"/>
<item name="正电池" value="POSitive"/>
</alias>
<alias id="PHY_RESENABLE_FORMAT" key="STRING" value="STRING" comment="示波器捕获模式格式化">
<item name="断开" value="OFF"/>
<item name="连接" value="ON"/>
</alias>
<alias id="CANFD_FRAME_ERRORNUM_FORMAT" key="UINT8" value="STRING" comment="帧错误位置">
<item name="ASC导入的错误帧" value="1" comment="00001" />
<item name="基本ID" value="3" comment="00011" />
<item name="RTR/SRR/RRS" value="4" comment="00100" />
<item name="IDE" value="5" comment="00101" />
<item name="基本帧的FDF" value="6" comment="00110" />
<item name="扩展ID" value="7" comment="00111" />
<item name="扩展帧的RTR/RRS" value="8" comment="01000" />
<item name="扩展帧的FDF" value="9" comment="01001" />
<item name="RES" value="10" comment="01010" />
<item name="R0" value="11" comment="01011" />
<item name="BRS" value="12" comment="01100" />
<item name="ESI" value="13" comment="01101" />
<item name="DLC" value="14" comment="01110" />
<item name="帧数据" value="15" comment="01111" />
<item name="CRC" value="16" comment="10000" />
<item name="CRC定界符" value="17" comment="10001" />
<item name="应答位" value="18" comment="10010" />
<item name="应答定界符" value="19" comment="10011" />
<item name="帧结束" value="20" comment="10100" />
<item name="错误帧" value="21" comment="10101" />
<item name="错误定界符" value="22" comment="10110" />
<item name="过载帧" value="23" comment="10111" />
<item name="过载定界符" value="24" comment="11000" />
<item name="帧间隔" value="25" comment="11001" />
<item name="显性位容限" value="30" comment="11110" />
<item name="CRC固定填充位" value="31" comment="11111" />
<item name="" value="0" comment="00000" />
<!-- <item name="未知" value="__default__" comment="都不匹配时,显示默认项" /> -->
</alias>
<alias id="FRAME_ERRORNUM_COMBINE_FORMAT" key="UINT8" value="STRING" comment="帧错误位置">
<item name="ASC导入的错误帧" value="1" comment="00001" />
<item name="基本ID" value="3" comment="00011" />
<item name="RTR/SRR/RRS" value="4" comment="00100" />
<item name="IDE" value="5" comment="00101" />
<item name="基本帧的FDF" value="6" comment="00110" />
<item name="扩展ID" value="7" comment="00111" />
<item name="扩展帧的RTR/RRS" value="8" comment="01000" />
<item name="扩展帧的FDF" value="9" comment="01001" />
<item name="RES" value="10" comment="01010" />
<item name="R0" value="11" comment="01011" />
<item name="BRS" value="12" comment="01100" />
<item name="ESI" value="13" comment="01101" />
<item name="DLC" value="14" comment="01110" />
<item name="帧数据" value="15" comment="01111" />
<item name="CRC" value="16" comment="10000" />
<item name="CRC定界符" value="17" comment="10001" />
<item name="应答位" value="18" comment="10010" />
<item name="应答定界符" value="19" comment="10011" />
<item name="帧结束" value="20" comment="10100" />
<item name="错误帧" value="21" comment="10101" />
<item name="错误定界符" value="22" comment="10110" />
<item name="过载帧" value="23" comment="10111" />
<item name="过载定界符" value="24" comment="11000" />
<item name="帧间隔" value="25" comment="11001" />
<item name="显性位容限" value="30" comment="11110" />
<item name="CRC固定填充位" value="31" comment="11111" />
<item name="" value="0" comment="00000" />
<item name="LIN发送Break" value="33" comment="100001" />
<item name="LIN无效数据" value="34" comment="100010" />
<item name="LIN同步字段" value="35" comment="100011" />
<item name="LINID校验" value="36" comment="100100" />
<item name="LIN累加和校验" value="37" comment="100101" />
<item name="LIN数据" value="38" comment="100110" />
<!-- <item name="未知" value="__default__" comment="都不匹配时,显示默认项" /> -->
</alias>
<alias id="SAERCH_ERRORNUM_FORMAT" key="UINT8" value="STRING" comment="帧错误位置">
<item name="基本ID错误" value="3" comment="00011" />
<item name="RTR/SRR/RRS错误" value="4" comment="00100" />
<item name="IDE错误" value="5" comment="00101" />
<item name="基本帧的FDF错误" value="6" comment="00110" />
<item name="扩展ID错误" value="7" comment="00111" />
<item name="扩展帧的RTR/RRS错误" value="8" comment="01000" />
<item name="扩展帧的FDF错误" value="9" comment="01001" />
<item name="RES错误" value="10" comment="01010" />
<item name="R0错误" value="11" comment="01011" />
<item name="BRS错误" value="12" comment="01100" />
<item name="ESI错误" value="13" comment="01101" />
<item name="DLC错误" value="14" comment="01110" />
<item name="帧数据错误" value="15" comment="01111" />
<item name="CRC错误" value="16" comment="10000" />
<item name="CRC定界符错误" value="17" comment="10001" />
<item name="应答位错误" value="18" comment="10010" />
<item name="应答定界符错误" value="19" comment="10011" />
<item name="帧结束错误" value="20" comment="10100" />
<item name="错误帧错误" value="21" comment="10101" />
<item name="错误定界符错误" value="22" comment="10110" />
<item name="过载帧错误" value="23" comment="10111" />
<item name="过载定界符错误" value="24" comment="11000" />
<item name="帧间隔错误" value="25" comment="11001" />
<item name="显性位容限错误" value="30" comment="11110" />
<item name="CRC固定填充位错误" value="31" comment="11111" />
<item name="无错误" value="0" comment="00000" />
<item name="LIN发送Break错误" value="33" comment="100001" />
<item name="LIN无效数据错误" value="34" comment="100010" />
<item name="LIN同步字段错误" value="35" comment="100011" />
<item name="LINID校验错误" value="36" comment="100100" />
<item name="LIN累加和校验错误" value="37" comment="100101" />
<item name="LIN数据错误" value="38" comment="100110" />
</alias>
<alias id="CANFD_FRAME_ERRORTYPE_FORMAT" key="UINT8" value="STRING" comment="错误类型">
<item name="位错误" value="0" comment="00" />
<item name="错误" value="1" comment="01" comment="需求:格式错误不显示格式两个字"/>
<item name="填充错误" value="2" comment="10" />
<item name="错误" value="3" comment="11" comment="需求:其他错误不显示其他两个字"/>
</alias>
<alias id="SEARCH_FRAME_ERRORTYPE_FORMAT" key="UINT8" value="STRING" comment="错误类型">
<item name="位错误" value="0" comment="00" />
<item name="格式错误" value="1" comment="01"/>
<item name="填充错误" value="2" comment="10" />
<item name="其他错误" value="3" comment="11" comment="需求:其他错误不显示其他两个字"/>
</alias>
<alias id="DATA_INCREASE_FORMAT" key="UINT32" comment="自增显示">
<item name="true" value="1" />
<item name="false" value="0" />
</alias>
<alias id="CANFD_YESORNOT_FORMAT" key="UINT32" comment="自增显示">
<item name="false" value="0" />
<item name="true" value="1" />
</alias>
<alias id="CYCLESTATISTICS_SORTTYPE_FORMAT" key="UINT32" comment="周期统计排序内容">
<item name="ID" value="0" />
<item name="平均周期" value="1" />
<item name="最大周期" value="2" />
<item name="最小周期" value="3" />
</alias>
<alias id="SORTTYPE_DIRECT_FORMAT" key="UINT32" comment="排序方向">
<item name="升序" value="0" />
<item name="降序" value="1" />
</alias>
<alias id="CAN_SENDFAILSTRATEGY_FORMAT" key="UINT8" comment="通道发送失败后的策略">
<item name="失败继续" value="0" />
<item name="失败停止" value="1" />
</alias>
<alias id="DATA_ERRORTYPE_FORMAT" key="UINT32" comment="干扰位置">
<item name="标准ID" value="0" />
<item name="扩展ID" value="1" />
<item name="RTR" value="2" />
<item name="SRR" value="3" />
<item name="RRS" value="4" />
<item name="BRS" value="5" />
<item name="ESI" value="7" />
<item name="数据长度编码" value="8" />
<item name="帧数据" value="9" />
<item name="CRC" value="10" />
<item name="CRC定界符" value="11" />
<item name="应答位" value="12" />
<item name="应答定界符" value="13" />
<item name="帧结束" value="14" />
<item name="自定义" value="15" />
</alias>
<!-- <alias id="DATA_ERRORTYPE_FORMAT" key="UINT32" comment="干扰位置">
<item name="标准ID" value="0" />
<item name="扩展ID" value="2" />
<item name="扩展R1" value="3" />
<item name="R0" value="5" />
<item name="位速率切换" value="6" />
<item name="错误状态位" value="7" />
<item name="数据长度编码" value="8" />
<item name="帧数据" value="9" />
<item name="CRC" value="10" />
<item name="CRC定界符" value="11" />
<item name="应答位" value="12" />
<item name="应答定界符" value="13" />
<item name="帧结束" value="14" />
<item name="自定义" value="15" />
</alias> -->
<alias id="DATA_DISTURTYPE_FORMAT" key="UINT32" comment="干扰类型">
<item name="单位干扰" value="0" />
<item name="多位干扰" value="1" />
</alias>
<alias id="DSO_TIMEBASEMODE_FORMAT" key="STRING" value="STRING" comment="示波器水平时基模式格式化">
<item name="主模式" value="NORM"/>
<item name="滚动模式" value="ROLL"/>
</alias>
<alias id="DSO_COUPING_FORMAT" key="STRING" value="STRING" comment="示波器耦合方式格式化">
<item name="直流耦合" value="DC"/>
<item name="交流耦合" value="AC"/>
<item name="GND" value="GND"/>
</alias>
<alias id="DSO_SOURCE_FORMAT_CHA" key="STRING" value="STRING" comment="示波器耦合方式格式化">
<item name="DSO_1" value="EXT"/>
<item name="CAN1_差分" value="CAN_DIFF"/>
<item name="CAN1_H" value="CAN_H"/>
<item name="CAN1_L" value="CAN_L"/>
</alias>
<alias id="DSO_SOURCE_FORMAT_CHB" key="STRING" value="STRING" comment="示波器耦合方式格式化">
<item name="DSO_2" value="EXT"/>
<item name="CAN1_差分" value="CAN_DIFF"/>
<item name="CAN1_H" value="CAN_H"/>
<item name="CAN1_L" value="CAN_L"/>
</alias>
<alias id="DSO_BWLIMIT_FORMAT" key="STRING" value="STRING" comment="示波器带宽限制格式化">
<item name="0" value="FIL_OFF"/>
<item name="1" value="FIL_20M"/>
<!-- 当前没有设置命令,默认全带宽 -->
<!-- <item name="20M" value="20M"/> -->
</alias>
<alias id="DSO_TERMINATOR_FORMAT" key="STRING" value="STRING" comment="示波器带宽限制格式化">
<item name="1M" value="1M"/>
</alias>
<alias id="DSO_UNITS_FORMAT" key="STRING" value="STRING" comment="示波器探头类型格式化">
<item name="电压探头" value="VOLTage"/>
<item name="电流探头" value="AMPere"/>
</alias>
<alias id="DSO_TRIGERSWEEP_FORMAT" key="STRING" value="STRING" comment="示波器触发方式格式化">
<item name="自动触发" value="AUTO"/>
<item name="普通触发" value="NORMal"/>
</alias>
<alias id="DSO_TRIGERMODE_FORMAT" key="STRING" value="STRING" comment="示波器触发类型格式化">
<item name="边沿触发" value="EDGE"/>
<item name="脉宽触发" value="PULSe"/>
</alias>
<alias id="DSO_TRIGEREDGESLOPE_FORMAT" key="STRING" value="STRING" comment="示波器边沿类型格式化">
<item name="上升沿触发" value="POSitive"/>
<item name="下降沿触发" value="NEGative"/>
<item name="双边沿触发" value="EITHer"/>
</alias>
<alias id="DSO_TRIGERPULSEWHEN_FORMAT" key="STRING" value="STRING" comment="示波器边沿类型格式化">
<item name="正脉宽大于" value="PGReater"/>
<item name="正脉宽小于" value="PLESs"/>
<item name="正脉宽区间" value="PGLess"/>
<item name="负脉宽大于" value="NGReater"/>
<item name="负脉宽小于" value="NLESs"/>
<item name="负脉宽区间" value="NGLess"/>
</alias>
<alias id="DSO_ACQUIREMDEPTH_FORMAT" key="STRING" value="STRING" comment="示波器边沿类型格式化">
<item name="1K" value="1000"/>
<item name="10K" value="10000"/>
<item name="100K" value="100000"/>
<item name="1M" value="1000000"/>
<item name="10M" value="10000000"/>
<item name="32M" value="32000000"/>
</alias>
<alias id="DSO_PROBE_V_FORMAT" key="DOUBLE" value="DOUBLE" comment="示波器探头衰减比(电压)">
<item name="0.1" value="0.1" />
<item name="0.2" value="0.2" />
<item name="0.5" value="0.5" />
<item name="1" value="1" />
<item name="2" value="2" />
<item name="5" value="5" />
<item name="10" value="10" />
<item name="20" value="20" />
<item name="50" value="50" />
<item name="100" value="100" />
<item name="200" value="200" />
<item name="500" value="500" />
<item name="1000" value="1000" />
</alias>
<alias id="DSO_PROBE_A_FORMAT" key="DOUBLE" value="DOUBLE" comment="示波器探头衰减比(电流)">
<item name="10" value="0.1" />
<item name="5" value="0.2" />
<item name="2" value="0.5" />
<item name="1" value="1" />
<item name="0.5" value="2" />
<item name="0.2" value="5" />
<item name="0.1" value="10" />
<item name="0.05" value="20" />
<item name="0.02" value="50" />
<item name="0.01" value="100" />
<item name="0.005" value="200" />
<item name="0.002" value="500" />
<item name="0.001" value="1000" />
</alias>
<alias id="AI_RANGE_FORMAT" key="STRING" value="STRING" comment="AI测量范围">
<item name="12V" value="12V"/>
<item name="60V" value="60V"/>
</alias>
<alias id="ABT_DATA_FORMAT" key="STRING" value="STRING" comment="仲裁域和数据域">
<item name="仲裁域波特率" value="仲裁域波特率"/>
<item name="数据域波特率" value="数据域波特率"/>
</alias>
<alias id="CACLYNEW_FORMAT" key="UINT32" comment="总线负载率计算的只计算新数据状态">
<item name="最新数据" value="1"/>
<item name="所有数据" value="0"/>
</alias>
<alias id="EXSELECT_FORMAT" key="UINT32" comment="传播延迟外部收发器参数选择选项">
<item name="预设-快速收发器" value="0"/>
<item name="预设-慢速收发器" value="1"/>
<item name="预设-置0" value="2"/>
<item name="用户自定义..." value="3"/>
<item name="从文件中加载..." value="4"/>
</alias>
<alias id="WORKMODEL_TYPE_FORMAT" key="UINT32" comment="传播延迟工作模式">
<item name="主动模式" value="0"/>
<item name="被动模式" value="1"/>
<!-- <item name="被动模式-实时报文" value="2"/> -->
</alias>
<alias id="BUSRATEBEGINETIME_FORMAT" key="UINT8" comment="总线负载率计算历史数据从哪开始的">
<item name="基于设备开机时间" value="0"/>
<item name="基于报文首帧" value="1"/>
</alias>
<alias id="UNITTIME_FORMAT" key="UINT32" comment="总线负载率计算的单位时间">
<item name="1ms" value="1"/>
<item name="2ms" value="2"/>
<item name="5ms" value="5"/>
<item name="10ms" value="10"/>
<item name="20ms" value="20"/>
<item name="50ms" value="50"/>
<item name="100ms" value="100"/>
<item name="200ms" value="200"/>
<item name="500ms" value="500"/>
<item name="1s" value="1000"/>
</alias>
<postfix id="System" scale="1" lsd="0"/>
<postfix id="Relativ" scale="10" lsd="0"/>
<postfix id="Increment" scale="100" lsd="0"/>
<format id="CAN_ID_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="CAN_DATA_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="CAN_SEND_ID_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="CAN_SEND_DATA_FORMAT" options="Hex:HexFormat;Dec:FixDec"/>
<format id="CAN_DLC_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="LIN_CHECKSUM_FORMAT" options="Hex:HexFormat;Dec:DecFormat"/>
<format id="CAN_TIME_FORMAT" options="系统时间:System;相对时间:Relativ;增量时间:Increment"/>
<!-- <format id="CAN_TIME_FORMAT" options="系统时间:System;相对时间:Relativ;增量时间:Increment;系统重播延时:SystemreportDelaytime"/> -->
<type type="num" id="FFT_SHOWTYPE" vtype="UINT16" translate="FFT_SHOWTYPE_FORMAT"/>
<type type="num" id="FFT_AXISTYPE" vtype="UINT16" translate="FFT_AXISTYPE_FORMAT"/>
<type type="num" id="FFT_WINTYPE" vtype="UINT16" translate="FFT_WINTYPE_FORMAT"/>
<type type="num" id="FFT_COUNT" vtype="UINT16" translate="FFT_COUNT_FORMAT"/>
<type type="num" id="DSO_ACQUIREMDEPTH_TYPE" vtype="STRING" translate="DSO_ACQUIREMDEPTH_FORMAT"/>
<type type="num" id="TYPE_CAN_DATA" vtype="UINT8" format="CAN_DATA_FORMAT"/>
<type type="num" id="DATA_INCREASE_TYPE" vtype="UINT32" translate="DATA_INCREASE_FORMAT"/>
<type type="num" id="CANFD_YESORNOT_TYPE" vtype="UINT8" translate="CANFD_YESORNOT_FORMAT"/>
<type type="num" id="DATA_ERRORTYPE_TYPE" vtype="UINT32" translate="DATA_ERRORTYPE_FORMAT"/>
<type type="num" id="DATA_DISTURTYPE_TYPE" vtype="UINT32" translate="DATA_DISTURTYPE_FORMAT"/>
<type type="num" id="CAN_SENDFAILSTRATEGY_TYPE" vtype="UINT32" translate="CAN_SENDFAILSTRATEGY_FORMAT"/>
<type type="num" id="REVEICEDISTURBBIT_TYPE" vtype="UINT32" translate="REVEICEDISTURBBIT_TYPE_Format"/>
<type type="num" id="REVEICEDISTURB_TYPE" vtype="UINT32" translate="REVEICEDISTURB_TYPE_Format"/>
<type type="num" id="TYPE_CAN_ID" vtype="UINT16" format="CAN_ID_FORMAT"/>
<type type="num" id="TYPE_CAN_ID_Ext" vtype="UINT32" format="CAN_ID_FORMAT"/>
<type type="num" id="TYPE_CAN_TYPE" vtype="UINT8" translate="CAN_FRAME_TYPE_Format"/>
<type type="num" id="TYPE_CANFD_TYPE" vtype="UINT8" translate="SEND_CANFD_FRAME_TYPE_Format"/>
<type type="num" id="TYPE_SEND_TYPE" vtype="UINT8" translate="SEND_FRAME_TYPE_Format"/>
<type type="num" id="TYPE_SEND_CHANNEL_TYPE" vtype="UINT8" translate="SEND_FRAME_CHANNEL_TYPE_Format"/>
<type type="num" id="TYPE_FRAME_DATATYPE" vtype="STRING" translate="SEND_FRAME_DATATYPE_Format"/>
<type type="num" id="TYPE_FORMAT_TYPE" vtype="UINT8" translate="SEND_FRAME_FORMAT_Format"/>
<type type="num" id="TYPE_CANFD_TYPE_EXT" vtype="UINT16" translate="CANFD_FRAME_TYPE_Format"/>
<type type="num" id="TYPE_CANFD_ERROR_TYPE_EXT" vtype="UINT16" translate="CANFD_ERROR_TYPE_Format"/>
<type type="num" id="REALTIMEBUSSTATUS_TYPE" vtype="UINT8" translate="REALTIMEBUSSTATUS_TYPE_Format"/>
<type type="num" id="TYPE_DEVICE_CONNECT_TYPE" vtype="UINT8" translate="ZPS_DEVICE_CONNECT_TYPE_Format"/>
<type type="num" id="TYPE_DEVICE_IPMODE_TYPE" vtype="STRING" translate="ZPS_DEVICE_IPMODE_TYPE_Format"/>
<type type="num" id="TYPE_DEVICE_CONNECTSTATE_TYPE" vtype="UINT8" translate="ZPS_DEVICE_CONNECTSTATE_TYPE_Format"/>
<type type="num" id="TYPE_CAN_DIR" vtype="UINT8" translate="CAN_FRAME_DIR_Format"/>
<type type="num" id="TYPE_CANFD_DIR" vtype="UINT8" translate="CANFD_FRAME_DIR_Format"/>
<type type="num" id="TYPE_CAN_DLC" vtype="UINT8" format="CAN_DLC_FORMAT"/>
<type type="num" id="TYPE_LIN_CHECKSUM" vtype="UINT8" format="LIN_CHECKSUM_FORMAT"/>
<type type="num" id="TYPE_SEND_CAN_DLC" vtype="UINT8" format="CAN_SEND_DLC_ALIAS"/>
<varex id="FixDec" vtype="DEC[3]"/>
<varex id="FixHex" vtype="HEX[8]"/>
<var id="ValueSelectListID" vtype="LIST_CTR" value="FixHex;DecFormat" comment="CAN ID格式化方法"/>
<var id="ValueSelectListData" vtype="LIST_CTR" value="HexFormat;FixDec" comment="CAN Data格式化方法"/>
<var id="SendIDFormat" type="enum_s" vtype="POINT" caption="ID" tooltip="CAN ID格式化方法" def="FixHex" option="AUTO(ValueSelectListID:caption)" title_ex="STRING(IF __base!=FixHex then `Dec` else `Hex`)" />
<var id="SendDataFormat" type="enum_s" vtype="POINT" caption="DATA" tooltip="CAN DATA格式化方法" def="HexFormat" option="AUTO(ValueSelectListData:caption)" title_ex="STRING(IF __base!=HexFormat then `Dec` else __base:caption)" />
<type type="num" id="TYPE_CAN_SEND_DATA" vtype="UINT8" format="SendDataFormat"/>
<type type="num" id="TYPE_CAN_SEND_ID" vtype="UINT32" format="SendIDFormat"/>
<type type="num" id="TYPE_CAN_SEND_ID_NO_FORMAT_SWITCH" vtype="UINT32" format="FixHex"/>
<type type="num" id="TYPE_CAN_SEND_DATA_NO_FORMAT_SWITCH" vtype="UINT8" format="HexFormat"/>
<type type="num" id="TYPE_CAN_LENGTH_DLC" vtype="UINT8" translate="CAN_DLC_LENGTH_ALIAS"/>
<type type="num" id="TYPE_CANFD_CHANNEL" vtype="UINT8" translate="CANFD_CHANNEL_FORMAT"/>
<type type="num" id="TYPE_CANFD_FRAME" vtype="UINT32" translate="SEND_CANFD_FRAME_TYPE_Format"/>
<type type="num" id="TYPE_CANFD_ERRORNUM" vtype="UINT8" translate="CANFD_FRAME_ERRORNUM_FORMAT"/>
<type type="num" id="TYPE_SEARCH_ERRORNUM" vtype="UINT8" translate="SAERCH_ERRORNUM_FORMAT"/>
<type type="num" id="TYPE_FRAME_ERRORNUM_COMBINE" vtype="UINT8" translate="FRAME_ERRORNUM_COMBINE_FORMAT"/>
<type type="num" id="TYPE_SEARCH_ERRORTYPE" vtype="UINT8" translate="SEARCH_FRAME_ERRORTYPE_FORMAT"/>
<type type="num" id="TYPE_CANFD_ERRORTYPE" vtype="UINT8" translate="CANFD_FRAME_ERRORTYPE_FORMAT"/>
<type type="num" id="DSO_ACQUIRETYPE" vtype="STRING" translate="DSO_ACQUIRETYPE_FORMAT"/>
<type type="num" id="DSO_TIMEBASEDIVTYPE" vtype="STRING" translate="DSO_TIMEBASEDIVTYPE_FORMAT"/>
<type type="num" id="PHY_INTERNALMODE_TYPE" vtype="STRING" translate="PHY_INTERNALMODE_FORMAT"/>
<type type="num" id="PHY_TRANINTERNAL_TYPE" vtype="STRING" translate="PHY_TRANINTERNAL_FORMAT"/>
<type type="num" id="PHY_WAVE_DIV_TYPE" vtype="UINT32" translate="PHY_WAVE_DIV"/>
<type type="num" id="PHY_ENABLE_TYPE" vtype="STRING" translate="PHY_ENABLE_FORMAT"/>
<type type="num" id="PHY_VIDS_TYPE" vtype="STRING" translate="PHY_VIDS_FORMAT"/>
<type type="num" id="PHY_CANPOLE_TYPE" vtype="STRING" translate="PHY_CANPOLE_FORMAT"/>
<type type="num" id="PHY_RESENABLE_TYPE" vtype="STRING" translate="PHY_RESENABLE_FORMAT"/>
<type type="num" id="CAN_CHMODEL_TYPE" vtype="STRING" translate="CAN_CHMODEL_FORMAT"/>
<type type="num" id="LIN_PROTOCOL_TYPE" vtype="STRING" translate="LIN_PROTOCOL_FORMAT"/>
<type type="num" id="LIN_MODEL_TYPE" vtype="STRING" translate="LIN_MODEL_FORMAT"/>
<type type="num" id="LIN_NODE_MODEL_TYPE" vtype="STRING" translate="LIN_NODE_MODEL_FORMAT"/>
<type type="num" id="LIN_SOURCESELECT_TYPE" vtype="STRING" translate="LIN_SOURCESELECT_FORMAT"/>
<type type="num" id="CAN_CHTERMINATOR_TYPE" vtype="STRING" translate="CAN_CHTERMINATOR_FORMAT"/>
<type type="num" id="PHY_RECRODMODE_TYPE" vtype="STRING" translate="PHY_RECRODMODE_FORMAT"/>
<type type="num" id="TRIGGER_TYPE" vtype="STRING" translate="TRIGGER_TYPE_FORMAT"/>
<!--触发类型-->
<type type="num" id="TRIGGER_FRAMETYPE" vtype="STRING" translate="TRIGGER_FRAMETYPE_FORMAT"/>
<!--帧类型-->
<type type="num" id="TRIGGER_FRAMEFORMAT" vtype="STRING" translate="TRIGGER_FRAMEFORMAT_FORMAT"/>
<!--帧格式-->
<type type="num" id="TRIGGER_DIRECTION" vtype="STRING" translate="TRIGGER_DIRECTION_FORMAT"/>
<!--触发方向-->
<type type="num" id="TRIGGER_LOGICCONDI" vtype="STRING" translate="TRIGGER_LOGICCONDI_FORMAT"/>
<!--逻辑条件-->
<type type="num" id="TRIGGER_DLC" vtype="STRING" translate="TRIGGER_DLC_FORMAT"/>
<!--DLC-->
<type type="num" id="DIOOUT_SIGNALTYPE" vtype="STRING" translate="DIOOUT_SIGNALTYPE_FORMAT"/>
<!--数字逻辑IO DO信号类型-->
<type type="num" id="DIOOUT_EFFECTIVE_LEVEL" vtype="STRING" translate="OUT_EFFECTIVE_LEVEL_FORMAT"/>
<type type="num" id="LAOUT_SIGNALTYPE" vtype="STRING" translate="LAOUT_SIGNALTYPE_FORMAT"/>
<!--模拟IO输出 AO信号类型-->
<type type="num" id="DSO_TIMEBASEMODE_TYPE" vtype="STRING" translate="DSO_TIMEBASEMODE_FORMAT"/>
<type type="num" id="DSO_COUPING" vtype="STRING" translate="DSO_COUPING_FORMAT"/>
<!-- <type type="num" id="DSO_SOURCE" vtype="STRING" translate="DSO_SOURCE_FORMAT"/> -->
<type type="num" id="DSO_BWLIMIT" vtype="STRING" translate="DSO_BWLIMIT_FORMAT"/>
<type type="num" id="DSO_TERMINATOR" vtype="STRING" translate="DSO_TERMINATOR_FORMAT"/>
<type type="num" id="DSO_UNITS" vtype="STRING" translate="DSO_UNITS_FORMAT"/>
<type type="num" id="DSO_TRIGERSWEEP" vtype="STRING" translate="DSO_TRIGERSWEEP_FORMAT"/>
<type type="num" id="AI_RANGE" vtype="STRING" translate="AI_RANGE_FORMAT"/>
<type type="num" id="ABT_DATA" vtype="STRING" translate="ABT_DATA_FORMAT"/>
<type type="num" id="CACLYNEW_TYPE" vtype="UINT32" translate="CACLYNEW_FORMAT"/>
<type type="num" id="EXSELECT_TYPE" vtype="UINT32" translate="EXSELECT_FORMAT"/>
<type type="num" id="WORKMODEL_TYPE" vtype="UINT32" translate="WORKMODEL_TYPE_FORMAT"/>
<type type="num" id="BUSRATEBEGINETIME_TYPE" vtype="UINT8" translate="BUSRATEBEGINETIME_FORMAT"/>
<type type="num" id="UNITTIME_TYPE" vtype="UINT32" translate="UNITTIME_FORMAT"/>
<type type="num" id="DSO_TRIGERMODE" vtype="STRING" translate="DSO_TRIGERMODE_FORMAT"/>
<type type="num" id="DSO_TRIGEREDGESLOPE" vtype="STRING" translate="DSO_TRIGEREDGESLOPE_FORMAT"/>
<type type="num" id="DSO_TRIGERPULSEWHEN" vtype="STRING" translate="DSO_TRIGERPULSEWHEN_FORMAT"/>
<type type="num" id="DOUBLE_LSD0_SCALE1" vtype="DOUBLE" format="POSTFIX[0,1]"/>
<type type="num" id="DOUBLE_LSD1_SCALE1" vtype="DOUBLE" format="POSTFIX[1,1]"/>
<type type="num" id="DOUBLE_LSD2_SCALE1" vtype="DOUBLE" format="POSTFIX[2,1]"/>
<type type="num" id="DOUBLE_LSD3_SCALE1" vtype="DOUBLE" format="POSTFIX[3,1]"/>
<type type="num" id="DOUBLE_LSD4_SCALE1" vtype="DOUBLE" format="POSTFIX[4,1]"/>
<type type="num" id="DOUBLE_LSD5_SCALE1" vtype="DOUBLE" format="POSTFIX[5,1]"/>
<type type="num" id="DOUBLE_LSD6_SCALE1" vtype="DOUBLE" format="POSTFIX[6,1]"/>
<type type="num" id="DOUBLE_LSD7_SCALE1" vtype="DOUBLE" format="POSTFIX[7,1]"/>
<type type="num" id="DOUBLE_LSD8_SCALE1" vtype="DOUBLE" format="POSTFIX[8,1]"/>
<type type="num" id="DOUBLE_LSD9_SCALE1" vtype="DOUBLE" format="POSTFIX[9,1]"/>
<type type="num" id="DOUBLE_LSD10_SCALE1" vtype="DOUBLE" format="POSTFIX[10,1]"/>
<type type="num" id="DOUBLE_LSD12_SCALE1" vtype="DOUBLE" format="POSTFIX[12,1]"/>
<type type="num" id="DOUBLE_AUTOLSD_AUTOSCALE" vtype="DOUBLE" format="POSTFIX[-1,0]"/>
<type type="num" id="DOUBLE_LSD0_AUTOSCALE" vtype="DOUBLE" format="POSTFIX[0,-1]"/>
<type type="num" id="UINT32_HEX" vtype="UINT32" format="HexFormat" />
<type type="num" id="UINT64_HEX" vtype="UINT64" format="HexFormat" />
<type type="num" id="DSO_FIX_DOUBLE" vtype="DOUBLE" format="POSTFIX[2,-1,3]" />
<type type="num" id="DSO_OFFSET_DOUBLE" vtype="DOUBLE" format="POSTFIX[4,-1,5]" />
<type type="num" id="DSO_UI_DOUBLE" vtype="DOUBLE" format="POSTFIX[4,-1,5]" />
<type type="num" id="DSO_UI2_DOUBLE" vtype="DOUBLE" format="POSTFIX[5,-1,6]" />
<type type="num" id="RC_DOUBLE" vtype="DOUBLE" format="POSTFIX[-1,-1]" />
<type type="num" id="RC_DOUBLE_LSD0" vtype="DOUBLE" format="POSTFIX[0,-1]" />
<type type="num" id="RC_DOUBLE_LSD1" vtype="DOUBLE" format="POSTFIX[1,-1]" />
<type type="num" id="RC_DOUBLE_LSD2" vtype="DOUBLE" format="POSTFIX[2,-1]" />
<type type="num" id="DOUBLE_LSD0" vtype="DOUBLE" format="POSTFIX[0,1]" />
<type type="num" id="DOUBLE_LSD1" vtype="DOUBLE" format="POSTFIX[1,1]" />
<type type="num" id="DOUBLE_LSD2" vtype="DOUBLE" format="POSTFIX[2,1]" />
<type type="num" id="DOUBLE_LSD3" vtype="DOUBLE" format="POSTFIX[3,1]" />
<type type="num" id="BAUDTOOL_DOUBLE" vtype="DOUBLE" format="POSTFIX[2,-1]" />
<type type="num" id="BINARY_AUTO_SCALE" vtype="UINT64" format="MEMSIZE[0,-1]" />
<type type="num" id="AIO_FIX_DOUBLE" vtype="DOUBLE" format="POSTFIX[2,-1,3]" />
<type type="num" id="UINT32_AUTO_SCALE" vtype="UINT32" format="POSTFIX[0,-1]" />
<type type="num" id="DSO_PROBE_SCALE" vtype="DOUBLE" format="POSTFIX[-1,1]" />
<!--设备管理视图 end-->
<type type="struct" id="EditFilterStruct">
<member>
<var id="KeyCtr" vtype="STRING" option="Data;Dlc;Direction;FrameName;frameID;FrameType;Other;TimeStamp" def="Data" />
<var id="OperatorCtr" vtype="STRING" option="==;!=;is any of;is none" def="=="/>
<var id="Value1Ctr" vtype="STRING" def="12"/>
<var id="Value2Ctr" vtype="STRING" def="34"/>
<var id="Operator" vtype="STRING" option="And;Or;Not And" def="And"/>
</member>
<localsource>
<memberfunc id="constructor">
<code statement="KeyCtr=`Data`"/>
<code statement="OperatorCtr=`==`" />
<code statement="Value1Ctr=`12`" />
<code statement="Value2Ctr=`34`"/>
<code statement="Operator=`And`"/>
</memberfunc>
</localsource>
</type>
<type type="struct" id="DelayParamStruct">
<member>
<var id="TransTPLH" vtype="DOUBLE" def="0" />
<var id="TransTPHL" vtype="DOUBLE" def="0" />
<var id="RecTPLH" vtype="DOUBLE" def="0" />
<var id="RecTPHL" vtype="DOUBLE" def="0" />
<var id="TLOOP1" vtype="DOUBLE" def="0" />
<var id="TLOOP2" vtype="DOUBLE" def="0" />
<var id="tBitBus" vtype="DOUBLE" def="0" />
<var id="tBitRxd" vtype="DOUBLE" def="0" />
<var id="tRec" vtype="DOUBLE" def="0" />
</member>
<localsource>
<memberfunc id="constructor">
<!-- <code statement="TransTPLH=0"/> -->
</memberfunc>
</localsource>
</type>
</types>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<device>
<!-- commnet="0x.state.dso.wavehead.dio.aio.frame; 0x000011表示默认开启frame和aio的异步开关" -->
<connect links_value="0x001" type="async">
</connect>
</device>

View File

@@ -0,0 +1,325 @@
<?xml version="1.0" encoding="UTF-8"?>
<unit name="Eye" caption="眼图模块" version="1.0">
<!-- <vars> -->
<resources>
<service id="EYE_Service" />
</resources>
<init_item>
<property id="property">
</property>
<axis id="m_EyeTimeAxis" vtype="AXIS" basetype="UINT64"
init="ratio=ZPSUnit.WaveRec.m_RecordtimeRatio;offset=ZPSUnit.WaveRec.m_RecordtimeOffset;scale=ZPSUnit.WaveRec.m_RecordtimeScale;probe=1;minoffset=-40;maxoffset=40;maxscaling=0;minscaling=0;baseunit=s"
comment="X轴" />
<axis id="m_EyeHDataAxis" vtype="AXIS" basetype="DOUBLE"
init="ratio=ZPSUnit.WaveRec.m_RecordHDataScale;offset=ZPSUnit.WaveRec.m_RecordHDataOffset;count=8;scale=1;baseunit=V"
comment="Y轴" />
<axis id="m_EyeLDataAxis" vtype="AXIS" basetype="DOUBLE"
init="ratio=ZPSUnit.WaveRec.m_RecordLDataScale;offset=ZPSUnit.WaveRec.m_RecordLDataOffset;count=8;scale=1;baseunit=V"
comment="Y轴" />
<axis id="m_EyeDataAxis" vtype="AXIS" basetype="DOUBLE"
init="ratio=ZPSUnit.WaveRec.m_DiffScale;offset=ZPSUnit.WaveRec.m_DiffOffset;count=8;scale=1;baseunit=V" />
<dataset id="WaveEyeH" vtype="WAVEDATASET[FLOAT]" caption="DYNAMIC(#@parent.caption#_WaveEyeH)" enabled="1"
title="CANH" color="#9d8f31"
config="filePath=#@TEMP_PATH#/#@caption#/;sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeHDataAxis;WaveCache=FIFO(ZPSUnit.CAN1.WaveRecordHCH,WaveRecordHCH.bin);AreaCache=FILE(area.bin);IndexCache=FILE(Index.bin);*"
connect="sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeHDataAxis;Filler=ORG_Filler;" />
<dataset id="WaveEyeL" vtype="WAVEDATASET[FLOAT]" caption="DYNAMIC(#@parent.caption#_WaveEyeL)" enabled="1"
title="CANL" color="green"
config="filePath=#@TEMP_PATH#/#@caption#/;sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeLDataAxis;WaveCache=FIFO(ZPSUnit.CAN1.WaveRecordLCH,WaveRecordLCH.bin);AreaCache=FILE(area.bin);IndexCache=FILE(Index.bin);*"
connect="sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeLDataAxis;Filler=ORG_Filler;" />
<dataset id="WaveEyeDiff" vtype="MATH[FLOAT,-]" caption="DYNAMIC(#@parent.caption#_AssessDiff)" enabled="1"
title="Diff" color="#FFFF0000"
config="filePath=#@TEMP_PATH#/#@caption#/;sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeDataAxis;left=WaveEyeH,right=WaveEyeL;WaveCache=FILE(diffwave.wave);AreaCache=FILE(area.bin);IndexCache=FILE(diffindex.bin);math=-"
connect="sizeAxis=m_EyeTimeAxis;dataAxis=m_EyeDataAxis;left=WaveEyeH,right=WaveEyeL" />
<var id="EyeUnit" alias="" vtype="CEyeUnit" connect="WaveCollect=ZPSUnit.WaveCollect" comment="眼图对象" service="EYE_Service"/>
<var id="NeedCalDiff" vtype="INT64" def="1" comment="是否需要运算差分"/>
<vargroup id="EyeProcess">
<members>
<var id="EyeH" vtype="POINT" value="parent.WaveEyeH" comment="信号质量分析数据源指针" />
<var id="EyeL" vtype="POINT" value="parent.WaveEyeL" comment="信号质量分析数据源指针" />
<!-- <var id="EyeDiff" vtype="POINT" value="parent.WaveEyeDiff" comment="信号质量分析数据源指针" /> -->
<ext name="parent.WaveEyeDiff" id="EyeDiff" />
<ext name="parent.EyeUnit" id="UintPoint" />
<var id="IsRunning" vtype="UINT8" def="0" iterable="false" />
<var id="LastBeginTime" vtype="DOUBLE" def="0" iterable="false" />
<var id="LastEndTime" vtype="DOUBLE" def="-1" iterable="false" />
<var id="LastBeginTimeTmp" vtype="DOUBLE" def="0" iterable="false" />
<var id="LastEndTimeTmp" vtype="DOUBLE" def="0" iterable="false" />
<var id="BindStatus" vtype="UINT32" def="0" iterable="false" />
<var id="BindDataSet" vtype="UINT32" def="0" iterable="false" comment="在历史数据的时候用于防止点击报文列表时数据集update导致来执行眼图流程" />
<ext name="parent.m_EyeTimeAxis" id="timeAxis" iterable="false" />
</members>
<events>
<ops id="InitDecode">
<log text="EyeProcess InitDecode!!! m_lfABTBusBaudRate1=${ZPSUnit.CAN1.m_lfABTBusBaudRate} m_lfABTBusBaudRate2=${ZPSUnit.CAN1.m_lfDATABusBaudRate}" level="error" />
<code statement="UintPoint.DecodeParame.m_dFclk=80000000" />
<code statement="UintPoint.DecodeParame.m_dBRP=1" />
<code statement="UintPoint.DecodeParame.NormalData.m_dBaudRate=ZPSUnit.CAN1.m_lfABTBusBaudRate" />
<code statement="UintPoint.DecodeParame.NormalData.m_dSamplePoint=ZPSUnit.CAN1.m_lfBusSamplABTPos" />
<code statement="UintPoint.DecodeParame.NormalData.m_dSJW=0.2" />
<code statement="UintPoint.DecodeParame.UnusualData.m_dBaudRate=ZPSUnit.CAN1.m_lfDATABusBaudRate" />
<code statement="UintPoint.DecodeParame.UnusualData.m_dSamplePoint=ZPSUnit.CAN1.m_lfBusSamplDATAPos" />
<code statement="UintPoint.DecodeParame.UnusualData.m_dSJW=0.2" />
<log text="InitDecode: ${UintPoint.s_u32BaudRate}" level="error" />
<log text="EYE m_RecordtimeRatio=${ZPSUnit.WaveRec.m_RecordtimeRatio} m_RecordtimeScale=${ZPSUnit.WaveRec.m_RecordtimeScale}........................"/>
<ctr id="ZPSUnit.EYE.m_EyeTimeAxis" ctr="Reset" comment="每次都要重设一下数轴"/>
</ops>
<ops id="Start" comment="解锁数据集数轴">
<func name="UintPoint.Init" args="" />
<if condition="ZPSUnit.EYE.EyeUnit.m_uMsgType==3">
<zui ctr="setItem" name="zui.msg_box" property="button_type" value="ok"/>
<zui ctr="setItem" name="zui.msg_box" property="type" value="question"/>
<zui ctr="setItem" name="zui.msg_box" property="text" value="初始化失败,请再次生成"/>
<show name="zui.msg_box" args="modal=app;exec=true"/>
<return />
</if>
<setter condition="ZPSUnit.WaveRec.m_RecordTimeAxis.axisstate==1" data="UintPoint.WaveCalc.m_uOnlineData.value=0"/>
<setter condition="ZPSUnit.WaveRec.m_RecordTimeAxis.axisstate==0" data="UintPoint.WaveCalc.m_uOnlineData.value=1"/>
<func name="UintPoint.Start" args="" />
<!-- <func name="UintPoint.Start" param="LastBeginTime,LastEndTime" /> -->
</ops>
<!-- <ops auto="EyeH.EC_Update&gt;0&amp;&amp;EyeL.EC_Update&gt;0&amp;&amp;BindStatus==1&amp;&amp;BindDataSet==1"
id="WaveMathCalc" comment="数据集运算赋值">
<log text="Start Calc EyeUnit Diff And Common!!!!!!!! ${EyeDiff:enabled} " level="info" />
<if condition="EyeDiff:enabled==1">
<log text="setCalcRange EyeUnit Diff And Common!!!!!!!!" level="info" />
<if condition="parent.NeedCalDiff==1">
<dataset id="EyeDiff" ctr="setParent" value="left=EyeH:right=EyeL" />
</if>
<if condition="parent.NeedCalDiff==2">
<dataset id="EyeDiff" ctr="setParent" value="left=EyeL:right=EyeH" />
</if>
<dataset id="EyeDiff" ctr="setCalcRange" value="min=LastBeginTime:max=LastEndTime" comment="设置运算范围,并且运算" />
</if>
<log text="End Calc EyeUnit Diff And Common!!!!!!!!" level="info" />
<func name="UintPoint.ProduceEye" param="LastBeginTime,LastEndTime" args="" />
<code statement="EyeH.EC_Update=0" />
<code statement="EyeL.EC_Update=0" />
</ops> -->
</events>
</vargroup>
<var id="EyeGroupPoint" vtype="POINT" value="EyeProcess" save_type="ignore" comment="眼图组指针" />
<fun name="SwitchChannel" comment="通道切换函数">
<!-- <return/> -->
<log text="EYE SwitchChannel ................................."/>
<code statement="EyeGroupPoint.BindStatus=0" comment="对当前绑定的通道禁能"/>
<!-- 调用一个组内的函数进行数轴设置 -->
<if condition="ZPSUnit.WaveRec.m_RecordTimeAxis.axisstate!=1" comment="在线数据">
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=2" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=2" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData WaveEyeH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData WaveEyeL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
</if>
<if condition="ZPSUnit.WaveRec.m_RecordTimeAxis.axisstate==1" comment="历史数据">
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_H`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=2" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_L`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`CAN1_差分`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_H`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=2" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_L`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`CAN1_差分`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<code statement="NeedCalDiff=0" />
</if>
<if condition="(ZPSUnit.CH1Source==`DSO_1`&amp;&amp;ZPSUnit.CH2Source==`DSO_2`)">
<ctr id="EyeUnit.CanHDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordH" />
<ctr id="EyeUnit.CanLDataSet.__local" ctr="BindData ZPSUnit.WaveRec.WaveRecordL" />
<ctr id="EyeUnit.DiffDataSet.__local" ctr="BindData WaveEyeDiff" />
<code statement="NeedCalDiff=1" />
</if>
</if>
<code statement="EyeUnit.WaveCalc.m_uNeedCalcDiff=NeedCalDiff" />
<!--<ctr id="CANWaveDecode.WaveDataSet" ctr="BindData WaveChannelCAND.dataset"/>-->
<!-- 调用一个组内的函数进行数轴设置 -->
<code statement="EyeGroupPoint.BindStatus=1" comment="对当前绑定的通道使能"/>
</fun>
</init_item>
<!-- </vars> -->
<!-- <varEventSubcribe> -->
<!-- </varEventSubcribe> -->
</unit>

View File

@@ -0,0 +1,441 @@
<?xml version="1.0" encoding="UTF-8"?>
<senddata version="20200219">
<ZPS_CANFDSTRUCT_SEND type="struct" id="ZPS_CANFDSTRUCT_SEND" caption="普通数据">
<member>
</member>
<localsource>
<publicproperty Info="DYNAMIC(ID自增:#$IDIncreace#,DATA自增:#$DataIncrease#,#@SendData.Info#)" >
<childgroup childs="SendData.Delay;SendData.Times;SendData.FrameFormat;SendData.FrameType;SendData.CANFD;SendData.CANFDSpeed;SendData.DLC;SendData.ID;IDIncreace;DataIncrease;SendData.DATA" >
<item id="IDIncreace" type="check_box" caption="ID自增" placeholderW="79" height="22" width="22" transvalue="1" layoutDirection="RightToLeft" captionBorder="LEFT;TOP;RIGHT;BOTTOM" captionBorderColor="#1d2024" tooltip="" />
</childgroup>
</publicproperty>
<memberfunc id="constructor">
<func name="SendData.constructor" />
</memberfunc>
</localsource>
</ZPS_CANFDSTRUCT_SEND>
<ZPS_DISTUR_SEND type="struct" id="ZPS_DISTUR_SEND" caption="干扰数据">
<member>
</member>
<localsource>
<publicproperty Info="DYNAMIC(干扰位置:#$ErrorType#,干扰类型:#$DisturType#,#@SendData.Info#)" >
<childgroup childs="ErrorType;DisturType;CHILD(SendData)" >
<item id="ErrorType" type="enum_s" caption="干扰位置" option="AUTO(DATA_ERRORTYPE_FORMAT)" visible="1"/>
<item id="DisturType" type="enum_s_button" caption="干扰类型" option="AUTO(DATA_DISTURTYPE_FORMAT)" enable="" visible="INT8(IF @parent.ErrorType==15 THEN 1 ELSE 0)" btn_width="40" btn_text="设置" btn_visible="1"/>
</childgroup>
<triggers>
<trigger id="ErrorType">
<ctr id="parent" ctr="PublishEvent Update" />
</trigger>
<trigger id="DisturType">
<ctr id="parent" ctr="PublishEvent Update" />
</trigger>
</triggers>
</publicproperty>
<memberfunc id="constructor">
<func name="SendData.constructor" />
</memberfunc>
</localsource>
</ZPS_DISTUR_SEND>
<ZPSCANFDSendStruct type="struct" id="ZPSCANFDSendStruct">
<member>
<var id="DataHead" caption="数据头" vtype="UINT32" comment="每个数据固定的头部"/>
<var id="Delay" caption="延时时间" vtype="FLOAT" />
<var id="Times" caption="重复次数" vtype="UINT32" />
<var id="Channel" caption="通道" vtype="UINT8" />
<var id="Reserve0" caption="保留位0" vtype="UINT8[3]" />
<var id="Reserve1" caption="保留位3" vtype="UINT8[4]" />
<var id="Index" caption="索引" vtype="UINT32" />
<bit id="Reserve1" caption="保留位1" vtype="UINT64" bit="0;19" bitBegin="UINT64" comment="保留固定为0硬件流开始位置"/>
<bit id="Reserve2" caption="保留位2" vtype="UINT64" bit="19;8" comment="保留固定为1"/>
<bit id="FrameFormat" caption="帧格式" vtype="TYPE_FORMAT_TYPE" bit="27;1" />
<bit id="FrameType" caption="帧类型" vtype="TYPE_SEND_TYPE" bit="28;1" />
<bit id="CANFD" caption="CANFD" vtype="CANFD_YESORNOT_TYPE" bit="29;1" />
<bit id="CANFDSpeed" caption="CANFD加速" vtype="CANFD_YESORNOT_TYPE" bit="30;1" />
<bit id="DLC" caption="DLC" vtype="UINT8" bit="31;4" />
<bit id="ID" caption="帧ID" vtype="TYPE_CAN_SEND_ID" bit="35;29" />
<var id="DATA" caption="帧数据" vtype="TYPE_CAN_SEND_DATA[64]" length="IF @FrameFormat&amp;1 THEN 0 ELSE if @CANFD==0 then (if DLC &lt;= 8 then DLC else 8) else if DLC &lt;= 8 then DLC else if DLC &lt;= 12 then (DLC-6)*4 else if DLC &lt;= 13 then 32 else (DLC-11)*16"/>
</member>
<localsource>
<publicproperty type="category" Info="DYNAMIC(延时时间:#$Delay#us,ID:#$ID#,帧类型:#$FrameType#,帧格式:#$FrameFormat#,CANFD:#$CANFD#,CANFD变速:#$CANFDSpeed#,DLC:#$DLC#,DATA:#$DATA#)">
<childgroup childs="Delay;Times;FrameType;FrameFormat;CANFD;CANFDSpeed;DLC;ID;DATA">
<item id="Delay" type="edit" caption="延时时间" regexp="\d+(\.\d{0,3})?$" visible="0" />
<item id="Times" type="edit" caption="重复次数" regexp="" visible="0" />
<item id="Channel" type="enum_s" caption="通道" option="AUTO(SEND_FRAME_CHANNEL_TYPE_Format)" enabled="1"/>
<item id="FrameType" type="enum_s" caption="帧类型" option="AUTO(SEND_FRAME_TYPE_Format)" enabled="1"/>
<item id="FrameFormat" type="enum_s" caption="帧格式" option="AUTO(SEND_FRAME_FORMAT_Format)" enabled="1"/>
<item id="CANFD" type="check_box" caption="CANFD" placeholderW="79" height="22" width="22" transvalue="1" layoutDirection="RightToLeft" captionBorder="LEFT;TOP;RIGHT;BOTTOM" captionBorderColor="#1d2024" />
<item id="CANFDSpeed" type="check_box" caption="CANFD加速" placeholderW="20" height="22" width="40" transvalue="1" layoutDirection="RightToLeft" captionBorder="LEFT;TOP;RIGHT;BOTTOM" captionBorderColor="#1d2024" />
<item id="DLC" type="enum_s" caption="DLC" option="AUTO(CAN_SEND_DLC_ALIAS)" enabled="1"/>
<item id="ID" type="edit" caption="帧ID" regexp="([0-9a-fA-F]{0,9})" enabled="1"/>
<item id="DATA" type="format_edit" caption="帧数据" hexregexp="([0-9a-fA-F]{2})" decregexp="(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2})" charreg="(([0-9]|[a-f]|[A-F]){1})" textreg="(([0-9]|[a-f]|[A-F]){2})" column="8" row="8" length="UINT8(IF @parent.FrameFormat&amp;1 THEN 0 ELSE if @parent.CANFD==0 then (if parent.DLC &lt;= 8 then parent.DLC else 8) else if parent.DLC &lt;= 8 then parent.DLC else if parent.DLC &lt;= 12 then (parent.DLC-6)*4 else if parent.DLC &lt;= 13 then 32 else (parent.DLC-11)*16)" enabled="INT8(IF @parent.FrameFormat&amp;1==0 THEN 1 ELSE 0)"/>
</childgroup>
<triggers>
<trigger id="ID">
<ctr id="ID" ctr="PublishEvent Update" />
</trigger>
<trigger id="FrameType">
<if condition="@FrameType&amp;1==0">
<log text="FrameType&amp;2==0" level="error"/>
<setter condition="@ID&gt;0x7FF" data="ID.value=0x7FF" />
</if>
<if condition="@FrameType&amp;1==1">
<log text="FrameType&amp;2==0" level="error"/>
</if>
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
</trigger>
<trigger id="FrameFormat">
<if condition="@FrameFormat&amp;1==1">
<setter data="CANFD.enabled=0,,CANFDSpeed.enabled=0" />
<setter data="CANFD.value=0,,CANFDSpeed.value=0" />
</if>
<if condition="@FrameFormat&amp;1==0">
<setter data="CANFD.enabled=1,,CANFDSpeed.enabled=0" />
</if>
<ctr id="CANFD" ctr="PublishEvent PropertyChanged" />
<ctr id="CANFDSpeed" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent Update" />
<ctr id="DATA" ctr="PublishEvent Update" />
</trigger>
<trigger id="CANFD">
<if condition="@CANFD==0">
<setter condition="@CANFDSpeed==1" data="CANFDSpeed.value=0" />
<setter data="CANFDSpeed.enabled=0" />
</if>
<if condition="@CANFD==1">
<setter data="CANFDSpeed.enabled=1" />
</if>
<ctr id="CANFD" ctr="PublishEvent PropertyChanged" />
<ctr id="CANFDSpeed" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent Update"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
</trigger>
<trigger id="CANFDSpeed">
</trigger>
<trigger id="DLC">
<if condition="@FrameFormat&amp;1==0">
<ctr id="DATA" ctr="PublishEvent PropertyChanged"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
<ctr id="parent" ctr="PublishEvent Update"/>
</if>
</trigger>
<trigger id="DATA">
<ctr id="DATA" ctr="PublishEvent PropertyChanged"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
<ctr id="parent" ctr="PublishEvent Update"/>
</trigger>
</triggers>
</publicproperty>
<memberfunc id="constructor">
<setter data="CANFD.visible=INT8(@parent.FrameFormat==0),,CANFD.enabled=INT8(@parent.FrameFormat==0),,CANFDSpeed.visible=INT8(@parent.FrameFormat==0 &amp;&amp;@parent.CANFD),,CANFDSpeed.enabled=INT8(@parent.FrameFormat==0 &amp;&amp;@parent.CANFD)"/>
<setter data="ID.validation=checker(IF @parent.FrameType==0 THEN value&lt;=0x7ff ELSE value&lt;=0x1fffffff);fixer(value = IF @parent.FrameType==0 THEN 0x7ff ELSE 0x1fffffff)" />
</memberfunc>
</localsource>
</ZPSCANFDSendStruct>
<ZPSCANFDSendStructNoFormat type="struct" id="ZPSCANFDSendStructNoFormat">
<member>
<var id="DataHead" caption="数据头" vtype="UINT32" comment="每个数据固定的头部"/>
<var id="Delay" caption="延时时间" vtype="FLOAT" />
<var id="Times" caption="重复次数" vtype="UINT32" />
<var id="Channel" caption="通道" vtype="UINT8" />
<var id="Reserve0" caption="保留位0" vtype="UINT8[3]" />
<var id="Reserve1" caption="保留位3" vtype="UINT8[4]" />
<var id="Index" caption="索引" vtype="UINT32" />
<bit id="Reserve1" caption="保留位1" vtype="UINT64" bit="0;19" bitBegin="UINT64" comment="保留固定为0硬件流开始位置"/>
<bit id="Reserve2" caption="保留位2" vtype="UINT64" bit="19;8" comment="保留固定为1"/>
<bit id="FrameFormat" caption="帧格式" vtype="TYPE_FORMAT_TYPE" bit="27;1" />
<bit id="FrameType" caption="帧类型" vtype="TYPE_SEND_TYPE" bit="28;1" />
<bit id="CANFD" caption="CANFD" vtype="CANFD_YESORNOT_TYPE" bit="29;1" />
<bit id="CANFDSpeed" caption="CANFD加速" vtype="CANFD_YESORNOT_TYPE" bit="30;1" />
<bit id="DLC" caption="DLC" vtype="UINT8" bit="31;4" />
<bit id="ID" caption="帧ID" vtype="TYPE_CAN_SEND_ID_NO_FORMAT_SWITCH" bit="35;29" />
<var id="DATA" caption="帧数据" vtype="TYPE_CAN_SEND_DATA_NO_FORMAT_SWITCH[64]" length="IF @FrameFormat&amp;1 THEN 0 ELSE if @CANFD==0 then (if DLC &lt;= 8 then DLC else 8) else if DLC &lt;= 8 then DLC else if DLC &lt;= 12 then (DLC-6)*4 else if DLC &lt;= 13 then 32 else (DLC-11)*16"/>
</member>
<localsource>
<publicproperty type="category" Info="DYNAMIC(延时时间:#$Delay#us,ID:#$ID#,帧类型:#$FrameType#,帧格式:#$FrameFormat#,CANFD:#$CANFD#,CANFD变速:#$CANFDSpeed#,DLC:#$DLC#,DATA:#$DATA#)">
<childgroup childs="Delay;Times;FrameType;FrameFormat;CANFD;CANFDSpeed;DLC;ID;DATA">
<item id="Delay" type="edit" caption="延时时间" regexp="\d+(\.\d{0,3})?$" visible="0" />
<item id="Times" type="edit" caption="重复次数" regexp="" visible="0" />
<item id="Channel" type="enum_s" caption="通道" option="AUTO(SEND_FRAME_CHANNEL_TYPE_Format)" enabled="1"/>
<item id="FrameType" type="enum_s" caption="帧类型" option="AUTO(SEND_FRAME_TYPE_Format)" enabled="1"/>
<item id="FrameFormat" type="enum_s" caption="帧格式" option="AUTO(SEND_FRAME_FORMAT_Format)" enabled="1"/>
<item id="CANFD" type="check_box" caption="CANFD" placeholderW="79" height="22" width="22" transvalue="1" layoutDirection="RightToLeft" captionBorder="LEFT;TOP;RIGHT;BOTTOM" captionBorderColor="#1d2024" />
<item id="CANFDSpeed" type="check_box" caption="CANFD加速" placeholderW="20" height="22" width="40" transvalue="1" layoutDirection="RightToLeft" captionBorder="LEFT;TOP;RIGHT;BOTTOM" captionBorderColor="#1d2024" />
<item id="DLC" type="enum_s" caption="DLC" option="AUTO(CAN_SEND_DLC_ALIAS)" enabled="1"/>
<item id="ID" type="edit" caption="帧ID" regexp="([0-9a-fA-F]{0,8})" enabled="1"/>
<item id="DATA" type="format_edit" caption="帧数据" hexregexp="([0-9a-fA-F]{2})" decregexp="(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2})" charreg="(([0-9]|[a-f]|[A-F]){1})" textreg="(([0-9]|[a-f]|[A-F]){2})" column="8" row="8" length="UINT8(IF @parent.FrameFormat&amp;1 THEN 0 ELSE if @parent.CANFD==0 then (if parent.DLC &lt;= 8 then parent.DLC else 8) else if parent.DLC &lt;= 8 then parent.DLC else if parent.DLC &lt;= 12 then (parent.DLC-6)*4 else if parent.DLC &lt;= 13 then 32 else (parent.DLC-11)*16)" enabled="INT8(IF @parent.FrameFormat&amp;1==0 THEN 1 ELSE 0)"/>
</childgroup>
<triggers>
<trigger id="ID">
<ctr id="ID" ctr="PublishEvent Update" />
</trigger>
<trigger id="FrameType">
<if condition="@FrameType&amp;1==0">
<log text="FrameType&amp;2==0" level="error"/>
<setter condition="@ID&gt;0x7FF" data="ID.value=0x7FF" />
</if>
<if condition="@FrameType&amp;1==1">
<log text="FrameType&amp;2==0" level="error"/>
</if>
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
<ctr id="ID" ctr="PublishEvent Update" />
</trigger>
<trigger id="FrameFormat">
<if condition="@FrameFormat&amp;1==1">
<setter data="CANFD.enabled=0,,CANFDSpeed.enabled=0" />
<setter data="CANFD.value=0,,CANFDSpeed.value=0" />
</if>
<if condition="@FrameFormat&amp;1==0">
<setter data="CANFD.enabled=1,,CANFDSpeed.enabled=0" />
</if>
<ctr id="CANFD" ctr="PublishEvent PropertyChanged" />
<ctr id="CANFDSpeed" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent Update" />
<ctr id="DATA" ctr="PublishEvent Update" />
</trigger>
<trigger id="CANFD">
<if condition="@CANFD==0">
<setter condition="@CANFDSpeed==1" data="CANFDSpeed.value=0" />
<setter data="CANFDSpeed.enabled=0" />
</if>
<if condition="@CANFD==1">
<setter data="CANFDSpeed.enabled=1" />
</if>
<ctr id="CANFD" ctr="PublishEvent PropertyChanged" />
<ctr id="CANFDSpeed" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent PropertyChanged" />
<ctr id="DATA" ctr="PublishEvent PropertyChanged" />
<ctr id="DLC" ctr="PublishEvent Update"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
</trigger>
<trigger id="CANFDSpeed">
</trigger>
<trigger id="DLC">
<if condition="@FrameFormat&amp;1==0">
<ctr id="DATA" ctr="PublishEvent PropertyChanged"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
<ctr id="parent" ctr="PublishEvent Update"/>
</if>
</trigger>
<trigger id="DATA">
<ctr id="DATA" ctr="PublishEvent PropertyChanged"/>
<ctr id="DATA" ctr="PublishEvent Update"/>
<ctr id="parent" ctr="PublishEvent Update"/>
</trigger>
</triggers>
</publicproperty>
<memberfunc id="constructor">
<setter data="CANFD.visible=INT8(@parent.FrameFormat==0),,CANFD.enabled=INT8(@parent.FrameFormat==0),,CANFDSpeed.visible=INT8(@parent.FrameFormat==0 &amp;&amp;@parent.CANFD),,CANFDSpeed.enabled=INT8(@parent.FrameFormat==0 &amp;&amp;@parent.CANFD)"/>
<setter data="ID.validation=checker(IF @parent.FrameType==0 THEN value&lt;=0x7ff ELSE value&lt;=0x1fffffff);fixer(value = IF @parent.FrameType==0 THEN 0x7ff ELSE 0x1fffffff)" />
</memberfunc>
</localsource>
</ZPSCANFDSendStructNoFormat>
<RandomFrameStruct type="struct" id="RandomFrameStruct">
<member>
<var id="CycleRandomEnable" caption="周期随机使能" vtype="BOOL" />
<var id="CycleLow" caption="周期左值" vtype="INT32" />
<var id="CycleHigh" caption="周期右值" vtype="INT32" />
<var id="BurstRandomEnable" caption="释放量随机使能" vtype="BOOL" />
<var id="BurstLow" caption="释放量左值" vtype="INT32" />
<var id="BurstHigh" caption="释放量右值" vtype="INT32" />
<var id="CountRandomEnable" caption="次数随机使能" vtype="BOOL" />
<bit id="CountLow" caption="次数左值" vtype="INT32" bit="0;19" bitBegin="UINT64" comment="保留固定为0硬件流开始位置"/>
<bit id="CountHigh" caption="次数右值" vtype="INT32" bit="19;8" comment="保留固定为1"/>
<bit id="IDRandomEnable" caption="ID随机使能" vtype="UINT8" bit="0;4" />
<bit id="IDScanEnable" caption="ID扫描使能" vtype="UINT8" bit="4;4" />
<var id="IDLow" caption="ID左值" vtype="INT32" />
<var id="IDHigh" caption="ID右值" vtype="INT32" />
<var id="TypeRandomEnable" caption="类型随机使能" vtype="BOOL" />
<bit id="reserved" caption="保留位" vtype="UINT8" bit="0;5" />
<bit id="EXTRandom" caption="扩展随机" vtype="UINT8" bit="5;1"/>
<bit id="FDFRandom" caption="FD随机" vtype="UINT8" bit="6;1"/>
<bit id="BRSRandom" caption="BRS随机" vtype="UINT8" bit="7;1"/>
<var id="DataRandomEnable" caption="数据随机使能" vtype="BOOL" />
<var id="DLCRandomEnable" caption="DLC随机使能" vtype="BOOL" />
<var id="DLCMax" caption="DLC范围" vtype="INT32" />
<var id="RandomContent" caption="帧ID" vtype="BOOL" />
</member>
</RandomFrameStruct>
<S_DISTURB type="struct" id="S_DISTURB">
<member>
<var id="ABTBaudRate" caption="仲裁波特率" vtype="FLOAT" />
<var id="DataBaudRate" caption="数据波特率" vtype="FLOAT" />
<bit id="Delay" caption="延时时间" vtype="UINT64" bit="0;24" bitBegin="UINT64" comment="目前无作用"/>
<bit id="Times" caption="次数" vtype="UINT64" bit="24;8" comment="目前无作用"/>
<bit id="BitCount" caption="位数" vtype="UINT64" bit="32;10" />
<bit id="res" caption="保留位" vtype="UINT64" bit="42;22" />
<bit id="ArbitrationEnd" caption="仲裁结束位" vtype="UINT64" bit="0;10" bitBegin="UINT64"/>
<bit id="AckStart" caption="ACK位" vtype="UINT64" bit="10;10" />
<bit id="SpeedStart" caption="加速起始位" vtype="UINT64" bit="20;10" />
<bit id="SpeedEnd" caption="加速结束位" vtype="UINT64" bit="30;10" />
<bit id="res1" caption="保留位1" vtype="UINT64" bit="40;24" />
<bit id="Disturb0Start" caption="干扰位1起始时间单位" vtype="UINT64" bit="0;16" bitBegin="UINT64" comment="6.25ns一个单位时间"/>
<bit id="Disturb0End" caption="干扰位1结束时间单位" vtype="UINT64" bit="16;16" comment="6.25ns一个单位时间"/>
<bit id="Disturb1Start" caption="干扰位2起始时间单位" vtype="UINT64" bit="32;16" />
<bit id="Disturb1End" caption="干扰位2起始时间单位" vtype="UINT64" bit="48;16" />
<var id="Data" caption="帧数据" vtype="UINT64[11]" />
<var id="BitMask" caption="帧数据" vtype="UINT64[11]" />
<var id="Disturb0Mask" caption="帧数据" vtype="UINT64[11]" />
<var id="Disturb1Mask" caption="帧数据" vtype="UINT64[11]" />
</member>
<localsource>
</localsource>
</S_DISTURB>
<BaudToolStruct type="struct" id="BaudToolStruct">
<member>
<bit id="uBRP" caption="预分频系数" vtype="UINT64" bit="0;8" />
<bit id="Tesg1_abt" caption="仲裁域Tesg1" vtype="UINT64" bit="8;12" />
<bit id="Tesg2_abt" caption="仲裁域Tesg2" vtype="UINT64" bit="22;14" />
<bit id="Tesg1_data" caption="数据域Tesg1" vtype="UINT64" bit="36;14" />
<bit id="Tesg2_data" caption="数据域Tesg2" vtype="UINT64" bit="50;14" />
<!--<bit id="uNum" caption="数据域Tesg2" vtype="UINT64" bit="56;32" />-->
</member>
</BaudToolStruct>
<RECEIVEDISTURB_MASK_INFO type="struct" id="RECEIVEDISTURB_MASK_INFO">
<member>
<var id="BitCount" caption="掩码位数" vtype="UINT64" />
<var id="Mask" caption="掩码数据" vtype="UINT64_HEX" />
</member>
<localsource>
<publicproperty >
<childgroup childs="BitCount;Mask">
<item id="BitCount" type="edit" caption="掩码位数" />
<item id="Mask" type="edit" caption="掩码数据" />
</childgroup>
<triggers>
</triggers>
</publicproperty>
<memberfunc id="constructor">
</memberfunc>
</localsource>
</RECEIVEDISTURB_MASK_INFO>
<MASK_INFO type="struct" id="MASK_INFO">
<member>
<var id="BitCount" caption="掩码位数" vtype="UINT64" />
<var id="Mask" caption="掩码数据" vtype="UINT64_HEX[11]" />
</member>
<localsource>
<publicproperty >
<childgroup childs="BitCount;Mask">
<item id="BitCount" type="edit" caption="掩码位数" />
<item id="Mask" type="edit" caption="掩码数据" />
</childgroup>
<triggers>
</triggers>
</publicproperty>
<memberfunc id="constructor">
</memberfunc>
</localsource>
</MASK_INFO>
<REVEICEDISTURB type="struct" id="REVEICEDISTURB">
<member>
</member>
<localsource>
<publicproperty >
<childgroup childs="ReceiveDisturbType;ReceiveDisturbBitType" >
<item id="ReceiveDisturbType" type="enum_s" caption="干扰类型" option="AUTO(REVEICEDISTURB_TYPE_Format)" visible="1"/>
<item id="ReceiveDisturbBitType" type="enum_s" caption="干扰位置" option="AUTO(REVEICEDISTURBBIT_TYPE_Format)" />
<item id="DisturbCycType" type="enum_s" caption="干扰时机" option="AUTO(REVEICEDISTURBCYC_TYPE_Format)" visible="1"/>
</childgroup>
<triggers>
<trigger id="ReceiveDisturbBitType">
<setter condition="@ReceiveDisturbBitType==0" data="ReceiveDisturbType.visible=1"/>
<setter condition="@ReceiveDisturbBitType==1" data="ReceiveDisturbType.visible=0"/>
<ctr id="ReceiveDisturbType" ctr="PublishEvent Update"/>
</trigger>
</triggers>
</publicproperty>
<memberfunc id="constructor">
</memberfunc>
</localsource>
</REVEICEDISTURB>
<CSENDDATA id="CSENDDATA">
<localsource>
<publicproperty type="category" confirmbtn="1" canclebtn="1" caption="发送数据" Info="DYNAMIC(数据类型:#$SendDataType#,#@SendData.Info#)">
<childgroup childs="SendDataType;CHILD(SendData)" >
<item id="Description" type="edit" caption="名称描述" visible="0" tooltip="选择数据类型"/>
<item id="SendDataType" type="enum_s" caption="数据类型" tooltip="选择数据类型"/>
</childgroup>
</publicproperty>
<memberfunc id="ChannelChange">
<!-- <sys command="dbg_break"/> -->
<setter data="SendDataType.option=AUTO(SEND_FRAME_DATATYPE_Format)"/>
</memberfunc>
</localsource>
</CSENDDATA>
<ZPS_SEND_DATA id="ZPS_SEND_DATA">
<localsource>
<publicproperty type="category" caption="发送数据" Info="DYNAMIC(ID:#$SendData.ID#,帧类型:#$SendData.FrameType#,DLC:#@SendData.DLC#,DATA:#$SendData.DATA#)">
<childgroup childs="CHILD(SendData)" />
</publicproperty>
</localsource>
</ZPS_SEND_DATA>
<CYCLETRIGGER id="CYCLETRIGGER">
<localsource>
<publicproperty type="category" caption="普通发送" Info="DYNAMIC(发送延迟:#$CycleDelayTime#s,周期次数:#$CycleTimes#次,周期时间:#$Cycle#s)">
<childgroup childs="CycleDelayTime;CycleTimes;Cycle;" >
<item id="CycleDelayTime" type="edit" caption="延时时间" value_unit="s" regexp="\d+(\.\d+)?$" />
<item id="CycleTimes" type="edit" caption="周期次数" value_unit="次" regexp="^[0-9]*$" tooltip="" />
<item id="Cycle" type="edit" caption="周期时间" value_unit="ms" regexp="\d+(\.\d+)?$" />
</childgroup>
<triggers>
<trigger id="Cycle">
<log text="CycleCycleCycle"/>
</trigger>
<trigger id="CycleDelayTime">
<log text="CycleDelayCycleDelayCycleDelay"/>
</trigger>
<trigger id="CycleTimes">
<log text="CycleTimesCycleTimes"/>
</trigger>
</triggers>
</publicproperty>
</localsource>
</CYCLETRIGGER>
<TRIGGERTRIGGER id="TRIGGERTRIGGER">
<localsource>
<publicproperty type="category" caption="触发发送"
Info="DYNAMIC(发送延迟:#$CycleDelayTime#s,周期次数:#$CycleTimes#次,周期时间:#$Cycle#s)">
<childgroup childs="CycleDelayTime;CycleTimes;Cycle;SetData.FrameFormat;SetData.FrameType;SetData.CANFD;SetData.CANFDSpeed;SetData.DLC;SetData.ID;SetData.DATA" >
<item id="CycleDelayTime" type="edit" caption="延时时间" value_unit="s" regexp="\d+(\.\d+)?$" />
<item id="CycleTimes" type="edit" caption="周期次数" value_unit="次" regexp="^[0-9]*$" tooltip="" />
<item id="Cycle" type="edit" caption="周期时间" value_unit="s" regexp="\d+(\.\d+)?$" />
<item id="TriggerChannel" type="enum_s" caption="触发通道" option="AUTO(SEND_FRAME_CHANNEL_TYPE_Format)" />
<item id="TriggerEnbale" type="text" caption="使能触发" />
</childgroup>
<triggers>
</triggers>
</publicproperty>
<memberfunc id="constructor">
<setter data="CycleTimes.validation=checker(value&gt;=-1&amp;&amp; value&lt;=10000000&amp;&amp;value!=0);fixer(value = IF value&lt;1 THEN 1 ELSE 10000000)" />
</memberfunc>
</localsource>
</TRIGGERTRIGGER>
</senddata>

View File

@@ -0,0 +1,51 @@
<cmds>
<!---系统级配置-->
<cmd id="SetSysResetDefaut" param="" send_str=":SYStem:RESet:DEFault" visible="false" ch="ch0"/>
<cmd id="SetSysResetFactory" param="" send_str=":SYStem:RESet:FACTory" visible="false" ch="ch0"/>
<cmd id="SetIPType" param="IP_TYPE:A" send_str=":SYStem:IP:TYPE {A}" visible="false" ch="ch0"/>
<cmd id="GetIPType" param="IP_TYPE&amp;:A" send_str=":SYStem:IP:TYPE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetIPAddr" param="STRING:A" send_str=":SYStem:IP:ADDR {A}" visible="false" ch="ch0"/>
<cmd id="GetIPAddr" param="STRING&amp;:A" send_str=":SYStem:IP:ADDR?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetIPMark" param="STRING:A" send_str=":SYStem:IP:MASK {A}" visible="false" ch="ch0"/>
<cmd id="GetIPMark" param="STRING&amp;:A" send_str=":SYStem:IP:MASK?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetIPGateway" param="STRING:A" send_str=":SYStem:IP:GATEway {A}" visible="false" ch="ch0"/>
<cmd id="GetIPGateway" param="STRING&amp;:A" send_str=":SYStem:IP:GATEway?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysInitState" param="INT8&amp;:A" send_str=":SYStem:INIT:STATe?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysVerUpdate" param="STRING&amp;:A" send_str=":SYStem:VERSion:UPDAte?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysVerSoftwate" param="STRING&amp;:A" send_str=":SYStem:VERSion:SOFTware?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysHWVersion" param="STRING&amp;:A" send_str=":SYSTem:VERSion:HW?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysFPGAVersion" param="STRING&amp;:A" send_str=":SYSTem:VERSion:fpga?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSerialNum" param="STRING&amp;:A" send_str=":SYStem:DEVice:ID?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysDeviceName" param="STRING&amp;:A" send_str=":SYStem:DEVice:NAME?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysMANUFACTURE" param="STRING&amp;:A" send_str=":SYStem:MANUFACTURE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysMANUFACTUREDate" param="STRING&amp;:A" send_str=":SYStem:MANUFACTURE:DATE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysVerPower" param="STRING&amp;:A" send_str=":SYStem:VERSion:POWer?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysLANGuage" param="LABGUAGE_TYPE:A" send_str=":SYStem:LANGuage {A}" visible="false" ch="ch0"/>
<cmd id="GetSysLANGuage" param="LABGUAGE_TYPE&amp;:A" send_str=":SYStem:LANGuage?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysEncode" param="STRING:A" send_str=":SYStem:ENCODE {A}" visible="false" ch="ch0"/>
<cmd id="GetSysEncode" param="STRING&amp;:A" send_str=":SYStem:ENCODE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysDate" param="STRING:A" send_str=":SYStem:DATE {A}" visible="false" ch="ch0"/>
<cmd id="GetSysDate" param="STRING&amp;:A" send_str=":SYStem:DATE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysTime" param="STRING:A" send_str=":SYStem:TIME {A}" visible="false" ch="ch0"/>
<cmd id="GetSysTime" param="STRING&amp;:A" send_str=":SYStem:TIME?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysZone" param="INT32:A" send_str=":SYStem:ZONE {A}" visible="false" ch="ch0"/>
<cmd id="GetSysZone" param="INT32&amp;:A" send_str=":SYStem:ZONE?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetPowerOFF" param="" send_str=":SYSTem:POWER:OFF" visible="false" ch="ch0"/>
<cmd id="SetPowerREPEtition" param="" send_str=":SYSTem:POWER:REPEtition" visible="false" ch="ch0"/>
<cmd id="SetAutoPowerRestart" param="ON_OFF_BOOL_TYPE:A" send_str=":SYSTem:POWER:REStart {A}" visible="false" ch="ch0"/>
<cmd id="GetAutoPowerRestart" param="ON_OFF_BOOL_TYPE&amp;:A" send_str=":SYSTem:POWER:REStart?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="SetSysRun" param="" send_str=":RUN" visible="false" ch="ch0"/>
<cmd id="SetSysStop" param="" send_str=":STOP" visible="false" ch="ch0"/>
<cmd id="SetSysStatus" param="RUN_STOP_BOOL_TYPE:A" send_str=":{A}" visible="false" ch="ch0"/>
<cmd id="GetSysStatus" param="RUN_STOP_BOOL_TYPE&amp;:A" send_str=":RUN?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetTimeStamp" param="DOUBLE&amp;:A" send_str=":RUN:TIMEStamp?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="GetSysTimeStamp" param="UINT64&amp;:A" send_str=":SYStem:TIMEStamp?" recv_str="{A}" visible="false" ch="ch0"/>
<cmd id="ZpsAuthenticator" param="UINT8_POINT:indata,UINT8_POINT:outdata" send_str=":authenticate:challenge? {b:indata}" recv_str="${outdata}$" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<zps_types>
<diParaConfig caption="diConfig结构体配置">
<children>
<!--dac_ref_volt type="edit" caption="电压" def="1.0"/-->
<measure_time_out type="edit" caption="超时" def="3000"/>
</children>
</diParaConfig>
</zps_types>

View File

@@ -0,0 +1,7 @@
<cmds>
<cmd id="GetCH1OnceBlock" param="UINT32:BlockID,UINT8_POINT:Buff" send_str=":RECord:WAVE:CHANnel1:DATA? {BlockID}" silence="1" recv_str="{Buff}" visible="false" ch="ch0"/>
<cmd id="GetCH2OnceBlock" param="UINT32:BlockID,UINT8_POINT:Buff" send_str=":RECord:WAVE:CHANnel2:DATA? {BlockID}" silence="1" recv_str="{Buff}" visible="false" ch="ch0"/>
<cmd id="GetCH1Blocks" param="UINT32:BlockID,UINT32:BlockCount,UINT8_POINT:Buff" send_str=":RECord:WAVE:CHANnel1:BLOCK? {BlockID},{BlockCount}" silence="1" recv_str="{b:@Buff}" visible="false" ch="ch0"/>
<cmd id="GetCH2Blocks" param="UINT32:BlockID,UINT32:BlockCount,UINT8_POINT:Buff" send_str=":RECord:WAVE:CHANnel2:BLOCK? {BlockID},{BlockCount}" silence="1" recv_str="{b:@Buff}" visible="false" ch="ch0"/>
</cmds>

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<device>
<localsource>
</localsource>
<connect>
<links LinkPiror="MULTI_NET;USB" alias="MULTI_NET=TCP">
<link type="USB" Pid="0x0010" Vid="0x3068">
<config id="io1" ch_id="ch0" OutEndPoint="0x01" InEndPoint="0x81" />
<config id="io2" ch_id="ch1" type="IN" InEndPoint="0x82" delay_time="5000" comment="5ms" tran_size="1024000" tran_count="4" buff_size="16" auto_listen="true"/>
</link>
<link DefaultComm="tcp1" type="MULTI_NET" followDefault="IP" >
<link id="tcp1" ch_id="ch0" IP="172.16.26.123" Port="5025" type="ALL"/>
<link id="tcp2" ch_id="ch1" IP="172.16.26.123" Port="5026" type="IN" buff_size="16"/>
</link>
</links>
</connect>
<datachannel>
<ch id="ch0" type="NORMAL" />
<ch id="ch1" type="LISTEN" Listener="Listener1" />
</datachannel>
<!-- 异步功能码
ZBUS_FC_STD HEART_BEAT = Ox11 // 心跳帧 17
ZBUS FC STD CAN FRAME // CAN报文异步 18
ZBUS FC STD_CAN1 RX // CAN1 RX异步 19
ZBUS_FC_STD_CAN1_TX // CAN1 TX异步 20
ZBUS_FC_STD_CAN2 RX // CAN2 RX异步 21
ZBUS_FC_STD_CAN2_TX // CAN2 TX异步 22
ZBUS_FC_STD_CAN3 RX // CAN3 RX异步 23
ZBUS_FC_STD_CAN3 TX, // CAN3 TX异步 24
ZBUS_FC_STD_WAVEO HEAD // CANL报文波形头 25
ZBUS_FC STD WAVE1 HEAD // CANH报文波形头 26
ZBUS_FC_STD AIO // AI 采样数据 27
ZBUS_FC_STD_AI1 // AI 采样数据 28
ZBUS FC STD AI2 // AI 采样数据 29
ZBUS_FC STD AI3 // AI 采样数据 30
ZBUS FC STD DI // DI 采样数据 31
ZBUS FC STD DSO // DSO 异步数据 32
kCan1BusLoad = 34,// can-busload CAN1负载率数据
kCan2BusLoad = 35,// can-busload CAN2负载率数据
kCan3BusLoad = 36,// can-busload CAN3负载率数据
ZBUS FC STD TEST // 测试
-->
<listeners>
<Listen id="Listener1" key="func_code" parse_var="UINT32 func_code,ZBUFF Data" parse="code=func_code;data=Data" parse_type="ubus">
<!-- <item key="33" catch="Data" asyn="1">
<log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/>
<func name="LogBin" param="Data" />
<log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/>
</item> -->
<item key="17" catch="Data" asyn="1">
<!-- <ctr id="heartbeat" event="heartbeat_update" /> -->
<!-- <log text="IN FUNC_CODE 17, show Data ${Data}" level="info"/> -->
<!-- <func name="LogBin" param="Data" /> -->
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="18" catch="Data,&amp;autoprocess" asyn="1" comment="报文数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="19" catch="Data,&amp;autoprocess" asyn="1" comment="can1rx数据">
<!-- <func name="LogBin" param="Data"/> -->
<code statement="autoprocess._can1rx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="20" catch="Data,&amp;autoprocess" asyn="1" comment="can1tx数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can1tx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="21" catch="Data,&amp;autoprocess" asyn="1" comment="can2rx_数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can2rx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="22" catch="Data,&amp;autoprocess" asyn="1" comment="can2tx数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can2tx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="23" catch="Data,&amp;autoprocess" asyn="1" comment="can3rx数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can3rx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="24" catch="Data,&amp;autoprocess" asyn="1" comment="can3tx数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._can3tx_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="27" catch="Data,&amp;autoprocess" asyn="1" comment="AI数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._ai1_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
<item key="31" catch="Data,&amp;autoprocess" asyn="1" comment="DI数据">
<!-- <func name="ZPS.ProcessData" param="Data"/> -->
<code statement="autoprocess._di_.FetchData(Data)"/>
<!-- <log text="IN FUNC_CODE 33, show Data ${Data}" level="info"/> -->
</item>
</Listen>
</listeners>
<!-- <cmds Eof="0x0d;0x0a"> -->
<cmds silence="1" Eof="0x0a" defautincludepath="#@ZPS_DEVICE_RES#/" include="sys_cmd.xml;can_cmd.xml;dio_cmd.xml;aio_cmd.xml;send_cmd.xml;async_cmd.xml;wave_cmd.xml;dso_cmd.xml;receivedisturb.xml;">
<cmd id="IsOnline" param="STRING&amp;:A" send_str="*IDN?" recv_str="{A}" visible="false" ch="ch0" silence="1"/>
<cmd id="GetRegValue_int" param="STRING:A,INT64&amp;:value" send_str=":reg? {A}" recv_str="{value}" visible="false" ch="ch0" />
<cmd id="SetRegValue_int" param="STRING:A,INT64:value" send_str=":reg {A},{value}" visible="false" ch="ch0" />
<!--RC业务-->
</cmds>
<heartbeat cmd="IsOnline" args="Arg" period="3000" valid_time="2000" valid_delay_time="100"/>
<!-- <heartbeat cmd="" args="" period="3000" valid_time="2000" valid_delay_time="100"/> -->
<funcs>
</funcs>
<vars>
<var id="Arg" vtype="STRING" value="world!" def="hello!" connect="chnum=1" comment="心跳使用" />
<!-- <var id="multi_reader" vtype="CMultiStructReader" connect="__LinkData=DataMng.{CanfdDataSet}" caption="" /> -->
</vars>
<events>
<sub_event>
<event event="DEVICE_OPEN">
<log text="ZPS 连接成功" level="info" />
</event>
</sub_event>
</events>
</device>

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8" ?>
<types version="20230722">
<system>
<alias id="ON_OFF_BOOL_FORMAT" key="UINT8">
<item name="OFF" value="0"/>
<item name="ON" value="1"/>
</alias>
<alias id="TRUE_FALSE_BOOL_FORMAT" key="UINT8">
<item name="FALSE" value="0"/>
<item name="TRUE" value="1"/>
</alias>
<alias id="RUN_STOP_BOOL_FORMAT" key="UINT8">
<item name="STOP" value="0"/>
<item name="RUN" value="1"/>
</alias>
<alias id="RXD_TXD_FORMAT" key="UINT8">
<item name="RXD" value="0"/>
<item name="TXD" value="1"/>
</alias>
<alias id="NORMAL_PWM_BOOL_FORMAT" key="UINT8">
<item name="NORMAL" value="0"/>
<item name="PWM" value="1"/>
</alias>
<alias id="HIGH_PUSH_BOOL_FORMAT" key="UINT8">
<item name="HIGHSide" value="0"/>
<item name="PUSHPull" value="1"/>
</alias>
<alias id="LOW_HIGH_BOOL_FORMAT" key="UINT8">
<item name="LOW" value="0"/>
<item name="HIGH" value="1"/>
</alias>
<alias id="IP_TYPE_FORMAT" key="UINT8">
<item name="STATiC" value="0"/>
<item name="DHCP" value="1"/>
</alias>
<alias id="LABGUAGE_TYPE_FORMAT" key="UINT8">
<item name="zh_CN" value="0"/>
<item name="en" value="1"/>
</alias>
<alias id="AI_SCOPE_FORMAT" key="UINT32">
<item name="12V" value="12"/>
<item name="60V" value="60"/>
</alias>
<alias id="DSO_SOURCE_FORMAT" key="UINT32">
<item name="EXT" value="0"/>
<item name="CAN_DIFF" value="1"/>
<item name="CAN_H" value="2"/>
<item name="CAN_L" value="3"/>
</alias>
<alias id="DSO_COUPLING_FORMAT" key="UINT32">
<item name="DC" value="0"/>
<item name="AC" value="1"/>
<item name="GND" value="2"/>
</alias>
<alias id="DSO_UNITS_FORMAT" key="UINT32">
<item name="VOLTage" value="0"/>
<item name="AMPere" value="1"/>
</alias>
<alias id="DSO_FILTER_FORMAT" key="UINT32">
<item name="FIL_OFF" value="0"/>
<item name="FIL_20M" value="1"/>
</alias>
<alias id="DSO_RUNOPERATOR_FORMAT" key="UINT32">
<item name="DIFF" value="0"/>
<item name="AVERage" value="1"/>
</alias>
<alias id="DSO_TIMEBASEMODE_FORMAT" key="UINT32">
<item name="NORMal" value="0"/>
<item name="ROLL" value="1"/>
</alias>
<alias id="DSO_TB_DIVTYPE_FORMAT" key="UINT32">
<item name="ACQTime" value="0"/>
<item name="SAMPrate" value="1"/>
</alias>
<alias id="DSO_ACQ_TYPE_FORMAT" key="UINT32">
<item name="NORMal" value="0"/>
<item name="PEAK" value="1"/>
<item name="HRESolution" value="2"/>
</alias>
<alias id="DSO_TRG_SWEEP_FORMAT" key="UINT32">
<item name="AUTO" value="0"/>
<item name="NORMal" value="1"/>
</alias>
<alias id="DSO_TRG_MODE_FORMAT" key="UINT32">
<item name="EDGE" value="0"/>
<item name="PULSe" value="1"/>
</alias>
<alias id="DSO_TRG_SOURCE_FORMAT" key="UINT32">
<item name="CHANnel1" value="0"/>
<item name="CHANnel2" value="1"/>
<item name="RUNOperator" value="2"/>
</alias>
<alias id="DSO_WAVE_SOURCE_FORMAT" key="UINT32">
<item name="CHANnel1" value="0"/>
<item name="CHANnel2" value="1"/>
<item name="MATH" value="2"/>
</alias>
<alias id="DSO_TRG_SLOPE_FORMAT" key="UINT32">
<item name="POSitive" value="0"/>
<item name="NEGative" value="1"/>
<item name="EITHer" value="2"/>
</alias>
<alias id="ASYNC_MODULE_FORMAT" key="UINT32">
<item name="CAN" value="0"/>
<item name="AIO" value="1"/>
<item name="DIO" value="2"/>
<item name="RECord" value="3"/>
</alias>
<type type="num" id="ON_OFF_BOOL_TYPE" vtype="UINT8" translate="ON_OFF_BOOL_FORMAT"/>
<type type="num" id="TRUE_FALSE_BOOL_TYPE" vtype="UINT8" translate="TRUE_FALSE_BOOL_FORMAT"/>
<type type="num" id="RXD_TXD_TYPE" vtype="UINT8" translate="RXD_TXD_FORMAT"/>
<type type="num" id="RUN_STOP_BOOL_TYPE" vtype="UINT8" translate="RUN_STOP_BOOL_FORMAT"/>
<type type="num" id="NORMAL_PWM_BOOL_TYPE" vtype="UINT8" translate="NORMAL_PWM_BOOL_FORMAT"/>
<type type="num" id="HIGH_PUSH_BOOL_TYPE" vtype="UINT8" translate="HIGH_PUSH_BOOL_FORMAT"/>
<type type="num" id="LOW_HIGH_BOOL_TYPE" vtype="UINT8" translate="LOW_HIGH_BOOL_FORMAT"/>
<type type="num" id="IP_TYPE" vtype="UINT8" translate="IP_TYPE_FORMAT"/>
<type type="num" id="LABGUAGE_TYPE" vtype="UINT8" translate="LABGUAGE_TYPE_FORMAT"/>
<type type="num" id="AI_SCOPE_TYPE" vtype="UINT32" translate="AI_SCOPE_FORMAT"/>
<type type="num" id="DSO_SOURCE_TYPE" vtype="UINT32" translate="DSO_SOURCE_FORMAT"/>
<type type="num" id="DSO_COUPLING_TYPE" vtype="UINT32" translate="DSO_COUPLING_FORMAT"/>
<type type="num" id="DSO_UNITS_TYPE" vtype="UINT32" translate="DSO_UNITS_FORMAT"/>
<type type="num" id="DSO_FILTER_TYPE" vtype="UINT32" translate="DSO_FILTER_FORMAT"/>
<type type="num" id="DSO_RUNOPERATOR_TYPE" vtype="UINT32" translate="DSO_RUNOPERATOR_FORMAT"/>
<type type="num" id="DSO_RUNOPERATOR_TYPE" vtype="UINT32" translate="DSO_RUNOPERATOR_FORMAT"/>
<type type="num" id="DSO_TIMEBASEMODE_TYPE" vtype="UINT32" translate="DSO_TIMEBASEMODE_FORMAT"/>
<type type="num" id="DSO_TB_DIVTYPE_TYPE" vtype="UINT32" translate="DSO_TB_DIVTYPE_FORMAT"/>
<type type="num" id="DSO_ACQ_TYPE_TYPE" vtype="UINT32" translate="DSO_ACQ_TYPE_FORMAT"/>
<type type="num" id="DSO_TRIG_SWEEP_TYPE" vtype="UINT32" translate="DSO_TRG_SWEEP_FORMAT"/>
<type type="num" id="DSO_TRG_MODE_TYPE" vtype="UINT32" translate="DSO_TRG_MODE_FORMAT"/>
<type type="num" id="DSO_TRG_SOURCE_TYPE" vtype="UINT32" translate="DSO_TRG_SOURCE_FORMAT"/>
<type type="num" id="DSO_TRG_SLOPE_TYPE" vtype="UINT32" translate="DSO_TRG_SLOPE_FORMAT"/>
<type type="num" id="DSO_WAVE_SOURCE_TYPE" vtype="UINT32" translate="DSO_WAVE_SOURCE_FORMAT"/>
<type type="num" id="ASYNC_MODULE_TYPE" vtype="UINT32" translate="ASYNC_MODULE_FORMAT"/>
<var id="_GlobalResource_" vtype="STRING" def="Comm"/>
</system>
</types>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" ?>
<uint name="CanFilter" version="1.0">
<CanTypeFilter type="struct" id="CanTypeFilter" comment="属性信息">
<member>
<var id="SOF" vtype="INT8" def="1" />
<var id="ARB" vtype="INT8" def="1" />
<var id="CTR" vtype="INT8" def="1" />
<var id="DATA" vtype="INT8" def="1" />
<var id="CRC" vtype="INT8" def="1" />
<var id="ACK" vtype="INT8" def="1" />
<var id="EOF" vtype="INT8" def="1" />
<!-- <var id="CRC_A" vtype="INT8" def="1" /> -->
<!-- <var id="ACK" vtype="INT8" def="1" /> -->
<!-- <var id="ACK_A" vtype="INT8" def="1" /> -->
<!-- <var id="EOF" vtype="INT8" def="1" /> -->
<!-- <var id="STUFF_CNT" vtype="INT8" def="1" /> -->
<!-- <var id="STUFF_CNT_PARITY" vtype="INT8" def="1" /> -->
<!-- <var id="FREE" vtype="INT8" def="1" /> -->
</member>
<localsource>
<publicproperty>
<childgroup>
<item id="SOF" type="check_box" caption="SOF" height="20" option="" toolTip="SOF"/>
<item id="ARB" type="check_box" caption="仲裁场" height="20" option="" toolTip="仲裁场"/>
<item id="CTR" type="check_box" caption="控制场" height="20" option="" toolTip="控制场"/>
<item id="DATA" type="check_box" caption="数据场" height="20" option="" toolTip="数据场"/>
<item id="CRC" type="check_box" caption="CRC场" height="20" option="" toolTip="CRC场"/>
<item id="ACK" type="check_box" caption="ACK场" height="20" option="" toolTip="ACK场"/>
<item id="EOF" type="check_box" caption="EOF" height="20" option="" toolTip="EOF"/>
<!--<item id="CRC" type="check_box" caption="CRC" height="20" option="" tooltip="CRC"/>
<item id="CRC_A" type="check_box" caption="CRC_A" height="20" option="" tooltip="CRC_A"/>
<item id="ACK" type="check_box" caption="ACK" height="20" option="" tooltip="ACK"/>
<item id="ACK_A" type="check_box" caption="ACK_A" height="20" option="" tooltip="ACK_A"/>
<item id="EOF" type="check_box" caption="EOF" height="20" option="" tooltip="EOF"/>-->
<!-- <item id="STUFF_CNT" type="check_box" caption="STUFF_CNT" height="20" option="" tooltip="STUFF_CNT"/> -->
<!-- <item id="STUFF_CNT_PARITY" type="check_box" caption="STUFF_CNT_PARITY" height="20" option="" tooltip="STUFF_CNT_PARITY"/> -->
<!--<item id="FREE" type="check_box" caption="FREE" height="20" option="" tooltip="FREE"/>-->
</childgroup>
</publicproperty>
<memberfunc id="constructor">
<code statement="BRS=CRC_A=1"/>
</memberfunc>
</localsource>
</CanTypeFilter>
</uint>

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="utf-8" ?>
<uint name="WaveDecode" condition="波形解析模块" version="1.0">
<localsource>
<alias id="CAN_IDE_Format">
<item name="标准帧" value="0"/>
<item name="扩展帧" value="1"/>
</alias>
<alias id="CAN_ACK_Format" >
<item name="应答" value="0"/>
<item name="不应答" value="1"/>
</alias>
<alias id="CAN_RTR_Format" >
<item name="数据帧" value="0"/>
<item name="远程帧" value="1"/>
</alias>
<alias id="CAN_EDL_Format" >
<item name="CAN帧" value="0"/>
<item name="CANFD帧" value="1"/>
</alias>
<alias id="CAN_BRS_Format" >
<item name="转换速率不可变" value="0"/>
<item name="转换速率可变" value="1"/>
</alias>
<alias id="CAN_ESI_Format" >
<item name="节点错误主动状态" value="0"/>
<item name="节点错误被动状态" value="1"/>
</alias>
<alias id="CAN_ERROR_Format" >
<item name="ID:BitstuffErr" value="1"/>
<item name="SRR:BitstuffErr" value="2"/>
<item name="IDE:BitstuffErr" value="3"/>
<item name="RTR:BitstuffErr" value="4"/>
<item name="R1:BitstuffErr" value="5"/>
<item name="R0:BitstuffErr" value="6"/>
<item name="DLC:BitstuffErr" value="7"/>
<item name="DATA:BitstuffErr" value="8"/>
<item name="CRC:BitstuffErr" value="9"/>
<item name="CRCDELIM:Err" value="10"/>
<item name="ACK:Err" value="11"/>
<item name="ACKDELIM:Err" value="12"/>
<item name="EOF:Err" value="13"/>
<item name="CRC:CheckErr" value="14"/>
<item name="OVER_LOAD:Err" value="15"/>
<item name="INT:Err" value="16"/>
<item name="OTHER:Out of Data" value="17"/>
<item name="EDL:BitstuffErr" value="18"/>
<item name="BRS:BitstuffErr" value="19"/>
<item name="ESI:BitstuffErr" value="20"/>
<item name="STUFF_CNT:BitstuffErr" value="21"/>
<item name="STUFF_CNT_PARITY:BitstuffErr" value="22"/>
<item name="ABT:Fail" value="23"/>
<item name="Bit:Err" value="24"/>
<item name="Bus:Err" value="25"/>
</alias>
<type type="num" id="sof" vtype="UINT8" caption="SOF" color="#FFFF00" split="false" format="DecFormat"/>
<type type="num" id="base_id" vtype="UINT16" caption="BaseID" color="#FFA500" split="true" format="CAN_ID_FORMAT"/>
<type type="num" id="srr" vtype="UINT8" caption="SRR" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="ide" vtype="UINT8" caption="IDE" color="#888888" split="false" format="CAN_IDE_Format"/>
<type type="num" id="ex_id" vtype="UINT32" caption="ExtID" color="#CA9B2F" split="true" format="CAN_ID_FORMAT"/>
<type type="num" id="rtr" vtype="UINT8" caption="RTR" color="#FFA500" split="false" format="CAN_RTR_Format"/>
<type type="num" id="r1" vtype="UINT8" caption="R1" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="r0" vtype="UINT8" caption="R0" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="dlc" vtype="UINT8" caption="DLC" color="#3292C2" split="true" format="CAN_ID_FORMAT"/>
<type type="num" id="data" vtype="INT32" caption="Data" color="#65B238" split="true" format="CAN_DATA_FORMAT"/>
<type type="num" id="crc" vtype="UINT32" caption="CRC" color="#36A0D5" split="true" format="CAN_DATA_FORMAT"/>
<type type="num" id="crc_a" vtype="UINT8" caption="CRCDELIM" color="#36A0D5" split="false" format="DecFormat"/>
<type type="num" id="ack" vtype="UINT8" caption="ACKSlot" color="#FFFF00" split="false" format="CAN_ACK_Format"/>
<type type="num" id="ack_a" vtype="UINT8" caption="ACKDELIM" color="#FFFF00" split="false" format="DecFormat"/>
<type type="num" id="eof" vtype="UINT8" caption="EOF" color="#AB4BC6" split="false" format="DecFormat"/>
<type type="num" id="free" vtype="UINT8" caption="INT" color="#AB4BC6" split="false" format="DecFormat"/>
<type type="num" id="edl" vtype="UINT8" caption="FDF" color="#888888" split="false" format="CAN_EDL_Format"/>
<type type="num" id="brs" vtype="UINT8" caption="BRS" color="#888888" split="false" format="CAN_BRS_Format"/>
<type type="num" id="esi" vtype="UINT8" caption="ESI" color="#888888" split="false" format="CAN_ESI_Format"/>
<type type="num" id="stuff_cnt" vtype="UINT8" caption="STUFF_CNT" color="#36A0D5" split="true" format="DecFormat"/>
<type type="num" id="stuff_cnt_parity" vtype="UINT8" caption="STUFF_CNT_PARITY" color="#36A0D5" split="false" format="DecFormat"/>
<type type="num" id="overload" vtype="UINT8" caption="OVERLOAD" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="can_error" vtype="UINT8" color="#ff0000" split="true" translate="CAN_ERROR_Format"/>
<type type="num" id="rrs" vtype="UINT8" caption="RRS" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="res" vtype="UINT8" caption="res" color="#888888" split="false" format="DecFormat"/>
<type type="num" id="err_flag" vtype="UINT8" caption="ERR_FLAG" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="err_del" vtype="UINT8" caption="ERR_DEL" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="err_del_err" vtype="UINT8" caption="ERR_DEL_ERR" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="over_flag" vtype="UINT8" caption="OVLD_FLAG" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="over_del" vtype="UINT8" caption="OVLD_DEL" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="over_del_err" vtype="UINT8" caption="OVLD_DEL_ERR" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="err_flag_err" vtype="UINT8" caption="ERR_FLAG_ERR" color="#ff0000" split="false" format="DecFormat"/>
<type type="num" id="out_of_data" vtype="UINT8" caption="OTHER:Out of Data" color="#888888" split="false" format="DecFormat"/>
<type type="struct" id="FRAME_DATA">
<var id="frame_type" vtype="UINT32" />
<union id="frame_data" switch="frame_type">
<var id="CAN_SOF" vtype="sof" case="1"/>
<var id="CAN_ID_BASE" vtype="base_id" case="2"/>
<var id="CAN_SRR" vtype="srr" case="3"/>
<var id="CAN_IDE" vtype="ide" case="4"/>
<var id="CAN_ID_EX" vtype="ex_id" case="5"/>
<var id="CAN_RTR" vtype="rtr" case="6"/>
<var id="CAN_R1" vtype="r1" case="7"/>
<var id="CAN_R0" vtype="r0" case="8"/>
<var id="CAN_DLC" vtype="dlc" case="9"/>
<var id="CAN_DATA" vtype="data" case="10"/>
<var id="CAN_CRC" vtype="crc" case="11"/>
<var id="CAN_CRC_A" vtype="crc_a" case="12"/>
<var id="CAN_ACK" vtype="ack" case="13"/>
<var id="CAN_ACK_A" vtype="ack_a" case="14"/>
<var id="CAN_EOF" vtype="eof" case="15"/>
<var id="CAN_FREE" vtype="free" case="16"/>
<var id="CANFD_EDL" vtype="edl" case="17"/>
<var id="CANFD_BRS" vtype="brs" case="18"/>
<var id="CANFD_ESI" vtype="esi" case="19"/>
<var id="CANFD_STUFF_CNT" vtype="stuff_cnt" case="20"/>
<var id="CANFD_STUFF_CNT_PARITY" vtype="stuff_cnt_parity" case="21"/>
<var id="CAN_OVER_LOAD" vtype="overload" case="22"/>
<var id="CAN_ERROR" vtype="can_error" case="23"/>
<var id="CAN_RRS" vtype="rrs" case="24"/>
<var id="CAN_RES" vtype="res" case="25"/>
<var id="CAN_ERR_FLAG" vtype="err_flag" case="26"/>
<var id="CAN_ERR_DEL" vtype="err_del" case="27"/>
<var id="CAN_ERR_DEL_ERR" vtype="err_del_err" case="28"/>
<var id="CAN_OVER_FLAG" vtype="over_flag" case="29"/>
<var id="CAN_OVER_DEL" vtype="over_del" case="30"/>
<var id="CAN_OVER_DEL_ERR" vtype="over_del_err" case="31"/>
<var id="CAN_ERR_FLAG_ERR" vtype="err_flag_err" case="32"/>
<var id="OUT_OF_DATA" vtype="out_of_data" case="33"/>
</union>
</type>
<type type="num" id="data_b" vtype="UINT32" color="#00ff00" caption="标准CAN数据帧" format="DecFormat"/>
<type type="num" id="data_e" vtype="UINT32" color="#00ff00" caption="扩展CAN数据帧" format="DecFormat"/>
<type type="num" id="remote_b" vtype="UINT32" color="#00ff00" caption="标准CAN远程帧" format="DecFormat"/>
<type type="num" id="remote_e" vtype="UINT32" color="#00ff00" caption="扩展CAN远程帧" format="DecFormat"/>
<type type="num" id="canfd_data_b" vtype="UINT32" color="#00ff00" caption="标准CANFD数据帧" format="DecFormat"/>
<type type="num" id="canfd_data_e" vtype="UINT32" color="#00ff00" caption="扩展CANFD数据帧" format="DecFormat"/>
<type type="num" id="canfd_data_b_isspeed" vtype="UINT32" color="#00ff00" caption="变速标准CANFD数据帧" format="DecFormat"/>
<type type="num" id="canfd_data_e_isspeed" vtype="UINT32" color="#00ff00" caption="变速扩展CANFD数据帧" format="DecFormat"/>
<type type="num" id="canfd_remote_b" vtype="UINT32" color="#00ff00" caption="标准CANFD远程帧" format="DecFormat"/>
<type type="num" id="canfd_remote_e" vtype="UINT32" color="#00ff00" caption="扩展CANFD远程帧" format="DecFormat"/>
<type type="num" id="over_load" vtype="UINT32" color="#00ff00" caption="过载帧" format="DecFormat"/>
<type type="num" id="error" vtype="UINT32" color="#00ff00" caption="错误帧" format="DecFormat"/>
<type type="union" id="PACKET_DATA">
<var id="DECODE_DATA_B" vtype="data_b" case="1"/>
<var id="DECODE_DATA_E" vtype="data_e" case="2"/>
<var id="DECODE_REMOTE_B" vtype="remote_b" case="3"/>
<var id="DECODE_REMOTE_E" vtype="remote_e" case="4"/>
<var id="DECODE_CANFD_DATA_B" vtype="canfd_data_b" case="5"/>
<var id="DECODE_CANFD_DATA_E" vtype="canfd_data_e" case="6"/>
<var id="DECODE_CANFD_REMOTE_B" vtype="canfd_remote_b" case="7"/>
<var id="DECODE_CANFD_REMOTE_E" vtype="canfd_remote_e" case="8"/>
<var id="DECODE_CANFD_DATA_B_ISSPEED" vtype="canfd_data_b_isspeed" case="9"/>
<var id="DECODE_CANFD_DATA_E_ISSPEED" vtype="canfd_data_e_isspeed" case="10"/>
<var id="DECODE_OVER_LOAD" vtype="over_load" case="11"/>
<var id="DECODE_ERROR" vtype="error" case="12"/>
</type>
<type type="struct" id="FrameStruct" comment="存储frame">
<!-- <var id="time" vtype="FRAME_TIME" comment="帧结束时间"/> -->
<var id="time" vtype="DOUBLE_LSD9_SCALE1" comment="帧结束时间"/>
<var id="data" vtype="FRAME_DATA" comment="帧数据"/>
</type>
<type type="struct" id="BitStuffStruct" comment="存储frame">
<!-- <var id="time" vtype="FRAME_TIME" comment="帧结束时间"/> -->
<var id="begintime" vtype="DOUBLE_LSD9_SCALE1" comment="帧结束时间"/>
<var id="endtime" vtype="DOUBLE_LSD9_SCALE1" comment="帧结束时间"/>
<var id="type" vtype="UINT32" comment="类型"/>
<var id="data" vtype="UINT32" comment="帧数据"/>
<var id="tqcount" vtype="UINT8" comment="重同步tq数量"/>
</type>
<type type="struct" id="PacketStruct" comment="存储packet">
<!-- <var id="time" vtype="FRAME_TIME" comment="包起始时间"/> -->
<var id="time" vtype="DOUBLE_LSD9_SCALE1" comment="包起始时间"/>
<var id="type" vtype="UINT32" comment="包类型"/>
<union id="data" vtype="PACKET_DATA" comment="包数据" switch="type"/>
<var id="Index" vtype="UINT64" comment="帧起始索引"/>
<var id="count" vtype="UINT32" comment="帧个数"/>
</type>
<type type="struct" id="PacketReadData" comment="界面使用">
<!-- <var id="beginTime" vtype="FRAME_TIME" comment="包起始时间"/> -->
<var id="beginTime" vtype="DOUBLE_LSD9_SCALE1" comment="包起始时间"/>
<!-- <var id="endTime" vtype="FRAME_TIME" comment="包起始时间"/> -->
<var id="endTime" vtype="DOUBLE_LSD9_SCALE1" comment="包起始时间"/>
<var id="type" vtype="UINT32" comment="包类型"/>
<union id="data" vtype="PACKET_DATA" comment="包数据" switch="type"/>
<ptr id="frame" vtype="VECTOR[FrameStruct]" comment="帧数据"/>
<ptr id="FrameBitstuff" vtype="VECTOR[BitStuffStruct]" comment="帧数据"/>
</type>
</localsource>
<DecodeSource>
<localsource>
<publicproperty id="property" caption="">
<childgroup childs="WaveDataSet;s_u32BaudRate;s_u32BaudRateFD;s_CanBusType;s_dError;s_dthresholdVoltage">
<ptr id="WaveDataSet" type="enum_s" caption="波形数据集" option="AUTO(DataMng.DATASET_WAVE:caption)"/>
<var id="s_u32BaudRate" type="edit" caption="总线波特率" min="5000" max="8000000" />
<var id="s_u32BaudRateFD" type="edit" caption="数据段波特率" min="5000" max="8000000" />
<var id="s_CanBusType" type="enum" caption="总线类型" option="CANH;CANL;CANDiff"/>
<var id="s_dError" type="edit" caption="误差电压"/>
<var id="s_dthresholdVoltage" type="edit" caption="门限电压"/>
</childgroup>
</publicproperty>
</localsource>
</DecodeSource>
</uint>

View File

@@ -0,0 +1,53 @@
<_Dialog id="fft_edit_dialog" title="参考波形编辑" titlebar="title;close;icon" bind="NULL:source" form="appmodal" fixWidth="360" fixHeight="480">
<children>
<messagedialog id="messagedlg" form="appmodal" type="Error" button="Ok" title="警告" text="频率值没有排序" />
</children>
<_View id="showview">
<vlayout sizeConstraint="default" contentsMargins="0,0,0,0" spacing="10">
<view objectName="edit_menu" >
<hlayout sizeConstraint="default">
<_IconBtn toolTip="增加" text="" icon="zr:share:/resource/res/td_res/add to_20_n.png" hover_icon="zr:share:/resource/res/td_res/add to_20_o.png" disabled_icon="zr:share:/resource/res/td_res/add to_20_d.png">
<event id="clicked">
<code statement="source.AddPoint(point_view.selectline)" />
</event>
</_IconBtn>
<_IconBtn toolTip="删除" text="" icon="zr:share:/resource/res/td_res/delete_20_n.png" hover_icon="zr:share:/resource/res/td_res/delete_20_o.png" disabled_icon="zr:share:/resource/res/td_res/delete_20_d.png">
<event id="clicked">
<code statement="source.RemovePoint(point_view.selectline)" />
</event>
</_IconBtn>
<stretch stretch="1" />
</hlayout>
</view>
<listview id="point_view" dragType="Drag" bind="source.pointList" copyPaste="true" multiSelect="true" >
<extend >
<columns>
<column name="number" title="序号" width="40" toolTip="参数" alignment="AlignCenter" titleExConnect="(;)" />
<column name="fre" title="频率Hz" width="100" toolTip="频率Hz" alignment="AlignCenter" />
<column name="db" title="畸变幅值dB" width="100" toolTip="畸变幅值dB" alignment="AlignCenter" />
</columns>
<lineinfos mainKey="type" BackColor="">
<listline key="__def__" init="extend" dragOut="true" style="data;visible" editable="true">
<linetext name="number" text="__INDEX__" alignment="AlignCenter" />
<linetext name="fre" bind="__line__{text=fre}" alignment="AlignCenter" color="black" delegateType="edit"/>
<linetext name="db" bind="__line__{text=db}" alignment="AlignCenter" color="black" delegateType="edit"/>
</listline>
</lineinfos>
</extend>
<events>
</events>
</listview>
</vlayout>
</_View>
<events>
<event id="close">
<var id="state" vtype="UINT8" def="0" />
<code statement="state=source.CheckSort()" />
<if condition="state==0">
<logui text="state=0"/>
<show id="messagedlg" type="messagedialog" status="exec" />
<return />
</if>
</event>
</events>
</_Dialog>

View File

@@ -0,0 +1,148 @@
<base_func_config>
<child_func_params_group>
</child_func_params_group>
<conditon_edit >
<item id="left" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" caption="左值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING)" descibe="左值【IN】比较符号左边的参数&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
<item id="op" type="combobox" caption="比较符号" data_type="STRING" item_type="STRING" option="=;≠;&lt;;&gt;;≤;≥" value="=" descibe="比较符号【IN】条件比较的符号枚举类型&#x000A;=、≠、&lt;、&gt;、≤、≥"/>
<item id="right" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" caption="右值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING)" descibe="右值【IN】比较符号右边的参数&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
</conditon_edit>
<in_range_conditon_edit>
<item id="min_value" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="下限值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="下限值【IN】比较符号左边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="op_1" type="combobox" caption="包含下限值" data_type="STRING" item_type="STRING" option="是;否" value="是" mapping="否=&lt;;是=&lt;=" descibe="是否包含下限值【IN】条件比较的符号枚举类型&#x000A;是和否"/>
<item id="value" type="combobox" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="比较值" value="{null}" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING)" descibe="比较值【IN】比较值大于最小值而且小于最大值则条件成立&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="max_value" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="上限值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="上限值【IN】比较符号右边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="op_2" type="combobox" caption="包含上限值" data_type="STRING" item_type="STRING" option="是;否" value="是" mapping="否=&lt;;是=&lt;=" descibe="是否包含上限值【IN】条件比较的符号枚举类型&#x000A; 是和否"/>
</in_range_conditon_edit>
<out_range_conditon_edit>
<item id="min_value" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="较小值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="较小值【IN】比较符号左边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="op_1" type="combobox" caption="包含较小值" data_type="STRING" item_type="STRING" option="是;否" value="是" mapping="否=&lt;;是=&lt;=" descibe="是否包含较小值【IN】条件比较的符号枚举类型&#x000A;是和否"/>
<item id="value" type="combobox" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="比较值" value="{null}" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="比较值【IN】需要比较的值比较值比最小值小比最大值大则条件成立&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="max_value" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="较大值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="较大值【IN】比较符号右边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="op_2" type="combobox" caption="包含较大值" data_type="STRING" item_type="STRING" option="是;否" value="是" mapping="否=&gt;;是=&gt;=" descibe="是否包含较大值【IN】条件比较的符号枚举类型&#x000A; 是和否"/>
</out_range_conditon_edit>
<repeat_step_param>
<item id="var" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="判定变量" setup="{i}" option="ENV($parent.LocalVar:INT32)" descibe="判定变量【IN】判定变量对象&#x000A;支持INT32变量"/>
<item id="init" type="combobox" editable="true" data_type="STRING" item_type="INT32" caption="初始值" setup="0" autoUpdateOption="true" option="AUTO($parent.LocalVar:INT32)" descibe="初始值【IN】判定对象的初始值&#x000A;支持INT32类型的变量"/>
<item id="end" type="combobox" editable="true" data_type="STRING" item_type="INT32" caption="结束值" setup="10" autoUpdateOption="true" option="AUTO($parent.LocalVar:INT32)" descibe="结束值【IN】判定条件的结束值&#x000A;支持INT32类型的变量"/>
<item id="step" type="combobox" editable="true" data_type="STRING" item_type="INT32" caption="步进" setup="1" autoUpdateOption="true" option="AUTO($parent.LocalVar:INT32)" descibe="步进【IN】单次循环的下标&#x000A;支持INT32类型的变量"/>
</repeat_step_param>
<repeat_array_param>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要遍历的数组对象&#x000A;支持Array类型的变量"/>
<item id="pos" type="combobox" editable="true" data_type="STRING" item_type="INT32" caption="当前位置" setup="i" autoUpdateOption="true" option="AUTO($parent.LocalVar:INT32)" descibe="当前位置【OUT】返回数组当前的下标&#x000A;支持INT32类型的变量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" caption="当前值" setup="value" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING)" descibe="当前值【OUT】返回数组当前的值如果当前值非数字值而传入INT32或者DOUBLE变量则变量输出变0&#x000A;支持INT32DOUBLESTRING变量"/>
</repeat_array_param>
<single_param_edit>
<item id="param" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="数值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="数值【IN】需要执行运算的数值&#x000A;支持INT32、DOUBLE变量或者常量" />
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="计算结果" value="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="计算结果【OUT】对输入值计算后的结果&#x000A;支持INT32、DOUBLE变量"/>
</single_param_edit>
<double_param_edit>
<item id="left" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="左值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="左值【IN】运算符左边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="op" type="combobox" data_type="STRING" caption="运算符" value="+" option="+;-;*;/" descibe="运算符【IN】运算符号枚举类型&#x000A;+、-、*、/"/>
<item id="right" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="右值" value="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="右值【IN】运算符右边的参数&#x000A;支持INT32、DOUBLE变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="计算结果" value="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="计算结果【OUT】对输入值计算后的结果&#x000A;支持INT32、DOUBLE变量"/>
</double_param_edit>
<devcmd_conditon>
<!--<item id="dev_ptr" type="combobox" caption="设备" value="" option="DYNAMIC(ENV($parent.parent.LocalVar:Device)#;#AUTO(@ATETestDevEnv.device:ID+ ))" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />-->
<item id="dev_ptr" type="combobox" caption="设备" value="" option="ENV($parent.parent.LocalVar:DEV_POINT+ )" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />
<item id="delay_time" type="combobox" caption="阻塞时间(ms)" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" value="0" option="ENV($parent.parent.LocalVar:INT32)" descibe="阻塞时间【IN】执行完设备命令之后堵塞的时间&#x000A;支持INT32变量或者常量类型" />
<item id="cmd_ptr" type="combobox" caption="命令列表" value="" visible="UINT8(dev:value!=``&amp;&amp;dev:value!=` `)" autoUpdateOption="true" editable="true" completer="true" />
<item id="arg_ptr" type="category" caption="参数列表" visible="UINT8(cmd:value!=``)" />
</devcmd_conditon>
<compile_error>
<item id="invalid_return" caption="返回值无效"/>
<item id="time_error" caption="时间不是数字类型"/>
<item id="empty_param" caption="参数不能为空"/>
<item id="not_digit" caption="不是数据类型"/>
<item id="express_error" caption="表达式解析错误"/>
<item id="format_error" caption="格式化解析错误"/>
<item id="params_error" caption="参数错误"/>
<item id="unknown_var" caption="变量不存在"/>
<item id="not_variable" caption="不是变量类型"/>
<item id="must_var_type" caption="需是变量类型"/>
<item id="format_error" caption="格式非法"/>
<item id="type_error" caption="类型不匹配"/>
<item id="div_zero" caption="除0非法操作"/>
<item id="file_not_exist" caption="文件不存在"/>
<item id="get_type_error" caption="获取类型错误"/>
<item id="unknown_type" caption="未定义类型"/>
<item id="type_diff_error" caption="所有类型不完全一致"/>
<item id="compare_error" caption="最小值比最大值"/>
<item id="undefine" caption="未知错误"/>
<item id="string_over" caption="字符串越界错误" />
<item id="array_over" caption="数组访问越界错误" />
<item id="string_deal_error" caption="字符串处理错误" />
<item id="sub_item_absent" caption="子测试项不存在" />
<item id="save_image_error" caption="保存图片失败" />
<!-- xxx -->
<item id="compile_success" caption="编译成功"/>
<item id="compile_error" caption="编译失败" />
<!-- 设备命令相关错误 -->
<item id="dev_connect_error" caption="设备连接错误,请检查设备连接状态"/>
<item id="dev_is_empty" caption="未关联设备变量,请下拉选择关联设备变量"/>
<item id="cmd_is_empty" caption="未关联设备函数,请下拉选择关联设备函数"/>
<item id="dev_not_find" caption="关联设备不存在,请检测设备是否存在测试环境"/>
<item id="cmd_not_find" caption="关联函数不存在,请检测设备驱动是否存在此函数"/>
<item id="output_not_bind" caption="输出参数未绑定变量"/>
<item id="cond_parse_fail" caption="参数语法解析失败"/>
<item id="var_not_exist" caption="关联变量不存在"/>
<item id="var_type_error" caption="关联变量类型不正确" />
<item id="input_not_int" caption="输入内容与类型(INT)不匹配" />
<item id="input_not_double" caption="输入内容与类型(DOUBLE)不匹配" />
<item id="power_calculate_error" caption="求次方运行错误,底数和指数不能同时是带小数点的负数" />
</compile_error>
<groups>
<group path="base" caption="基础命令"/>
<group path="process" caption="流程控制"/>
<group path="math" caption="数学运算"/>
<group path="string" caption="文本处理"/>
<group path="data" caption="数据处理"/>
</groups>
<funcs>
<logui caption="Log Output" path="base" tips="" descibe="打印日志:输出一条文字信息到日志窗口">
<item id="level" vtype="STRING" type="combobox" caption="级别" option="调试;提示;警告;错误" def="调试" value="调试" autoUpdateOption="true" item_type="STRING" mapping="调试=Debug;提示=Info;警告=Warn;错误=Error" descibe="级别【IN】日志文本的级别枚举类型&#x000A;Debug开发人员需要查看的程序调试信息&#x000A;Info用于向用户展示主要的测试进展&#x000A;Warn不影响整体测试运行的告警信息&#x000A;Error严重的故障信息出现时通常会终止测试"/>
<item id="text" vtype="STRING" type="combobox" editable="true" caption="内容" value="text" def="text" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING,Time)" descibe="内容【IN】要输出的日志内容&#x000A;支持INT32、DOUBLE、STRING变量或者常量,Time变量,还支持输入文本表达式比如AA{var}BB输出是AA0BB" />
</logui>
<app caption="Run Program" path="base" tips="" descibe="程序调用:运行第三方程序。">
<item id="app" vtype="STRING" type="filepathedit" fileFilter="*.exe;*.py" caption="程序路径" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="程序路径【IN】待执行程序的完整路径"/>
<item id="param" vtype="STRING" type="edit" editable="true" caption="参数" option="" item_type="STRING" descibe="参数【IN】程序的运行参数"/>
</app>
<comment caption="Comment" path="base" tips="" descibe="注释文本:一般用于说明代码段功能,也可用作空行分割代码段。">
<item id="text" vtype="STRING" type="edit" caption="文本内容" item_type="STRING" def="注释文本" value="注释文本" descibe="静态文本内容,不支持使用变量与表达式"/>
<!--<item id="color" vtype="STRING" type="combobox" editable="true" caption="文字颜色" item_type="STRING" descibe="文本内容的显示颜色"/>-->
</comment>
<ifelseedit caption="If-Else" path="process" tips="" descibe="条件判断当满足判定条件时执行then节点下的子流程否则执行else节点下的子流程。">
<item id="type" vtype="STRING" type="combobox" caption="类型" option="简单条件;InRange;OutRange" def="简单条件" value="简单条件" descibe="SWITCH(__line__.setup{简单条件=`简单条件判断`;InRange=`范围内条件判断`;OutRange=`范围外条件判断`})"/>
<item id="condition_list" type="category" vtype="POINT" caption="条件列表" descibe="条件列表"/>
</ifelseedit>
<!--<if caption="If" path="process" tips="" descibe="条件判断:当满足判定条件时,执行子流程,否则直接执行后续步骤。"/>-->
<!--<ifelse caption="If-Else" path="process" tips="" descibe="条件判断当满足判定条件时执行then节点下的子流程否则执行else节点下的子流程。"/>-->
<!--<repeat caption="Repeat" path="process" tips="" descibe="循环语句:满足判定条件时,循环执行子流程。"/>-->
<break caption="Break" path="process" tips="" descibe="中断循环:在当前位置,跳出循环语句。"/>
<continue caption="Continue" path="process" tips="" descibe="继续循环:在当前位置,直接进入下一次循环。"/>
<return caption="Return" path="process" tips="" descibe="结束测试项:结束当前测试项的工作流程,不再执行后续操作。"/>
</funcs>
</base_func_config>

View File

@@ -0,0 +1,200 @@
<MathFuncMgr id="CAN" decode="">
<group id="BaseMath" caption="数学运算">
<math type="op2" id="BaseMath2" caption="二元数学运算">
<info result="NUM" export="[{1}]{OP}[{2}]">
<param id="left" />
<param id="right"/>
</info>
<op id="+" caption="加"/>
<op id="-" caption="减"/>
<op id="*" caption="乘"/>
<op id="/" caption="除"/>
</math>
<!--
<math type="op1" id="" caption="一元数学运算">
<info result="NUM" export="{OP}({1})">
<param id="param"/>
</info>
<op id="-" caption="取反"/>
</math>
-->
</group>
<group id="BitMath" caption="整形运算">
<math type="op2" id="BitMath2" caption="二元整形操作">
<info result="NUM" export="[{1}]{OP}[{2}]" >
<param id="left" />
<param id="right"/>
</info>
<op id="%" caption="取模"/>
<op id="&" caption="与操作"/>
<op id="|" caption="或操作"/>
<op id="^" caption="异或操作"/>
</math>
<math type="op1" id="BitMath1" caption="一元整形运算">
<info result="NUM" export="{OP}[{Param}]">
<param id="param"/>
</info>
<op id="~" caption="Bit取反"/>
</math>
</group>
<group id="LogicOP" caption="逻辑运算">
<math type="op2" id="CompareMath" caption="比较运算">
<info result="NUM" export="[{1}]{OP}[{2}]" >
<param id="left" />
<param id="right"/>
</info>
<op id="&lt;" caption="小于"/>
<op id="&gt;" caption="大于"/>
<op id="&lt;=" caption="小于等于"/>
<op id="&gt;=" caption="大于等于"/>
<op id="==" caption="相等"/>
<op id="!=" caption="不等"/>
</math>
<math type="op2" id="LogicMath2" caption="二元逻辑运算">
<info result="NUM" export="[{1}]{OP}[{2}]" >
<param id="left" />
<param id="right"/>
</info>
<op2 id="&&" caption="与运算"/>
<op2 id="||" caption="或操作"/>
</math>
<math type="op1" id="LogicMath1" caption="一元逻辑运算">
<info result="NUM" export="{OP}[{1}]">
<param id="param"/>
</info>
<op id="!" caption="否运算"/>
</math>
<math type="func" id="RangeMath" caption="范围比较">
<info result="BOOL" export="{OP}({1},{2},{3})" >
<param id="value"/>
<param id="min" />
<param id="max" />
</info>
<op id="IN" caption="与运算"/>
<op id="OUT" caption="或操作"/>
</math>
<!--
<math type="func" id="" caption="数据查找">
<info result="BOOL" export="{OP}({1},{2})" >
<param id="value" arry="1"/>
<param id="arry" arry="1"/>
</info>
<op id="HaveData" caption="存在数据"/>
<op id="HaveArry" caption="或操作"/>
</math>
-->
</group>
<group id="FloatMath" caption="常用函数运算">
<math type="func" id="FloatMath1" caption="数学函数">
<info result="FNUM" export="{OP}({1})" >
<left id="param" type="FNUM"/>
</info>
<op id="sin" caption="正弦"/>
<op id="cos" caption="余弦"/>
<op id="tan" caption="正切"/>
<op id="ln" caption="自然对数"/>
<op id="lg" caption="十对数"/>
<op id="asin" caption="反正弦"/>
<op id="acos" caption="反余弦"/>
<op id="atan" caption="反正切"/>
<op id="ceil" caption="向上取整"/>
<op id="floor" caption="向下取整"/>
<op id="fix" caption="向0取整"/>
<op id="round" caption="四舍五入取整"/>
<op id="sqrt" caption="开发平方"/>
</math>
<math type="func" id="FloatMath2" caption="指数函数">
<info result="FNUM" export="{OP}({1},{2})" >
<param id="left" type="FNUM"/>
<param id="right" type="FNUM"/>
</info>
<op id="pow" caption="幂函数"/>
<!-- <op id="log" caption="自然对数"/> -->
</math>
</group>
<group id="MinMaxMath" caption="统计函数">
<math type="func" id="MinMaxMath" caption="最大最小值">
<info export="{OP}({args})" >
<args id="param" />
</info>
<op id="min" caption="求最小值"/>
<op id="max" caption="求最大值"/>
</math>
<math type="func" id="MinMaxMathEx" caption="最大最小值">
<info export="{OP}({1})" >
<param id="param" arry="1"/>
</info>
<op id="minex" caption="求最小值"/>
<op id="maxex" caption="求最大值"/>
</math>
</group>
<group id="StatisticalMath" caption="统计函数">
<math type="func" id="StatisticalMath" caption="数组统计">
<info result="DOUBLE" export="{OP}({args})" >
<args id="param" />
</info>
<op id="sum" caption="求和"/>
<op id="avg" caption="求平均"/>
</math>
<math type="func" id="StatisticalMathEx" caption="参数统计">
<info result="DOUBLE" export="{OP}({1})" >
<param id="param" arry="1"/>
</info>
<op id="sumex" caption="求和"/>
<op id="avgex" caption="求平均"/>
</math>
</group>
<group id="ArryMath" caption="统计函数">
<math type="func" id="TestArryMath2" caption="测试数组函数">
<info result="FNUM" arry="1" export="{OP}({1},{2})" >
<param id="left" type="FNUM" arry="1"/>
<param id="right" type="FNUM" arry="1"/>
</info>
</math>
</group>
<group id="ZUS8000ExtendMath" caption="8000扩展数学">
<math type="func" id="FilterMathSimpleFrequency" caption="测试数组函数">
<info result="FNUM" arry="1" export="{OP}({1},{2})" >
<param id="left" type="FNUM" arry="1"/>
<param id="right" type="DOUBLE" />
</info>
<op id="FIRLowPassFILT" caption="FIR低通滤波"/>
<op id="IIRLowPassFILT" caption="IIR低通滤波"/>
<op id="FIRHighPassFILT" caption="FIR高通滤波"/>
<op id="IIRHighPassFILT" caption="IIR高通滤波"/>
</math>
<math type="func" id="FilterMathDoubleFrequency" caption="测试数组函数">
<info result="FNUM" arry="1" export="{OP}({1},{2},{3})" >
<param id="left" type="FNUM" arry="1"/>
<param id="freq1" type="DOUBLE" />
<param id="freq2" type="DOUBLE" />
</info>
<op id="FIRBandPassFILT" caption="FIR带通滤波"/>
<op id="IIRBandPassFILT" caption="IIR带通滤波"/>
<op id="FIRBandStopFILT" caption="FIR带阻滤波"/>
<op id="IIRBandStopFILT" caption="IIR带阻滤波"/>
</math>
<math type="func" id="CustomArrayMath" caption="自定义数组函数">
<info result="FNUM" arry="1" export="{OP}({1})" >
<param id="left" type="FNUM" arry="1"/>
</info>
<op id="DIFF" caption="微分函数"/>
<op id="INTG" caption="积分函数"/>
</math>
</group>
<!--
<group id="LogicOP" caption="随机函数">
<math result="NUM" type="func" caption="数组统计">
<info export="{OP}({1})" >
<param id="param" type="NUM"/>
</info>
<op id="abs" caption="取绝对值"/>
</math>
</group>
-->
</MathFuncMgr>

View File

@@ -0,0 +1,646 @@
<base_func_config>
<groups>
<!--<group path="base" caption="基础命令"/>-->
<group path="base" caption="基础命令"/>
<group path="process" caption="流程控制"/>
<group path="math" caption="数学运算"/>
<group path="string" caption="文本处理"/>
<group path="data" caption="数据处理"/>
</groups>
<funcs>
<userinput caption="User Input" path="base" tips="" descibe="用户参数输入窗口">
<item id="title" vtype="STRING" type="combobox" editable="true" caption="标题" item_type="INT32:DOUBLE:STRING" value="标题" def="标题" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING)" descibe="标题【IN】对话框标题文本类型&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
<item id="argss" type="TestDataEditorType" editable="true" data_type="STRING" item_type="STRING" comment="选择" caption="内容" descibe="错误反馈【IN】错误反馈数值类型&#x000A;支持STRING变量或者常量"/>
<item id="width" vtype="INT32" type="combobox" editable="true" caption="窗口宽度" value="400" def="400" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="窗口宽度【IN】窗口的默认宽度单位像素&#x000A;如果使用的图片宽度大于设置值窗口宽度自动跟随图片宽度调整支持INT32变量或者常量"/>
<item id="height" vtype="INT32" type="combobox" editable="true" caption="窗口高度" value="300" def="300" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="窗口高度【IN】窗口的默认高度单位像素&#x000A;如果使用的图片高度大于设置值窗口高度自动跟随图片高度调整支持INT32变量或者常量"/>
<item id="timeout" vtype="INT32" type="combobox" editable="true" caption="超时时间" value="0" def="0" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="超时时间【IN】等待用户操作的超时时间单位毫秒&#x000A;超时未输入窗口将自动关闭输入值≤0表示持续等待程序不会自动关闭窗口支持INT32常量或者变量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" value="" def="" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="执行结果【OUT】返回对话框的关闭方式数值类型&#x000A;1用户点击“确定”按钮&#x000A;0用户点击“取消”按钮&#x000A;-1用户长时间未操作对话框超时退出&#x000A;支持INT32变量"/>
</userinput>
<mptservercomm caption="MPTServerComm" path="data" tips="" descibe="服务器通信命令">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="UpLoadTestResult;SetTestStatus" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{UpLoadTestResult=`上传测试结果到服务器`;SetTestStatus=`设置上传状态`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</mptservercomm>
<fileprocess caption="FileProcess" path="data" tips="" descibe="文件操作">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="CreateDirectory;IsDirEmpty;GetDirChildren;CreateFile;OpenFile;CloseFile;GetFileName;GetFileDir;GetFileExtName;GetFileSize;WriteData;ReadData;Delete;Rename;Copy;IsExist;GetPathFileType" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{CreateDirectory=`创建目录`;IsDirEmpty=`目录是否为空,判断依据是目录存在且存在子目录或着文件`;GetDirChildren=`获取目录下所有子目录和文件并保存到数组`;CreateFile=`创建一个文件`;OpenFile=`打开一个文件并关联到指定的文件变量`;CloseFile=`关闭文件`;GetFileName=`获取文件名`;GetFileDir=`获取文件路径`;GetFileExtName=`获取文件的后缀名`;GetFileSize=`获取文件的大小`;WriteData=`往已打开文件变量中写数据`;ReadData=`往已打开文件变量中读数据`;Delete=`删除文件或者目录`;Rename=`文件或者目录重命名`;Copy=`拷贝或者移动文件或者目录`;IsExist=`判断文件或者目录是否存在`;GetPathFileType=`获取路径的类型是文件或者目录或者其它`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</fileprocess>
<waveprocess caption="WaveProcess" path="data" tips="" descibe="波形操作">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="GetName;SetName;GetDataType;SetDataType;SetRate;GetRate;SetBeginTime;GetBeginTime;AppendData;AppendArray;GetDataCount;ClearData" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{GetName=`获取名称`;SetName=`设置名称`;GetDataType=`获取数据类型`;SetDataType=`设置数据类型`;SetRate=`设置采样率`;GetRate=`获取采样率`;SetBeginTime=`设置起始时间`;GetBeginTime=`获取起始时间`;AppendData=`追加数据`;AppendArray=`追加数据区域`;GetDataCount=`获取数据个数`;ClearData=`清空数据`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</waveprocess>
<waveviewprocess caption="WaveViewProcess" path="data" tips="" descibe="波形图操作">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="SetWaveShowState;SetCursorStatus;SetCursorPosition;GetCursorPosition;GetCursorDelta" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{SetWaveShowState=`设置波形显示状态`;SetCursorStatus=`设置光标状态`;GetCursorPosition=`获取光标位置`;GetCursorDelta=`获取光标差值`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</waveviewprocess>
<vrtprocess caption="VRTProcess" path="data" tips="" descibe="穿越电压测试分析命令">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="VRTCalculate;VRTAnalysis;VRTConfigure;VRTAutoParam;AutoExport;GetPointTime;UpdateWaveRange" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{VRTConfigure=`设置VRT前置参数`;VRTCalculate=`将原始波形运算得到计算波形`;VRTAnalysis=`进行VRT分析处理`;VRTAutoParam=`VRT自动配置参数`;AutoExport=`导出波形数据`;GetPointTime=`获取区域时间`;UpdateWaveRange=`调整波形范围显示时间`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</vrtprocess>
<flickerprocess caption="FlickerProcess" path="data" tips="" descibe="闪变测试分析命令">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="FlickerAnalysis;FlickerConfigure;FlickerFluAnalysis" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{FlickerConfigure=`设置闪变前置参数`;FlickerAnalysis=`进行闪变分析处理`;FlickerFluAnalysis=`分析闪变波动数据`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</flickerprocess>
<uicommand caption="UICommand" path="data" tips="" descibe="UI处理命令">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="Bind;ScreenShot" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{Bind=`绑定Ui参数`;ScreenShot=`Ui截图处理`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</uicommand>
<aborttest caption="Abort Test" path="process" tips="" descibe="终止测试流程" >
<item id="pos" vtype="STRING" type="combobox" caption="级别" option="整个流程;当前测试项" def="整个流程" value="整个流程" descibe="级别【IN】停止的级别枚举值&#x000A;整个流程:整个测试流程"/>
<item id="abnormal_code" vtype="STRING" type="edit" caption="异常码" item_type="STRING" def="code" value="code" descibe="异常码【IN】异常的类型与异常处理流程的子函数绑定&#x000A;异常码支持STRING变量或者常量"/>
</aborttest>
<fftcheck caption="FFT Check" path="data" tips="" descibe="fft波形判定函数" >
<item id="fft" vtype="INT32" type="combobox" editable="true" caption="FFT变量" value="{fft}" def="{fft}" item_type="FFTWave" autoUpdateOption="true" option="ENV($LocalVar:FFTWave)" descibe="FFT变量【IN】需要判定的变量&#x000A;和参考波形数据进行判断支持FFTWave变量"/>
<item id="error" vtype="STRING" type="combobox" editable="true" caption="错误原因" value="" def="" item_type="STRING" autoUpdateOption="true" option="ENV($LocalVar:STRING)" descibe="错误原因【IN】如果出现错误返回错误的具体原因&#x000A;如果支持STRING变量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="判定结果" value="" def="" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="判定结果【OUT】反馈判定结构数值类型&#x000A;1成功&#x000A;0失败&#x000A;支持INT32变量"/>
</fftcheck>
<ifdef caption="If Define" path="process" tips="" descibe="条件编译,如果条件成立,则该语句有效并且编译,否则该语句无效并不会编译该语句">
<item id="condi" vtype="STRING" type="edit" caption="条件" item_type="STRING" descibe="条件【IN】条件表达式"/>
</ifdef>
<arrayprocess caption="ArrayProcess" path="data" tips="" descibe="数组操作">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="GetSize;SetSize;GetValue;SetValue;Clear;AppendValue;InsertAtPos;RemoveAtPos;CopyTo" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{GetSize=`返回数组的大小`;SetSize=`初始化设置数组的大小,原来数据会并清空`;GetValue=`获取数组索引的值`;SetValue=`更新数组索引的值`;Clear=`清空数组的内容`;AppendValue=`在数组末尾添加新数据`;InsertAtPos=`在数组指定位置插入一个新的数据`;RemoveAtPos=`删除数组指定位置的内容`;CopyTo=`删除数组指定位置的内容`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</arrayprocess>
<delay caption="Delay" path="base" tips="" descibe="延时/等待:阻塞测试流程,等待用户指定时长。">
<item id="time" vtype="STRING" type="combobox" editable="true" data_type="INT32" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="时间" value="1000" def="1000" option="ENV($LocalVar:INT32,DOUBLE)" descibe="时间【IN】休眠时长数值类型&#x000A;支持INT32,DOUBLE变量或者常量"/>
<item id="unit" vtype="STRING" type="combobox" caption="单位" option="s;ms" def="ms" value="ms" descibe="单位【IN】休眠时长的单位枚举值&#x000A;sms毫秒"/>
</delay>
<dialog caption="Dialog" path="base" tips="" descibe="对话框:弹出消息窗口,并接收用户反馈。">
<item id="title" vtype="STRING" type="combobox" editable="true" caption="标题" item_type="INT32:DOUBLE:STRING" value="标题" def="标题" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING)" descibe="标题【IN】对话框标题文本类型&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
<item id="message" vtype="STRING" type="combobox" editable="true" caption="内容" item_type="INT32:DOUBLE:STRING" value="消息内容" def="消息内容" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING)" descibe="内容【IN】对话框中显示的消息内容&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
<item id="image" vtype="STRING" caption="图片" type="filepathedit" fileFilter="*.png" buttonText=" " item_type="STRING" fileMode="AnyFile" path="D:/" descibe="图片【IN】对话框中显示的图片&#x000A;当前只支持PNG格式参数为图片的路径"/>
<item id="button" vtype="STRING" type="combobox" editable="true" caption="按钮类型" value="是/否" def="是/否" item_type="STRING" option="是/否;确定/取消" descibe="按钮类型【IN】对话框功能按钮的类型"/>
<item id="width" vtype="INT32" type="combobox" editable="true" caption="窗口宽度" value="400" def="400" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="窗口宽度【IN】窗口的默认宽度单位像素&#x000A;如果使用的图片宽度大于设置值窗口宽度自动跟随图片宽度调整支持INT32变量或者常量"/>
<item id="height" vtype="INT32" type="combobox" editable="true" caption="窗口高度" value="300" def="300" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="窗口高度【IN】窗口的默认高度单位像素&#x000A;如果使用的图片高度大于设置值窗口高度自动跟随图片高度调整支持INT32变量或者常量"/>
<item id="timeout" vtype="INT32" type="combobox" editable="true" caption="超时时间" value="0" def="0" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="超时时间【IN】等待用户操作的超时时间单位毫秒&#x000A;超时未输入窗口将自动关闭输入值≤0表示持续等待程序不会自动关闭窗口支持INT32常量或者变量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" value="" def="" item_type="INT32" autoUpdateOption="true" option="ENV($LocalVar:INT32)" descibe="执行结果【OUT】返回对话框的关闭方式数值类型&#x000A;1用户点击“确定”或“是”按钮&#x000A;0用户点击“取消”或“否”按钮&#x000A;-1用户长时间未操作对话框超时退出&#x000A;支持INT32变量"/>
</dialog>
<calculate caption="+-*/" path="math" tips="" descibe="四则运算,支持加减乘除"/>
<mathformula caption="MathFormula" path="math" tips="" descibe="数学表达式运算命令">
<item id="expression" vtype="STRING" type="combobox" caption="表达式" item_type="INT32:DOUBLE" editable="true" def="0" value="0" autoUpdateOption="true" option="AUTO($LocalVar:INT32,DOUBLE)" descibe="表达式【IN】数学表达式&#x000A;比如{var}+{var_1}-10+Lg(10)也支持输入INT32、DOUBLE变量或者常量"/>
<item id="var" vtype="STRING" type="combobox" editable="true" caption="计算结果" value="null" item_type="INT32:DOUBLE" def="null" autoUpdateOption="true" option="AUTO($LocalVar:INT32,DOUBLE)" descibe="计算结果【OUT】上述表达式的计算结果&#x000A;支持INT32、DOUBLE变量" />
</mathformula>
<arithmetic caption="Arithmetic" path="math" tips="" descibe="常见数学函数命令">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="Abs;Sqrt;Power;Lg;Avg;Sum;Max;MaxEx;Min;MinEx" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{Abs=`求绝对值`;Sqrt=`求平方根`;Power=`求次方`;Lg=`求log10`;Avg=`求数组的平均值`;Sum=`求数组的总和`;Max=`求数组的最大值`;MaxEx=`求数组的最大值拓展`;Min=`求最小值`;MinEx=`求最小值拓展`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</arithmetic>
<assign caption="Set Value" path="base" tips="" descibe="赋值函数">
<item id="var" vtype="STRING" type="combobox" editable="true" caption="参数名称" value="null" def="null" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING)" descibe="参数名称【OUT】需要被赋值的变量&#x000A;支持INT32、DOUBLE、STRING变量变量类型需和值的类型一致" />
<item id="expression" vtype="STRING" type="combobox" caption="值" editable="true" def="0" value="0" item_type="STRING" autoUpdateOption="true" option="ENV($LocalVar:INT32,DOUBLE,STRING)" descibe="值【IN】赋值给变量的值&#x000A;支持INT32、DOUBLE、STRING变量或者常量比如{var}={var}"/>
</assign>
<devicecontrol caption="ControlDevice" path="base" tips="" descibe="设备连接控制">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="GetConnectParamEx;SetConnectParamEx;SetConnectParam;Connect;DisConnect;IsOnline;RequestDevCtrlPerm;ReleaseDevCtrlPerm" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{GetConnectParamEx=`获取设备连接参数到数组`;SetConnectParamEx=`设置数组的连接参数到设备`;SetConnectParam=`设置连接参数到设备`;RequestDevCtrlPerm=`获取远程设备的控制权`;ReleaseDevCtrlPerm=`释放远程设备的控制权`;Connect=`连接设备`;DisConnect=`断开设备连接`;IsOnline=`设备是否连接`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</devicecontrol>
<devcmd caption="Device Command" path="base" tips="" descibe="设备命令:执行用户指定的设备命令。"/>
<ifedit caption="If" path="process" tips="" descibe="条件判断:当满足判定条件时,执行子流程,否则直接执行后续步骤。">
<item id="type" vtype="STRING" type="combobox" caption="类型" option="简单条件;InRange;OutRange" def="简单条件" value="简单条件" descibe="SWITCH(__line__.setup{简单条件=`简单条件判断`;InRange=`范围内条件判断`;OutRange=`范围外条件判断`})"/>
<item id="condition_list" type="category" vtype="POINT" caption="条件列表" descibe="条件列表"/>
</ifedit>
<repeat caption="Repeat" path="process" tips="" descibe="循环语句:满足判定条件时,循环执行子流程">
<item id="cmd_list" vtype="STRING" type="combobox" caption="类型" option="Simple;Step;Array" descibe="SWITCH(__line__.setup{Simple=`二元参数循环条件判断`;Step=`步进或者次数循环`;Array=`数组循环`})"/>
<item id="param_list" type="category" vtype="POINT" caption="条件列表" descibe="条件列表"/>
</repeat>
<split caption="Split" path="string" tips="" descibe="字符串分割:基于“分隔符”将字符串分割为多个文本或数值。">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="Format;Array" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{Format=`字符串分割到指定格式的变量中`;Array=`字符串分割到数组中`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</split>
<merge caption="Merge" path="string" tips="" descibe="按照指定的格式合并字符串">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="Format;Array" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{Format=`从指定的变量格式中合并成新的字符串`;Array=`从数组中合并成新的字符串`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</merge>
<stringformat caption="ToString" path="string" tips="" descibe="自定义字符串命令">
<item id="expression" vtype="STRING" type="combobox" caption="原始文本" editable="true" def="0" value="0" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" option="AUTO($LocalVar:INT32,DOUBLE,STRING)" descibe="原始文本【IN】字符串表达式&#x000A;自定义格式大括号包裹的文本将解析为变量支持INT32、DOUBLE、STRING类型"/>
<item id="var" vtype="STRING" type="combobox" editable="true" caption="格式化结果" value="null" def="null" item_type="STRING" autoUpdateOption="true" option="AUTO($LocalVar:STRING)" descibe="格式化结果【OUT】字符串表达式的转义结果&#x000A;支持STRING变量类型" />
</stringformat>
<stringto caption="StringTo" path="string" tips="" descibe="把字符串类型转为数据命令">
<item id="origin" vtype="STRING" type="combobox" caption="原始文本" editable="true" def="0" value="0" item_type="STRING" autoUpdateOption="true" option="AUTO($LocalVar:STRING)" descibe="原始文本【IN】字符串表达式&#x000A;自定义格式大括号包裹的文本将解析为变量支持STRING类型"/>
<item id="var" vtype="STRING" type="combobox" editable="true" caption="转换结果" value="null" def="null" item_type="INT32:DOUBLE" autoUpdateOption="true" option="AUTO($LocalVar:INT32,DOUBLE)" descibe="转换结果【OUT】字符串表达式的转义结果&#x000A;支持INT,DOUBLE变量类型" />
</stringto>
<stringlength caption="StringLen" path="string" tips="" descibe="求字符串长度命令">
<item id="var" vtype="STRING" type="combobox" editable="true" caption="字符串变量" def="var" value="var" item_type="STRING" autoUpdateOption="true" option="AUTO($LocalVar:STRING)" descibe="字符串变量【IN】需要计算字符串长度的变量&#x000A;支持STRING变量类型" />
<item id="length" vtype="STRING" type="combobox" caption="长度" editable="true" def="null" value="null" item_type="INT32" autoUpdateOption="true" option="AUTO($LocalVar:INT32)" descibe="长度【OUT】字符串计算后的长度返回值&#x000A;支持INT32变量类型"/>
</stringlength>
<stringprocess caption="StringProcess" path="string" tips="" descibe="常规的字符串运算">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="Left;Right;Mid;Find;Lower;Upper;Clear" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{Left=`获取字符串左边的内容`;Right=`获取字符串右边的内容`;Mid=`截取指定长度的字符并返回`;Find=`查找字符串,并返回子字符串的位置`;Lower=`使字符串全部变成小写`;Upper=`使字符串全部变成大写`;Clear=`清空字符串`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</stringprocess>
<imageprocess caption="ImageProcess" path="data" tips="" descibe="图片处理">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="LoadImage;StoreImage;ImageSize" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{LoadImage=`加载图片到图片变量`;StoreImage=`存储图片变量的内容到指定的位置`;ImageSize=`获取图片内容的大小`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</imageprocess>
<datetimeprocess caption="DateTimeProcess" path="data" tips="" descibe="数组操作">
<item id="cmd_list" vtype="STRING" type="combobox" caption="参数命令" option="GetCurDataTime;DateTimeToString;StringToDataTime;GetTimeDiffrenceS;GetTimeDiffrenceMS" autoUpdateOption="true" item_type="STRING" descibe="SWITCH(__line__.setup{GetCurDataTime=`获取当前时间到时间变量`;DateTimeToString=`把时间变量转为字符串内容`;StringToDataTime=`把时间字符串安装某种格式转时间变量`;GetTimeDiffrenceS=`计算两个时间差`})"/>
<item id="param_list" type="category" vtype="POINT" caption="参数列表" descibe="参数列表"/>
</datetimeprocess>
</funcs>
<child_func_params_group>
<UICommand_Bind>
<item id="UIInput" vtype="STRING" type="combobox" editable="true" data_type="UIParam" item_type="UIParam" autoUpdateOption="true" caption="UI输出参数" option="ENV($parent.LocalVar:UIParam)" descibe="UIParam输出参数【IN】用于绑定的UIParam输出参数"/>
<item id="ObjInput" vtype="STRING" type="combobox" editable="true" optional_types="Object" data_type="" item_type="" autoUpdateOption="true" caption="输出参数" option="ENV($parent.LocalVar:Object)" descibe="输出参数【IN】用于绑定view的输出参数"/>
</UICommand_Bind>
<UICommand_ScreenShot>
<item id="ObjInput" vtype="STRING" type="combobox" editable="true" optional_types="Object" data_type="" item_type="" autoUpdateOption="true" caption="UI输出参数" option="ENV($parent.LocalVar:Object)" descibe="截图输出参数【IN】用于截图的输出参数"/>
<item id="PathInput" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="截图保存参数" option="ENV($parent.LocalVar:STRING)" descibe="截图保存参数【IN】用于保存截图输出路径的参数"/>
</UICommand_ScreenShot>
<FlickerProcess_FlickerConfigure>
<item id="FlickerInput" vtype="STRING" type="combobox" editable="true" data_type="FlickerParam" item_type="FlickerParam" autoUpdateOption="true" caption="Flicker输出参数" option="ENV($parent.LocalVar:FlickerParam)" descibe="Flicker输出参数【IN】用于计算的Flicker输出参数"/>
<item id="ShortFlTime" vtype="STRING" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="短闪变时长(s)" setup="2" option="ENV($parent.LocalVar:INT32)" descibe="短闪变时长【IN】用于计算的参考短闪变时长"/>
<!--<item id="ExamTotal" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="闪变次数" setup="10" option="ENV($parent.LocalVar:STRING)" descibe="闪变次数【IN】用于计算的参考闪变次数"/>-->
<item id="LightSys" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="照明系统" setup="230V/50Hz" option="230V/50Hz;230V/60Hz;120V/50Hz;120V/60Hz" descibe="照明系统【IN】照明系统用于闪变计算使用的电压和频率"/>
<!--<item id="Fsamp" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="采样率(S/s)" setup="20000" option="ENV($parent.LocalVar:STRING)" descibe="采样率【IN】用于计算的参考采样率"/>-->
<item id="Un" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="线电压(U)" setup="35" option="ENV($parent.LocalVar:STRING)" descibe="线电压【IN】用于计算的参考线电压"/>
<item id="Sn" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="额定容量(VA)" setup="50" option="ENV($parent.LocalVar:STRING)" descibe="额定容量【IN】用于计算的参考额定容量"/>
<item id="Sk" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="短路容量(VA)" setup="50" option="ENV($parent.LocalVar:STRING)" descibe="短路容量【IN】用于计算的参考短路容量"/>
</FlickerProcess_FlickerConfigure>
<FlickerProcess_FlickerAnalysis>
<item id="FlickerInput" vtype="STRING" type="combobox" editable="true" data_type="FlickerParam" item_type="FlickerParam" autoUpdateOption="true" caption="Flicker输出参数" option="ENV($parent.LocalVar:FlickerParam)" descibe="Flicker输出参数【IN】用于分析的Flicker输出参数"/>
</FlickerProcess_FlickerAnalysis>
<FlickerProcess_FlickerFluAnalysis>
<item id="FlickerInput" vtype="STRING" type="combobox" editable="true" data_type="FlickerParam" item_type="FlickerParam" autoUpdateOption="true" caption="Flicker输出参数" option="ENV($parent.LocalVar:FlickerParam)" descibe="Flicker输出参数【IN】用于分析的Flicker输出参数"/>
</FlickerProcess_FlickerFluAnalysis>
<VRTProcess_GetPointTime>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" autoUpdateOption="true" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于计算的VRT输出参数"/>
<item id="type" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="区域类型" setup="1" optionData="1;5;14;16" option="穿越前;穿越后;功率恢复后;电流恢复后" comboxType="Enum_Custom" descibe="区域类型【IN】区域类型用于获取区域时间"/>
<item id="time" vtype="DOUBLE" type="combobox" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="返回区域时间" option="ENV($parent.LocalVar:DOUBLE)" descibe="返回区域时间【OUT】返回相对0点偏移时间,单位为s,获取区域时间&#x000A;支持DOUBLE变量"/>
<item id="valid" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="值有效性" option="ENV($parent.LocalVar:STRING)" descibe="返回值有效性【OUT】返回值有效性获取区域时间值是否有效&#x000A;支持STRING变量"/>
</VRTProcess_GetPointTime>
<VRTProcess_UpdateWaveRange>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" autoUpdateOption="true" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于计算的VRT输出参数"/>
<item id="src" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="波形通道" setup="Urms_a" option="Urms_a" descibe="区域类型【IN】区域类型用于获取区域时间"/>
<item id="begin" vtype="DOUBLE" type="combobox" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="起始时间" editable="true" option="ENV($parent.LocalVar:DOUBLE)" descibe="起始时间【OUT】设置波形视图显示起始时间&#x000A;支持STRING变量"/>
<item id="end" vtype="DOUBLE" type="combobox" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="结束时间" editable="true" option="ENV($parent.LocalVar:DOUBLE)" descibe="结束时间【OUT】设置波形视图显示结束时间&#x000A;支持STRING变量"/>
</VRTProcess_UpdateWaveRange>
<VRTProcess_VRTConfigure>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" autoUpdateOption="true" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于计算的VRT输出参数"/>
<item id="TestType" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="测试类型" setup="1P2W" option="1P2W;3V3A;3P4W" descibe="测试类型【IN】测试类型用于穿越测试计算的使用的接线类型"/>
<item id="rateref" vtype="STRING" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="参考频率(Hz)" setup="50" option="ENV($parent.LocalVar:STRING)" descibe="参考频率【IN】用于计算的参考频率"/>
<item id="CalcUnit" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="计算单元" setup="CHA" option="CHA;CHB;CHC" descibe="计算单元【IN】计算单元用于穿越测试搜索参数的计算单元"/>
</VRTProcess_VRTConfigure>
<VRTProcess_VRTAutoParam>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于计算的VRT输出参数"/>
</VRTProcess_VRTAutoParam>
<VRTProcess_VRTCalculate>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于计算的VRT输出参数"/>
</VRTProcess_VRTCalculate>
<VRTProcess_AutoExport>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于导出的VRT输出参数"/>
</VRTProcess_AutoExport>
<VRTProcess_VRTAnalysis>
<item id="VRTInput" vtype="STRING" type="combobox" editable="true" data_type="VRTParam" item_type="VRTParam" caption="VRT输出参数" option="ENV($parent.LocalVar:VRTParam)" descibe="VRT输出参数【IN】用于分析的VRT输出参数"/>
<item id="standard" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="测试标准" setup="NB/T 32005-2013" option="NB/T 32005-2013;NB/T 31051-2014;NB/T 31111-2017;EN_50549 低穿;EN_50549 高穿" descibe="测试标准【IN】测试标准用于穿越测试计算的参考标准"/>
<item id="idle" vtype="STRING" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="无功电流注入值(A)" setup="50" option="ENV($parent.LocalVar:STRING)" descibe="无功电流注入值【IN】无功电流注入值用于穿越测试计算的参考无功电流注入值"/>
</VRTProcess_VRTAnalysis>
<WaveProcess_GetName>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="name" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回名称" option="ENV($parent.LocalVar:STRING)" descibe="返回名称【OUT】返回名称获取波形名称&#x000A;支持STRING变量"/>
</WaveProcess_GetName>
<WaveProcess_SetName>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="name" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="设置名称" option="ENV($parent.LocalVar:STRING)" descibe="设置名称【IN】设置名称设置波形名称&#x000A;支持STRING变量"/>
</WaveProcess_SetName>
<WaveProcess_GetDataType>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="data_type" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回类型" option="ENV($parent.LocalVar:STRING)" descibe="返回类型【OUT】返回波形数据类型获取波形名称&#x000A;支持STRING变量"/>
</WaveProcess_GetDataType>
<WaveProcess_SetDataType>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="data_type" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="设置类型" option="INT32;DOUBLE" descibe="设置类型【IN】设置类型设置波形数据类型&#x000A;支持INT32;DOUBLE变量"/>
</WaveProcess_SetDataType>
<WaveProcess_GetRate>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="rate" vtype="DOUBLE" type="combobox" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="返回采样率(pt/s)" option="ENV($parent.LocalVar:DOUBLE)" descibe="返回采样率【OUT】返回采样率获取波形数据采样率&#x000A;支持DOUBLE变量"/>
</WaveProcess_GetRate>
<WaveProcess_SetRate>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="rate" vtype="DOUBLE" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="设置采样率(pt/s)" option="ENV($parent.LocalVar:DOUBLE)" descibe="设置采样率【IN】设置采样率设置波形数据采样率&#x000A;支持DOUBLE变量"/>
</WaveProcess_SetRate>
<WaveProcess_GetBeginTime>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="begin_time" vtype="DOUBLE" type="combobox" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" editable="true" caption="返回起始时间(s)" option="ENV($parent.LocalVar:DOUBLE)" descibe="返回起始时间【OUT】返回起始时间获取波形数据起始时间&#x000A;支持DOUBLE变量"/>
</WaveProcess_GetBeginTime>
<WaveProcess_SetBeginTime>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="begin_time" vtype="DOUBLE" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" autoUpdateOption="true" caption="设置起始时间(s)" option="ENV($parent.LocalVar:DOUBLE)" descibe="设置起始时间【OUT】设置起始时间设置波形数据起始时间&#x000A;支持DOUBLE变量"/>
</WaveProcess_SetBeginTime>
<WaveProcess_AppendData>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="data" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="数值" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="数值【OUT】数值获取波形数值数据&#x000A;支持INT32:DOUBLE变量"/>
</WaveProcess_AppendData>
<WaveProcess_AppendArray>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="data" vtype="Array" type="combobox" data_type="Array" item_type="Array" autoUpdateOption="true" caption="数组" option="ENV($parent.LocalVar:Array)" descibe="数组【IN】数组追加波形数组数据&#x000A;支持Array变量"/>
</WaveProcess_AppendArray>
<WaveProcess_GetDataCount>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
<item id="data_count" vtype="INT32" type="combobox" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="返回数据大小" option="ENV($parent.LocalVar:INT32)" descibe="返回数据大小【OUT】返回数据大小获取波形数据大小&#x000A;支持INT32变量"/>
</WaveProcess_GetDataCount>
<WaveProcess_ClearData>
<item id="wave" vtype="STRING" type="combobox" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】波形操作的波形变量"/>
</WaveProcess_ClearData>
<!--<WaveViewProcess_AddWave>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要添加波形操作的波形图变量"/>
<item id="wave" vtype="STRING" type="combobox" editable="true" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】要添加到波形图配置列表中的波形变量"/>
</WaveViewProcess_AddWave>
<WaveViewProcess_DeleteWave>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要删除波形操作的波形图变量"/>
<item id="wave" vtype="STRING" type="combobox" editable="true" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】要从波形图配置列表中删除的波形变量"/>
</WaveViewProcess_DeleteWave>-->
<WaveViewProcess_SetWaveShowState>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要设置光标状态的波形图变量"/>
<item id="wave" vtype="STRING" type="combobox" editable="true" data_type="Wave" item_type="Wave" caption="波形参数" autoUpdateOption="true" option="ENV($parent.LocalVar:Wave)" descibe="波形输入参数【IN】需要更改在波形图中显示状态的波形变量"/>
<item id="status" vtype="STRING" type="combobox" data_type="INT32" item_type="INT32" caption="显示状态" autoUpdateOption="true" option="0;1" descibe="显示状态【IN】波形显示状态&#x000A;0:ON; 1:OFF"/>
</WaveViewProcess_SetWaveShowState>
<WaveViewProcess_SetCursorStatus>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要设置光标状态的波形图变量"/>
<item id="status" vtype="STRING" type="combobox" data_type="INT32" item_type="INT32" caption="光标状态" autoUpdateOption="true" option="0;1" descibe="光标状态【IN】波形光标状态&#x000A;0:ON; 1:OFF"/>
</WaveViewProcess_SetCursorStatus>
<WaveViewProcess_SetCursorPosition>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要设置光标位置的波形图变量"/>
<item id="cursor_name" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="光标序号" autoUpdateOption="true" option="T1;T2" optionData="APos;BPos" comboxType="Enum_Custom" descibe="光标序号【IN】光标序号&#x000A;T1/T2"/>
<item id="position" vtype="STRING" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" caption="光标位置" autoUpdateOption="true" option="ENV($parent.LocalVar:DOUBLE)" descibe="光标位置【IN】光标位置变量"/>
</WaveViewProcess_SetCursorPosition>
<WaveViewProcess_GetCursorPosition>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要获取光标位置的波形图变量"/>
<item id="cursor_name" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="光标序号" autoUpdateOption="true" option="T1;T2" optionData="APos;BPos" comboxType="Enum_Custom" descibe="光标序号【IN】光标序号&#x000A;T1/T2"/>
<item id="position" vtype="STRING" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" caption="光标位置" autoUpdateOption="true" option="ENV($parent.LocalVar:DOUBLE)" descibe="光标位置【IN】光标位置变量"/>
</WaveViewProcess_GetCursorPosition>
<WaveViewProcess_GetCursorDelta>
<item id="wave_view" vtype="STRING" type="combobox" editable="true" data_type="WaveGraph" item_type="WaveGraph" caption="波形图参数" autoUpdateOption="true" option="ENV($parent.LocalVar:WaveGraph)" descibe="波形图输入参数【IN】需要获取光标差值的波形图变量"/>
<item id="delta" vtype="STRING" type="combobox" editable="true" data_type="DOUBLE" item_type="DOUBLE" caption="光标差值" autoUpdateOption="true" option="ENV($parent.LocalVar:DOUBLE)" descibe="光标差值【IN】光标差值变量"/>
</WaveViewProcess_GetCursorDelta>
<MPTServerComm_UpLoadTestResult>
<item id="sn" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="SN" setup="10086112233" option="ENV($parent.LocalVar:STRING)" descibe="SN【IN】SN编号&#x000A;支持STRING变量或者常量"/>
<item id="argss" vtype="STRING" type="TestDataEditorType" editable="true" data_type="STRING" item_type="STRING" comment="选择" caption="选择参数" descibe="选择参数【IN】选择需要上传的参数编辑&#x000A;"/>
<item id="test_result" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="测试结果" setup="Pass" option="ENV($parent.LocalVar:STRING)" descibe="测试结果【IN】测试结果上传测试结果&#x000A;支持STRING变量或者常量"/>
<item id="upload_result" vtype="STRING" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="上传结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="上传结果【OUT】上传结果上传成功则返回1否则返回小于1&#x000A;支持INT32变量"/>
<item id="error" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="错误反馈" setup="result" option="ENV($parent.LocalVar:STRING)" descibe="错误反馈【OUT】错误反馈如果出现错误则把错误原因返回&#x000A;支持STRING变量"/>
</MPTServerComm_UpLoadTestResult>
<MPTServerComm_SetTestStatus>
<item id="sn" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="SN" setup="10086112233" option="ENV($parent.LocalVar:STRING)" descibe="SN【IN】SN编号数值类型&#x000A;支持STRING变量或者常量"/>
<item id="status_param" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="状态" setup="Pass" option="ENV($parent.LocalVar:STRING)" descibe="状态【IN】状态数值类型&#x000A;支持STRING变量或者常量"/>
<item id="upload_result" vtype="STRING" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="上传结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="结果【IN】上传结果数值类型&#x000A;支持INT32变量或者常量"/>
<item id="error" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="错误反馈" setup="result" option="ENV($parent.LocalVar:STRING)" descibe="错误反馈【IN】错误反馈数值类型&#x000A;支持STRING变量或者常量"/>
</MPTServerComm_SetTestStatus>
<FileProcess_CreateDirectory>
<item id="path" vtype="STRING" type="combobox" editable="true" caption="名称" setup="D:/New" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="名称【IN】文件夹的全路径名&#x000A;支持STRING变量或者常量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果创建成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_CreateDirectory>
<FileProcess_IsDirEmpty>
<item id="path" vtype="STRING" type="combobox" editable="true" caption="文件夹地址" setup="D:/New" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="文件夹地址【IN】文件夹的全路径名&#x000A;支持STRING变量或者常量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果该文件存在并存在子文件或者子文件夹则返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_IsDirEmpty>
<FileProcess_GetDirChildren>
<item id="path" vtype="STRING" type="filepathedit" caption="文件夹地址" item_type="STRING" buttonText=" " fileMode="DirectoryOnly" path="D:/" descibe="文件夹地址【IN】带获取该文件夹下面所有文件或者子文件夹的名称的输入定制&#x000A;支持STRING变量或者常量"/>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="返回数组" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="返回数组【OUT】获取到该目录的子文件和子文件夹路径存在数组&#x000A;支持Array类型的变量"/>
</FileProcess_GetDirChildren>
<FileProcess_CreateFile>
<item id="path" vtype="STRING" type="filepathedit" caption="名称" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="路径【IN】待创建的文件或者目录完整路径&#x000A;支持STRING类型的变量或者常量"/>
<item id="overwrite" vtype="STRING" type="combobox" caption="是否覆盖" option="是;否" setup="是" descibe="是否覆盖【IN】新创建的文件是否覆盖旧的同名文件枚举值&#x000A;是:覆盖;否:不覆盖"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果删除成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_CreateFile>
<FileProcess_OpenFile>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="path" vtype="STRING" type="filepathedit" caption="名称" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="名称【IN】待打开的文件或者目录完整路径"/>
<item id="mode" vtype="STRING" type="combobox" caption="打开模式" item_type="STRING" option="只读;只写;读写;追加;重写" setup="读写" descibe="打开方式【IN】打开文件的方式枚举值&#x000A;"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果打开成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_OpenFile>
<FileProcess_CloseFile>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【IN】如果关闭成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_CloseFile>
<FileProcess_GetFileName>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="type" vtype="STRING" type="combobox" caption="返回类型" item_type="STRING" option="文件名;文件名无后缀;全名" setup="文件名" descibe="返回类型【IN】文件名返回类似a.txt文件无后缀返回是a全名返回root/a.txt 枚举值&#x000A;文件名,文件基本名,全名"/>
<item id="name" vtype="STRING" type="combobox" editable="true" caption="返回名" setup="{fileName}" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="返回名【OUT】返回对应类型的文件名&#x000A;支持STRING变量"/>
</FileProcess_GetFileName>
<FileProcess_GetFileDir>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="dir" vtype="STRING" type="combobox" editable="true" caption="返回路径" setup="{dir}" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="返回路径【OUT】只有文件的路径名不包含文件名&#x000A;支持STRING变量"/>
</FileProcess_GetFileDir>
<FileProcess_GetFileExtName>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="exname" vtype="STRING" type="combobox" editable="true" caption="拓展名" setup="{name}" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="拓展名【OUT】返回文件的后缀名&#x000A;支持STRING变量"/>
</FileProcess_GetFileExtName>
<FileProcess_GetFileSize>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="size" vtype="STRING" type="combobox" editable="true" caption="返回大小" setup="{size}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="返回大小【OUT】返回文件的大小&#x000A;支持INT32变量"/>
</FileProcess_GetFileSize>
<FileProcess_WriteData>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="data" vtype="STRING" type="combobox" editable="true" caption="数据" setup="{buffer}" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="数据【IN】发送到文件的数据&#x000A;支持STRING变量或者常量"/>
<item id="ret" vtype="STRING" type="combobox" editable="true" caption="返回值" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="返回值【OUT】如果写入成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_WriteData>
<FileProcess_ReadData>
<item id="fp" vtype="STRING" type="combobox" editable="true" caption="文件对象" setup="{fp}" item_type="FileHandle" autoUpdateOption="true" option="ENV($parent.LocalVar:FileHandle)" descibe="文件对象【IN】操作文件的文件对象&#x000A;支持文件对象变量"/>
<item id="data" vtype="STRING" type="combobox" editable="true" caption="数据" setup="{buffer}" item_type="STRING" autoUpdateOption="true" option="ENV($parent.LocalVar:STRING)" descibe="数据【OUT】读取的数据保存到缓存变量&#x000A;支持STRINB变量"/>
<item id="size" vtype="STRING" type="combobox" editable="true" caption="大小" setup="{size}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="大小【IN】待读取文件的长度&#x000A;支持INT32变量"/>
<item id="ret" vtype="STRING" type="combobox" editable="true" caption="返回值" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="返回值【OUT】如果读取成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_ReadData>
<FileProcess_Delete>
<item id="filename" vtype="STRING" type="filepathedit" caption="路径" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="路径【IN】待删除的文件或者目录完整路径"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果删除成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_Delete>
<FileProcess_Rename>
<item id="src" vtype="STRING" type="filepathedit" caption="原名称" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="原名称【IN】待重命名的文件或者目录完整路径字符类型&#x000A;支持STRING变量或者常量"/>
<item id="des" vtype="STRING" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="新名称" setup="D:/NewName.txt" option="ENV($parent.LocalVar:STRING)" descibe="新名称【IN】需修改后新名字全路径字符类型&#x000A;支持STRING变量或者常量"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="返回值【OUT】如果重新命名成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_Rename>
<FileProcess_Copy>
<item id="type" vtype="STRING" type="combobox" data_type="STRING" item_type="STRING" caption="类型" setup="复制" option="复制;移动" descibe="类型【IN】类型移动或者拷贝&#x000A;支持STRING变量或者常量"/>
<item id="src" vtype="STRING" type="filepathedit" caption="原地址" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="原地址【IN】待拷贝或移动的原文件或者目录完整路径"/>
<item id="des" vtype="STRING" type="filepathedit" caption="新地址" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="新地址【IN】待拷贝或移动的目标文件或者目录完整路径"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果拷贝成功返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_Copy>
<FileProcess_IsExist>
<item id="path" vtype="STRING" type="filepathedit" caption="名称" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="源路径【IN】待判定是否存在的文件或者目录完整性"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="执行结果" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】如果文件或目录存在返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_IsExist>
<FileProcess_GetPathFileType>
<item id="path" vtype="STRING" type="filepathedit" caption="名称" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="名称【IN】待判断文件或者目录完整路径"/>
<item id="ret" vtype="INT32" type="combobox" editable="true" caption="类型" setup="{ret}" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="类型【OUT】如果类型是目录则返回2如果是文件类型则返回1否则返回0&#x000A;支持INT32变量"/>
</FileProcess_GetPathFileType>
<ArrayProcess_GetValue>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="pos" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="索引位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="索引位置【IN】数组的索引位置参数&#x000A;支持INT32变量或者常量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" caption="值" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING,Time)" descibe="值【Out】对数组操作的设置值或者返回值如果当前值非数字值传入INT32DOUBLE变量变量返回0&#x000A;支持INT32、DOUBLE、STRING变量"/>
</ArrayProcess_GetValue>
<ArrayProcess_SetValue>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="pos" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="索引位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="索引位置【IN】数组的索引位置参数&#x000A;支持INT32变量或者常量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" caption="值" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING,Time)" descibe="值【IN】对数组操作的设置值或者返回值&#x000A;支持INT32、DOUBLE、STRING变量"/>
</ArrayProcess_SetValue>
<ArrayProcess_InsertAtPos>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="pos" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="索引位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="索引位置【IN】数组的索引位置参数&#x000A;支持INT32变量或者常量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" caption="值" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING,Time)" descibe="值【IN】对数组操作的设置值或者返回值&#x000A;支持INT32、DOUBLE、STRING变量"/>
</ArrayProcess_InsertAtPos>
<ArrayProcess_GetSize>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作的数组名称&#x000A;支持Array类型的变量"/>
<item id="size" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="数组大小" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="数组大小【OUT】数组中的元素个数&#x000A;支持INT32变量"/>
</ArrayProcess_GetSize>
<ArrayProcess_SetSize>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作的数组名称&#x000A;支持Array类型的变量"/>
<item id="size" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="数组大小" setup="1" option="ENV($parent.LocalVar:INT32)" descibe="数组大小【IN】数组中的元素个数&#x000A;支持INT32变量或者常量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" caption="默认值" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING,Time)" descibe="默认值【IN】数组中元素的默认值&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
</ArrayProcess_SetSize>
<ArrayProcess_Clear>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作的数组名称&#x000A;支持Array类型的变量"/>
</ArrayProcess_Clear>
<ArrayProcess_AppendValue>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作的数组名称&#x000A;支持Array类型的变量"/>
<item id="data" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING:Time" autoUpdateOption="true" caption="值" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE,STRING,Time)" descibe="值【IN】追加到数组末尾的元素值&#x000A;支持INT32、DOUBLE、STRING变量或者常量"/>
</ArrayProcess_AppendValue>
<ArrayProcess_RemoveAtPos>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作的数组名称&#x000A;支持Array类型的变量"/>
<item id="pos" type="combobox" editable="true" data_type="INT32" item_type="INT32" autoUpdateOption="true" caption="位置" setup="1" option="ENV($parent.LocalVar:INT32)" descibe="位置【IN】数组中待删除元素的所在位置&#x000A;支持INT32变量或者常量"/>
</ArrayProcess_RemoveAtPos>
<ArrayProcess_CopyTo>
<item id="src" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="源数组" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="源数组【IN】需要复制的源数组名称&#x000A;支持Array类型的变量"/>
<item id="des" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="目的数组" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="目的数组【IN】需要复制到的目标数组名称&#x000A;支持Array类型的变量"/>
</ArrayProcess_CopyTo>
<ModuleFunc_Desceibe>
<item id="module_ptr" type="combobox" caption="变量" value="" option="ENV($parent.parent.LocalVar:FFTWave)" autoUpdateOption="true" descibe="变量【IN】支持特殊变量类型" />
<item id="interface_ptr" type="combobox" caption="接口列表" value="" autoUpdateOption="true" completer="true" />
<item id="arg_ptr" type="category" caption="参数列表" descibe="根据变量不同,关联对应接口的变量"/>
</ModuleFunc_Desceibe>
<StringProcess_Left>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="offset" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="偏移值" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="偏移值【IN】截取字符串开始的偏移位置&#x000A;支持INT32变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="返回结果【OUT】截取字符串的返回值&#x000A;支持STRING变量"/>
</StringProcess_Left>
<StringProcess_Right>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="offset" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="偏移值" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="偏移值【IN】截取字符串开始的偏移位置&#x000A;支持INT32变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="返回结果【OUT】截取字符串的返回值&#x000A;支持STRING变量"/>
</StringProcess_Right>
<StringProcess_Lower>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="返回结果【OUT】对字符串变大写或者小写后的返回结果&#x000A;支持STRING变量"/>
</StringProcess_Lower>
<StringProcess_Upper>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="返回结果【OUT】对字符串变大写或者小写后的返回结果&#x000A;支持STRING变量"/>
</StringProcess_Upper>
<StringProcess_Mid>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="pos" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="开始位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="开始位置【IN】截取字符串的开始位置&#x000A;支持INT32变量或者常量"/>
<item id="length" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="长度" setup="-1" option="ENV($parent.LocalVar:INT32)" descibe="长度【IN】截取字符串的长度&#x000A;支持INT32变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="返回结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="返回结果【OUT】截取字符串的返回结果&#x000A;支持STRING变量"/>
</StringProcess_Mid>
<StringProcess_Find>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入文本" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入文本【IN】需要操作的字符串变量对象&#x000A;支持STRING变量或者常量"/>
<item id="subString" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="子字符串" setup="sub" option="ENV($parent.LocalVar:STRING)" descibe="子字符串【IN】输入需要查找的字符串&#x000A;支持STRING变量或者常量"/>
<item id="dir" type="combobox" caption="查找方向" data_type="STRING" item_type="STRING" option="Left;Right" setup="Left" descibe="查找方向【IN】字符串查找的开始方向枚举类型&#x000A; Left或者Right"/>
<item id="pos" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="返回位置" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="返回位置【OUT】找到子字符返回的位置,如果查找失败返回-1&#x000A;支持INT32变量"/>
</StringProcess_Find>
<StringProcess_Clear>
<item id="origin" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输入变量" setup="String" option="ENV($parent.LocalVar:STRING)" descibe="输入变量【IN】需要操作的字符串变量对象&#x000A;支持STRING变量"/>
</StringProcess_Clear>
<Split_Format>
<item id="input" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="原始文本" setup="Text" option="ENV($parent.LocalVar:STRING)" descibe="原始文本【IN】需要分割的字符串&#x000A;支持STRING类型的变量和常量"/>
<item id="seq" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="分隔符" setup=":" autoUpdateOption="true" option="AUTO($parent.LocalVar:STRING)" descibe="分隔符【IN】分割符号从原始字符中用该分隔符分割出若干个变量"/>
<item id="format" type="edit" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" caption="分割结果" setup="{var},{var_1}" descibe="分割结果【OUT】分割之后保存的数据格式参数该分割结果必须保存到变量中而且按照指定的格式化格式&#x000A;参数支持INT32、DOUBLE、STRING变量多个变量之间需要大括号括起来和英文逗号隔开"/>
</Split_Format>
<Split_Array>
<item id="input" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="原始文本" setup="Text" option="ENV($parent.LocalVar:STRING)" descibe="原始文本【IN】需要分割的字符串&#x000A;支持STRING类型的变量和常量"/>
<item id="seq" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="分隔符" setup=":" autoUpdateOption="true" option="AUTO($parent.LocalVar:STRING)" descibe="分隔符【IN】分割符号从原始字符中用该分隔符分割出若干个变量"/>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【OUT】分割字符串之后保存到数组对象&#x000A;支持Array类型的变量"/>
</Split_Array>
<Merge_Format>
<item id="format" type="edit" editable="true" data_type="STRING" item_type="INT32:DOUBLE:STRING" autoUpdateOption="true" caption="原始文本" setup="{var},{var_1}" descibe="原始文本【IN】需要合并格式化成该字符串格式化格式需要正确&#x000A;参数支持INT32、DOUBLE、STRING变量多个变量之间需要大括号括起来和英文逗号隔开"/>
<item id="seq" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="分隔符" setup=":" autoUpdateOption="true" option="AUTO($parent.LocalVar:STRING)" descibe="分隔符【IN】分割符号&#x000A;支持STRING变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="合并结果" setup="output" option="ENV($parent.LocalVar:STRING)" descibe="合并结果【OUT】合并之后的保存结果&#x000A;支持STRING变量"/>
</Merge_Format>
<Merge_Array>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】分割字符串之后保存到数组对象&#x000A;支持Array类型的变量"/>
<item id="seq" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="分隔符" setup=":" autoUpdateOption="true" option="AUTO($parent.LocalVar:STRING)" descibe="分隔符【IN】分割符号从原始字符中用该分隔符分割出若干个变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="合并结果" setup="output" option="ENV($parent.LocalVar:STRING)" descibe="合并结果【OUT】合并之后的保存结果&#x000A;支持STRING变量"/>
</Merge_Array>
<Arithmetic_Abs>
<item id="param" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="参数" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="参数【IN】需要计算的输入参数&#x000A;支持INT32、DOUBLE类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Abs>
<Arithmetic_Sqrt>
<item id="param" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="参数" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="参数【IN】需要计算的输入参数&#x000A;支持DOUBLE,INT32类型的变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Sqrt>
<Arithmetic_Power>
<item id="base_number" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="底数" setup="1" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="底数【IN】需要计算的底数&#x000A;支持INTDOUBLE类型的常量或者变量"/>
<item id="exponent" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="指数" setup="1" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="指数【IN】需要计算的指数或者幂&#x000A;持INTDOUBLE类型的常量或者变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】计算结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Power>
<Arithmetic_Lg>
<item id="param" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="参数" setup="0" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="参数【IN】需要计算的输入参数&#x000A;支持DOUBLE,INT32类型的变量或者常量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Lg>
<Arithmetic_Avg>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Avg>
<Arithmetic_Sum>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Sum>
<Arithmetic_Max>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Max>
<Arithmetic_Min>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="返回值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="返回值【OUT】待返回结果变量&#x000A;支持INT32、DOUBLE变量"/>
</Arithmetic_Min>
<Arithmetic_MaxEx>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="abs" type="combobox" caption="取绝对值" data_type="STRING" item_type="STRING" option="是;否" setup="否" mapping="否=0;是=1" descibe="取绝对值【IN】取最大值时是否取绝对值枚举类型&#x000A;是和否"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="最大值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="最大值【OUT】待返回最大值的变量&#x000A;支持INT32、DOUBLE变量"/>
<item id="pos" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="位置【OUT】返回数组中最大值的位置&#x000A;支持INT32变量"/>
</Arithmetic_MaxEx>
<Arithmetic_MinEx>
<item id="array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="数组对象" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="数组对象【IN】需要操作数组变量&#x000A;支持Array类型的变量"/>
<item id="abs" type="combobox" caption="取绝对值" data_type="STRING" item_type="STRING" option="是;否" setup="是" mapping="否=0;是=1" descibe="取绝对值【IN】取最大值时是否取绝对值枚举类型&#x000A;是和否"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32:DOUBLE" autoUpdateOption="true" caption="最小值" setup="null" option="ENV($parent.LocalVar:INT32,DOUBLE)" descibe="最小值【OUT】待返回最小值的变量&#x000A;支持INT32、DOUBLE变量"/>
<item id="pos" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="位置" setup="0" option="ENV($parent.LocalVar:INT32)" descibe="位置【OUT】返回数组中最小值的位置&#x000A;支持INT32变量"/>
</Arithmetic_MinEx>
<DateTimeProcess_GetCurDataTime>
<item id="time" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="时间" setup="Time" option="ENV($parent.LocalVar:Time)" descibe="时间【OUT】需要获取当前系统日期时间保存到该变量&#x000A;支持Time类型的变量"/>
</DateTimeProcess_GetCurDataTime>
<DateTimeProcess_DateTimeToString>
<item id="time" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="时间" setup="Time" option="ENV($parent.LocalVar:Time)" descibe="时间【IN】需要转换的时间变量&#x000A;支持Time类型的变量"/>
<item id="timeFormat" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="输出结果" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="输出结果【OUT】格式化后输出的时间&#x000A;支持STRING变量"/>
</DateTimeProcess_DateTimeToString>
<DateTimeProcess_StringToDataTime>
<item id="time_string" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="时间字符串" setup="Time" option="ENV($parent.LocalVar:STRING)" descibe="时间字符串【IN】需要转换的时间字符串变量&#x000A;支持STRING类型的变量或者常量"/>
<item id="timeFormat" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="时间格式" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="时间格式【OUT】输入时间字符串的格式比如%Y-%m-%d %H:%M:%S其位置需和时间字符串一直才能转化成功&#x000A;%Y表示年&#x000A;%m表示月&#x000A;%d表示天&#x000A;%H表示时 &#x000A;%M表示分&#x000A;%S表示秒&#x000A;支持STRING变量或者常量"/>
<item id="time" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="时间变量" setup="Time" option="ENV($parent.LocalVar:Time)" descibe="时间【OUT】转化后&#x000A;支持Time类型的变量"/>
</DateTimeProcess_StringToDataTime>
<DateTimeProcess_GetTimeDiffrenceS>
<item id="startTime" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="开始时间" setup="StartTime" option="ENV($parent.LocalVar:Time)" descibe="开始时间【IN】需要计算的开始时间&#x000A;支持Time类型的变量"/>
<item id="stopTime" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="结束时间" setup="StopTime" option="ENV($parent.LocalVar:Time)" descibe="结束时间【IN】需要计算的结束时间&#x000A;支持Time类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="结果【OUT】开始与结束时间之间的时间差单位S&#x000A;支持INT32类型的变量"/>
</DateTimeProcess_GetTimeDiffrenceS>
<DateTimeProcess_GetTimeDiffrenceMS>
<item id="startTime" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="开始时间" setup="StartTime" option="ENV($parent.LocalVar:Time)" descibe="开始时间【IN】需要计算的开始时间&#x000A;支持Time类型的变量"/>
<item id="stopTime" type="combobox" editable="true" data_type="STRING" item_type="Time" autoUpdateOption="true" caption="结束时间" setup="StopTime" option="ENV($parent.LocalVar:Time)" descibe="结束时间【IN】需要计算的结束时间&#x000A;支持Time类型的变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="结果【OUT】开始与结束时间之间的时间差单位S&#x000A;支持INT32类型的变量"/>
</DateTimeProcess_GetTimeDiffrenceMS>
<ImageProcess_LoadImage>
<item id="image" type="combobox" editable="true" data_type="STRING" item_type="Image" autoUpdateOption="true" caption="图片变量" setup="Image" option="ENV($parent.LocalVar:Image)" descibe="图片变量【IN】需要保存的图片变量&#x000A;支持Image类型的变量"/>
<item id="path" vtype="STRING" type="filepathedit" acceptMode="AcceptOpen" fileFilter="*.png" caption="图片路径" item_type="STRING" buttonText=" " fileMode="AnyFile" path="D:/" descibe="图片路径【IN】待要导入的图片完整路径"/>
</ImageProcess_LoadImage>
<ImageProcess_StoreImage>
<item id="image" type="combobox" editable="true" data_type="STRING" item_type="Image" autoUpdateOption="true" caption="图片变量" setup="Image" option="ENV($parent.LocalVar:Image)" descibe="图片变量【IN】需要保存的图片变量&#x000A;支持Image类型的变量"/>
<item id="path" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="图片路径" setup="" autoUpdateOption="true" option="AUTO($parent.LocalVar:STRING)" descibe="图片路径【IN】待要导入的图片完整路径的变量"/>
</ImageProcess_StoreImage>
<ImageProcess_ImageSize>
<item id="image" type="combobox" editable="true" data_type="STRING" item_type="Image" autoUpdateOption="true" caption="图片变量" def="Image" option="ENV($parent.LocalVar:Image)" descibe="图片变量【IN】需要保存的图片变量&#x000A;支持Image类型的变量"/>
<item id="size" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="大小" value="0" option="ENV($parent.LocalVar:INT32)" descibe="大小【OUT】返回图片大小&#x000A;支持INT32变量"/>
</ImageProcess_ImageSize>
<ControlDevice_SetConnectParam>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" value="Device" option="ENV($parent.LocalVar:DEV_POINT)" setup="Device" autoUpdateOption="true" descibe="设备【IN】需要设置的设备对象支持Device类型" />
<item id="comtype_ptr" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="连接类型" option="COM;TCP;UDP;USB" setup="COM" descibe="连接类型【IN】:支持的连接类型"/>
<item id="arg_ptr" type="category" caption="连接参数" visible="true" descibe="设备命令参数,不同的连接类型对应不同的连接方式,不支持变量"/>
</ControlDevice_SetConnectParam>
<ControlDevice_GetConnectParamEx>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" value="Device" option="ENV($parent.LocalVar:DEV_POINT)" setup="Device" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />
<item id="comtype_ptr" type="combobox" editable="true" data_type="STRING" item_type="STRING" autoUpdateOption="true" caption="连接类型" setup="null" option="ENV($parent.LocalVar:STRING)" descibe="连接类型【OUT】待返回连接类型&#x000A;支持STRING变量"/>
<item id="params_array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="连接参数" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="连接参数【IN】返回连接参数的数组&#x000A;支持Array类型的变量"/>
</ControlDevice_GetConnectParamEx>
<ControlDevice_SetConnectParamEx>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" value="Device" option="ENV($parent.LocalVar:DEV_POINT)" setup="Device" autoUpdateOption="true" descibe="设备【IN】需要设置的设备对象支持Device类型" />
<item id="comtype_ptr" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="连接类型" option="COM;TCP;UDP;USB" setup="COM" descibe="连接类型【IN】:支持的连接类型"/>
<item id="params_array" type="combobox" editable="true" data_type="STRING" item_type="Array" autoUpdateOption="true" caption="连接参数" setup="Array" option="ENV($parent.LocalVar:Array)" descibe="连接参数【IN】待设置的连接参数数组格式如下&#x000A;COM类型COM口,波特率,校验位,停止位,数据位,流控制&#x000A;TCP类型IP地址端口&#x000A;UDP类型IP地址端口&#x000A;USB类型暂无用&#x000A;支持Array类型的变量"/>
</ControlDevice_SetConnectParamEx>
<ControlDevice_Connect>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" value="Device" option="ENV($parent.LocalVar:DEV_POINT)" setup="Device" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="执行结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】设备关闭的执行结果。0失败1成功&#x000A;支持INT32变量"/>
</ControlDevice_Connect>
<ControlDevice_DisConnect>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" setup="Device" option="ENV($parent.LocalVar:DEV_POINT)" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="执行结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="执行结果【OUT】设备关闭的执行结果。0失败1成功&#x000A;支持INT32变量"/>
</ControlDevice_DisConnect>
<ControlDevice_IsOnline>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" setup="Device" option="ENV($parent.LocalVar:DEV_POINT)" autoUpdateOption="true" descibe="设备【IN】需要使用的设备对象支持Device类型" />
<item id="status" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="连接状态" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="连接状态【OUT】设备的连接状态。0不在线1在线&#x000A;支持INT32变量"/>
</ControlDevice_IsOnline>
<ControlDevice_RequestDevCtrlPerm>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" setup="Device" option="ENV($parent.LocalVar:DEV_POINT)" autoUpdateOption="true" descibe="设备【IN】需要请求控制的设备对象支持Device类型" />
<item id="type" type="combobox" editable="true" data_type="STRING" item_type="STRING" caption="类型" setup="只读" option="只读;独占;共享" descibe="类型【IN】需获取设备的权限&#x000A;只读允许app多个控制但是只有读取的权限&#x000A;独占独占控制设备其它app不能控制该设备&#x000A;共享多个app可以共享控制该设备"/>
<item id="timeout" vtype="INT32" type="combobox" editable="true" caption="超时时间" setup="3000" item_type="INT32" autoUpdateOption="true" option="ENV($parent.LocalVar:INT32)" descibe="超时时间【IN】等待时间单位毫秒&#x000A;等待设备控制的超时时间支持INT32常量或者变量"/>
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="结果【OUT】获取设备控制的结果。0失败1成功&#x000A;支持INT32变量"/>
</ControlDevice_RequestDevCtrlPerm>
<ControlDevice_ReleaseDevCtrlPerm>
<item id="dev_ptr" type="combobox" caption="设备" editable="true" item_type="DEV_POINT" setup="Device" option="ENV($parent.LocalVar:DEV_POINT)" autoUpdateOption="true" descibe="设备【IN】需要释放控制的设备对象支持Device类型" />
<item id="result" type="combobox" editable="true" data_type="STRING" item_type="INT32" autoUpdateOption="true" caption="结果" setup="null" option="ENV($parent.LocalVar:INT32)" descibe="结果【OUT】设备释放的结果。0失败1成功&#x000A;支持INT32变量"/>
</ControlDevice_ReleaseDevCtrlPerm>
</child_func_params_group>
</base_func_config>

View File

@@ -0,0 +1,22 @@
<dialog id="globalshowdialog_test" bind="NULL:source{title=title;width=width;height=height}" result="0" titlebar="title" form="appmodal">
<view id="showview" >
<vlayout sizeConstraint="default" alignment="AlignCenter">
<image id="testimage" x="0" y="0" bind="source{image=imagePath}" />
<text bind="source{text=message}" objectName="DialogText"/>
<hlayout sizeConstraint="default" alignment="AlignCenter" contentsMargins="0,28,0,0" >
<button id="ok" bind="source{text=buttonOk}" fixWidth="60">
<event id="clicked">
<setter data="globalshowdialog_test.result=1"/>
<show id="globalshowdialog_test" status="hide"/>
</event>
</button>
<button id="cancel" bind="source{text=buttonCancel}" fixWidth="60">
<event id="clicked">
<setter data="globalshowdialog_test.result=0"/>
<show id="globalshowdialog_test" status="hide"/>
</event>
</button>
</hlayout>
</vlayout>
</view>
</dialog>

View File

@@ -0,0 +1,69 @@
<dialog id="TestArgsConfigDlg" size="330,480" title="参数配置" titlebar="min;max;close;title" bind="NULL:source" form="appmodal" allMovable="true">
<_View id="showview" objectName="SideView" >
<vars>
<var id="OpEnable" vtype="UINT8" />
</vars>
<vlayout sizeConstraint="default" contentsMargins="10,0,10,10" spacing="5">
<view objectName="tint" >
<hlayout sizeConstraint="default">
<_IconBtn toolTip="增加" text="" icon="zr:share:/resource/res/td_res/add to_20_n.png" hover_icon="zr:share:/resource/res/td_res/add to_20_o.png" disabled_icon="zr:share:/resource/res/td_res/add to_20_d.png">
<event id="clicked">
<code statement="source.AddItem(`NewItem`)" />
</event>
</_IconBtn>
<_IconBtn toolTip="复制" text="" icon="zr:share:/resource/res/td_res/copy_20_n.png" hover_icon="zr:share:/resource/res/td_res/copy_20_o.png" disabled_icon="zr:share:/resource/res/td_res/copy_20_d.png">
<event id="clicked">
<ui id="ArgsUploadList" ctr="sendUIEvent" event="copy"/>
</event>
</_IconBtn>
<_IconBtn toolTip="粘贴" text="" icon="zr:share:/resource/res/td_res/paste_20_n.png" hover_icon="zr:share:/resource/res/td_res/paste_20_o.png" disabled_icon="zr:share:/resource/res/td_res/paste_20_d.png">
<event id="clicked">
<ui id="ArgsUploadList" ctr="sendUIEvent" event="paste"/>
</event>
</_IconBtn>
<button objectName="DeleteIconBtn" toolTip="删除" text="" fixWidth="20" fixHeight="20" >
<event id="clicked">
<ui id="ArgsUploadList" ctr="sendUIEvent" event="delete"/>
</event>
</button>
<stretch stretch="1" />
</hlayout>
</view>
<listview id="ArgsUploadList" dragType="Drag" bind="source" copyPaste="true" multiSelect="true" >
<extend root_data="ParamsList">
<columns>
<column name="number" title="序号" width="60" toolTip="参数" alignment="AlignCenter" titleExConnect="(;)" />
<column name="nameId" title="变量名称" width="120" toolTip="名称" alignment="AlignCenter" />
<column name="var" title="关联变量" width="120" toolTip="含义" alignment="AlignCenter" />
</columns>
<lineinfos mainKey="vartype" BackColor="">
<listline key="__def__" init="extend" dragOut="true" style="data;visible" editable="true">
<linetext name="number" text="__INDEX__" alignment="AlignCenter" />
<linetext name="nameId" bind="__line__{text=name}" alignment="AlignCenter" color="black" editable="true" delegateType="edit"/>
<!--<linetext name="var" bind="__line__{text=var}" alignment="AlignCenter" color="black" editable="true" delegateType="edit"/>-->
<_LineComboBox name="var" bind="__line__{option=var_option;value=var}" def="{var}" value="{var}" editable="true" alignment="AlignCenter" autoUpdateOption="true" />
</listline>
</lineinfos>
</extend>
<events>
<event id="show">
<ui ctr="sendUIEvent" id="ArgsUploadList" event="AttrChange"/>
</event>
</events>
</listview>
</vlayout>
</_View>
<event id="accepted">
</event>
<event id="rejected">
</event>
<event id="show">
<ui ctr="sendUIEvent" id="ArgsUploadList" event="AttrChange"/>
</event>
</dialog>

View File

@@ -0,0 +1,84 @@
<dialog id="TestArgsConfigDlg" size="860,640" title="参数配置" titlebar="min;max;close;title" bind="NULL:source" form="appmodel;ok;cancel" allMovable="true">
<children>
<messagedialog id="messagedlg" form="appmodal" type="Error" button="Ok|Cancel" title="提示" text="是否保存用户输入参数" />
</children>
<_View id="showview" objectName="SideView" >
<vars>
<var id="OpEnable" vtype="UINT8" />
</vars>
<vlayout sizeConstraint="default" contentsMargins="10,0,10,10" spacing="5">
<view objectName="tint" >
<hlayout sizeConstraint="default">
<_IconBtn toolTip="增加" text="" icon="zr:share:/resource/res/td_res/add to_20_n.png" hover_icon="zr:share:/resource/res/td_res/add to_20_o.png" disabled_icon="zr:share:/resource/res/td_res/add to_20_d.png">
<event id="clicked">
<code statement="source.AddNewItem(`NewItem`)" />
</event>
</_IconBtn>
<_IconBtn toolTip="复制" text="" icon="zr:share:/resource/res/td_res/copy_20_n.png" hover_icon="zr:share:/resource/res/td_res/copy_20_n.png" disabled_icon="zr:share:/resource/res/td_res/copy_20_n.png">
<event id="clicked">
<ui id="ParamsConfiglist" ctr="sendUIEvent" event="copy"/>
</event>
</_IconBtn>
<_IconBtn toolTip="粘贴" text="" icon="zr:share:/resource/res/td_res/paste_20_n.png" hover_icon="zr:share:/resource/res/td_res/paste_20_o.png" disabled_icon="zr:share:/resource/res/td_res/paste_20_d.png">
<event id="clicked">
<ui id="ParamsConfiglist" ctr="sendUIEvent" event="paste"/>
</event>
</_IconBtn>
<button objectName="DeleteIconBtn" toolTip="删除" text="" fixWidth="20" fixHeight="20" >
<event id="clicked">
<ui id="ParamsConfiglist" ctr="sendUIEvent" event="delete"/>
</event>
</button>
<stretch stretch="1" />
</hlayout>
</view>
<listview id="ParamsConfiglist" dragType="Drag" bind="source" copyPaste="true" multiSelect="true" >
<extend root_data="ParamsList">
<columns>
<column name="number" title="序号" width="40" toolTip="参数" alignment="AlignCenter" titleExConnect="(;)" />
<column name="nameId" title="文字描述" width="160" toolTip="名称" alignment="AlignCenter" />
<column name="captionWidth" title="文本宽度" width="80" toolTip="文本长度" alignment="AlignCenter" />
<column name="controltype" title="控件类型" width="120" toolTip="含义" alignment="AlignCenter" />
<column name="associatvar" title="关联变量" width="150" toolTip="数据类型" alignment="AlignCenter" />
<column name="focus" title="默认焦点" width="60" toolTip="初始值" alignment="AlignCenter" />
<column name="need" title="必填项" width="60" toolTip="值" alignment="AlignCenter" />
<column name="tiptext" title="提示信息" width="160" toolTip="提示信息" alignment="AlignCenter" />
</columns>
<lineinfos mainKey="type" BackColor="">
<listline key="__def__" init="extend" dragOut="true" style="data;visible" editable="true">
<linetext name="number" text="__INDEX__" alignment="AlignCenter" />
<linetext name="nameId" bind="__line__{text=caption}" alignment="AlignCenter" color="black" delegateType="edit"/>
<linetext name="captionWidth" bind="__line__{text=captionWidth}" alignment="AlignCenter" color="black" delegateType="edit"/>
<_LineComboBox name="controltype" bind="__line__{value=typeText;text=typeText}" option="编辑框;静态文本" def="编辑框" alignment="AlignCenter"/>
<customvarbox name="associatvar" bind="__line__" />
<customfoucscheck name="focus" bind="__line__" />
<customneedcheck name="need" bind="__line__" />
<customedit name="tiptext" bind="__line__{text=tip}" color="black" />
</listline>
</lineinfos>
</extend>
<events>
</events>
</listview>
</vlayout>
</_View>
<event id="accepted">
<code statement="source.SaveBackups()" />
<code statement="source.update()" />
</event>
<event id="rejected">
<show id="messagedlg" type="messagedialog" status="exec" />
<if condition="messagedlg:result==1">
<code statement="source.SaveBackups()" />
<code statement="source.update()" />
<return />
</if>
<code statement="source.RestoreBackups()" />
<code statement="source.update()" />
</event>
</dialog>

View File

@@ -0,0 +1,56 @@
<dialog id="UserInputDialog" bind="NULL:source{title=title;width=width;height=height}" result="0" form="appmodal" titlebar="close;title">
<view id="showview" >
<vars>
<var id="WarnLabelVisible" vtype="UINT8" value="0"/>
</vars>
<vlayout sizeConstraint="default" alignment="AlignCenter" contentsMargins="10,10,10,10">
<customlist id="PropertyView" bind="source.ParamsList{_other=try}" bindvar="BIND#source" fixWidth="UINT8#bindvar:width" fixHeight="UINT8#bindvar:height" init="extend" sizePolicy="Expanding,Expanding"/>
<hlayout sizeConstraint="default" alignment="AlignCenter" contentsMargins="10,10,10,10">
<stretch stretch="1"/>
<text text="操作指引:" objectName="ScanGuideText" />
<text bind="source{text=foucsCaption}" objectName="ScanTipText"/>>
<stretch stretch="1"/>
</hlayout>
<text text="必填项不能为空,请填完" objectName="WarnLabel" visible="BIND#WarnLabelVisible"/>
<stretch stretch="1"/>
<hlayout sizeConstraint="default" contentsMargins="10,10,10,30">
<stretch stretch="1"/>
<button id="ok" text="确定" objectName="UserInputButton" fixWidth="80" fixHeight="30" >
<event id="clicked">
<if condition="source.IsAllNeedEditFinished()==0">
<setter data="WarnLabelVisible.value=1"/>
<return/>
</if>
<setter data="UserInputDialog.result=1"/>
<show id="UserInputDialog" status="hide"/>
</event>
</button>
<button id="cancel" text="取消" objectName="UserInputButton" fixWidth="80" fixHeight="30">
<event id="clicked">
<setter data="UserInputDialog.result=0"/>
<show id="UserInputDialog" status="hide"/>
</event>
</button>
<stretch stretch="1"/>
</hlayout>
</vlayout>
<event id="enterevent" key="Enter">
<setter data="WarnLabelVisible.value=0"/>
<if condition="source.IsFinisedInput()==`1`">
<ui ctr="sendModelEvent" id="showview.ok" event="clicked"/>
<return />
</if>
<ui ctr="sendModelEvent" id="showview.cancel" event="clicked"/>
</event>
<event id="enterevent" key="Return">
<setter data="WarnLabelVisible.value=0"/>
<if condition="source.IsFinisedInput()==`1`">
<ui ctr="sendModelEvent" id="showview.ok" event="clicked"/>
<return />
</if>
<code statement="FocusNext()" />
</event>
</view>
</dialog>

Some files were not shown because too many files have changed in this diff Show More