# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.7988888.xyz/stimulus-softwares-ci-ji-ruan-jian/eprime-zhu-yao-chang-jian-wen-ti-yi-ji-matlabpython-da-marker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
