konimarti / opc

OPC DA client in Golang for monitoring and analyzing process data based on Windows COM.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

opc.NewConnection error

liuzhou12315 opened this issue · comments

main.go:

       opc.Debug()

	client, _ := opc.NewConnection(
		"Graybox.Simulator",   // ProgId
		[]string{"localhost"}, //  OPC servers nodes
		[]string{"numeric.sin.int64", "numeric.saw.float"}, // slice of OPC tags
	)
	defer client.Close()

	// read single tag: value, quality, timestamp
	fmt.Println(client.ReadItem("numeric.sin.int64"))

	// read all added tags
	fmt.Println(client.Read())

err log:

OPC 2024/01/31 13:44:03 Could not load OPC Automation object with wrapper OPC.Automation.1
OPC 2024/01/31 13:44:03 Loaded OPC Automation object with wrapper Graybox.OPC.DAWrapper.1
OPC 2024/01/31 13:44:03 Connecting to Graybox.Simulator on node localhost
OPC 2024/01/31 13:44:03 Connected.
Exception 0xc0000005 0x0 0xa00d5e40 0x1f51b1d9
PC=0x1f51b1d9

runtime.cgocall(0xfc3be0, 0x17bc8c0)
        D:/go/src/runtime/cgocall.go:157 +0x4a fp=0xc00007f1e8 sp=0xc00007f1b0 pc=0xf5544a
syscall.SyscallN(0x1f514ed4, {0xc00007f290?, 0x9, 0x8040178c180?})
        D:/go/src/runtime/syscall_windows.go:557 +0x12e fp=0xc00007f270 sp=0xc00007f1e8 pc=0xfbedee
syscall.Syscall9(0x0?, 0x3?, 0x1?, 0xc00007f330?, 0x10795cb?, 0xc000100500?, 0xc000100500?, 0xc00007f370?, 0xf90173?, 0xc00007f7e0, ...)
        D:/go/src/runtime/syscall_windows.go:507 +0x78 fp=0xc00007f2e8 sp=0xc00007f270 pc=0xfbead8
github.com/go-ole/go-ole.invoke(0x1a8a00d5720, 0x6002000b, 0x1, {0xc00007fb38, 0x2, 0x2})
        D:/go/pkg/mod/github.com/go-ole/go-ole@v1.3.0/idispatch_windows.go:176 +0x307 fp=0xc00007f860 sp=0xc00007f2e8 pc=0x115e407
github.com/go-ole/go-ole.(*IDispatch).Invoke(0x1a8a00d5720, 0x6002000b, 0x1, {0xc00007fb38, 0x2, 0x2})
        D:/go/pkg/mod/github.com/go-ole/go-ole@v1.3.0/idispatch.go:27 +0x99 fp=0xc00007f8e0 sp=0xc00007f860 pc=0x115cff9
github.com/go-ole/go-ole.(*IDispatch).InvokeWithOptionalArgs(0x1a8a00d5720, {0x1519116, 0x7}, 0x1, {0xc00007fb38, 0x2, 0x2})
        D:/go/pkg/mod/github.com/go-ole/go-ole@v1.3.0/idispatch.go:71 +0x1f5 fp=0xc00007f9a0 sp=0xc00007f8e0 pc=0x115d615
github.com/go-ole/go-ole/oleutil.CallMethod(0x1a8a00d5720, {0x1519116, 0x7}, {0xc00007fb38, 0x2, 0x2})
        D:/go/pkg/mod/github.com/go-ole/go-ole@v1.3.0/oleutil/oleutil.go:51 +0xae fp=0xc00007fa30 sp=0xc00007f9a0 pc=0x116a12e
github.com/konimarti/opc.(*AutomationItems).addSingle(0xc000204070, {0x151dab2, 0x11})
        D:/go/pkg/mod/github.com/konimarti/opc@v0.4.0/connection_windows.go:263 +0x18e fp=0xc00007fb68 sp=0xc00007fa30 pc=0x1470cee
github.com/konimarti/opc.(*AutomationItems).Add(0xc000204070, {0xc00007fef0, 0x2, 0x2})
        D:/go/pkg/mod/github.com/konimarti/opc@v0.4.0/connection_windows.go:275 +0xd8 fp=0xc00007fc38 sp=0xc00007fb68 pc=0x1470f98
github.com/konimarti/opc.NewConnection({0x151d672, 0x11}, {0xc000204000, 0x1, 0x1}, {0xc00007fef0, 0x2, 0x2})
        D:/go/pkg/mod/github.com/konimarti/opc@v0.4.0/connection_windows.go:473 +0x1f8 fp=0xc00007fd48 sp=0xc00007fc38 pc=0x1473678
main.main()
        F:/unicom/unicom/src/hde-gateway-opcda-client/main.go:12 +0x16e fp=0xc00007ff80 sp=0xc00007fd48 pc=0x147518e
runtime.main()
        D:/go/src/runtime/proc.go:250 +0x1be fp=0xc00007ffe0 sp=0xc00007ff80 pc=0xf93a1e
runtime.goexit()
        D:/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00007ffe8 sp=0xc00007ffe0 pc=0xfc2221

goroutine 2 [force gc (idle)]:
runtime.gopark(0x15509e0, 0x17bb6b0, 0x11, 0x14, 0x1)
        D:/go/src/runtime/proc.go:381 +0xfd fp=0xc00003bf88 sp=0xc00003bf58 pc=0xf93e9d
runtime.goparkunlock(0x0?, 0x0?, 0x0?, 0x0?)
        D:/go/src/runtime/proc.go:387 +0x2a fp=0xc00003bfb8 sp=0xc00003bf88 pc=0xf93f2a
runtime.forcegchelper()
        D:/go/src/runtime/proc.go:305 +0xb0 fp=0xc00003bfe0 sp=0xc00003bfb8 pc=0xf93c70
runtime.goexit()
        D:/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00003bfe8 sp=0xc00003bfe0 pc=0xfc2221
created by runtime.init.6
        D:/go/src/runtime/proc.go:293 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0x15509e0, 0x17bbc40, 0xc, 0x14, 0x1)
        D:/go/src/runtime/proc.go:381 +0xfd fp=0xc00003df58 sp=0xc00003df28 pc=0xf93e9d
runtime.goparkunlock(0x0?, 0x0?, 0x0?, 0x0?)
        D:/go/src/runtime/proc.go:387 +0x2a fp=0xc00003df88 sp=0xc00003df58 pc=0xf93f2a
runtime.bgsweep(0x0?)
        D:/go/src/runtime/mgcsweep.go:278 +0x98 fp=0xc00003dfc8 sp=0xc00003df88 pc=0xf7a698
runtime.gcenable.func1()
        D:/go/src/runtime/mgc.go:178 +0x26 fp=0xc00003dfe0 sp=0xc00003dfc8 pc=0xf6eaa6
runtime.goexit()
        D:/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00003dfe8 sp=0xc00003dfe0 pc=0xfc2221
created by runtime.gcenable
        D:/go/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0x15509e0, 0x17bc0e0, 0xd, 0x14, 0x2)
        D:/go/src/runtime/proc.go:381 +0xfd fp=0xc00004bf48 sp=0xc00004bf18 pc=0xf93e9d
runtime.goparkunlock(0x15701f8?, 0x1?, 0x0?, 0x0?)
        D:/go/src/runtime/proc.go:387 +0x2a fp=0xc00004bf78 sp=0xc00004bf48 pc=0xf93f2a
runtime.(*scavengerState).park(0x17bc0e0)
        D:/go/src/runtime/mgcscavenge.go:400 +0x4b fp=0xc00004bfa0 sp=0xc00004bf78 pc=0xf7814b
runtime.bgscavenge(0x0?)
        D:/go/src/runtime/mgcscavenge.go:628 +0x45 fp=0xc00004bfc8 sp=0xc00004bfa0 pc=0xf78725
runtime.gcenable.func2()
        D:/go/src/runtime/mgc.go:179 +0x26 fp=0xc00004bfe0 sp=0xc00004bfc8 pc=0xf6ea46
runtime.goexit()
        D:/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00004bfe8 sp=0xc00004bfe0 pc=0xfc2221
created by runtime.gcenable
        D:/go/src/runtime/mgc.go:179 +0xaa

goroutine 5 [finalizer wait]:
runtime.gopark(0x15506d8, 0x18120a8, 0x10, 0x14, 0x1)
        D:/go/src/runtime/proc.go:381 +0xfd fp=0xc00003fe28 sp=0xc00003fdf8 pc=0xf93e9d
runtime.runfinq()
        D:/go/src/runtime/mfinal.go:193 +0x107 fp=0xc00003ffe0 sp=0xc00003fe28 pc=0xf6db07
runtime.goexit()
        D:/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc00003ffe8 sp=0xc00003ffe0 pc=0xfc2221
created by runtime.createfing
        D:/go/src/runtime/mfinal.go:163 +0x50
rax     0x0
rbx     0xa00d5da0
rcx     0xffffffff
rdi     0x1a8f8ce8c98
rsi     0x1
rbp     0x1a8f8ceb5c0
rsp     0x375a3ff680
r8      0xa00d5e40
r9      0x1a8f8ceb6e0
r10     0x1a8f8cb5000
r11     0x375a3ff650
r12     0x1a8f8ceb6e0
r13     0x1
r14     0x375a3ff930
r15     0xffffffff
rip     0x1f51b1d9
rflags  0x10246
cs      0x33
fs      0x53
gs      0x2b

debug into code "connection_windows.go", line of 473, "err = items.Add(tags...)", here items' addItemObject is with ole.IUnknown for "unreadable : could not resolve interface type", what's the problem?

Please compile it for GOARCH=386 (see here)

thanks for your help, but it seems still not works.
I just try both of the DLL(OPCDAAuto.dll/gbda_aut.dll) and compile it for amd64/386, all below:
1、download and unzip the "graybox_opc_automation_wrapper", get x86/gbda_aut.dll and copy to C:\Windows\SysWOW64, install with cmd regsvr32 gbda_aut.dll (and try over the x64/gbda_aut.dll to C:\Windows\System32, or SysWOW64), go env set s GOARCH=386
2、register Gray Simulator with cmd "gb_opcsim -service"
3、compile main.go with build.bat:

CGO_ENABLED=0
GOOS=windows
GOARCH=386
go mod download
go mod tidy
go build -o ./main.exe .

run it still occured error above.
the MatrikonOPC Server Simulation and MatrikonOPC Explorer can both works well and show the item value.

However, i just try it all over again and succeed. Thanks !