Gige相机可以找到与gigecam gigecamlist但无法打开

12个视图(30天)
你好,最近我用matlab 2019 b gige模块与Teledyne DALSA xineos - 1313 gige相机,并尝试获取图像。
当我使用“gigecamlist”功能,相机出现在结果中。但是当我尝试使用“gigecam”功能,打开它,它总是返回“照相机未能打开。它可能是在另一个MATLAB会话或另一个应用程序使用。“我尝试了很多次,就像所有DALSA卸载软件,改变网卡,matlab和升级,但是他们都不工作。
操作系统是Windows 10(64位),matlab的版本是2019 b。xineos - 1313是直接连接到电脑的英特尔E1G42ET网卡。
我将感激如果有人可以回应。
谢谢
> > gigecamlist
ans =
1×表4
模型制造商IPAddressSerialNumber
是______________________________________________
{“CD33M112X2”}{“DALSA”}{“169.254.154.210”}{“* * * * * *”}
> > g = gigecam
相机未能打开。它可能是在另一个MATLAB会话或另一个应用程序使用。

接受的答案

习陈
习陈 2020年8月6日
我试图联系Dalsa,他们不能帮助。幸运的是,我终于使用c++墨西哥人编程解决了我的问题,我认为这是唯一的方法来解决这个问题。
12个评论
习陈
习陈 2023年1月16日
代码可以在这里找到:
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Dalsa gigex射线摄影机墨西哥人计划
/ /
/ /写的习陈,电子邮件:chenxiseu@seu.edu.cn
/ /
用matlab / /c++编程的墨西哥人,我最后解决x射线摄影机操纵的问题
/ /使用Matlab。
/ /如何在Matlab编译:
/ /墨西哥人我'F: \ Teledyne DALSA \ Sapera \ \文件包括“我'F: \ \ Teledyne DALSA \ Sapera \ \文件类基本的
/ /我'F: \文档\ Teledyne DALSA \ Sapera \ \ \类常见的例子- l 'Lib \ Win64 \ SapClassBasic。自由的GrabCPP.cpp
/ /如何在Matlab使用:
/ /初始化相机:
/ / GrabCPP (' ServerName ',“DeviceNumber”,“ConfigFileName”);
/ /:GrabCPP (“CD33M112X2_1”,' 0 ',F: \ \ Teledyne DALSA \ Sapera文档\ D_CD33M112X2_Default_Default.ccf ');
/ /获取图片:
/ /(数据、宽度、高度、BytePerPixel) = GrabCPP (“捕捉”);
/ /释放相机:
/ / GrabCPP (“破坏”);
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Matlab墨西哥人头文件
#包括“mex.hpp”
#包括“mexAdapter.hpp”
/ /一些常见头文件
#包括“文件”
#包括“conio.h”
#包括“math.h”
/ / Sapera头文件
#包括“sapclassbasic.h”
#包括“ExampleUtils.h”
/ / Matlab名称空间
使用名称空间matlab:数据;
使用matlab:墨西哥人::ArgumentList;
/ / MexFunction类
MexFunction:公共matlab::墨西哥人:函数
{
公众:
/ / ServerName, DeviceNumber ConfigFileName初始化摄像头
UINT32 acqDeviceNumber;
char * acqServerName = new char [CORSERVER_MAX_STRLEN];
char * configFileName = new char [MAX_PATH];
/ /指针MATLAB引擎
std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();
/ /工厂创建MATLAB数据数组
ArrayFactory工厂;
/ /成员操作相机
SapAcqDevice AcqDevice;
SapBufferWithTrash缓冲区;
SapTransfer AcqDeviceToBuf;
SapTransfer *转送=零;
SapLocation loc;
/ /初始化函数
BOOLInitializeCamera ()
{
loc = SapLocation (acqServerName acqDeviceNumber);
configFileName AcqDevice = SapAcqDevice (loc);
缓冲区= SapBufferWithTrash (2, &AcqDevice);
AcqDeviceToBuf = SapAcqDeviceToBuf (&AcqDevice,指甲);
转送= &AcqDeviceToBuf;
/ /创建收购对象
如果(! AcqDevice.Create ())
{
返回虚假的;
}
如果(! Buffers.Create ())
{
返回虚假的;
}
如果(转送& &!转送- > Create ())
{
返回虚假的;
}
返回真正的;
}
/ /运算符()覆盖,操作决定根据输入
无效操作符()(ArgumentList输出,ArgumentList输入)
{
如果(inputs.size () ! = 3 & & inputs.size () ! = 1)
{
matlabPtr - >函数宏指令(u“错误”0,std::向量< matlab::数据::数组> ({factory.createScalar (“三或输入要求”}));
}
其他的如果(inputs.size () = = 3)
{
/ /初始化摄像头
const CharArray tempServerName =输入[0];
const CharArray tempDeviceNumber =输入[1];
const CharArray tempConfigFileName =输入[2];
.c_str CorStrncpy (acqServerName tempServerName.toAscii () (), tempServerName.getNumberOfElements () + 1);
.c_str acqDeviceNumber = atoi (tempDeviceNumber.toAscii () ());
.c_str CorStrncpy (configFileName tempConfigFileName.toAscii () (), tempConfigFileName.getNumberOfElements () + 1);
如果(InitializeCamera ())
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“相机初始化成功!”}));
}
其他的
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“没有初始化摄像头!”}));
}
}
其他的
{
const CharArray tempCommand =输入[0];
/ /释放相机
如果(tempCommand.toAscii () .compare (“破坏”)= = 0)
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“开始终止!”}));
如果(!转送- > Destroy ())
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“失败摧毁转送!”}));
}
如果(! Buffers.Destroy ())
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“没有缓冲!”}));
}
如果(! AcqDevice.Destroy ())
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“失败摧毁AcqDevice !”}));
}
}
其他的如果(tempCommand.toAscii () .compare (“捕捉”)= = 0)
{
/ /捕获单个图像
传递- >提前();
如果(!转送- >等(5000))
{
matlabPtr - >函数宏指令(u“错误”0,std::向量< matlab::数据::数组> ({factory.createScalar (“提前超时!”}));
}
使用uintTotalBufferSize = Buffers.GetWidth () * Buffers.GetHeight () * Buffers.GetBytesPerPixel ();
buffer_ptr_t < uint8_t > pImageBuffer = factory.createBuffer < uint8_t > (TotalBufferSize);
/ / Buffers.Load (“Test.raw”1 0 0“原始格式- width 1316高度1312 - o 0”);
如果(缓冲区。阅读(0,0,Buffers.GetWidth () * Buffers.GetHeight (), pImageBuffer.get ()))
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“成功读取缓冲区。”}));
输出[0]=工厂。createArrayFromBuffer < uint8_t > ({1, TotalBufferSize}, std::移动(pImageBuffer));
输出[1]= factory.createScalar (Buffers.GetWidth ());
输出[2]= factory.createScalar (Buffers.GetHeight ());
输出[3]= factory.createScalar (Buffers.GetBytesPerPixel ());
}
其他的
{
matlabPtr - >函数宏指令(u“disp”0,std::向量< matlab::数据::数组> ({factory.createScalar (“无法读取缓冲区!”}));
}
}
}
}
MexFunction ()
{
/ / mexLock ();
}
~ MexFunction ()
{
/ / mexUnlock ();
如果(acqServerName ! = NULL)
{
删除acqServerName;
acqServerName =零;
}
如果(configFileName ! = NULL)
{
删除configFileName;
configFileName =零;
}
如果(转移)
{
传递- >摧毁();
}
如果(缓冲区)
{
Buffers.Destroy ();
}
如果(AcqDevice)
{
AcqDevice.Destroy ();
}
}
};

登录置评。

答案(1)

贾斯汀半圆
贾斯汀半圆 2020年1月23日
我有同样的问题一个异类的山猫640系列。我的设置是与你的相同,Matlab 2019 b, Windows 10等。
任何帮助就太好了!
8的评论

登录置评。