> For the complete documentation index, see [llms.txt](https://book.7988888.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.7988888.xyz/stimulus-softwares-ci-ji-ruan-jian/eprime-zhu-yao-chang-jian-wen-ti-yi-ji-matlabpython-da-marker.md).

# E-prime主要常见问题以及matlab、python打marker

## 前言

今天更新一期E-prime呈现刺激常见的问题，基本上做脑成像的设备，不论是做什么实验的基本上都会用到，E-prime是一个非常简单入手的软件，对于刚“入坑”做脑科学研究的人来说，这个软件不需要编程基础，简直是“傻瓜式”的操作。但是还是会有很多人对这个软件有很多的问题，这两天就被一些老师问到一些基本的操作问题，整得我有点烦躁。那就写点东西供大家参考用。当然，呈现刺激并不是一定需要使用这个软件，presentation、inquisit、opensesame、matlab、python、c、c++等软件都可以实现。但对于初学者来说，E-prime相比较上面的软件来说是最友好的了。

回归正题，下面是总结的E-prime主要常见问题以及matlab、python打marker的几种方式。

一、E-prime常见问题

1.1 E-prime版本打Mark无法正常发送原因

1.2 E-prime如何同时呈现多种刺激

1.3 E-prime 3.0版本安装注意事项

1.4 E-prime 如何设置刺激呈现时间随机

1.5 E-prime 如何修改文本刺激的背景色和字体颜色

1.6 E-prime 如何查看刺激电脑并口的端口地址

1.7 以前能够发送Mark,换了刺激电脑后，同样的刺激程序打不上Mark,无任何代码发送过来

1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档

1.9 E-prime开端口语句

二、Matlab中使用psychotoolbox打标记方式

2.1第一种方式适用于window 7 32位系统（PortTalk文件）

2.2第二种方式，适用于window 7/10 32&64位系统（Inpout文件）常见方式

2.3第三种方式，适用于window7系统，但对matlab版本有要求

三、python中打标记方式

3.1第一种方法：调用库PyParallel

3.2第二种方法：使用Inpout32.dll文件

## E-prime常见问题

1.1 E-prime版本打Mark无法正常发送原因 1、检查硬件连接线之间是否有松动

2、查看E-prime中inline语句是否书写正确；

3、修改需要打标记的刺激材料属性中的Duration-PreRelease选项默认的same as duration更改为0即可。

1.2 E-prime如何同时呈现多种刺激 可以通过Slide控件实现多种刺激（图片、文本、声音、视频）同时呈现。

1.3 E-prime 3.0版本安装注意事项 在安装E-prime3.0程序之前需要先安装dotnetfx4.5插件（在安装文件support中可离线安装）。

1.4 E-prime 如何设置刺激呈现时间随机 可以通过inline语句定义刺激的呈现时间随机。例：设置Textdisplay1的刺激呈现时间在800-1200ms之间随机呈现

eg: Textdisplay1.duration = random(800,1200)

1.5 E-prime 如何修改文本刺激的背景色和字体颜色 打开文本刺激属性窗口，在General选项修改Backcolor和Forecolor即可

1.6 E-prime 如何查看刺激电脑并口的端口地址 依次点击我的电脑或计算机（右击）—管理—设备管理器—端口—LPT端口—资源—I/O范围中的前四个数字。

1.7 以前能够发送Mark,换了刺激电脑后，同样的刺激程序打不上Mark,无任何代码发送过来 1、先排查硬件是否已连接好；

2、更换刺激电脑后，需重新书写刺激程序中的开端口地址；

3、重新查看新刺激电脑中的并口端口地址；

4、将刺激程序中的inline语句相应端口地址更改为新刺激电脑的并口端口地址。

1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档 1、打开2.0/3.0的e-studio，把1.1的程序文件拖到e-studio的窗口中就会提示进行转换，转换后保存回原程序文件夹中再运行就可以了。

2、把1.1的程序文件的后缀名由es改成es2，点击运行后会提示进行转换，之后的步骤同（1）所述。

1.9 E-prime开端口语句 1、打开端口命令

inline1:

Textdisplay1.OnsetSignalEnabled = True %打开控件Textdisplay1的端口

Textdisplay1.OnsetSignalPort = \&H378

%打开Textdisplay1端口为H378（电脑设备管理器中查看）

Textdisplay1.OffsetSignalEnabled = True %关闭控件Textdisplay1的端口

Textdisplay1.OffsetSignalPort =\&H378

%关闭控件Textdisplay1的端口为H378

inline2:

Textdisplay1.OnsetSignalData =c.GetAttrib("Condition")

%向ERPs发送控件Textdisplay1的刺激信号（Mark），这个刺激信号从List中的condition（code）获取

inline3:

1、if Answer.resp=”1” or Answer.resp=”3” then

WritePort\&H378,c.GetAttrib(“Answer.resp”) %“Answer”是刺激的名称

else WritePort \&H378,2

end if %假如反应为“1”或“3”，则标记为“1”或“3”；不反应则标记为“2”

2、if Target.resp = "f" then

writePort \&H378,1

elseif Target.resp = "j" then

writePort \&H378,2

else writePort \&H378,3

end if %当反应的按键是字母（如j、f）时：按f键读为1，按j键读为2，无需按键时读为3。”标在后面

inline4:

If Target.Acc = 1 Then

writeport \&H378,1

ElseIf Len(Target.Resp) > 0 Then

writepote \&H378,2

Else

writepote \&H378,3

End If

2、if语句还可以写成if then

If Target.GetAttrib(“code”)=“5” and back.GetAttrib(“code2”)>0 and resp = "j" and Target.c.GetAttrib(“code”)=“5” then

writePort\&H378,3

%如果Target获得的刺激类型5，同时反馈刺激为J 那么向端口输出，mark为3

## Matlab中使用psychotoolbox打标记方式

有三种方式可供选择：

2.1第一种方式适用于window 7 32位系统（PortTalk文件） 要访问XP / Vista / 7下的并行端口，需要内核环0驱动程序。我们使用Craig Peacock的PortTalk，你可以从<http://www.beyondlogic.org/porttalk/porttalk.htm下载。这只适用于32位window（64位见下面的64位解决方案）。>

将porttalk.sys文件复制到您的windows\system32\drivers目录中。编辑porttalk.reg文件替换"Start"=dword:00000002的"Start"=dword:00000000。具有管理权限的用户双击编辑porttalk.reg将内容写入Windows注册表后并重新启动电脑。

附加C代码（也可以在访问复制lptwrite.c与其它文档lptwrite.m），PortTalk\_IOCTL.h以及pt\_ioctl.c（在IoExample从porttalk zip压缩包的子目录）到您的计算机上的目录。把你的MATLAB目录路径改成这个目录，并执行这个目录，mex-v lptwrite.c在你的目录中产生一个额外的文件（lptwrite.dll或者lptwrite.mexw32取决于你的MATLAB版本）。

在桌面右键点击我的电脑，选择管理，设备管理器，展开“端口（COM＆LPT）”，右键点击名为“打印机”的端口（LPT1），并选择属性。选择属性对话框的资源选项卡，并检查I/O范围，“设置”列的第一个值是实际的端口地址。对于LPT1，在大多数标准设置中，这应该是0378（这里是十六进位制，需要修改成十进位制，可使用函数hex2dec()）。

现在，您可以用lptwrite(portAddress, byteValue)函数输出。例如，将并行端口的输出位0-7（针脚2-9）lptwrite(888, 255)。为了实现TTL触发器，在将端口重置为零之前，等待您的EEG系统需要的时间（通常最小1 /采样率），例如

lptwrite(888,255);

WaitSecs(0.004);

lptwrite(888,0);

2.2 第二种方式，适用于window 7/10 32&64位系统（Inpout文件）常见方式 取而代之的PortTalk的Inpout可用于制作寄存器访问可能的驱动程序。Inpout也适用于32位Windows，但与lptwrite不兼容。具体方法可参考：<http://apps.usd.edu/coglab/psyc770/IO64.html>

2.3 第三种方式，适用于window7系统，但对matlab版本有要求（6.5版本以上的matlab无法使用）

直接调用并口的针脚，Matlab的数据采集工具箱知道如何从包含BIOS数据的Windows内存保护区自动读取端口地址：

get（digitalio（' parallel '），' PortAddress '）

数据采集工具箱的误差（〜1ms）比lptwrite/lptread（〜10us）慢，并且无法寻址。

### python中打标记方式

3.1第一种方法：调用库PyParallel 1、必须安装giveio文件，在win10上不可用。

2、####Event trigger routine开端口代码

import parallel, time

P = parallel.Parallel()

def SendCode(code):

P.setData(code) # send theevent code (could be 1-255)

time.sleep(0.006) # wait for 6 ms for Recorder to receive the code

P.setData(0) # send a codeto clear the register

time.sleep(0.01) # wait for10 ms

3、使用SendCode()发送事件代码标志，放在刺激之前。（可参考示例文件）

3.2第二种方法：使用Inpout32.dll文件 1、网络下载 inpout.dll 并把它放到电脑C：window/system32 文件夹中。 接下来就是使用 SendCode() 函数调用，在刺激前添加即可

2、####Event trigger routine ####开端口代码

import time

from ctypes import windll

P = windll.inpout32

def SendCode(code):

P.Out32(0x378, code) # sendthe event code (could be 1-255)

time.sleep(0.006) # wait for 6 ms for Recorderto receive the code

P.Out32(0x378, 0) # send acode to clear the register

time.sleep(0.01) # wait for10 ms

### 相关

*\**&#x5173;于Inpout函数使用问题，推荐网址：<http://forums.highrez.co.uk/viewforum.php?f=7&sid=92c22a2901999bb1498445bf8a74d56c>

#### 谢谢大家观看，如有帮助，来个喜欢或者关注吧！

本文作者：Chen Rui

星球地址 ：[知识星球](https://t.zsxq.com/W5M3F)[Blog ](https://t.zsxq.com/W5M3F)

知乎地址 : [知乎专栏](https://www.zhihu.com/people/braintechnology)&#x20;

B站地址 : [B站主页](<https://space.bilibili.com/328549846 >)&#x20;

公众号：大脑技术\
&#x20;CSDN地址 : [csdn主页](https://blog.csdn.net/craig_cc)

文章仅限学习使用，不用于商业行为，若有侵权及疑问，请发邮件至<science52brain@outlook.com>
